智能體在開發過程中會對工作目錄進行破壞性改動。git checkout . 無法處理未提交的更改或非倉庫目錄,這正是智能體操作最常出現的窗口。dsh-rewind 通過內容尋址快照和可撤銷的撤銷命令,爲任意目錄提供“時間旅行”能力。
這是什麼¶
dsh-rewind 是一個 DSH 插件,由 liyixuan201211 維護。它不依賴 git,能夠捕獲未提交的更改、從未被跟蹤的文件以及非倉庫目錄的狀態,並提供一鍵回滾和可撤銷的撤銷機制。
安裝與啓用¶
在 DSH 環境中安裝該插件:
dsh plugin --profile web add github:liyixuan201211/dsh-rewind
安裝後,可在任何目錄下使用 rewind 命令。
核心功能¶
- 內容尋址快照:對任意文件夾進行快照,文件內容通過 SHA256 哈希尋址,支持最多 8 MiB 的文件。
- 可撤銷的撤銷:
undo命令在執行前會先保存當前狀態,因此撤銷操作本身也可以被再次撤銷。 - 通用目錄支持:同時支持 git 和非 git 目錄。
- 命令包裝器:
rewind exec用於包裹批量文件修改命令,在前後自動進行快照。 - 監控模式:
rewind watch提供保護機制,通過防抖動和內容校驗,適合長會話。 - 安全屬性:確保原子寫入、寫入前內容驗證、非遞歸刪除以及僅追加日誌。
典型用法¶
創建快照¶
在執行可能破壞性的操作前,創建一個標記:
rewind snap --label "before the refactor"
撤銷操作¶
undo 命令默認處於“計劃模式”,不直接修改文件,僅打印操作計劃:
rewind undo
若要執行撤銷,必須顯式指定 --yes:
rewind undo --yes
批量修改與回滾¶
使用 rewind exec 包裝代碼轉換或構建命令:
rewind exec -- npx jscodeshift -t transform.js src/
長會話保護¶
啓動監控模式,設置 2 秒防抖:
rewind watch --debounce 2000
存儲位置與排除項¶
快照數據存儲在項目根目錄的 <root>/.rewind/ 下,包含元數據、日誌和對象文件。默認排除 .git、node_modules、.venv、__pycache__、dist、build、target 等路徑。若路徑未被捕獲,插件將拒絕刪除該路徑,以確保撤銷的安全性。
退出碼契約¶
插件通過退出碼定義操作狀態:
| 代碼 | 含義 |
|---|---|
| 0 | 操作正常 |
| 1 | 應用時出錯,部分路徑可能未恢復 |
| 2 | 用法錯誤 |
| 3 | status:樹結構與上一次快照不同 |
| 4 | undo:計劃已生成,但未執行(未加 --yes) |
| 5 | 拒絕:遇到不安全路徑或未捕獲的內容 |
| 6 | 無操作(未加 --yes 且無變更) |
結語¶
dsh-rewind 爲智能體開發提供了一個可靠的“後悔藥”。它通過內容尋址和嚴格的安全屬性,確保了目錄狀態的可逆性。更多細節可參考插件目錄頁或GitHub 倉庫。