
Rewind 的会话与文件恢复边界
编写于 2026-08-13
一次跨文件重构走错了方向,用户希望回到修改前的那条输入。双击 Esc 可以打开 Rewind 候选,TUI 还会在执行前列出识别到的文件变化,但这个动作覆盖的状态有明确范围。
Rewind 会截断选中用户消息及其后的会话,并对这段历史里的 Write 与 Edit 文件操作执行最佳努力恢复。Bash、数据库、网络服务和其他工具产生的副作用不在通用恢复范围内。
候选只来自用户消息
双击 Esc 后,TUI 会向当前会话查询可回退的用户消息,并把较新的候选排在前面。选择一条消息后,执行结果会保留它之前的历史,选中消息本身及之后的回复、工具调用和后续交互都会被移除。
这个边界比撤回最后一条回复更大。若选中较早的用户输入,中间几轮已经确认的讨论也会一起退出当前会话,因此应先阅读候选预览,再确认目标是否正确。
文件预算在执行前展示
选中候选并按 Enter 后,TUI 会先查询 文件恢复预算,也就是这段会话历史中能识别出的 Write 与 Edit 变化。预算非空时,弹窗列出文件路径与操作类型,再次按 Enter 才会执行。
预算为空时,TUI 会直接进入执行。空预算只表示没有识别到可恢复的 Write 或 Edit,不表示这段任务没有运行 Shell、访问数据库或调用外部服务。下面的输入输出是演示示例,不是真实会话。
候选把配置加载器改成异步,并更新目标测试
文件恢复预算[edit] src/config.rs[write] tests/config_async.rs这个预算能支持用户检查两个文件操作。它没有列出迁移命令或外部 API 调用,用户必须从工具时间线和目标系统另行核对这些副作用。
Write 与 Edit 使用不同恢复方式
TUI 执行 Rewind 时会明确请求文件恢复。服务端从被截断历史中提取 Write 与 Edit 调用,并按相反顺序处理,尽量撤销较新的变化后再处理较早的变化。
Edit 只在当前文件仍包含当时写入的新文本片段时替换回旧文本。文件已被其他操作继续修改、文本重复或目标片段消失时,恢复可能跳过并产生警告。
Write 会先尝试删除目标文件,再尝试从 Git HEAD 恢复原有版本。新建且未跟踪的文件通常只需要删除,原本存在的文件则依赖 Git 记录,因此未提交修改不能被假定为无损保留。
会话截断与文件恢复可能部分成功
Rewind 会从持久化会话中删除被截断的消息,并把保留历史送回 TUI。持久化删除失败或单个文件恢复失败会记录警告,不能把弹窗关闭当作所有状态都已恢复。
执行完成后,TUI 会把被撤回的用户文本放回输入框,方便修改后重新提交。回填只提供下一次输入的起点,不证明工作区、进程或外部系统已经回到同一时间点。
外部副作用需要独立恢复
Bash 可以启动子进程、修改没有经过 Write 或 Edit 记录的文件,也可以执行 Git、数据库和部署命令。MCP 工具与网络请求还可能改变远端系统,这些结果都需要按各自事实源检查和恢复。
执行 Rewind 后,先看 Git diff 与未跟踪文件,再检查相关进程、数据库迁移状态和远端操作记录。涉及不可逆变化时,应在执行前使用版本控制、备份或目标系统自己的回滚机制。
回退完成后重新建立证据
回到走错方向的重构任务,Rewind 可以整理会话并尝试恢复两类文件编辑。真正继续工作前仍要重新运行目标测试、检查 diff,并确认外部副作用没有被遗漏。
继续阅读 会话管理 和 RCRA 的中断恢复逻辑。高风险工具操作还应参考 凭据与权限。