dsh-auto-sync:爲 DeepSeek Harness Home 提供自動版本化備份

前言

DeepSeek Harness(DSH)運行時會在 home 目錄下寫入會話記錄、記憶文件、配置以及 profile 插件及其依賴樹。這些內容是用戶在 DSH 中的工作成果與狀態,通常沒有納入版本控制。手動備份這些文件容易遺漏或出錯,而依賴應用退出時的文件系統快照往往不夠可靠。

dsh-auto-sync 插件將 DSH home 目錄自動納入版本控制,並推送到用戶自有的私有 git 倉庫。它把 DSH 寫入 home 的內容作爲工作樹管理,支持跨平臺、可配置,且不對失敗保持沉默。

是什麼

dsh-auto-sync 是一個 DeepSeek Harness 插件,由維護者 wwwangzilin 開發,歸類爲聯網工具。它將 DSH home 目錄與用戶指定的 git 遠端關聯,自動同步變化並持久化歷史版本。

插件不連接本項目運營的任何服務器,也不攜帶任何憑據,遠端由用戶指定(可以是私有 GitHub/GitLab 倉庫、內網服務器或 NAS 上的裸倉庫)。

備份範圍

插件默認備份以下內容:

  • 會話記錄:<home>/sessions/**
  • 記憶文件:<home>/memories/**、<home>/memory/**
  • 配置:<home>/settings.yaml
  • Profile 插件:<home>/profiles/<name>/
  • 項目工作:用戶指定的目錄(可選)

憑據文件 <home>/.credentials.yaml 默認被排除,見安全模型。

工作原理

插件經 profile 的 bundle 層註冊,運行在宿主進程中,只負責調度。備份分爲兩條線:

熱備份線(進程內)

  • 在對話結束時觸發,複製、提交、推送到分支 dsh-hot。
  • 每輪對話結束後 30 秒觸發,並有 15 分鐘下限,保證長時間工具調用期間狀態仍能落盤。

完整快照(分離進程)

  • 以分離進程運行,避免應用退出截斷快照。
  • 定時執行(默認每日一次)以及退出時執行,提交到分支 dsh-snapshot。
  • 包含 home 完整鏡像、profile 依賴清單與依賴樹。

兩條備份線獨佔一個分支和一份獨立的 git 工作區副本,避免併發備份時出現 index.lock: File exists 衝突。

環境要求

組件 版本
DeepSeek Harness >= 0.2.0-rc.2
Node.js ^22.19 \|\| >=24
git 2.30+

git 須在 PATH 中,啓動時探測。

安裝與啓用

從桌面應用安裝

  1. 在側欄打開插件頁。
  2. 選擇添加插件,填入本目錄的絕對路徑。
  3. 啓用 dsh-auto-sync 組合包。
  4. 重啓 DeepSeek Harness。

從命令行安裝

dsh plugin --profile desktop add link:/path/to/dsh-auto-sync

首次運行

首次啓動且無配置時,插件寫入一份帶說明的模板到 <home>/sync-plugin/config.json,並記錄一條警告:在設置 remote 之前備份處於暫停狀態。

設置遠端有兩種方式:

命令方式(無需重啓)

/dsh-sync setup git@github.com:you/dsh-backup.git

編輯配置文件後重啓

{
  "remote": "git@github.com:you/dsh-backup.git"
}

下次啓動時,插件初始化倉庫、爲每條啓用的備份線創建分支與工作區副本,並開始備份。

/dsh-sync 命令

需要 profile 提供 commands 服務(Web 與桌面 profile 提供,headless 與 ACP profile 不提供)。

命令 行爲
/dsh-sync 報告遠端、各備份線及上次成功時間
/dsh-sync setup [地址] 設置遠端並執行首次初始化
/dsh-sync remote <地址> 僅修改遠端,不改動分支
/dsh-sync lines 列出備份線及其分支
/dsh-sync workspace <路徑> 啓用項目線並指定目錄
/dsh-sync workspace off 關閉項目線
/dsh-sync run 立即安排一次快照
/dsh-sync doctor 診斷 git、倉庫、分支與工作區副本

命令產生的修改均寫回配置文件,結果可 diff。

設置頁

桌面版與 Web 版的「設置 → 插件」提供自動備份頁籤,與斜槓命令讀寫同一份配置文件:

  • 填寫或修改遠端地址;首次配置保存後立即執行初始化,無需重啓。
  • 查看各備份線的分支、啓用狀態、上次成功時間與最後一次錯誤。
  • 指定同時備份的項目目錄,清空即關閉項目線。
  • 手動觸發一次快照。

配置

配置文件位於 <home>/sync-plugin/config.json。

頂層鍵

鍵 類型 默認值 說明
remote string "" 備份遠端地址,必填。支持 SSH 與 HTTPS。
remoteName string "origin" origin 已指向其他倉庫時使用的遠端名。
worktree string <home>-backup 各備份線工作區副本的父目錄,須位於 home 之外。
locale string "zh" 命令與引導語言:zh 或 en。
exclude string[] 見下文 追加到 home .gitignore 的忽略規則。
userName string "dsh-auto-sync" git 未配置身份時使用的提交者名稱。
userEmail string "dsh-auto-sync@localhost" 同上,郵箱。
home string $DSH_HOME 或 ~/.dsh 覆蓋 home 目錄;顯式 --home 優先於環境變量。

默認忽略規則:

.credentials.yaml
**/node_modules/
*.log
.DS_Store
Thumbs.db
sync-plugin/.sync-status.json
memory/memory.db-shm
memory/memory.db-wal

