dsh-sync:DSH 多設備目錄同步與 .dshsync 歸檔

前言

在多臺機器上跑 DSH 時,profile、會話記錄和工作區裏的文檔往往各存一份:拷 U 盤麻煩,整目錄丟網盤又容易把舊文件蓋掉新版本。手工合併既慢,也不容易看見「誰刪了誰、兩邊都改過」這類衝突。

dsh-sync 是 DeepSeek Harness(DSH)上的多設備同步插件:把用戶選定的本地目錄做成內容快照,發佈到本地目錄、WebDAV 或另一臺 DSH,並在設備之間做雙向、增量、帶衝突保護的同步;還支持 .dshsync 單文件導出與導入。維護者爲 irerc,歸類爲聯網工具;當前 package.json 版本爲 1.2.0,許可證 MIT。

下面按定位、能力、安裝、配置與使用順序說明。

這是什麼

dsh-sync 面向「需要在多設備間保持一致的那一類文件」:例如 DSH profile、會話記錄、工作區文檔等。同步粒度是目錄內的文件內容,不是把整個 DSH 進程狀態原樣克隆。

遠程側有三種 target,可同時啓用,一輪同步會扇出到所有已啓用的 target;每個 target 維護獨立同步基線,互不影響:

類型 典型用途
local 本機路徑或 rclone、Termux 等掛載的雲盤目錄
webdav Nextcloud、堅果雲、羣暉、Alist 等 WebDAV
peer 同一局域網/VPN 內另一臺正在跑 DSH 的實例

此外可用 .dshsync 做本地發送式歸檔(瀏覽器下載/上傳、Agent 工具或本地路徑),適合不方便開長期同步通道時的一次性遷移。

插件以 Node 內置模塊實現,README 寫明不新增 npm 依賴、無構建步驟;行爲以倉庫內凍結版 SPEC(v1)爲準。

核心功能

同步語義(簡要)

  1. 內容尋址:每個文件按 sha256 存爲 objects/<sha256>;各設備把自己的清單寫成 devices/<deviceId>.json(含 entries 與 tombstones)。
  2. 三方合併:對比「本地本次掃描 / 多設備清單合併 / 上次同步基線」,得到 pull、push、刪除、復活、衝突等動作。
  3. 快照發布:一輪內先推本地變更再拉遠端;衝突時本地內容保留,遠端內容另存爲衝突副本。

後端目錄佈局在 local 與 peer 存儲上一致:

<store>/
├── devices/<deviceId>.json
└── objects/<sha256>

能力矩陣(README 摘要)

  • 增量同步:三種 target 與 .dshsync 導入均支持(按內容 hash 或 manifest 合併)。
  • 刪除傳播:tombstone。
  • 衝突保護:衝突副本。
  • WebDAV:HTTP Basic Auth;peer:x-dsh-sync-token。
  • 設置頁 UI 與 Agent 工具均覆蓋配置、同步與導入導出。

安裝與啓用

前置條件:Node.js ≥ 20;可用的 DSH Web profile(dsh web)。

GUI 安裝(GitHub)

  1. 打開 DSH Web GUI,側邊欄進入插件頁。
  2. 選擇安裝組合包,目標填寫:
https://github.com/irerc/dsh-sync.git

