前言¶
DSH(DeepSeek Harness)以「一切皆插件」的理念運行,配置分散在本地各目錄,多臺機器之間難以保持一致。dsh-config-sync 插件把 DSH_HOME 下需要同步的配置面文件納管到一個私有 Git 倉庫,在設置頁裏完成捕獲、推送、拉取、應用與回滾。
它是什麼¶
- 名稱:
dsh-config-sync(npm 包:@liangfengqi/dsh-config-sync) - 維護者:
bxzfxl(npm 作者:liangfengqi) - 分類:記憶
- 解決的問題:把 DSH 的設置、插件清單、技能等配置納管到 Git,實現多端一致性;提供回滾能力;按 pnpm-lock 確定性重建插件依賴。
核心功能¶
它同步以下路徑(相對 DSH_HOME):
| 類別 | 路徑 | 說明 |
|---|---|---|
| 設置 | profiles/<profile>/cordis.patch.yml |
0.2.x 的設置真正所在(模型默認、UI 偏好、插件配置) |
| 插件清單 | profiles/<profile>/package.json |
依賴 + dsh.profile.bundles |
| 依賴鎖 | profiles/<profile>/pnpm-lock.yaml、pnpm-workspace.yaml |
讓另一臺機器可重建插件 |
| 技能 | skills/** |
存在時才納管 |
| 角色/外觀 | agents/**、pet.json、skin-center-active.json |
存在時才納管 |
永遠不同步:.credentials.yaml、sessions/、node_modules/、dsh-runtimes/、cordis.yml(生成物)、.dsh-market/、插件自持目錄(如 task-board/、dsh-usage/)。
安裝與啓用¶
方式一:插件市場 / npm(推薦)¶
在市場收錄後:DSH → Plugins → 市場 → 搜索 dsh-config-sync → 一鍵安裝。
也可以直接用 npm:
dsh plugin --profile web add @liangfengqi/dsh-config-sync
方式二:本地安裝腳本(沒有 dsh CLI 時)¶
⚠️ 先完全退出 DSH Desktop(profile 的 package.json 有文件鎖),再在 PowerShell 裏執行:
cd D:\文檔\deepseek-harness\default-workspace\dsh-config-sync
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-plugin.ps1 -DshHome D:\dsh\data
腳本會:備份 profile → 寫入 dependencies 與 dsh.profile.bundles → 用 DSH 自帶 node + pnpm 安裝依賴。裝完重啓 DSH,設置裏會多出「配置同步」頁。
卸載:
powershell -NoProfile -ExecutionPolicy Bypass -File .\install-plugin.ps1 -DshHome D:\dsh\data -Uninstall
典型用法¶
首次配置¶
- 在 GitHub / Gitee / GitCode / 自建上建一個私有空倉庫(不要用公共倉庫:
cordis.patch.yml可能含內網地址/賬號標識)。 - 設置 → 配置同步:
- 倉庫地址:git@github.com:you/dsh-config.git或https://github.com/you/dsh-config.git
- 分支:main
- 訪問令牌:HTTPS 倉庫填 PAT(只寫本機,接口永不回顯;SSH 倉庫留空)
- 保存
如果倉庫地址裏直接夾了令牌(
https://<token>@github.com/you/repo.git),保存時會自動把令牌拆出來存到本機,地址裏不會保留憑據。
3. 點 初始化倉庫 → 捕獲並推送。
4. 到另一臺機器:裝好同版本 DSH → 安裝本插件 → 保存同一倉庫 → 拉取遠端 → 應用(寫入本機) → 重啓 DSH。
日常:改設置/裝插件後 → 捕獲並推送;到另一臺 → 拉取遠端 → 應用 → 重啓。應用前會自動備份,點「恢復最近備份」可回滾。
安全¶
- 令牌存在
DSH_HOME/dsh-config-sync/settings.json(0600,僅本機),不進倉庫、不回顯。 - 倉庫請保持私有,並給 token 最小權限(只讀寫這一個倉庫)。
- 「掃描密鑰」會檢查倉庫裏的
sk-…、ghp_…、xox…、私鑰塊、Bearer、apiKey/token/password = <長串>;命中就改成本機文件或佔位符。 - 如果某個插件把密鑰寫進了
cordis.patch.yml,請先把它改成佔位符,或把該插件設置挪到不同步的本機文件。 apply會覆蓋本機cordis.patch.yml:建議只在一臺主用機上改設置,其他機器只拉取/應用。
數據位置¶
DSH_HOME/dsh-config-sync/
├─ settings.json # 本機插件設置(含 token,0600)
├─ repo/ # 配置倉庫克隆(默認位置,可在設置裏改 repoDir)
│ ├─ home/ # 與 DSH_HOME 同構,只放納管文件
│ ├─ meta/capture.json # 上次捕獲:主機/時間/版本/哈希
│ └─ dshcfg.json # 納管清單(與 CLI 工具共用)
├─ backups/<時間戳>/ # apply / restore 前的自動備份
└─ .askpass.sh # HTTPS 令牌注入用的臨時助手(git 子進程專用)
倉庫佈局與 dshcfg.ps1 CLI 完全一致,可以在有終端時用 CLI 做腳本化操作,插件裏照常識別。
HTTP API¶
所有接口同源、僅本機迴環訪問。方法與路徑:
| 方法 | 路徑 | 作用 |
|---|---|---|
| GET | /api/dsh-config-sync/status |
狀態:路徑、納管數、差異、git 狀態、上次捕獲 |
| GET | /api/dsh-config-sync/settings |
讀設置(不含 token) |
| PUT/POST | /api/dsh-config-sync/settings |
寫設置(token 非空才覆蓋;clearToken:true 清除) |
| POST | /api/dsh-config-sync/init |
初始化本地倉庫 |
| POST | /api/dsh-config-sync/capture |
捕獲;body {push?:boolean, message?:string} |
| POST | /api/dsh-config-sync/pull |
git pull --rebase --autostash(首次接入自動對齊遠端分支) |
| POST | /api/dsh-config-sync/apply |
備份 + 寫入本機;body {install?:boolean} 額外跑 pnpm install |
| POST | /api/dsh-config-sync/restore |
用備份恢復;body {name?:string} |
| POST | /api/dsh-config-sync/scan |
密鑰掃描 |
| GET | /api/dsh-config-sync/backups |
備份列表 |
非迴環來源一律 403;所有操作串行執行(併發返回 409)。
適用場景與注意¶
- 適合需要多臺 DSH 保持配置一致的場景,如開發機、測試機、演示機。
- 應用後必須重啓 DSH 才生效(
cordis.patch.yml/package.json是啓動時讀取的)。 - 「應用並安裝依賴」在運行中的進程裏跑 pnpm:新插件文件可寫入,但被佔用的原生模塊可能安裝失敗;失敗時重啓後再到終端執行
pnpm install。穩妥做法:應用 → 重啓 → 如提示缺插件再裝一次。 - 多機建議同版本 DSH;倉庫裏記錄了捕獲時的版本,跨版本應用前請先升級。
- 自動捕獲默認關閉;開啓後只在有變更時提交,自動推送建議只在主用機開啓。
- macOS / Linux 未實測(宿主代碼只用 Node 內置模塊,路徑按 POSIX 處理;客戶端邏輯與環境無關)。
- 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
結語¶
dsh-config-sync 通過私有 Git 倉庫把 DSH 的配置面文件納管起來,提供捕獲、推送、拉取、應用與回滾能力,適合需要在多臺機器間保持配置一致的場景。
- 目錄頁:https://www.skillhub.cn/plugins/bxzfxl/dsh-config-sync
- 源碼:https://github.com/bxzfxl/dsh-config-sync