前言¶
在使用 DeepSeek Harness (DSH) 进行编程时,智能体会在工作区中持续编辑文件。如果对话进行到中间,智能体走了弯路,想要回退到之前的某个状态,现有的 DSH 机制通常无法满足:会话日志是追加式的,无法回滚;而用户的本地 Git 仓库可能处于未提交状态,或者根本没有初始化。直接执行 git checkout 会丢弃当前所有未提交的修改,导致有效工作丢失。
DeepSeek Harness Rewind 插件旨在解决这一痛点。它通过在插件自己的影子仓库中保存快照,为每次对话回合提供“时间旅行”能力,让你能够随时将工作区恢复到之前的任意状态,且完全不会触碰你自己的 Git 仓库。
插件定位¶
这是一个 DeepSeek Harness (DSH) 插件。它的核心职责是自动保存工作区快照,并允许将文件系统恢复到历史任意点。插件维护者为 zoyluoblue,许可证为 MIT。
安装与启用¶
安装该插件需要在终端中执行以下命令。该命令会将其作为一个插件添加到你的 DSH 配置中。
npx -y @deepseek-ai/dsh plugin --profile web add @zoytown/dsh-rewind
安装完成后,需要重启 dsh 进程。重启后,在设置页面的侧边栏会出现一个 Rewind 入口。
前置条件:机器上必须安装 git。如果没有安装 git,插件会报告快照功能暂停,但其他功能不受影响。
基本用法¶
插件提供了命令行界面和图形界面两种方式来管理快照。
命令行操作¶
以下命令由 DSH 本地处理,不消耗 Token,也不会发送给模型。
| 命令 | 功能说明 |
|---|---|
/rewind |
恢复上一回合的状态 |
/rewind 3 |
恢复第 3 回合结束时的状态 |
/rewind a1b2c3d4 |
通过 ID 恢复快照(ID 为 4 个以上字符的唯一前缀) |
/rewind list |
列出当前工作区的所有快照 |
/rewind save |
在对话回合之外手动保存当前状态 |
注意:恢复操作会打印出它覆盖的快照 ID,你可以使用该 ID 再次执行恢复命令来撤销这次回退操作。
图形界面操作¶
进入 Settings(设置) -> Rewind(回退)页面。列表会按时间倒序列出所有快照,显示每个快照改变了哪些文件以及运行了哪些工具。点击 Restore(恢复)按钮进行恢复,系统会弹出确认对话框,明确告知哪些新文件将被删除。
工作原理与配置¶
存储机制¶
插件不会修改你本地的 .git 仓库。所有快照都存储在 $DSH_HOME/rewind/ 目录下的一个影子仓库中。这意味着即使你的项目目录不是 Git 仓库,或者没有配置 .gitignore,插件也能正常工作,并提供与 Git 仓库相同的保护级别。
文件过滤¶
插件严格尊重 .gitignore 配置。被忽略的文件(如 .env、node_modules、构建输出等)既不会被保存,也不会被恢复。这有助于保持快照仓库的体积,并确保恢复后这些文件保持原样。
可逆性¶
每次恢复操作都是可逆的。插件会在覆盖文件之前先保存被覆盖的状态,因此如果你想撤销一次错误的恢复,只需再次恢复上一个状态即可。
代理访问控制¶
默认情况下,插件对智能体是关闭的。你可以在配置文件中设置 exposeTool 来控制智能体是否可以使用回退功能。
'off':默认值,回退功能仅限人类操作。'read-only':允许智能体查看历史列表(rewind_list),但不能恢复文件。'full':允许智能体恢复工作区文件(rewind_restore)。
清理与维护¶
快照数据独立于插件本身存在。如果你想释放磁盘空间,可以直接删除 $DSH_HOME/rewind/ 目录。
插件会自动清理旧会话。默认保留天数为 30,即如果会话中最新的快照超过 30 天未更新,该会话将被自动丢弃。此外,.git 目录本身始终被排除在快照之外。