dsh-plugin-repo-snapshot:工作区加密快照,存到你自己的目录或阿里云 OSS

前言

用 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-oss SDK,用 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 后,打开 设置 → 仓库快照备份。

  1. 打开 启用 开关,决定是否创建快照。
  2. 存储位置 选「本机目录」或「阿里云 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=...
  1. 点 保存并测试连接:会在目标位置写入并删除探针文件以验证可用性。
  2. 点 立即备份一次 立刻生成快照;也可按 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 权限排查说明。

链接

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

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

Xiaoye