dsh-profile-sync:插件遷移工具

在 DeepSeek Harness(DSH)中,不同 profile(如網頁版 web 和桌面版 desktop)的插件配置往往不一致。手動複製文件容易出錯,比如漏掉 allowBuilds 導致原生構建靜默失敗,或者發生端口衝突。dsh-profile-sync 是一個插件遷移工具,默認將網頁版的插件集安全牽引到桌面版。

它自己不裝任何東西,只做四件事:算差異、預檢、寫一個「退出後執行的腳本」、下次啓動後覈對是否真的落地。真正的安裝交給官方通道(桌面端走應用內管理器,其它 profile 走 dsh plugin)。

核心功能

  • 算差異:對比源和目標的插件列表,識別新增、變更、僅釘法不同等情況。
  • 預檢:在安裝前檢查潛在的阻礙項,包括 entry-id 撞車、可加載入口、聲明完整性、引擎範圍、git 源條件等。
  • 生成腳本與覈對:生成退出後執行的腳本,並在重啓後覈對實際落地情況。
  • 面板交互:左側欄增加「插件遷移」面板,支持勾選要遷移的插件,生成執行腳本或當場應用。
  • Agent 工具:提供 profile_sync 工具給 agent 使用,支持 plan / write / status 等操作。

安裝與啓用

安裝過程不依賴 Node.js 運行插件本身,而是通過 install.cmd 將插件註冊到 DSH 中。

  1. 打開 DeepSeek Harness(正在運行就對了)。
  2. 雙擊 install.cmd。
  3. 刷新頁面 —— 左側欄出現「插件遷移」面板。

install.cmd 會先執行自檢(清單不變式 + 真加載),確認官方的 /api/plugin-manager 端點可用後,再把本插件裝進 profile。桌面端必須保持運行,因爲它要調用應用內的官方管理器。

使用方式

雙擊操作

  • install.cmd:執行裝前自檢 + 把本插件裝進 profile。
  • sync-plan.cmd:算差異並生成計劃 + 生成 apply.cmd。

命令行

需要 Node.js 20+ 在 PATH 上。

# 算差異並落成產物(plans/<時間>/plan.json + plan.txt + apply.cmd)
node bin/plan-cli.mjs plan --source web --target desktop --write

# 只看報告
node bin/plan-cli.mjs plan

# 覈對上一次遷移是否真的落地
node bin/plan-cli.mjs status

# 應用計劃(會先查目標端是否還在運行)
node bin/apply.mjs --plan "<plans/.../plan.json>"

# 只算不寫,看看會改什麼
node bin/apply.mjs --plan "<...>" --dry-run

# 退回最近一次快照
node bin/apply.mjs --rollback

# 裝前自檢(清單不變式 + 真加載)
node bin/check.mjs

面板操作

在左側欄「插件遷移」面板中:
1. 選擇源/目標。
2. 算差異,勾選要遷的插件。
3. 點擊「生成執行腳本」或「應用」。
4. 覈對上次遷移結果。

預檢機制

裝之前會查六件事。官方 dsh plugin add 不查第 2、3 條,所以必須由本插件攔截:

  1. 本機路徑型 spec:link: / file: 指的路徑是否存在。
  2. cordis entry id 撞車:兩個 bundle 插入同一個 loader entry id 時,cordis 會拒絕啓動整棵樹。只統計 insert: 塊裏的 id。
  3. 沒有可加載入口的包:源碼簽出沒有 lib/ 的包被提升進 bundle 層,會導致啓動失敗。
  4. 聲明瞭 dsh.bundle.patch 嗎:進了 bundles 列表卻沒聲明的包,官方只會當普通依賴裝,不會成爲 profile 層。
  5. 引擎範圍:正確處理預發佈號(如 0.2.0-rc.2)。
  6. git 源條件:只提醒,不阻斷。git ls-remote 成功不代表 pnpm 能連,機制不同,給出 tarball 替代寫法。

注意事項

  • 桌面端 profile 禁止用 CLI 改:這是硬攔,@deepseek-ai/dsh/lib/bin.js 裏有一條按名字攔住一切 CLI 調用的守衛。本插件在桌面端只調用官方管理器。
  • cordis.patch.yml 不同步:裏面裝的是實例配置(端口、座標、Tailscale 地址),不同步是爲了避免端口衝突。
  • 釘法不同 ≠ 版本變更:有些 profile 釘成精確號,有些用範圍號。本插件單獨歸一類 repin,只報告、默認不動。
  • 版本倒退只提醒:計劃裏出現 version-downgrade 提醒,官方管理器會拒絕並回滾,插件提前說出來是爲了避免無效操作。
  • allowBuilds 語義保留:顯式寫 false 是有意關掉構建腳本。同步時沿用源側的值,不會一律寫 true,也不會把 false 翻成 true。
  • 不裝插件也能先看效果:bin/plan-cli.mjs 完全獨立,不依賴 DSH 在跑。

總結

dsh-profile-sync 通過差異計算、嚴格的預檢和腳本生成,解決了 DSH profile 間插件遷移容易出錯的問題。它依賴官方通道執行安裝,並確保 cordis.patch.yml 等實例配置不被錯誤同步,適合需要在 web 和 desktop profile 間同步插件集的開發者使用。

GitHub | 目錄頁

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