前言¶
DeepSeek Harness (DSH) 的核心设计之一是插件化。在智能体开发过程中,模型对文件的 write 或 edit 操作,以及外部 bash/run_code 调用,往往是不可逆的。一旦出错,需要人工介入或通过繁琐的命令行恢复。
dsh-rollback 是一个用于 DeepSeek Harness 的文件变更回滚插件。它在插件层通过监听工具调用结果和执行钩子,捕获变更前的状态,并提供回滚能力。
插件概览¶
- 插件名称: dsh-rollback
- 维护者: Taler97
- 许可证: MIT
- 核心功能: 捕获文件变更前的镜像,支持通过工具或命令行回滚。
安装与启用¶
该插件以 bundle 形式提供,无需修改 Harness 核心代码。
-
前置条件
- 确保
dshCLI 已安装并在 PATH 中。 - 确保
pnpm已安装并在 PATH 中(dsh plugin命令依赖它)。
- 确保
-
安装命令
在目标 profile 下执行:
dsh plugin --profile demo add dsh-rollback
- 验证安装
安装后,profile manifest 中会自动包含该 bundle。启动 session 时,模型应当能看到rollback_files工具,或者在未发生变更前输入/rollback能得到rollback: nothing to restore的反馈。
核心功能¶
- 变更捕获:捕获
write/edit工具结果中携带的before镜像,以及bash/run_code调用前的 workspace 快照。 - 存储机制:将捕获的镜像存储在 workspace 的 git object database 或独立的 snapshot store 中。
- 回滚接口:
- 模型工具:
rollback_files {count} - 用户命令:
/rollback [count]
- 模型工具:
使用示例¶
用户命令回滚¶
在 session 的聊天输入中执行:
/rollback:撤销当前 session 工作目录中最近一次捕获的 mutation。/rollback 3:撤销最近三次捕获的 mutation。
输出会列出每个恢复的文件及其操作(如 restored 或 deleted)。
模型工具回滚¶
模型可以通过 rollback_files 工具撤销自身的错误操作。该工具无 prompt section,参数为 {count},表示回滚次数。
配置项¶
插件支持以下配置(需手动修改 profile manifest 或在 config 中指定):
- mode (
auto|git|snapshot): 存储模式。auto: 默认。如果是 git 仓库则用 git blob,否则用 snapshot。git: 将所有镜像存为 git blob(需仓库)。snapshot: 统一存为 snapshot 文件。
- storeDir: 存储目录。默认为 Harness home 下的
rollback目录。 - maxRecords: 内存中记录的上限,默认 200。超出时丢弃最旧的记录。
- gitPath: Git 可执行文件路径,默认为
git。 - notifyModel: 布尔值。手动回滚时是否通知模型(默认通知)。
捕获范围与限制¶
- 可捕获:
write/edit(需结果带before字段)、bash/run_code(需工作区为 git 仓库)。 - 不可捕获:
str_replace_editor、非 git 仓库下的bash调用、原始 subprocess。 - 作用域: 回滚仅限于调用 session 的当前工作目录。
结语¶
dsh-rollback 是一个轻量级的安全网,通过 git 或 snapshot 存储变更前的状态,允许在智能体运行过程中安全地撤销错误操作。所有代码遵循 MIT 许可证,可在 GitHub 上查看源码。