DSH Safekeep:无人值守 DSH 工作流中的 Windows 文件恢复防护

前言

在 DeepSeek Harness(DSH)里给 Agent 开高权限、让它长时间无人值守改代码时,一个常见风险是误删或覆盖文件。人工逐次确认会打断自动化;完全不做防护又可能把事故变成不可逆损失。DSH Safekeep 是社区维护的非官方 Windows 插件,目标是在不增加逐操作确认的前提下,让常见文件事故尽可能可恢复,并在识别到永久删除等危险操作时拒绝执行。

下面介绍它的定位、能力边界、安装步骤和日常用法。事实以 GitHub 仓库 README 与 Release 为准;当前公开预览版本为 0.1.0-rc.1,采用 MIT 许可证,维护者为 SPX43JL。插件在 SkillHub 目录 分类为 admin-security。

这是什么

DSH Safekeep 一句话定位:非官方 Windows 插件,面向高权限、无人值守的 DSH 工作流,尽量让常见文件事故可恢复。

普通编辑会先保存旧字节,再让后续操作继续执行;识别到永久删除等危险操作时会拒绝,并提供可恢复移除工具,使 Agent 在既有授权内继续工作。它不是 sandbox、完整备份或绝对防删保证:脚本内部、未匹配工具和直接 PTC 文件系统 API 的写入可能完全不被观察;单文件快照上限为 64 MiB;同机恢复库不能应对整盘丢失。使用前应先阅读仓库内 覆盖范围说明。

已验证环境与支持范围

首版 README 声明的已验证环境如下:

  • Windows 11 x64、本地 NTFS
  • Node.js 24.14.0、PowerShell 7.6.5
  • DSH 0.1.5-rc.2,Web / headless
  • 原生 read / write / edit / pwsh 工具模式

原生恢复工具的写操作要求当前 DSH 处于 danger-full-access;插件不会切换权限模式。项目不声明 macOS/Linux、DSH Desktop/ACP/Teams 支持;其他 Windows/Node/PowerShell/DSH 版本组合须自行重新验收。详见 兼容与维护、验收报告。

核心功能

编辑前快照与危险操作拦截

  • 覆盖类编辑:在继续执行前保留旧文件内容(单文件旧内容上限 64 MiB)。
  • 永久删除等危险操作:拒绝执行,并可通过回收类工具做可恢复移除。
  • 不新增逐操作确认;正常读取、编辑、依赖安装和测试仍可按原流程进行。

Agent 可调用的工具

Agent 可直接调用下列工具,不依赖 PATH 上额外安装:

工具 用途
data_safety_status 当前实例与会话的版本、指纹、计数、存储状态与覆盖边界
data_safety_snapshots list / inspect / verify / restore;默认恢复为旁路新文件
data_safety_trash move / list / verify / restore;仅接受已核实的绝对路径,无 purge
data_safety_temp create / list / retire;退休也走可恢复回收

存储与离线 CLI

默认存储位于用户主目录下 .dsh-safekeep,保留文件内容、原路径、时间与会话/工具标识,不记录完整对话或完整 shell 命令。恢复数据可能含敏感内容,不宜提交到 Git。目录 ACL 限于当前账户、SYSTEM 和 Administrators。

当 DSH 无法启动时,可从下载的同版本 tgz 解压后使用包内 CLI,与原生工具共用同一库,无需 DSH 或网络。

安装与启用

插件不会安装或升级 DSH、切换模型或配置凭据。准备 Node 24、PowerShell 7、pnpm 和可正常使用的 DSH 0.1.5-rc.2,先用下面命令核对环境:

node --version
pwsh --version
pnpm --version
dsh --version

