本地离线 token 用量统计工具 —— 解析 Claude Code / Kimi Code CLI 的本地会话记录、OpenAI Codex(GPT) 本地日志、千问(qwen) 本地用量日志,并导入 DeepSeek 平台 CSV 导出,按天 × 来源 × 项目 × 模型聚合,生成自包含 HTML 仪表盘。全程离线,用量数据不出本机。
- 多数据源统一口径:Claude Code / Kimi Code CLI 本地会话 + OpenAI Codex 本地日志 + 千问本地日志 + DeepSeek 平台导出 CSV,聚合同一套数据
- 自包含 HTML 仪表盘:内嵌 Chart.js,无网络依赖,单文件即开即用
- 趋势图六档时间段:近 7 天 / 近 30 天 / 近 90 天 / 上月 / 本月 / 全部(默认近 30 天),零值日期自动补齐,tooltip 隐藏零用量模型
- 全量 CSV 导出:
--csv-out输出天×来源×项目×模型粒度数据,与仪表盘同一次聚合 - CSV 补差去重:本地已有记录的天×模型按「官方总量 − 本地已计」补差导入,不重复计也不漏计
- 用量去重:Claude 日志同一 message.id 的重复 usage 只计首次(Kimi 侧按记录指纹),子代理(subagents/agent-N)用量单列来源计入
- 缓存加速:
.cache/增量解析,--refresh可强制全量 - 零依赖:纯 Node 标准库 + 单个 vendored Chart.js(MIT),无
package.json
node src/index.js --html dashboard.html # 聚合并生成仪表盘
open dashboard.html # 在浏览器打开macOS 日常入口:双击 更新仪表盘.command → 重新聚合 → 重建仪表盘 + 全量 CSV → 自动打开浏览器。
| 来源 | 说明 |
|---|---|
| Claude Code | ~/.claude/projects 下的 session 会话记录(来源 claude);subagents/*.jsonl 子代理记录单列来源 claude-subagent |
| Kimi Code CLI | 本地会话记录(来源 kimi);agents/ 下非 main 的子代理记录单列来源 kimi-subagent |
| 千问(qwen) | ~/.qwen-usage/usage.jsonl 本地日志(qwen-vision 脚本每次成功调用追加一行,来源 qwen);辅以百炼账单 CSV 对账检查(node src/qwen_reconcile.js,不做自动补差) |
| OpenAI Codex(gpt) | ~/.codex/sessions/<YYYY>/<MM>/<DD>/rollout-*.jsonl(三层嵌套)与 ~/.codex/archived_sessions/rollout-*.jsonl(平铺)本地日志的 token_count 事件(来源 codex,模型族统一记 openai;旧会话无计数则跳过并在 genInfo 标注;从 Claude Code 导入的会话不统计——按 ~/.codex/external_agent_session_imports.json 的 imported_thread_id 整 session 排除 + total-only 事件(无分量)不统计;openai 族选中时卡片/趋势 tooltip 展示「真实消耗=未缓存输入+输出」,去继承口径——按 thread(session_meta.payload.id)首事件作继承基线、后续逐分量正增量,子代理/上下文压缩接续文件的继承累计不重复计入;毛量含缓存读取仍单独呈现) |
| DeepSeek 平台 | 导出 zip 丢入 vendor/usage_export/,自动解压导入 amount-*.csv / cost-*.csv |
node src/index.js [选项]
--project <glob> 按项目路径过滤(支持 * 通配)
--since <date> 起始日期 YYYY-MM-DD
--until <date> 截止日期 YYYY-MM-DD
--top <N> 明细显示前 N 条(默认 20,0 为全部)
--json 输出 JSON 而非表格
--html <out.html> 写出自包含 HTML 仪表盘
--csv-dir <path> DeepSeek 导出目录(默认 vendor/usage_export/)
--csv-out <path> 写出全量 CSV(可与 --html / --json 组合)
--refresh 忽略缓存强制全量解析
-h, --help 显示帮助千问对账(对比检查,不做自动补差):
node src/qwen_reconcile.js [--csv <path>] [--map 维度=列名|列索引 ...]src/ 解析、聚合、CLI、HTML 生成
test/harness.js 54 项回归测试(首版 49,修正后 +P8-7/P8-8 三条 + 去继承修正 P8-9 两条)
vendor/chart.umd.min.js Chart.js v4.5.1(唯一外部依赖)
docs/assets/ 应用图标
node test/harness.js- 所有数据均在本机离线解析,不上传任何用量明细
- Claude 日志的 uncached(未缓存输入)=
input_tokens原值:日志中 input 与 cache 字段互斥,不做减法 - 平台 CSV 的
utc_date按本地日期处理,时区归属偏差 ≤ 1 天 - 个人用量原始数据与生成产物(
dashboard.html、exports/、logs/等)不入库,见.gitignore