dsh-backup-rescue:DeepSeek Harness 整目錄備份與恢復

前言

在 DeepSeek Harness(DSH)里長期用插件、MCP、技能和工作區之後,$DSH_HOME(默認 ~/.dsh)會集中存放配置、會話、憑據和插件清單。手工複製幾個子目錄很難保證完整,也未必能在新機或 DSH 未安裝的環境裏還原。下面介紹社區插件 dsh-backup-rescue(維護者 xiaoxin3309,分類 admin-security):面向整個 DSH 主目錄做歸檔與恢復,並提供設置頁、智能體工具、HTTP API 以及不依賴 DSH 的獨立恢復腳本。

插件定位

dsh-backup-rescue 是 DSH 生態中的備份類插件(MIT 許可證,當前 npm 包版本 0.4.6)。它備份的是整個 DSH 主目錄,而不是單個 profile;支持定時自動備份、可選密碼加密、可選納入工作區文件,並可在升級插件自身前先做一次 normal 備份。插件索引與說明見社區目錄 SkillHub 條目;源碼與文檔見 GitHub 倉庫。SkillHub 爲獨立社區站點,與 DeepSeek / 幻方無官方從屬關係。

備份範圍

默認 DSH 主目錄下的這些內容會進入歸檔:

  • profiles/(插件安裝狀態、package.json、cordis.patch.yml、補丁歷史)
  • settings/、ui/、providers/、mcp/、prompts/、skills/、agentPresets/、agentInstructions/
  • storages/、sessions/、workspaces/、.credentials.yaml
  • dsh-config-manager/(vault、回滾點、導出)、dsh-market/

下列路徑因體積大或可重建,normal 備份默認跳過:node_modules/、cache/、logs/、tmp/、locks/、running/、telemetry/、dsh-runtimes/、web-login/、speech-to-text/、attachments/,以及匹配 *snapshot*、*.bak、*.old、*.trash 的目錄和 *.log / *.tmp 文件。

因此 normal 備份通常不包含插件源碼本身,但會在 manifest 中記錄各 profile 的插件清單(name@version)。若要在無網絡的新機器上直接可用,應使用 full 備份,其中包含 node_modules/、dsh-runtimes/、cache/ 等。

工作區路徑在 $DSH_HOME 之外,需顯式開啓:設置頁勾選「連同工作區文件」,或對創建工具傳入 includeWorkspaces: true。插件根據 storages/workspace.json 註冊的路徑,將目錄打包到歸檔內的 __workspaces__/<id>/…,恢復時再寫回對應路徑。

歸檔格式與安全

每個 ZIP 根目錄帶有 DSH-MANIFEST.json:格式版本、插件版本、源 DSH 主目錄、逐文件 sha256 與大小、跳過項列表。恢復前會先校驗哈希再寫入。

設置密碼時,整包加密爲 <name>.zip.enc(整文件加密,不泄露 ZIP 內文件名)。自 0.4.1 起封裝爲 DSHBK002(PBKDF2-HMAC-SHA256,200000 次迭代,AES-256-CBC + encrypt-then-MAC),便於 Windows 獨立 .bat 恢復器僅用自帶 PowerShell 解密。0.3.x–0.4.0 的 DSHBK001(scrypt + AES-256-GCM)歸檔仍可讀。

三種使用入口

設置頁、智能體工具與 HTTP API 共用同一套備份核心。

設置頁

路徑:Settings → 備份 Backup。可立即備份、刷新列表、恢復選中歸檔、指定備份存放位置、配置自動備份。恢復需確認;若 DSH 進程仍在運行會拒絕(409 dsh-running),避免在線覆蓋文件。加密歸檔恢復時會提示密碼(0.4.2 起);無密碼則 400 password-required。

智能體工具

面向智能體的工具包括:backup_plugin_create、backup_plugin_create_full、backup_plugin_list、backup_plugin_restore、backup_plugin_status、backup_plugin_check_update、backup_plugin_update(先備份再更新,可傳 backup: false 跳過備份)、backup_plugin_settings(backupDir / migrate / autoEnabled / autoIntervalMinutes / autoMaxBackups)、backup_plugin_prune(保留最新 N 個 normal 備份)。

創建時可傳 password、backupDir、includeSessions、includeSecrets、includeAttachments;恢復時可傳 backupPath、dryRun、password。

HTTP API

以下爲 loopback 限制的設置頁 API(與 README 一致):

GET  /api/dsh-backup-rescue/status
POST /api/dsh-backup-rescue/create
POST /api/dsh-backup-rescue/create-full
POST /api/dsh-backup-rescue/restore
GET  /api/dsh-backup-rescue/update-check
POST /api/dsh-backup-rescue/update
GET|POST /api/dsh-backup-rescue/settings
POST /api/dsh-backup-rescue/prune

備份存放與目錄結構