本项目尚未发布 npm package,不要用 @latest 猜测安装。请从 v0.1.0-rc.1 Release 下载精确版本。

  1. 从 Release 取得 dsh-safekeep-0.1.0-rc.1.tgz、SHA256SUMS 和 BUILD-INFO.json,用 Get-FileHash -Algorithm SHA256 比对完整散列。保留 tgz,它也提供离线恢复 CLI。GitHub 自动生成的 Source code 压缩包不是 DSH 安装包。
  2. 退出准备修改的 DSH profile。将该 profile 的 package.json、pnpm-lock.yaml、cordis.yaml(若存在)和上一版 tgz 备份到私有目录。
  3. 将 tgz 放在不含空格和 shell 元字符的路径,例如 C:\DSHPackages(当前 DSH Windows plugin→pnpm 转发的路径约束;工作区路径仍可含空格和中文)。
  4. Web 与 headless 是两个独立 profile,安装其中一个不会保护另一个。按实际入口执行:
dsh plugin --profile web add C:\DSHPackages\dsh-safekeep-0.1.0-rc.1.tgz --save-exact --ignore-scripts --config.auto-install-peers=false
dsh plugin --profile headless add C:\DSHPackages\dsh-safekeep-0.1.0-rc.1.tgz --save-exact --ignore-scripts --config.auto-install-peers=false

安装后重启相应 profile。无需全局安装;无 postinstall、联网遥测或后台服务。Web 场景使用 DSH 启动时输出的认证地址,保持回环监听,勿公开 token。

确认当前会话真正生效

在 DSH 中要求调用 data_safety_status。确认 loaded: true、storage.ok: true、版本与 Release 附件 BUILD-INFO.json 的 codeHash 一致,并检查 currentSessionId。工具不存在、存储失败或指纹不同,都不能认为已经保护。

随后运行 README 指向的首次安装 canary:在新建注册目录内读→编辑样本,核对 currentSession.snapshots 增加,找到快照、校验并恢复旧字节;对从未创建的文件只尝试一次删除负例,确认拒绝且计数增加。配置里出现包名或一次绿色 status 均不能代替该验证。每次升级、修改 profile 或 DSH 更新后应重做。

典型用法与恢复

会话内通过工具恢复

通过 data_safety_snapshots 列出、校验 UUID 后执行 restore;通过 data_safety_trash 处理可恢复移动。遇到不确定路径、链接、超大旧文件或不可识别写入路径时,可改用明确路径、原生编辑工具或新版本输出,不能绕过已发生的拒绝。

DSH 不可用时的 CLI

从 tgz 解压到新目录(示例路径 C:\DSHRecovery),执行:

node C:\DSHRecovery\package\bin\dsh-safekeep.mjs doctor
node C:\DSHRecovery\package\bin\dsh-safekeep.mjs snapshots --path C:\Work\project\notes.txt
node C:\DSHRecovery\package\bin\dsh-safekeep.mjs snapshots verify SNAPSHOT_UUID
node C:\DSHRecovery\package\bin\dsh-safekeep.mjs snapshots restore SNAPSHOT_UUID
node C:\DSHRecovery\package\bin\dsh-safekeep.mjs trash list

doctor 检查本地 CLI/存储/历史回执,明确不声称当前 DSH 已加载。升级、卸载与排错见 恢复手册。

适用场景与注意

适合谁: 已在 Windows 上主动授予 DSH 高权限、需要 Agent 长时间无人值守改文件、又希望常见误删/覆盖有恢复手段的开发者。不适合把本插件当作全盘备份、加密保管或对所有写入路径的绝对防删。

权限与安全: 插件以当前 DSH 进程权限运行;安装前应自行阅读源码、MIT 许可证 与 NOTICE。DSH Safekeep 为非官方社区项目,官方社区讨论展示不代表 DeepSeek 官方审核或背书。SkillHub 等社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系。

结尾

DSH Safekeep 在 DSH「一切皆插件」的生态里,补的是 Windows 无人值守场景下的文件恢复与危险删除拦截这一层;能力有明确上限,安装后必须用 data_safety_status 与 canary 验证真正生效。

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

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

Xiaoye