@xiaokang6/dsh-config-sync:多設備 DSH Profile 配置同步

前言

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

  1. 在堅果雲網頁 → 賬戶信息 → 安全選項 → 添加應用密碼(勿用登錄密碼)。
  2. 在設置頁填寫:
    - Base URL:https://dav.jianguoyun.com/dav/
    - 用戶名:堅果雲賬號郵箱
    - 應用密碼:上一步生成的字符串
    - 遠端路徑:如 dsh-config-sync/desktop(多設備須相同)
  3. 先「檢測差異」,再「雙向同步」。

GitHub

  1. 創建私有倉庫;生成 fine-grained PAT,權限至少 Contents: Read and write(或 classic token 的 repo)。
  2. 在設置頁填寫 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。

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

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

小夜