設置項保存在 <DSH home>/dsh-backup-rescue/settings.json。未指定備份根目錄時,默認爲 <DSH home>/dsh-backup-rescue/exports。設置頁「備份位置」或 backup_plugin_settings / GET|POST /api/dsh-backup-rescue/settings 接受絕對路徑(~、%USERPROFILE%、$HOME 會展開);留空則回退到上述默認路徑。勾選「同時把已有備份遷移過去」時,會把已有 normal/、full/ 及舊版平鋪歸檔(含同名 .bat)遷過去,保留修改時間;衝突則合併到重命名文件夾而非覆蓋。

典型佈局如下:

<root>/normal/dsh-backup-2026-10-22T10-15-00-000Z/
    dsh-backup-2026-10-22T10-15-00-000Z.zip   # 或帶密碼的 .zip.enc
    dsh-backup-2026-10-22T10-15-00-000Z.bat
    dsh-backup-2026-10-22T10-15-00-000Z.sh
    restore.bat / restore.sh
<root>/full/dsh-backup-full-2026-10-22T10-20-00-000Z/
    …

刪除某個備份文件夾即只刪除該次備份。full 備份不會被自動修剪;normal 可由自動策略或 backup_plugin_prune 保留最新 N 份。

自動備份

設置頁「自動備份」按間隔 i 分鐘(1–43200)執行 normal 備份,並最多保留 j 份(1–5000);每次運行後刪去更舊的 normal 備份及其目錄、同名腳本。界面會顯示調度狀態、下次運行時間與上次結果(含修剪數量)。官方建議:恢復時使用該備份目錄內隨包生成的 .bat,其版本與寫入備份的插件版本一致。

安裝與啓用

DSH 側可通過插件管理安裝社區包。SkillHub 頁面給出的安裝指引爲:讓 Harness 安裝插件標識 xiaoxin3309/dsh-backup-rescue(完整句式以目錄頁「發送給 DeepSeek Harness 安裝」爲準)。

若已知道 profile 路徑,也可像 README「Update from npm」那樣把包裝進 profile(常用於手動對齊版本):

npm install dsh-backup-rescue@latest --prefix ~/.dsh/profiles/<profile> --save-exact

本地開發或從源碼目錄鏈入時,在倉庫根目錄構建後,通過插件管理器安裝 bundle:

pnpm install
pnpm build
plugin_manager install_bundle <path-to-this-directory>

並在 profile 的 cordis.patch.yml 中啓用插件行(本倉庫自帶 patch 示例):

- insert:
    - id: backup-plugin
      name: 'dsh-backup-rescue'
      config: {}

安裝前建議閱讀 GitHub 源碼 與 MIT 許可證。插件以當前 DSH 進程權限讀寫主目錄與備份路徑,涉及 .credentials.yaml 等敏感文件時應自行評估風險。

典型操作示例

1、設置頁立即做一次 normal 備份

進入 Settings → 備份 Backup,執行立即備份;默認輸出到 <DSH home>/dsh-backup-rescue/exports/normal/…。

2、通過 API 創建 full 備份

在 DSH 本地 loopback 環境向創建接口發 POST(需 DSH 未在恢復衝突狀態):

POST /api/dsh-backup-rescue/create-full

3、一鍵備份並更新插件

設置頁版本卡片上的「一鍵備份並更新」,或調用 backup_plugin_update / POST /api/dsh-backup-rescue/update。順序爲:先 normal 備份(失敗則中止)→ 查詢 npm 最新版 → 必要時調整 minimumReleaseAgeExclude → 用 dsh-runtimes/ 內 pnpm 安裝,回退 npm install --save-exact → 校驗版本並重啓 DSH。

4、離線或另一臺機器恢復

將整個備份文件夾(含與歸檔同名的 .bat / .sh)複製到目標機,雙擊對應腳本。加密包會提示密碼;可用環境變量 DSH_RESTORE_PASSWORD、DSH_RESTORE_TARGET、DSH_RESTORE_YES=1 等做自動化。恢復腳本在檢測到 deepseek-harness 仍在運行時會拒絕執行。自 0.4.2 起,恢復過程會處理 DSH 設爲只讀的附件對象,避免中途因權限失敗。

適用場景與注意

適合需要定期導出 DSH 全貌、升級插件前留快照、或在無法啓動 DSH 時仍要還原環境的用戶。若僅關心單個項目代碼,工作區需單獨勾選納入;若要求離線即用的完整環境,應使用 full 備份而非 normal。

務必在停止 DSH 或接受設置頁/API 的限制後再做恢復,避免 409 dsh-running。加密備份請妥善保管密碼;.bat 恢復器故意爲 ASCII + CRLF,勿改編碼以免 cmd 解析異常。

結尾

dsh-backup-rescue 把 DSH 主目錄備份、定時任務、加密歸檔與獨立恢復腳本收攏到同一插件,並與設置頁、智能體工具、loopback API 對齊。進一步瞭解與安裝入口:

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

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

小夜