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 仓库。

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

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

小夜