Skip to content

时间旅行

Chronicle 的标志性功能:点击会话中的任意一条消息,即可看到代码在那一刻的确切样貌——它由 Git 历史重建而来。

回放(Playback)模式正是"时间机器"这个名字名副其实之处。你不再是滚动浏览一份扁平的对话记录,而是在会话中穿行,看着代码库随之在下方发生变化。这里没有独立的快照存储,也不依赖你当前的工作树——Chronicle 会把每条消息的时间戳与你的 Git 历史相匹配,并据此重建整个文件树和文件内容。Git 是代码状态的唯一真相来源。

回放布局

打开一个会话,切换到 Playback(左侧栏,或按 ⌘2)。这是一个三栏视图:

  • 对话列表(左)。 每一条消息都按角色分类——User、Assistant、Thinking、Tool Call、Tool Result——使用与应用其余部分一致的、准确对应角色的标签。点击一条消息即可选中它。较长的消息会截断,并提供"Show all"切换按钮;在超大会话中,Chronicle 会围绕你的选中项渲染约 400 行的窗口(配有"earlier / later messages"按钮),让滚动保持流畅。
  • 代码快照(中)。 所选消息那一刻的文件树和文件内容。
  • TimberLine(底部)。 用于拖动定位的整个会话时间线。

选中一条消息会同时驱动其他两个面板。

快照是如何解析出来的

当你点击一条消息时,Chronicle 会取出它的时间戳,并向 Git 请求该时间点或之前最近的一次提交server/git.js 中的 commitAt(),它运行 git rev-list -1 --before)。这次提交便成为快照:

  • 文件树是该提交处的 git ls-tree
  • 选中某个文件后,会通过 git show <commit>:<file> 显示它的内容。
  • 在该提交中被改动过的文件会在树中显示一个绿点,并且第一个会被自动选中,让你直接落到 AI 当时实际改动的地方。

如果某条消息早于全部历史记录,Chronicle 会回退到最早的一次提交,并给它标上**"before first commit"**徽章,这样你就知道自己看到的是最早可用的状态,而不是一次精确匹配。

注意: 快照是重建出来的历史,而不是你当前的磁盘内容。你看到的是文件在那次提交时的样子——不是你此刻工作树里的内容,也不是某个未提交的中间状态。

差异视图

D(或代码工具栏中的 ± Diff 按钮)来切换差异视图。它会将所选文件与其前一个已提交版本进行比较,并内联渲染新增/删除的行。大段未改动的行会被压缩为几行上下文(配有"··· N unchanged lines ···"标记),让真正的改动更加醒目。如果该文件在此快照处并未实际改动,Chronicle 会明确告诉你,而不是显示一份空的差异。

TimberLine

TimberLine 是把对话时间与代码时间联系起来的拖动条。它的标记:

  • 蓝点——用户消息
  • 绿方块——Git 提交
  • 灰刻度——AI 和工具事件

与它交互:

  • 点击或拖动任意位置进行定位。Chronicle 会吸附到最近的消息,并更新快照以匹配。
  • 悬停可查看光标下方的时间戳。
  • 当时间线获得焦点时: / 将光标微调 1%,Home / End 跳到会话的开头或结尾。

在超大会话中,时间线会对 AI/工具刻度做抽稀(降到约 600 个)以保持清晰——但提交总是会被渲染,因为它们是让时间旅行得以运作的锚点。

Git 前置条件与保真度

时间旅行需要一个带有提交的 Git 仓库。如果项目不是仓库(或没有任何提交),代码面板会显示"No Git history"的空状态,并说明对话回放仍然可用——只是没有快照而已。项目的 Git 标签和标题会让你一眼看清仓库状态(参见 项目管理)。

保真度随提交频率而变化:Chronicle 只能在你的历史确实记录的时间点上重建代码,因此一个频繁提交的项目会让回放更紧凑、更准确,而一个只有寥寥几次大提交的项目则不然。要了解快照引擎的完整工作方式——提交匹配、文件树/文件解析、合并提交处理——请参见 Git 快照引擎

相关内容

  • 快速上手 —— 抵达你第一个快照的最快路径。
  • 搜索与过滤 —— 在拖动定位之前,把一个漫长的会话缩小到真正重要的那些消息。
  • Git 快照引擎 —— Chronicle 如何通过 rev-list / ls-tree / show 从 Git 重建代码。

Released under the MIT License.