dsh-rewind:目錄操作的回滾工具

智能體在開發過程中會對工作目錄進行破壞性改動。git checkout . 無法處理未提交的更改或非倉庫目錄,這正是智能體操作最常出現的窗口。dsh-rewind 通過內容尋址快照和可撤銷的撤銷命令,爲任意目錄提供“時間旅行”能力。

這是什麼

dsh-rewind 是一個 DSH 插件,由 liyixuan201211 維護。它不依賴 git,能夠捕獲未提交的更改、從未被跟蹤的文件以及非倉庫目錄的狀態,並提供一鍵回滾和可撤銷的撤銷機制。

安裝與啓用

在 DSH 環境中安裝該插件:

dsh plugin --profile web add github:liyixuan201211/dsh-rewind

安裝後,可在任何目錄下使用 rewind 命令。

核心功能

  1. 內容尋址快照:對任意文件夾進行快照,文件內容通過 SHA256 哈希尋址,支持最多 8 MiB 的文件。
  2. 可撤銷的撤銷:undo 命令在執行前會先保存當前狀態,因此撤銷操作本身也可以被再次撤銷。
  3. 通用目錄支持:同時支持 git 和非 git 目錄。
  4. 命令包裝器:rewind exec 用於包裹批量文件修改命令,在前後自動進行快照。
  5. 監控模式:rewind watch 提供保護機制,通過防抖動和內容校驗,適合長會話。
  6. 安全屬性:確保原子寫入、寫入前內容驗證、非遞歸刪除以及僅追加日誌。

典型用法

創建快照

在執行可能破壞性的操作前,創建一個標記:

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 倉庫。

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

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

小夜