前言¶
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。 - 併發限制:每個倉庫每個回合只生成一個檢查點。當子代理與父會話共享工作區時,它們會生成同一個提交。