WeHub internal · lightweight gate

Token 统计逻辑

输入团队约定的临时网站密码。这个前端密码只提供轻量摩擦,不等同于真正访问控制。

WeHub Token Monitor · accounting spec

Token 统计逻辑

这个子页面专门解释 /token/ 背后的采集、容错、口径与隐私边界。Codex direct / fork / prompt cache 台阶的专门说明见 Codex Direct 与缓存 Token。主页面只保留监控图和核心数字。

Generated: 2026-07-18T08:00:37+08:00
Latest sample: 2026-07-18T08:00:35+08:00

1. 统计对象

统计单位优先是 主机 runtime/root,不是飞书/Discord 的“扫码登录”。同一台主机可能有多个 Hermes profile、多个 OpenClaw agent root、以及 direct Codex session store。

2. 数据边界

只读取 token usage metadata:input/output/cache/reasoning/count/message/tool_call/cost 等字段。不读取 prompt、response、transcript 正文,不嵌入私密内容。

3. 失败语义

某台 Tailscale SSH 不通或 accounting quality 检查失败时,本轮仍保存诊断性 snapshot,但不会进入公开时间序列。有 error 的总量只是 lower bound,不能当全量。

当前公网主口径:9 台 core 主机

wehubghygongqiangongqian-minigongqian-airoracledgx1dgx2dustinstudio

低优先级 / opt-in only:redherring。历史 scope 会写入 JSONL,用于解释曲线口径变化。

主机与机器人 / agent 映射

wehub

  • Hermes: weshare, discoseed
  • OpenClaw: wehub, causaclaw

ghy

  • Hermes: ghy-avatar
  • OpenClaw: ghy-v1

gongqian

  • Hermes: gq, cjj
  • OpenClaw: ghy-source

gongqian-mini

  • OpenClaw: mini-base
  • Hermes: mini-host, mini-builder, mini-seeder, mini-reviewer, mini-runner, qyr

gongqian-air

  • OpenClaw: air-webase
  • Hermes: air-weship

oracle

  • OpenClaw: claw, garry_tan, lihongyi, 万sir

dgx1

  • OpenClaw: dgx1, wanweigang, we-health, james-avatar
  • Hermes: dgx1-host if token metadata exists

dgx2

  • OpenClaw: dgx2
  • Hermes: dgx2-host

dustinstudio

  • Hermes: amadeus, zy-ra
  • OpenClaw: amadeusAI, research-wehub, ghy-ra, lihongyi-ra, capital-wehub, ghy-capital, garry-tan-model, anj-midha-model, a16z-model

采集流程

  1. 定时任务运行 wehub_token_dashboard_refresh.sh
  2. collect_token_snapshot.py 调用 MVP collector,按 pinned host list 逐台 SSH。
  3. 远端只执行 metadata reporter:扫描 ~/.hermes* / Hermes profiles 的 state.db~/.openclaw* roots 的 usage metadata、~/.codex/sessions 的 direct Codex token metadata。
  4. Codex CLI token_count 是累计电表读数,不直接相加每个 rollout 的最终值。collector 以 filename 的 primary session id 保持身份边界,再按 parent fork 时刻做 exact suffix-prefix 匹配,减去 child JSONL 中继承/replay 的历史,只累计各 rollout 的日内正向增量。
  5. 跨午夜的 rollout 继续扫描:以当天零点前的最后累计状态为 baseline,把目标日内每个正向 delta 归入当天。
  6. 生成 snapshots.jsonl,再由 append_latest_total.py 写入单调校验后的 total_series.jsonl
  7. plot_total_series.py 生成曲线 PNG,generate_dashboard_html.py 生成主页面,随后部署到公网 origin。

Gross 与 non-cached 口径

重要教训:长线程不要无限 fork / resume 继续跑;同时,监控不能把 child rollout 复制的父线程 token history 当成新消耗。新版 collector 已按 lineage exact replay + daily delta 计数。详见 Codex Direct 与缓存 Token

Codex 日内增量怎么算

每个 rollout 的 token_count.total_token_usage 是累计电表,不是一次调用量。新版先剔除 child rollout 从 parent replay 的历史前缀,再按时间顺序计算:

本次增量 = 当前累计值 − 上一次累计值

当天 Codex gross = Σ 当天各 rollout 的有效正增量

零点前最后一个累计值只作为当天 baseline;同一个累计状态重复写入时增量为 0。计数器回退、父 rollout 缺失或 replay 无法证明时,本轮 fail closed,不把可疑值写入公开曲线。

为什么不一定等于 ChatGPT Profile

2026-07-16 同日核验:OpenAI 官方 bucket 为 778,480,181;本地完成 fork replay 去重后的 Codex gross 为 846,288,870。多出的 67,808,689 几乎全部来自 reasoning_output_tokens = 0 的 continuation / internal 类 token 事件;只看有 reasoning output 的调用为 778,363,147,与官方相差 117,034(约 0.015%)。这说明日内增量与 fork 去重基本正确,剩余差异主要是统计口径,而不是把累计值再次相加。

上述 reasoning 条件只是一次对账诊断,不作为生产公式。公网继续诚实展示本地 gross,并明确它不等于 Profile 或账单。

容错与部署逻辑

最新采集错误

最新样本没有采集错误。

如果这里出现主机或 accounting quality 错误,本轮是诊断性 partial snapshot,不会进入公开时间序列。

哪些不在当前统计里

这个 dashboard 是“本机可观测 agent token 消耗”,不是 provider/account 账单总额。ChatGPT 网页/App、未接入本地 metadata 的独立 CLI/IDE agent、供应商后台计费口径,都不自动进入这里。CausaClaw / DiscoSeed 作为 wehub 宿主上的正式 root/profile 进入 wehub 主机总量,并在快照中按 by_agent 给出 canonical agent 归属。