前言¶
在 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.yamldsh-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 對齊。進一步瞭解與安裝入口: