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。

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

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

小夜