dsh-vault:DSH 加密全量备份与恢复

前言

在 DSH(DeepSeek Harness)里跑久了,有价值的东西会散在配置、会话、已装插件、工作区,以及 Hindsight 记忆库里。常见做法是手工拷贝目录或依赖外部压缩/同步工具,但权限、加密、分卷、还原一致性往往要你自己拼。dsh-vault(仓库 soberkeen/dsh-vault,npm 包 @lingfengmow/dsh-vault)把「扫描 → 加密打包 → 校验 → 恢复 → 滚动保留」做成一套零外部依赖的插件,并在每个备份包里带上自包含还原器与恢复台账。

这是什么

维护者 soberkeen,分类为 admin-security。插件定位是:把 DSH 的 config / sessions / skills / plugins / workspaces / Hindsight memory / DSH 客户端安装包 打成 AES-256-GCM 加密、可分卷 的本地包,可选推到 NAS(网络共享或 WebDAV);支持 GFS 滚动保留 与可选定时备份。实现上 lib/ 下是纯 ESM JavaScript,无构建步骤,仅使用 node: 内置模块,不依赖 7z、openssl、rclone 或 npm 运行时依赖(备份 Hindsight 的 Postgres 时可能用到 docker exec … pg_dump)。许可证 MIT,当前发布版本 0.2.0;README 记载在 DSH 0.2.0-rc.2 上做过完整验证,并与 0.2.1-rc.2 做了契约对照文档。

核心功能

六个面向 AI 的工具

安装成功后,可通过 DSH 工具调用以下入口(schema 经 scripts/schema-gate.mjs 约束,避免无效 schema 导致会话 400):

工具 作用 主要参数
vault_scan 按重要性分层预览(P0 必留 / P1 可选 / P2 排除),无副作用 scope, includeP1, topExcluded
vault_backup 执行加密备份并写出 password, outDir, scope, includeP1, dryRun
vault_list 列出历史包(同一逻辑包的多卷归组) dir
vault_verify 全量解密并校验明文/分卷哈希,不写盘 package(必填), password
vault_restore 恢复到 --target 或原地覆盖 package(必填), password, target, inPlace, only, list
vault_prune GFS 轮转(默认 dry-run,打印待删列表) dir, apply, hardDelete, keepLast, maxTotalGB

命令行脚本(同样无第三方依赖)

仓库内 scripts/ 提供扫描、打包、校验、恢复演练等脚本,例如 core-drop.mjs(core / all 范围)、verify-drop.mjs、restore-drill.mjs,适合在备份目录旁做门禁与回归。README 还列出 schema-gate.mjs、policy-test.mjs、boundary-test.mjs、selftest.mjs 等自检入口。

密码与密钥策略

优先级:--password → 环境变量(默认名可配置,文档中为 DSHVAULT_PASSWORD)→ 自动生成符合策略的随机密码(core-drop.mjs 未提供密码时生成一次并打印到 stdout,默认不落盘;可用 --write-key 写到 <out>/_keys/<package>.key.txt)。密钥文件等同于解密凭证;密码丢失则包不可恢复(无后门)。密码不会写入 manifest、包内文档或日志。

备份范围(分区概念)

README 用分区描述内容,例如 00-installer 为 DSH 客户端安装包(还原前提)。core-drop.mjs 默认 core 范围包含配置、会话、记忆、安装包、插件与编排;加 --scope all 会纳入工作区(02-workspaces)。具体排除规则以仓库文档为准,建议先用 vault_scan 或 core-drop.mjs --dry 估算。

安装与启用

要求:DSH ≥ 0.2.0,Node ≥ 18(DSH 自带运行时即可);restore.ps1 需要 pwsh 7。

从 npm 安装(推荐)

# Official DSH CLI — maintains dependencies + lockfile + node_modules + profile bundles
& "<DSH install dir>\resources\runtime\cli\bin\dsh.cmd" plugin add "@lingfengmow/dsh-vault"

# Pin a profile when you run more than one
& "<DSH install dir>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add "@lingfengmow/dsh-vault"

npm 发布为 @lingfengmow/dsh-vault@0.2.0。

从 GitHub 安装(等价,无构建步骤)

& "<DSH install dir>\resources\runtime\cli\bin\dsh.cmd" plugin add github:soberkeen/dsh-vault
& "<DSH install dir>\resources\runtime\cli\bin\dsh.cmd" plugin --profile desktop add github:soberkeen/dsh-vault

安装后需 完全退出 DSH 再重新启动(不要用崩溃对话框上的「重启」)。成功时设置侧栏会出现 Backup 入口。

安装后可做自检:

npm run check
node scripts/client-register-test.mjs
node scripts/health-check.mjs

典型用法

下面步骤摘自 README,路径请换成你的备份目录。

1、先 dry-run 估算体量

cd <dsh-vault 插件目录>
node scripts/core-drop.mjs --dry

2、写出 core 或全量(含工作区)备份

node scripts/core-drop.mjs --out "G:\DSH-Backup"
node scripts/core-drop.mjs --out "G:\DSH-Backup" --scope all

3、校验最近一包(密码可从 key 文件读取)

$key = (Get-ChildItem "G:\DSH-Backup\_keys\*.key.txt" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
$pkg = (Get-ChildItem "G:\DSH-Backup\*.vault" | Sort-Object LastWriteTime -Descending | Select-Object -First 1).FullName
node scripts/verify-drop.mjs --package $pkg --key-file $key

4、无副作用的恢复演练(默认不写目标机)

$pw = (Select-String -Path $key -Pattern '^密码:(.+)$').Matches[0].Groups[1].Value.Trim()
node scripts/restore-drill.mjs --package $pkg --password $pw

在会话里,可先 vault_scan 看分层,再 vault_backup;定期用 vault_verify 抽检,用 vault_prune 做 GFS 清理(确认 dry-run 列表后再 apply)。

适用场景与注意

适合需要 可验证、可演练、可长期保留 的 DSH 环境快照:换机、重装客户端前留档,或把加密分卷放到 NAS/WebDAV。GFS 与容量上限(maxTotalGB 等)适合备份目录会无限增长的场景。

务必注意:

  1. 插件以当前 DSH 进程权限运行,能读到的目录都会进入扫描范围;安装前应阅读源码与 MIT 许可证,确认符合你的安全策略。
  2. 密钥与密码自行保管;不要把 _keys 与 .vault 放在同一处且无访问控制。
  3. 社区目录 SkillHub 插件页 与 GitHub 仓库由社区维护,不等同于 DeepSeek / 幻方官方应用商店;DSH 生态仍是「一切皆插件」,选型以仓库文档与自测为准。

结尾

dsh-vault 把 DSH 侧分散的状态收成加密分卷备份,并在包内带上还原与校验能力,减少对外部压缩/同步栈的依赖。进一步了解与安装说明见 SkillHub:soberkeen/dsh-vault 与 GitHub:soberkeen/dsh-vault。

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

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

Xiaoye