dsh-tauri-turnrewind:Agent 改動自動快照與一鍵回滾

前言

在 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 會話中:

  1. 基礎撤銷:
    默認進入兩階段流程:先輸出預覽卡,卡內確認執行或取消。
    /undo
  1. 指定 turn ID:
    指定完整 turn ID 進行撤銷。
    /undo <session-id>:<turn-number>
  1. 查看計劃(不執行):
    僅輸出文件清單與分類,不含 diff。
    /undo --dry-run
    /undo --preview
  1. 處理衝突:
    確認時二次校驗磁盤,若預覽後文件又被改動,可選擇策略:
    /undo --skip-conflicts   # 只恢復無衝突文件
    /undo --force            # 強制覆蓋衝突文件
  1. 其他操作:
    /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。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