前言¶
在 DeepSeek Harness (DSH) 的本地開發工作流中,Agent 可能會修改文件,這帶來了誤操作的風險。傳統的回滾方式(如手動 git checkout)缺乏預覽機制,容易造成代碼污染。dsh-tauri-turnrewind 插件通過自動爲 Agent 的每次改動建立私有 Git 快照,並實現兩階段的撤銷流程,解決了這一痛點。
這是什麼¶
這是一個本地 turn 回滾插件(TypeScript 重寫版,位於 packages/,遵循 workspace 插件規範)。它爲 Agent 領取的每個 turn 自動建立私有快照,並將快照映射記錄到賬本中。通過 /undo 命令,用戶可以預覽紅綠 diff,確認後再將文件回滾到 turn 開始前的狀態。
核心能力¶
- 自動私有快照:每次 Agent 改動自動建私有快照。
- 兩階段撤銷流程:先出預覽卡(紅綠 diff +
+x -y徽標),卡內確認執行或取消。計劃 5 分鐘過期,過期與取消只鎖執行、不抹賬本記錄。 - 衝突檢測與處理:預覽後文件又被改動(衝突)會拒絕覆蓋並提示重新預覽。支持
--skip-conflicts跳過沖突文件,或--force強制覆蓋。 - 工作區資格守衛:會話 cwd 必須位於 Git worktree,非 Git 目錄禁用(turn 記爲 skipped)。
- 自愈與診斷:快照鏈自愈(私有 repo 被刪/損壞後自動降級重建),支持
--doctor進行只讀診斷(git 可用性、快照倉庫健康等)。 - 異步模型:快照、diff、恢復走異步 git 子進程,不阻塞 Host 事件循環。
使用方法¶
在已加載本插件的 DSH 會話中:
- 基礎撤銷:
默認進入兩階段流程:先輸出預覽卡,卡內確認執行或取消。
/undo
- 指定 turn ID:
指定完整 turn ID 進行撤銷。
/undo <session-id>:<turn-number>
- 查看計劃(不執行):
僅輸出文件清單與分類,不含 diff。
/undo --dry-run
/undo --preview
- 處理衝突:
確認時二次校驗磁盤,若預覽後文件又被改動,可選擇策略:
/undo --skip-conflicts # 只恢復無衝突文件
/undo --force # 強制覆蓋衝突文件
- 其他操作:
/undo --cancel <plan-id> # 取消一個待確認的預覽計劃
/undo --doctor # 只讀診斷報告(不能與其他選項組合)
注意與約束¶
- 實驗性質:定位仍是實驗功能,恢復路徑直接使用 Node/Git,尚未接入受控的宿主 sandbox/Tauri bridge。
- Git 目錄模式:工作區必須位於 Git worktree,非 Git 目錄禁用(turn 記爲 skipped,原因
TURNREWIND_GIT_REQUIRED)。 - 不修改歷史:不修改用戶項目的 HEAD、分支、index、stash 或提交歷史。
- 範圍限制:只處理當前 session 綁定的 workspace 內文件,workspace 外的文件不捕獲也不 Undo。
- 性能與限制:單文件快照/恢復上限爲 64 MB;大工作區不再做預算預掃描,快照耗時與磁盤佔用隨倉庫規模增長。
總結¶
dsh-tauri-turnrewind 提供了本地層面的快照與回滾能力,通過兩階段確認機制降低了 Agent 改動帶來的風險。目前該插件隨桌面版打包,安裝後無需手動配置即可使用。更多詳情與源碼,請訪問 GitHub。