dsh-config-sync:把 DSH 配置納管到私有 Git 倉庫

前言

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

典型用法

首次配置

  1. 在 GitHub / Gitee / GitCode / 自建上建一個私有空倉庫(不要用公共倉庫:cordis.patch.yml 可能含內網地址/賬號標識)。
  2. 設置 → 配置同步:
    - 倉庫地址: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
羽毛球分组比赛记分
小程序二维码

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

小夜