前言¶
用 DeepSeek Harness(DSH)做 AI 编程时,工作区里往往有源码、.git 历史,还有 .env、密钥之类敏感文件。把整仓备份到云端可以方便跨设备恢复或对话级回退,但常见做法是静默上传、密钥在服务端、敏感文件照样进包——用户既关不掉,也解不了密。
下面介绍社区插件 dsh-plugin-repo-snapshot(维护者 isayrhythm,SkillHub 分类为联网工具):在 DSH 里把当前项目打包、加密,存到本机目录或你自己的阿里云 OSS;解密私钥只留在本机。设置页可开关、可测连、可立即备份。插件以当前 dsh 进程权限运行,安装前建议通读 GitHub 仓库 源码与 MIT 许可证。
这是什么¶
dsh-plugin-repo-snapshot 是面向 DeepSeek Harness 的工作区加密快照备份插件(npm 包名 dsh-plugin-repo-snapshot,当前资料中版本为 1.0.0)。它解决的是:在「需要备份工作区(含可选 .git)」的前提下,让数据去向、是否上传、能否解密都由用户自己控制,而不是交给不可见的云端逻辑。
DSH 生态理念是「一切皆插件」;SkillHub 目录页 是社区站点,与 DeepSeek / 幻方无官方从属关系。
核心功能¶
资料中明确的能力如下。
- 加密快照:AES-256-GCM 归档(可选 AES-256-CTR);AES 密钥用本机 RSA-4096 公钥封装(RSA-OAEP-SHA256)。私钥位于
<DSH_HOME>/repo-snapshot/keys/private.pem,不上传。 - 两种目的地:本机目录,或阿里云 OSS(零
ali-ossSDK,用 Node 内置fetch+node:crypto做 V1/V4 签名 PUT)。 - 设置界面:DSH Web 设置页内「仓库快照备份」分区——开关、OSS 参数、保存并测试连接、立即备份。
- 敏感文件拦截:默认拦截
*.pem、*.key、id_rsa、*_rsa、.env、.npmrc、.git-credentials、.ssh等;跳过项会在对话中计数说明。 - 其它行为:超大文件按
scan.maxFileSizeMB跳过并计数;内容未变可 dedupe 跳过重复上传;可选包含完整.git;触发时机支持session-start/pre-step/both/manual。
安装与启用¶
从 npm / GitHub 安装¶
包内声明了 dsh.bundle.patch,安装时会自动把插件行插入 composition,无需手工改 profile 配置(本地 link 开发时除外)。
dsh plugin --profile web add dsh-plugin-repo-snapshot
依赖侧:打包用 archiver;OSS 不依赖阿里云官方 Node SDK。宿主要求 Node >=20.0.0。
本地开发挂载(可选)¶
若从本地目录 link 开发,需在 profile 的 cordis.patch.yml 里挂载插件行,并重启 dsh web——插件本体是 ESM,客户端 bundle 只在启动时加载,热重载不会重新导入。
cd <你的 DSH profile 目录> # 例如 ~/.dsh/profiles/web
pnpm add link:/path/to/dsh-plugin-repo-snapshot
- insert:
- id: repo-snapshot
name: dsh-plugin-repo-snapshot
典型用法¶
经过上面的安装步骤并重启 dsh web 后,打开 设置 → 仓库快照备份。
- 打开 启用 开关,决定是否创建快照。
- 存储位置 选「本机目录」或「阿里云 OSS」。
- OSS 需填Region(如oss-cn-hangzhou)、Bucket、AccessKey ID、AccessKey Secret;建议用仅对该 bucket 有写权限的 RAM 子账号。
- 若不想让 AK/SK 写入settings.json,可在设置页留空,改用环境变量:
export ALIYUN_OSS_ACCESS_KEY_ID=LTAI...
export ALIYUN_OSS_ACCESS_KEY_SECRET=...
- 点 保存并测试连接:会在目标位置写入并删除探针文件以验证可用性。
- 点 立即备份一次 立刻生成快照;也可按
trigger配置在会话开始等时机自动触发。
快照在目的地的大致结构:
<目的地>/<prefix>/<日期>/<会话ID>/<snap_...>/
├── snapshot.tar.gz.enc # 加密后的归档
└── snapshot.key.enc # 被本机公钥封装过的 AES 密钥
归档内包含 manifest.json(时间、工作区、清单、跳过统计)以及 files/<相对路径> 下的文件内容。
恢复¶
从目的地取回某次快照的 snapshot.tar.gz.enc 与 snapshot.key.enc 后,在本机用仓库自带脚本解密(需保留 private.pem;丢失则无法恢复,无后门):
node scripts/decrypt.mjs \
--input snapshot.tar.gz.enc \
--key snapshot.key.enc \
--private-key ~/.dsh/repo-snapshot/keys/private.pem \
--output ./restored
Windows 下私钥默认路径为 C:\Users\<你>\.dsh\repo-snapshot\keys\private.pem。资料注明:尚未提供「从 OSS 一键下载并恢复」的脚本,需从控制台或 ossutil 取回两个文件后再跑 decrypt.mjs。
配置与 HTTP 接口(脚本化)¶
设置页写入 <DSH_HOME>/repo-snapshot/settings.json,优先于 cordis.patch.yml。常用项包括 enabled、oss.provider(local / aliyun)、oss.prefix(默认 repo-snapshots/)、scan.includeGit、scan.excludeSensitiveFiles、trigger、dedupe 等;完整表格见 GitHub README。
宿主还注册了供设置页或脚本调用的路由,例如:
| 方法 | 路径 | 说明 |
|---|---|---|
GET |
/plugins/repo-snapshot/status |
配置(密钥脱敏)、指纹、最近快照 |
POST |
/plugins/repo-snapshot/backup-now |
立即备份,可传 workspacePath |
适用场景与注意¶
适合谁:希望在 DSH Web 场景下,把当前工作区(可选含 .git)做加密、可审计备份到自有存储的开发者;尤其关注 .env、密钥等默认拦截、以及 OSS 权限最小化(PutObject / DeleteObject)的用户。
务必注意:
- 插件以当前
dsh进程权限读写工作区并上传;安装前应自行审查源码与 MIT 许可证。 - 快照为全量打包,增量备份尚未实现;大仓库 Git pack 可能因
maxFileSizeMB(默认 5)被跳过,必要时调大。 - 快照只增不减,旧快照清理需自行制定策略。
- OSS 签名默认
auto(先试 V4 再回退 V1);403 或签名错误时 README 提供了signatureVersion与 RAM 权限排查说明。