dsh-ownsync:用自建 Git 服務器同步 DSH 工作區與會話

前言

DeepSeek Harness(DSH)把項目工作區、多會話聊天和附件都落在本機數據目錄裏。換電腦或重裝之後,這些「記憶」不會跟着走;若把整份數據目錄拷來拷去,又容易把憑據、插件配置和項目代碼一併帶上。社區裏也有面向 GitHub、Gitee 等託管平臺的同步插件,更適合自動同步和多分支場景。

下面介紹 dsh-ownsync(維護者 Shengyis,npm 包名 dsh-ownsync):把自己控制的 Git 裸倉庫 當作傳輸通道,只做 手動上傳 / 下載,把 DSH 的工作區登記、會話日誌和聊天裏引用的附件同步過去,在另一臺機器上接着聊。設計上沒有自動同步、沒有分支合併;文檔要求同一時間只在一臺電腦上改內容。

這是什麼

dsh-ownsync 是 DSH 生態中的「記憶」類插件:同步範圍收窄爲 DSH 自身需要的三類數據,不碰項目倉庫裏的代碼、settings.yaml、插件清單和憑據等。服務器上的 main 分支始終是當前內容的一份快照式提交,倉庫體積不會隨上傳次數無限膨脹。

同步什麼、不同步什麼

上傳時會掃描本機數據目錄,寫入本地同步倉庫 .ownsync/repo.git,再向遠端 main 推送只含當前內容的根提交。

類別 內容
工作區 storages/workspace.json:工作區列表、標題、順序、會話歸屬、歸檔狀態
會話 sessions/** 下各會話的最高代際日誌
聊天附件 attachments/** 中被上述會話日誌引用到的文件

不參與同步的包括:項目文件夾裏的代碼與文檔、settings.yaml、cordis.patch.yml、插件清單、憑據、緩存、日誌、AGENTS.md、skills/。只有 header、沒有任何事件的空白會話也不同步。

權威來源是服務器:服務器上有什麼,本機下載後就變成什麼。

核心機制

服務器側

在自有機器上準備一個普通裸倉庫即可,例如:

git init --bare /srv/git/dsh-sync.git

README 說明不要設置 receive.denyNonFastForwards,因爲每次上傳可能對應強制推送。

上傳

  1. 掃描本機三類同步內容;
  2. 寫入 .ownsync/repo.git;
  3. 生成只含當前內容的根提交併推到 main。

下載

  1. 取回 main;
  2. 按文件寫回本機(覆蓋前把原件存到 .ownsync/backup/);
  3. 記錄本機基線版本;
  4. 若寫回了會話,會自動重啓 DSH 以便重新讀盤;會話被佔用時會先切到空白會話再重啓。

插件調用系統 PATH 裏的 git(Windows 上爲 Git for Windows)。若提示找不到 git 命令,安裝後需完全退出並重新打開 DSH。

界面與狀態

側欄左下角(頭像上方)有同步卡片:顯示本機 / 服務器版本號、上次同步時間,以及 上傳、下載、檢查更新 按鈕;齒輪打開設置(倉庫地址、分支、兩個刷新間隔)。

本機狀態刷新默認每 5 秒、僅本地掃描;服務器自動檢查默認每 10 秒,執行 git fetch。這些間隔存在本機瀏覽器裏,不參與同步。

常見狀態包括:未配置地址、尚未檢查服務器、無法連接、服務器空倉庫建議上傳、本機尚未下載、本機有未上傳改動、服務器版本較新建議下載、已同步等。按鈕會根據狀態自動啓用或禁用,禁用時懸停可看原因。

「同步」按鈕目前爲佔位,點擊不執行操作。「重啓」需確認,並受運行中任務、插件安裝、剛重啓 5 秒內等條件限制;自動重啓能力以 Windows 桌面版爲主,Web 或其他環境可能只提示手動退出。

安裝與啓用

插件通過 npm(或團隊私有 registry)安裝,當前 package 版本爲 1.1.0,許可證 MIT,要求 Node >= 24。

在 DSH 內:

  1. 打開 DSH → 設置 → 插件;
  2. 輸入包名 dsh-ownsync,點安裝;
  3. 完全退出 DSH 再打開。

等價命令行:

# Web 端
dsh plugin --profile web add dsh-ownsync

# Windows 桌面端
& "$env:LOCALAPPDATA\Programs\DeepSeek Harness\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add dsh-ownsync

升級可指定版本,例如 dsh-ownsync@1.1.0,裝完同樣要完全退出再打開。若不用公共 npm,需在 profile 的 .npmrc 配置 registry,或在安裝命令後加 --registry <地址>。

插件以當前 DSH 進程權限運行;安裝前建議閱讀 GitHub 倉庫 源碼與許可證,自行判斷是否適合你的環境。

典型用法

1. 準備服務器與憑據

git init --bare /srv/git/dsh-sync.git

插件不彈登錄窗。需先在本機打通 git 訪問:

  • SSH:ssh-keygen,公鑰加到服務器,ssh -T user@host 能通;
  • HTTPS:在終端執行一次 git ls-remote <倉庫地址>,按提示輸入賬號與令牌,由系統憑據管理器保存。

2. 配置倉庫地址

在 DSH 側欄點設置齒輪,填入地址(示例:ssh://git@backup.example.com:2222/srv/git/dsh-sync.git),保存。

3. 首臺電腦(已有內容)

點 檢查更新。空倉庫時狀態爲「服務器上還沒有內容, 建議上傳」,點 上傳 即可在服務器上產生 v1。

4. 新電腦

安裝插件、填同一地址,檢查更新 → 下載。覆蓋前會備份到 .ownsync/backup/;寫回會話後會自動重啓。之後換機流程固定爲:舊機 上傳 → 新機 檢查更新 → 下載。

安全邊界與限制

  • 下載會覆蓋本機,原件在 <數據目錄>/.ownsync/backup/<時間>/files/... 可手工恢復。
  • 一次刪掉過多已同步文件時上傳會要求確認,並可能把服務器舊版本備份到本機。
  • 本機有未上傳改動時下載需確認;上傳若在服務器已被另一端改過之後進行會被拒絕,提示先下載(session/end-seed 標記不算改動)。
  • 服務器只是傳輸通道,不是完整備份方案;長期備份仍要依賴本機數據目錄與 .ownsync/backup。
  • 會話正在生成時上傳會被拒絕;單文件上限 256 MiB,超限附件會跳過並出現在上傳結果裏。
  • 下載寫回會話、佔用會話切空白等場景會觸發自動重啓(Windows 桌面版由外部助手拉起);其他平臺需按提示手動重啓。

本插件基於 dsh-chatsync 修改,去掉託管平臺 API、分支合併和自動同步,面向自建 Git;若需要 GitHub / Gitee 上的自動同步與多分支,文檔建議優先使用 chatsync。

結尾

dsh-ownsync 把 DSH 的工作區、會話和引用附件收斂到一條你可控的 Git 通道上,用明確的上傳 / 下載節奏換電腦接着聊,避免把無關配置和項目代碼一併同步。插件目錄見 SkillHub 條目,源碼與變更說明見 GitHub:Shengyis/dsh-ownsync。

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

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

小夜