Skip to content

回放模式

在一个用完即弃的沙箱中,逐步重新执行一个会话的文件写入、编辑和 shell 命令——确定性地进行,回路中没有 AI,你真正的项目也绝不会被触碰。

回放模式(Replay Mode,⌘4)回答"这个会话到底对代码做了什么?",方法是把 AI 运行过的具体操作——WriteEditBash 步骤——重新回放到一个从你的 Git 历史播种而来的隔离工作区中。这里没有 LLM 调用:Chronicle 已经把每一个操作都记录在了对话记录里,因此回放只是按顺序把它们应用一遍。这使它既具确定性又安全——你可以看着一个改动逐渐成形,在每处差异落地之前检视它,并在你的编辑器中打开完成后的沙箱,而这一切都不会向你的项目写入哪怕一个字节。

沙箱

每次回放都在它自己的目录 ~/.chronicle/replay/<id>/ 下运行。当你启动一次回放时,Chronicle 会:

  1. 清空并重新创建那个沙箱目录。
  2. 找到会话开始时间处或之前的那次 Git 提交,并把那棵树物化到沙箱中(通过 git archive <commit> | tar -x)。这就是会话开始时代码的样子。
  3. 在那份播种之上回放会话的操作。

播种提交会显示为一个 ⎇ seeded @ <hash> 标签。如果项目不是 Git 仓库(或会话早于全部历史记录),沙箱就直接从空开始。无论哪种情况,你真正的项目目录都绝不会被修改——回放永远只在 ~/.chronicle/replay/<id>/ 内部写入。

本地优先: 回放从你的 Git 历史和被记录的操作中重建状态,而不是从你工作树的实时副本。Git 是真相来源;沙箱是用完即弃的。

逐步执行

左栏按顺序列出提取出的各个步骤(📄 写入、✏️ 编辑、$ 命令)。选中一个步骤后,右侧会显示:

  • 此步骤之前的 AI 推理 —— 紧接在该操作之前的助手/思考文本,让你知道它为什么会发生。
  • 即将到来的差异预览 —— 该改动相对于沙箱当前状态计算得出的结果。写入和编辑会渲染为行差异(新文件、新增行、删除行);命令则渲染为那条会运行的 $ command

每个步骤给你三种动作:

  • Execute This Step —— 把写入或编辑应用到沙箱。
  • Skip —— 不应用而直接前进(当某个步骤指向项目之外的内容时很有用)。
  • Look Back —— 退到上一个操作以重新检视它。

由于编辑是作为精确的 old_string → new_string 替换来应用的,一个 old_string 已不再匹配沙箱文件的编辑(例如,因为你跳过了它所依赖的某个早先步骤)会被标记出来,而不是被无声地误用——你可以选择 Skip 它,或者去执行缺失的前置条件再 Retry。

Shell 命令始终会先征询

写入和编辑步骤一点击就会应用。Shell 命令绝不会——每一个 Bash 步骤都需要一次显式的、逐步的确认(按钮以警告样式呈现,⚠ Execute command)。已确认的命令会以沙箱作为其工作目录运行,并带有一个软约束的、指向沙箱的 HOME,同时有时间限制和被捕获的输出。这能把一条走神的 rm 或构建命令限定在用完即弃的工作区里,而不是波及你的机器。

自动播放

自动播放会以 1x / 2x / 5x 的速度替你走完各个步骤。它被刻意设计得保守:

  • 它会在第一个错误处暂停,让你可以检视并 Retry,而不是在一个已损坏的状态上继续横冲直撞。
  • 它会跳过 shell 命令(它们始终需要手动确认)以及任何目标在项目之外的写入,并把它们标记为 skipped——它绝不会在这些步骤上硬性暂停。曾经自动播放卡在某条命令上时看起来像是坏了;改成跳过之后就能让它持续前进。

一条进度条会追踪已执行步骤与总步骤数之比。当运行完成时,你会得到一个 Replay complete 状态和一个 Open in Finder 动作,它会展示出完成后的沙箱,让你可以把它与你真正的项目做差异对比,或在编辑器中打开它。

如果一个会话不包含任何 Write/Edit/Bash 操作,Replay 会显示"Nothing to replay"状态——因为没有任何东西需要重建。

相关内容

  • 时间旅行 —— Playback 模式,以及那个同样为回放的播种提交提供动力的 Git 快照引擎。
  • 安全、实时与回放内部机制 —— server/replay.js 如何构建计划、为执行提供沙箱,以及约束 shell 命令。

Released under the MIT License.