跳转到内容

Codex 子代理 Token 统计遗漏与偏低 - CC Switch Fix

Quick fix

升级至最新代码后,解析器将改用 payload.id 生成唯一请求 ID 替代 session_id,彻底解决 INSERT OR IGNORE 导致的静默丢弃问题,使子代理用量准确入库。

报错原文
CC Switch 能发现并解析子代理 JSONL 文件,但大部分子代理使用量没有成功写入数据库。因此,统计页面主要显示父线程的使用量,导致 Codex Token 和费用统计偏低。

新版 Codex 的子代理日志在 session_meta 事件中同时包含 payload.id(当前线程唯一标识)与 payload.session_id(所属父线程 ID)。现有同步逻辑错误地优先使用 session_id 拼接请求 ID(格式为 codex_session:{session_id}:{event_index})。由于每个 JSONL 文件的 event_index 均从 1 开始,同一父线程下的主线程与所有子代理会生成完全相同的请求 ID。

数据库插入操作使用了 INSERT OR IGNORE,遇到重复 ID 时会静默丢弃后续记录。更严重的是,同步游标仍会正常前移,导致这些被丢弃的历史记录无法通过重新同步恢复。此外,部分启动事件会重放父线程累计的 total_token_usage,若未正确过滤基线快照,还会造成重复统计。

  1. 将 cc-switch 更新至已合并修复的 main 分支或后续正式版本,以启用基于 payload.id 的唯一 ID 生成逻辑。

ToolCodex
Version3.16.5
PlatformsWindows
咋解决的?
该问题属于底层解析逻辑缺陷,已通过更新 cc-switch 代码修复。请将工具更新至包含该修复的版本即可恢复正常统计。
为什么升级后之前的统计缺口不会自动补全?
因为同步游标在发生 ID 冲突时已经前移,系统认为那些记录已处理过。必须手动触发针对旧 JSONL 文件的定向重建同步才能找回丢失的数据。

这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。