Skip to content

会话洞察

Overview 标签页是一个会话的主页:时长、成本、令牌用量、工具/技能/MCP 分布,以及重命名或删除它的控件——全部由本地从日志计算得出。

每个会话都打开在 Overview⌘1)——一个仪表盘,它回答"这里发生了什么,代价是多少?",而无需你离开应用或去信任某个计费仪表盘。这个页面上的一切都是在你的机器上从导入的日志派生出来的:令牌计数来自日志,美元数字由一张静态价格表计算而来,而各种启发式规则(比如活跃时长和错误计数)与 Chronicle 别处使用的本地规则是同一套。这些数字背后没有任何 LLM 调用,也没有任何网络请求。

统计卡片

顶部有一排卡片:

  • Total Duration —— 从第一条消息到最后一条消息的挂钟时间跨度。
  • Agent Active —— 智能体真正在工作的时长。这一项值得好好理解。
  • MessagesTool CallsErrors —— 计数。Errors 是那些看起来像失败的工具结果(匹配 error/traceback/exit code/"permission denied" 的启发式规则)。
  • Context —— 最后一条消息时真实的上下文窗口大小(仅在被捕获时显示;见下文)。

Agent Active 与 Total Duration 的区别

Agent Active 会把相邻消息时间戳之间的间隔累加起来,但只排除你每次真实提问前的那段停顿——那段间隔是你在阅读、思考、输入(或离开),而不是智能体在工作。其余每一段间隔都会完整计入:助手的思考和工具执行都是智能体在工作,不设上限,所以一次 20 分钟的构建或一次长时间的思考都会体现出来。

一个值得了解的细节:并非每一条 user 角色的日志条目都是人类提问。 后台任务完成(比如一次构建结束)、应用内的元素选择、中断标记,以及其他系统注入的内容,都会带有 user 角色。Chronicle 不会把这些之前的停顿当作你的空闲时间——那时智能体正忙(比如在构建)或你正在与应用交互——所以它们会计入 Agent Active。只有真正键入的提问才会扣减时间。(早期版本把每一条 user 角色条目都当作一次人类回合,从而错误地把后台构建的等待算作了你的空闲时间。)

所以在一个跨越两天以上的会话里,Total Duration 可能显示"50h",而 Agent Active 显示的是智能体真正忙碌的小时数。这不是 bug,而正是它的用意所在。卡片上有一个 提示,会内联解释这一区别,因为这两个数字之间的差距常常让人意外。

成本与用量

日志携带的是令牌,而非美元——没有哪个 AI 工具会记录一个会话花了你多少钱。Chronicle 用与 Claude Code 的 /usage 相同的方式重现成本:它从日志中按模型聚合令牌总量,再乘以一张静态的标价表(src/models.js,运行时从不去联网获取)。

该面板会按模型拆分:

  • InputOutputCache ReadCache Write 的令牌总量——其中 Cache Write 拆分为 5m1h 两档 TTL,各带一个标签;
  • 一份按类别的美元拆分以及每个模型的小计;
  • 面板标题栏中的一个会话总计

一个对准确性很重要的细节:5 分钟和 1 小时的缓存写入是分开计价的。Claude Code 会对每一档缓存写入按不同费率计费,而一个会话可能完全属于其中某一档,因此 Chronicle 会把它们分开保存——在各自的 5m/1h 标签下分别显示每一档的令牌和美元——并正确求和(只有存在 1 小时写入时才会显示 1h 那一行)。未定价的模型(某些非 Claude 来源)会显示令牌计数,但成本处显示 ,而不是去猜。

注意: 这些是由令牌计数 × 当前标价得出的估算值,旨在与 /usage 保持一致。它们在本地计算,其时效性仅取决于 src/models.js 中的价格表——当 Anthropic 调整定价时,需要更新的就是那张表。

上下文窗口用量条

在成本与用量下方,有一条进度条显示真实令牌用量相对于模型上下文窗口的占比(取自一张静态的按模型表格)。它会随着接近上限而填充并变色——青色 → 黄色 → 红色——让你一眼就能看出一个会话跑得离天花板有多近。

这条进度条(以及 Context 统计卡片)只有在 Chronicle 捕获到 context_tokens 时才会出现,而这发生在导入时。如果你在导入某个会话之后才升级了 Chronicle,请重新导入或运行 Sync Update 来回填它;否则该会话会回退到 UI 别处使用的粗略 ~chars/4 估算值。

分布甜甜圈图

三张手工绘制的甜甜圈图展示了会话把它的工具预算花在了哪里:

  • Tool Distribution —— 按工具划分的调用(Bash、Write、Edit、Read、……),显示排名靠前的条目外加一个汇总的"other"。
  • Skill Distribution —— 按技能名称分组的 Skill 调用。
  • MCP Distribution —— 按服务器分组的 mcp__<server>__<tool> 调用。

在它们旁边,一份 Call TimelineCall Details 列出了实际的事件,并带有错误标记。

重命名与显示名称

在 Overview 标题处(✎ 按钮)可以就地重命名一个会话——这是一个原地编辑字段,而不是浏览器弹窗。你设置的名称是一个 Chronicle 本地的覆盖值,它会在重新导入后依然保留

你看到的标题遵循单一的优先级顺序,由 src/ProjectDetail.jsx 中的 sessionDisplayName() 一次性定义,并在各处复用(列表行、选择器、Overview 标题):

name (your Chronicle override)  →  summary (parsed title, e.g. Claude Code's /rename, last one wins)  →  first_prompt

把重命名字段留空即可重置为默认值(解析出的标题或首个提示词)。

危险区

在页面底部,一个 Source file 面板允许你删除会话,每个操作都带有两步式的内联确认:

  • Delete source file —— 从磁盘上移除原始日志;导入到 Chronicle 的副本仍然保留。
  • Delete everywhere —— 移除原始日志以及 Chronicle 中的副本。
  • Delete from Chronicle —— 仅移除导入的副本;原始日志仍然保留,可以重新导入。

按文件的源删除仅对那些一个文件等于一个会话的来源提供(Claude Code、Codex、Copilot)。Cursor 和 OpenCode 在多个会话之间共享单个数据库,因此它们的源文件永远不会按会话删除。当一个会话处于实时状态(其日志仍在被写入)时,删除功能会被禁用。

项目分析(精简版)

再往上缩放一层——到项目页面——你会得到跨你所选时间范围(Today / 7 / 30 / 365 天)的按项目分析:会话数、总时长与平均时长、活跃天数、消息数与工具调用数、错误率、一张来源分布甜甜圈图、一张调用排名条形图,以及一条每日会话数的活动折线图(折线或柱状)。它是同一批本地计算数据的轻量汇总,作用范围是整个项目而非单个会话。项目管理 涵盖了项目页面的其余部分——关联、同步以及 Git 标签。

相关内容

  • 项目管理 —— 项目页面、逻辑项目、同步与关联。
  • 配置 —— 数据库和捕获的数据存放在 ~/.chronicle/ 下的什么位置。

Released under the MIT License.