(也接受 https://github.com/irerc/dsh-sync。)
3. 確認 dsh-sync 出現在組合包列表且已啓用;未啓用 HMR 時重啓 dsh web。
4. 打開 設置 → dsh-sync,應能看到狀態卡、targets、roots、配對、導入導出與日誌。

CLI 安裝(能直連 GitHub 時)

dsh plugin --profile web add https://github.com/irerc/dsh-sync.git

隨後在插件頁勾選啓用 dsh-sync,未啓用 HMR 時執行 dsh web 重啓。

README 還記錄了在 github.com 被阻斷時的替代 URL(2026-11-08 本機實測),例如:

dsh plugin --profile web add https://codeload.github.com/irerc/dsh-sync/tar.gz/refs/tags/v1.2.0
# 或
dsh plugin --profile web add https://raw.githubusercontent.com/irerc/dsh-sync/main/dist/dsh-sync-1.2.0.tgz

固定版本可將 tarball 地址換成對應 tag。配置與狀態保存在 $DSH_HOME/dsh-sync/,升級插件一般不抹掉該目錄。

本地目錄安裝(開發或離線)

把倉庫放到目標設備絕對路徑後,在插件頁 安裝組合包 中填寫該路徑,啓用並視情況重啓 dsh web。

說明:dsh plugin ... add 只負責依賴安裝;組合包是否在 profile 中啓用,需在插件頁勾選,或通過 plugin_manager 工具設置。

設置頁與典型配置

入口:設置 → dsh-sync(order 60)。主要區塊包括狀態卡(自動同步/保存間隔、立即同步 等)、Targets、Roots(要同步的絕對路徑根目錄,不可嵌套或重複,禁止 /)、一鍵配對碼、導入/導出 .dshsync、活動日誌與衝突列表。

路徑字段支持 $DSH_HOME、$HOME、$DSH_PROFILE 與 ~,保存時展開爲絕對路徑;也可直接編輯 $DSH_HOME/dsh-sync/config.json。

WebDAV(跨網絡常用)

{
  "id": "dav",
  "type": "webdav",
  "label": "WebDAV",
  "enabled": true,
  "url": "https://cloud.example.com/remote.php/dav/files/alice",
  "username": "alice",
  "password": "應用密碼",
  "basePath": "/dsh-sync"
}

只支持 HTTP Basic Auth,建議使用應用密碼並走 HTTPS。服務端需支持 WebDAV 的 PROPFIND 等操作,純 HTTP 靜態文件服務不能作爲此 target。

本地或掛載目錄

{
  "id": "local",
  "type": "local",
  "label": "本地/掛載目錄",
  "enabled": true,
  "path": "$DSH_HOME/dsh-sync/store"
}

路徑所在文件系統需支持同目錄臨時文件 + rename 的原子寫。

Peer(另一臺 DSH)

{
  "id": "peer",
  "type": "peer",
  "label": "另一臺 DSH",
  "enabled": true,
  "url": "http://192.168.1.20:38445",
  "token": "<配對區複製的 token>"
}

url 可填完整協議根(含 /dsh-sync/v1)或僅 origin,後端會自動補全且不重複拼接。兩臺設備須能直連;DSH Web 監聽端口即爲 peer 協議端口。README 指出 peer 爲明文 HTTP + 靜態 token,公網場景宜套 HTTPS 反向代理並妥善保管 token。

Peer 與 WebDAV 配對

一鍵配對碼(推薦):在一端配置好 WebDAV 或複製本機 peer 配對碼,另一端在 設置 → dsh-sync → 一鍵配對碼 粘貼並 連接並同步,會自動新增 target 並觸發同步。若 peer 只監聽迴環地址,需用 --host 0.0.0.0 啓動 dsh web 後再複製配對碼。

也可讓 Agent 調用 dsh_sync_configure 或 dsh_sync_pair;口述的密碼會進入對話上下文,應使用應用密碼而非主賬號密碼。

手動 peer:提供存儲的一方在配對區複製 url 與 token;連接方新增 peer target,測試連接 會 GET /dsh-sync/v1/ping 並探測寫權限,通過後啓用並 立即同步。

適用場景與注意

適合需要在多臺 DSH 環境之間同步選定目錄、或希望用 WebDAV 做異地副本、偶爾用 .dshsync 做單次遷移的開發者。可同時啓用 local 做本機備份、webdav 做異地備份,二者基線獨立。

安裝前宜自行查看 GitHub 倉庫 源碼與 MIT 許可證。插件隨當前 dsh web 進程權限運行,roots 裏填寫的路徑即會被讀寫;配對碼內含 WebDAV 密碼或 peer token,只發給可信設備。

社區目錄 SkillHub 上的 dsh-sync 頁 與 GitHub 爲獨立信息來源,與 DeepSeek / 幻方無官方從屬關係;DSH 生態以「一切皆插件」爲方向,具體行爲以倉庫 SPEC 與 README 爲準。

結尾

dsh-sync 把多設備間的 DSH 相關文件目錄,收斂爲「內容 hash + 設備清單 + 三方合併」一套模型,並用 local、WebDAV、peer 與 .dshsync 四種出口落地。按需安裝啓用、在設置頁配好 roots 與 target 後即可增量同步;衝突會保留副本而非靜默覆蓋。

  • 目錄頁:https://www.skillhub.cn/plugins/irerc/dsh-sync
  • GitHub:https://github.com/irerc/dsh-sync
羽毛球分组比赛记分
小程序二维码

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

小夜