前言¶
DeepSeek Harness(DSH)的 profile 裏集中了插件依賴、cordis.patch.yml 裏的模型與 MCP 配置,以及補丁層開關。換電腦或在家與公司各裝一套 DSH 時,手工拷貝 profile 目錄容易漏文件、版本對不齊,或在兩臺機器上各自改同一份配置後互相覆蓋。社區插件 @xiaokang6/dsh-config-sync(倉庫 xiaokang6/dsh-config-sync-xk)把「只同步配置、不同步會話與附件」這件事做成設置頁可操作的流程:遠端用堅果雲 WebDAV 或 GitHub,本機用逐文件內容哈希做合併與衝突處理,並可選用口令對遠端文件做 AES-256-GCM 加密。下面介紹它做什麼、怎麼裝、怎麼用。
這是什麼¶
維護者爲 xiaokang6,在 SkillHub 目錄中歸類爲聯網工具。插件當前版本爲 0.1.0(MIT 許可證),通過 DSH 的 bundle 機制掛載,在 設置 → 內置插件 → 配置同步 提供 UI 與 HTTP API(/dsh-config-sync/*)。
它解決的是:在一臺 DSH 上改好的 profile 配置,經遠端在多臺設備間保持一致;衝突時不強行二選一,而是保留副本並在面板裏選擇採用哪一側。
同步範圍與安全邊界¶
默認同步 scope(可在設置裏調整)包括:
| 文件 | 內容 |
|---|---|
package.json |
插件依賴與 dsh.profile.bundles |
cordis.patch.yml |
補丁層(模型 provider、MCP、開關等) |
cordis.yml |
profile 根入口 |
pnpm-lock.yaml |
插件版本鎖定 |
不會同步:node_modules/、.dsh-market/snapshots/、會話、附件、.credentials.yaml、.env。插件不會直接修改 node_modules;若拉取後 package.json 或 pnpm-lock.yaml 有變化,只會執行 pnpm install 並提示重啓宿主。
遠端憑據與加密口令保存在本機 ~/.dsh/config-sync/remote.json(權限 0600),不會寫入 cordis.patch.yml,因此不會隨配置一起上傳。cordis.patch.yml 中若存在 MCP/模型相關明文或 {{SECRET_…}} 佔位符,跨設備時新機器仍需在本機憑據庫中能解析對應 secret,否則相關條目會失效——這也是插件提供可選加密的原因之一。
核心功能¶
遠端與合併策略¶
支持 堅果雲 WebDAV(README 中推薦)與 GitHub 私有倉庫。合併以「上次同步成功的各文件內容哈希」爲基線:
- 僅本機變更 → 上傳;僅遠端變更 → 下載;兩側改得一致 → 跳過。
- 兩側都改且內容不同 → 衝突:本機文件保留,遠端版本另存爲
<文件名>.remote-<設備名>-<時間戳>,可在設置頁「採用遠端 / 採用本地」。 - 新設備首次雙向同步:無合併基時自動採用遠端,本機舊版另存爲
<文件名>.local-<設備名>-<時間戳>;若只想推送本機配置,使用「上傳」方向。
方向支持上傳、下載、雙向;只上傳或只下載時,另一方向的變更會在結果中標記爲 skipped。刪除不傳播:一側缺失的文件不會刪除另一側,僅在報告中說明。
可選加密¶
開啓加密並設置口令後,各文件在遠端以 AES-256-GCM 信封存儲(scrypt 派生密鑰、每文件獨立 salt/iv/tag)。manifest 中仍保存明文哈希,計劃階段不需要口令;多設備須使用同一口令。
啓動時自動同步¶
默認在插件啓動約 15 秒後按面板所選方向執行一次同步;可在遠端設置中關閉「啓動時自動同步」。遠端未配好、或已開加密但本機無口令時會自動跳過。延遲與默認值可在 profile 的 cordis.patch.yml 中按插件 id config-sync 覆蓋,例如:
- id: config-sync
config: { autoSyncOnStart: true, autoSyncDelayMs: 15000 }
autoSyncDelayMs 範圍爲 0–300000 ms。
安全與恢復¶
同步前會把待改文件備份到 ~/.dsh/config-sync/backups/<時間>-<操作>/,設置頁可一鍵恢復。寫入採用臨時文件加 rename 的原子替換。若遠端 package.json 無任何依賴而本機有依賴,默認拒絕覆蓋(空依賴保護);確需覆蓋可在設置中允許。路徑校驗拒絕 ..、絕對路徑及 node_modules 等敏感路徑;HTTP 路由與插件市場類似,僅接受本機 loopback 等同源策略。
插件自升級¶
設置 → 內置插件 → 配置同步 → 插件升級 可檢查更新與一鍵升級:github: 安裝時在 profile 中執行 pnpm update @xiaokang6/dsh-config-sync;link: 安裝時對本地檢出做 fast-forward。檢查更新優先 HTTPS(GitHub info/refs),再退 API,最後才用 git ls-remote。升級或改 lib/ 後需重啓 DeepSeek Harness 或點窗口右上角刷新,宿主內 ESM 緩存纔會加載新代碼。
安裝與啓用¶
多機同步時 README 推薦用 github: 快照安裝,避免 link: 絕對路徑隨 package.json 同步到其他機器後鏈接失效。
在目標 profile(示例爲 desktop)上,優先使用宿主自帶命令(會同時把 bundle 寫入 dsh.profile.bundles):
dsh plugin --profile desktop add github:xiaokang6/dsh-config-sync-xk
若無 dsh 命令,可在 profile 目錄用 pnpm,但須手動把 "@xiaokang6/dsh-config-sync" 加入 package.json 的 dsh.profile.bundles,否則插件不會掛載:
cd $env:USERPROFILE\.dsh\profiles\desktop
pnpm add github:xiaokang6/dsh-config-sync-xk
裝完後重啓 App 或點刷新按鈕。換新機器時須先裝同一版本的 DSH 與上述插件,再在設置頁填寫同一遠端與口令,然後執行「雙向同步」。
插件以當前 DSH 進程權限運行;安裝前請自行查閱 GitHub 倉庫 源碼與 MIT 許可證,確認符合你的安全要求。
典型用法¶
堅果雲 WebDAV¶
- 在堅果雲網頁 → 賬戶信息 → 安全選項 → 添加應用密碼(勿用登錄密碼)。
- 在設置頁填寫:
- Base URL:https://dav.jianguoyun.com/dav/
- 用戶名:堅果雲賬號郵箱
- 應用密碼:上一步生成的字符串
- 遠端路徑:如dsh-config-sync/desktop(多設備須相同) - 先「檢測差異」,再「雙向同步」。
GitHub¶
- 創建私有倉庫;生成 fine-grained PAT,權限至少 Contents: Read and write(或 classic token 的
repo)。 - 在設置頁填寫 owner、repo、branch(默認
main)、遠端路徑與 Token。
衝突與依賴¶
處理衝突後在設置頁選擇採用一側,會清理 .remote-* 等副本。若同步後 pnpm install 因宿主「新版本等待期」報 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION,插件會嘗試以 minimumReleaseAge=0 重試並在報告中標註;也可在 profile 目錄手動執行 pnpm install --config.minimumReleaseAge=0。
適用場景與注意¶
適合在多臺 PC 上共用同一套 DSH 插件列表與 cordis.patch.yml 補丁、又希望會話與本地密鑰留在各機上的開發者。不適合把整盤 profile 或 node_modules 當網盤同步——插件設計 explicitly 排除這些路徑。
每臺機器仍需單獨配置 remote.json、.credentials.yaml / .env,以及保證 {{SECRET_…}} 在新機可解析。若 package.json 裏其他插件使用 link:D:/… 這類本機路徑,同步到其他機器後可能裝不起來,應改爲 github: 等同機無關的依賴寫法(README 故障排查中有說明)。
DSH 社區插件目錄(如 SkillHub)爲獨立站點,與 DeepSeek / 幻方無官方從屬關係;本文事實來自插件 README 與 package.json。
結尾¶
@xiaokang6/dsh-config-sync 把 profile 級配置的跨設備同步收斂爲:選定 WebDAV 或 GitHub、哈希合併與衝突副本、可選加密與設置頁操作,並區分「可同步的配置」與「必須留本機的憑據與會話」。進一步瞭解可訪問目錄頁 xiaokang6/dsh-config-sync-xk 與源碼 github.com/xiaokang6/dsh-config-sync-xk。