備份線鍵

每條線均接受 enabled 與 branch。

lines.hot

鍵 默認值 說明
paths [".sync-status.json"] 每輪對話後提交的文件,相對 home;解析到 home 之外的路徑會被拒絕。
debounceMs 30000 最後一輪對話結束後的靜默期。
intervalMs 900000 無條件刷新間隔,保證長時間工具調用期間狀態仍能落盤。

lines.snapshot

鍵 默認值 說明
intervalMs 86400000 完整快照間隔。
profile "desktop" 納入依賴樹的 profile。
includeNodeModules true 在快照中重新納入該 profile 的 node_modules。
files 清單文件列表 與依賴樹一同鏡像的 profile 文件。

lines.workspace

鍵 默認值 說明
enabled false 未設置 source 時該線保持空閒。
source "" 要鏡像的項目目錄絕對路徑。
exclude [".git", "node_modules", "dist", "build", "target", ".cache"] 遞歸時跳過的目錄或文件;設置後完全取代默認值。

release 備份線

完整備份的另一種形態:將 home 打包爲 tar.gz 並作爲 release 資產發佈。

鍵 默認值 說明
enabled false 是否啓用。
repo "" GitHub 倉庫,爲空時由 git 遠端推導爲 owner/name。
tagPrefix "dsh-backup-" tag 前綴。
keep 5 保留最近 N 份。
intervalMs 604800000 發佈間隔(7 天)。
includeNodeModules false 是否包含 node_modules。
includeSecrets false 是否包含憑據文件。
partSizeBytes 1500000000 分片大小(約 1.5 GB)。

備份線類型

hot → dsh-hot

頻繁變化的小文件。文件複製進該線的工作區副本後提交併推送。默認在對話輪結束後 30 秒觸發,並有 15 分鐘下限。

snapshot → dsh-snapshot

home 的完整鏡像,附帶所配置 profile 的依賴清單與依賴樹。運行時機:每日一次、退出時一次,以及啓動時發現上次快照早於間隔的補跑。

workspace → dsh-workspace

鏡像指定的項目目錄,使代碼與其描述狀態一同版本化。默認關閉。構建產物與依賴緩存被排除,排除列表可配置。

release → GitHub Release 資產

將 home 打包爲 tar.gz 並作爲 release 資產發佈。適合長期歸檔與災難恢復,存儲爲壓縮包而非 git 歷史。

恢復

恢復整個 home

git clone <遠端地址> ~/.dsh
cd ~/.dsh
git checkout dsh-snapshot
dsh plugin --profile desktop install

恢復單個文件

git show dsh-snapshot:sessions/2026-01-01/....jsonl > restored.jsonl

恢復項目

git clone --branch dsh-workspace <遠端地址> project

git log dsh-snapshot -- <路徑> 給出單個文件的修訂歷史。

安全模型

默認排除憑據。首次運行時插件把 .credentials.yaml 及以上規則寫入 home 的 .gitignore。該文件保存服務商 API Key,不應推送。

插件接管而非覆蓋已有倉庫。如果遠端已存在內容,插件會將其視爲初始歷史,不再清空。

適用場景與注意

該插件適合需要爲 DSH home 目錄提供版本化備份的用戶,尤其是需要長期保留歷史狀態或進行災難恢復的場景。

插件以當前 DSH 進程權限運行,安裝前應檢查源碼與許可證。配置文件與命令輸出均支持中文與英文,可通過 locale 字段或環境變量 DSH_AUTO_SYNC_LOCALE 控制。

總結

dsh-auto-sync 通過兩條備份線(熱備份線與完整快照)將 DSH home 目錄納入版本控制,支持增量更新與完整鏡像,並提供 release 資產歸檔選項。備份線獨立分支與工作區副本的設計避免了併發衝突,失敗可見的機制避免了靜默失敗。配合配置文件與設置頁,用戶可以靈活控制備份範圍與策略。

插件目錄頁:https://www.skillhub.cn/plugins/wwwangzilin/dsh-auto-sync

GitHub:https://github.com/wwwangzilin/dsh-auto-sync

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

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

小夜