Skip to content

fix(sync): 修复 Prime Agent 导致快照同步失败 - #72

Open
liuweifeng wants to merge 1 commit into
cclank:mainfrom
liuweifeng:codex/fix-prime-agent-sync
Open

fix(sync): 修复 Prime Agent 导致快照同步失败#72
liuweifeng wants to merge 1 commit into
cclank:mainfrom
liuweifeng:codex/fix-prime-agent-sync

Conversation

@liuweifeng

Copy link
Copy Markdown
Contributor

背景

PR #52 合入 Prime Agent 后,只要本机出现 Prime Agent 用量,usage.30s.py --json 就可能出现“JSON 已输出,但进程退出码为 1”的情况。

原因在同步快照的 Wrapped 汇总路径:Prime Agent 汇总块先执行 total_tokens += toktotal_cost += ...,而这两个变量要到所有工具汇总、账本合并完成后才初始化。普通用量计算因此看起来正常,但写同步快照时会触发 UnboundLocalError,快照写入根本还没开始。

这个问题在没有 Prime Agent 日志时不会出现,所以直到实际产生 Prime Agent 用量才暴露出来。它会让本机同步任务失败,并且让日志里的 json: ok 变得容易误导排查。

本次改动

  • 移除 Wrapped 汇总中初始化之前的总量累加。
  • 将 Prime Agent 成本写入逐日成本桶,避免总成本在统一汇总时丢失。
  • scan_prime_agent 接入 ledger_touch("prime_agent")ledger_reconcile("prime_agent", live_days)
  • 按日期构建 Prime Agent 的实时账本数据,保留模型、小时、session 和项目字段。
  • 日志被清理后,从账本恢复 Prime Agent 的历史 token、成本、session 和项目数据。
  • 清理 PR feat(prime-agent): add token usage tracking #52 合并 README 时留下的重复介绍、重复 Qoder 条目和错误日志路径。
  • 增加 Prime Agent 账本恢复与 Wrapped 汇总回归测试。

关键设计

Prime Agent 仍然沿用原来的物理 session 去重和 child_usage_attributed 排除规则。这次只是把已经去重后的每日结果接到账本,不重新扫描或重复累计数据。

账本按天保存高水位。现存日志的当天数据与账本对账时取较新的完整日结果,日志整天消失后才使用账本回退;不会把实时值和账本值相加。这样既能保留日志清理前的历史,也能让账本随已有的 _ledger 快照机制参与多设备同步。

用户影响

修复后,有 Prime Agent 用量的设备可以正常完成同步快照写入。没有 Prime Agent 用量的设备行为不变。

本 PR 不包含 DMG 打包、安装包发布或本机 App 更新。

安全与隐私

  • 仍然只读取本地 Prime Agent JSONL。
  • 没有新增网络请求、凭据读取或外部进程。
  • 账本只保存已有的每日统计字段,不保存对话正文。
  • 测试使用临时目录和合成 JSONL,不包含真实用户日志。

兼容性

  • Prime Agent 的 usage 数据结构没有改变。
  • 账本沿用现有版本和同步快照格式。
  • 没有改变旧设备快照的读取方式。
  • README 文案与当前 19 个工具的代码和数据路径保持一致。

验证

以下命令均在 macOS 本地执行:

python3 -m py_compile usage.30s.py
python3 -m unittest discover -s tests
swift build

结果:

  • Python 全量测试 211/211 通过。
  • py_compile 通过。
  • swift build 通过。
  • git diff --check 通过。
  • 使用当前本机真实 Prime Agent 缓存做了不落盘探针:扫描到 64,512 tokens,账本生成 1 个日期,alltodayweek 汇总均正常。

Swift 构建仍会报告仓库原有的未声明资源 warning;没有新增编译错误。

已知限制

  • 当前 PR 没有重新生成 DMG,也没有更新任何已安装的 Tokei.app。
  • 项目足迹页面仍主要依赖现存 session 缓存;本次 follow-up 的持久化范围是每日统计和同步快照。

检查清单

  • 修复 Prime Agent 导致同步快照失败的问题
  • 接入 Prime Agent 持久账本
  • 增加日志清理后的恢复测试
  • 清理 PR feat(prime-agent): add token usage tracking #52 合并留下的 README 重复文案
  • Python 测试通过
  • Swift 构建通过
  • 未修改 DMG 或已安装 App
  • 未包含真实日志、凭据或对话内容

PR cclank#52 合并后,Prime Agent 汇总仍在总量初始化前执行累加,已有 Prime Agent 日志时会让同步脚本退出。与此同时,该采集器未接入持久账本,日志清理后历史也会丢失。

Co-authored-by: Codex <noreply@openai.com>
@liuweifeng

Copy link
Copy Markdown
Contributor Author

@cclank 这次问题我建议优先处理一下。

它不是所有用户都会遇到,但只要设备产生了 Prime Agent 用量,同步任务就会在写快照前失败。普通 JSON 仍然能输出,所以日志看起来像“采集成功”,实际进程已经以 1 退出,新的设备快照也不会生成。未使用 Prime Agent 的设备不受影响;我也没有发现已有快照会被覆盖或 token 被重复累计。

根因是 #52 合并后,Prime Agent Wrapped 汇总仍在 total_tokens / total_cost 初始化之前累加。这个 PR 同时补上了你之前提到的 follow-up:scan_prime_agent 接入 ledger_touch / ledger_reconcile,日志清理后还能从账本恢复每日统计,并继续通过 _ledger 参与多设备同步。

我在本地用真实 Prime Agent 缓存复现并验证了修复:64,512 tokens 可以正常生成 alltodayweek 汇总;Python 全量测试 211/211 通过,swift build 也通过。README 里合并冲突留下的重复介绍、重复 Qoder 条目和错误路径也一起清理了。

PR:#72。CI 通过后如果没有其他意见,麻烦尽快合并。这个 PR 不包含 DMG 打包或已安装 App 更新。

@liuweifeng
liuweifeng marked this pull request as ready for review August 26, 2026 15:20
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.

1 participant