前言¶
DeepSeek Harness (DSH) 的核心设计理念之一是「一切皆插件」。在智能体长会话中,频繁的文件重写容易导致状态不可控。当某个回合出现错误时,开发者通常需要手动执行 git 命令来回滚,或者直接丢失开发轨迹。dsh-turnsnap 旨在解决这一问题,它通过监听 DSH 的事件流,将每个完成的智能体回合自动转化为一个可回滚的 Git 检查点。
安装¶
该插件无需额外配置,安装即用。
dsh plugin --profile <your-profile> add dsh-turnsnap
安装完成后,插件会热重载并在当前配置文件下的所有 Git 工作区会话中生效。
工作原理¶
插件监听 Harness 的 agent/turn-stopping 事件。当事件触发时,系统会检查会话工作区(agent.session.header.cwd):
1. 如果目录不是 Git 仓库,或工作树干净(无未提交更改),则跳过。
2. 否则,运行 git add -A 暂存所有更改,并创建一个带有 [turnsnap] 标签的提交。
3. 提交信息格式固定为:[turnsnap] turn N · M files · HH:MM:SS。
为了防止并发冲突,插件内部使用了一个序列化队列来处理检查点生成。Git 命令通过 Harness 的 shell service 运行,确保权限隔离。
工具¶
提供了三个工具,用于在会话中控制检查点行为:
| 工具名 | 效果 |
|---|---|
turnsnap_pause |
暂停自动提交,直到调用恢复命令 |
turnsnap_resume |
恢复自动提交 |
turnsnap_status |
报告插件启用状态、计数器及最后一次提交信息 |
你可以在会话中让模型说出 “pause turnsnap”,或者在脚本中直接调用上述工具。
注意事项¶
- 已暂存更改:
git add -A会将已暂存但未提交的更改合并到当前检查点中。如果你在回合边界保留了特定的暂存状态,请先调用turnsnap_pause。 - 忽略文件:
.gitignore的规则在add -A时依然生效,被忽略的文件不会被提交。 - Pre-commit Hooks:检查点提交使用
--no-verify标志,不会运行本地的 pre-commit hooks。 - 并发限制:每个仓库每个回合只生成一个检查点。当子代理与父会话共享工作区时,它们会生成同一个提交。