---
title: "Rewind 的会话与文件恢复边界"
description: "用 TUI 预览并执行 Rewind，理解会话截断、文件恢复和外部副作用的不同范围。"
---

> Documentation Index
> Fetch the complete documentation index at: https://konghayao.github.io/peri-cool/llms.txt
> Use this file to discover all available pages before exploring further.

# Rewind 的会话与文件恢复边界

一次跨文件重构走错了方向，用户希望回到修改前的那条输入。双击 Esc 可以打开 Rewind 候选，TUI 还会在执行前列出识别到的文件变化，但这个动作覆盖的状态有明确范围。

**Rewind** 会截断选中用户消息及其后的会话，并对这段历史里的 Write 与 Edit 文件操作执行最佳努力恢复。Bash、数据库、网络服务和其他工具产生的副作用不在通用恢复范围内。

## 候选只来自用户消息

双击 Esc 后，TUI 会向当前会话查询可回退的用户消息，并把较新的候选排在前面。选择一条消息后，执行结果会保留它之前的历史，选中消息本身及之后的回复、工具调用和后续交互都会被移除。

这个边界比撤回最后一条回复更大。若选中较早的用户输入，中间几轮已经确认的讨论也会一起退出当前会话，因此应先阅读候选预览，再确认目标是否正确。

## 文件预算在执行前展示

选中候选并按 Enter 后，TUI 会先查询 **文件恢复预算**，也就是这段会话历史中能识别出的 Write 与 Edit 变化。预算非空时，弹窗列出文件路径与操作类型，再次按 Enter 才会执行。

预算为空时，TUI 会直接进入执行。空预算只表示没有识别到可恢复的 Write 或 Edit，不表示这段任务没有运行 Shell、访问数据库或调用外部服务。下面的输入输出是演示示例，不是真实会话。

```text
候选
把配置加载器改成异步，并更新目标测试

文件恢复预算
[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，并确认外部副作用没有被遗漏。

继续阅读 [会话管理](/peri-cool/docs/guides/sessions/) 和 [RCRA 的中断恢复逻辑](/peri-cool/posts/engineering/rcra-interruption-recovery/)。高风险工具操作还应参考 [凭据与权限](/peri-cool/docs/security/secrets-and-permissions/)。

Source: https://konghayao.github.io/peri-cool/posts/product/rewind-boundaries/index.mdx
