Skip to content

fix(token-usage): 修复 Pi 会话 token 入账 - #718

Merged
deepcoldy merged 1 commit into
deepcoldy:masterfrom
Justin1989:wt/claude-botmux-usage-pi-cli-token
Aug 3, 2026
Merged

fix(token-usage): 修复 Pi 会话 token 入账#718
deepcoldy merged 1 commit into
deepcoldy:masterfrom
Justin1989:wt/claude-botmux-usage-pi-cli-token

Conversation

@Justin1989

Copy link
Copy Markdown
Contributor

Summary

  • 为 Pi session 接入 transcript resolver,并通过独立 dialect 读取 assistant message 的 inputoutputcacheReadcacheWrite
  • 将 Pi usage 映射为 ledger 的未缓存输入、输出、缓存命中和缓存创建 bucket,避免影响其它 CLI 的 generic 解析。
  • 增加 Pi token usage 回归测试,并以真实 Pi 会话验证 ledger 已正常写入。

影响范围

  • 公共 usage resolver / calculator 新增 Pi 专用分支;Claude、Codex、CoCo 和 generic 分支未修改。
  • Pi session 的 Dashboard、流式卡和 usage ledger 从后续快照开始显示用量;历史未写入记录无法回补。

Test plan

  • pnpm vitest run test/cost-calculator.test.ts test/cost-calculator-cache.test.ts test/usage-ledger.test.ts(89/89)
  • pnpm build
  • pnpm switch:here && pnpm daemon:restart
  • 真实 Pi session 6ffe0522… 已写入两条 usage ledger 增量;累计值与 transcript 手工汇总一致
  • Codex 独立 review:可合入,无可复现问题

🤖 Generated with Claude Code

为 Pi transcript 建立独立解析路径,确保未缓存输入与缓存读写按账本语义累计。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
@Justin1989
Justin1989 requested a review from deepcoldy as a code owner August 3, 2026 12:12

@deepcoldy deepcoldy left a comment

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

复审结论:✅ Approve,无 blocker(仅提交 review,不合码)。

重点核对:

  1. Pi 的逐行求和语义正确。 当前安装的 @earendil-works/pi-ai@0.80.6 明确定义 input/output/cacheRead/cacheWrite 为互斥计量桶,totalTokens = input + output + cacheRead + cacheWrite;Pi 自己的 session stats 也是逐条 assistant message 累加这四项,不是累计快照取最后值。
  2. reasoning 不应额外入账。 Pi 的官方 Usage 类型注明 reasoning/thinking 是 output 的子集,output 已包含 reasoning。若现在再加到 output 或单独参与总量会双算;账本没有 reasoning 桶不影响准确性。
  3. 无 message.id 时增量读取仍不会重算。 本机 299 条真实 Pi assistant usage 记录的 id 全是 null;准确一次性依赖 scanJsonlFromOffset 的 durable offset。未换行尾记录只折进 preview clone,补换行后才进入 durable state。我额外构造了“无 id + pending tail → 补换行 → 再 append”实盘,三次读取结果保持 exact-once。
  4. 当前 master 集成安全。 PR 分支落后共同祖先 431 个提交,但 GitHub 判定 MERGEABLE,trial merge 无冲突;合并后的 cost-calculator 新字段也能自动兼容,Pi 仍只新增自己的 dialect 分支,Claude/Codex/CoCo/generic 路径未改变。

实际验证:

  • PR head 3e2322ac: pnpm build
  • pnpm vitest run --project unit test/cost-calculator.test.ts: 43/43 ✅
  • 真实 Pi transcript 端到端(151 条 assistant usage): parser=in 17,064,777 / out 48,360,与独立手算逐位一致 ✅
  • 无 id 增量/尾行用例: PASS ✅
  • 当前 master 7ef0e472 trial merge 后: pnpm build
  • 合并后 cost calculator + usage ledger + Dashboard token row: 88/88 ✅
  • PR 旧基线全量 unit: 9,812/9,815;仅 3 个既有时区断言失败(scheduler/schedule-card-model),与本 PR 文件和调用路径无关。

非 blocker 建议:以后可把“Pi id=null + 增量 pending-tail”手工用例固化成单测;当前新增单测使用了字符串 id,和真实 Pi 日志不完全一致,但实现已通过上述真实/增量验证。

@deepcoldy
deepcoldy merged commit d36a504 into deepcoldy:master Aug 3, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

🚀 Released in v3.9.0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants