前言¶
在多臺機器上跑 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)爲準。
核心功能¶
同步語義(簡要)¶
- 內容尋址:每個文件按
sha256存爲objects/<sha256>;各設備把自己的清單寫成devices/<deviceId>.json(含 entries 與 tombstones)。 - 三方合併:對比「本地本次掃描 / 多設備清單合併 / 上次同步基線」,得到 pull、push、刪除、復活、衝突等動作。
- 快照發布:一輪內先推本地變更再拉遠端;衝突時本地內容保留,遠端內容另存爲衝突副本。
後端目錄佈局在 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)¶
- 打開 DSH Web GUI,側邊欄進入插件頁。
- 選擇安裝組合包,目標填寫:
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