在 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 中。
- 打開 DeepSeek Harness(正在運行就對了)。
- 雙擊
install.cmd。 - 刷新頁面 —— 左側欄出現「插件遷移」面板。
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 條,所以必須由本插件攔截:
- 本機路徑型 spec:
link:/file:指的路徑是否存在。 - cordis entry id 撞車:兩個 bundle 插入同一個 loader entry id 時,cordis 會拒絕啓動整棵樹。只統計
insert:塊裏的 id。 - 沒有可加載入口的包:源碼簽出沒有
lib/的包被提升進 bundle 層,會導致啓動失敗。 - 聲明瞭
dsh.bundle.patch嗎:進了bundles列表卻沒聲明的包,官方只會當普通依賴裝,不會成爲 profile 層。 - 引擎範圍:正確處理預發佈號(如
0.2.0-rc.2)。 - 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 間同步插件集的開發者使用。