token-usage-insights 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,770 @@
1
+ # Token 战情室
2
+
3
+ **Token 战情室是本地优先的 AI Coding Agent Token 使用量与会话还原看板。** 它会读取本机上的 Google Antigravity CLI、GitHub Copilot CLI、GitHub Copilot Chat(VS Code)、Codex Desktop、Codex CLI、Claude Code、Grok Build、Pi Coding Agent 与 OMP 记录,集中呈现每日、月度、年度的 Token 消耗、缓存使用、推理 Token、估算费用、模型分布、项目目录分布与完整 Session 时间轴。
4
+
5
+ 本项目不会代你调用 AI 供应商 API 查询数据;核心数据来源是本地日志、Status Line 收集文件与本地 SQLite。
6
+
7
+ > 系统环境:支持 Windows 10/11 原生 PowerShell、macOS、Linux 与 WSL。
8
+
9
+ 语言: [繁體中文](README.md) · [简体中文](README.zh-CN.md) · [English](README.en.md) · [日本語](README.ja.md) · [한국어](README.ko.md)
10
+
11
+ * * *
12
+
13
+ ## 最短上手路径
14
+
15
+ ### 1. 一行启动或安装看板
16
+
17
+ 已安装 Node.js 18.18 或更新版本时,可直接运行,不会创建全局 npm 命令:
18
+
19
+ ```bash
20
+ npx --yes token-usage-insights
21
+ ```
22
+
23
+ 如需安装成固定的系统命令,可使用以下安装脚本。
24
+
25
+ Linux / macOS:
26
+
27
+ ```bash
28
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash && "$HOME/.local/bin/token-usage-insights"
29
+ ```
30
+
31
+ Windows PowerShell:
32
+
33
+ ```powershell
34
+ irm https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.ps1 | iex; & "$HOME\bin\token-usage-insights.cmd"
35
+ ```
36
+
37
+ `npx` 与安装脚本都会下载当前平台的已编译版本,不需要 Rust、Cargo、WSL 或手动解压。命令启动后,看板会在本机运行。
38
+
39
+ 打开:
40
+
41
+ ```text
42
+ http://localhost:3003
43
+ ```
44
+
45
+ ### 2. 根据你使用的工具决定是否需要设置
46
+
47
+ | 工具 | 是否需要额外设置 | 默认数据源 | 说明 |
48
+ | --- | --- | --- | --- |
49
+ | Google Antigravity CLI | 需要 | `~/.gemini/antigravity-cli/usage/usage-YYYY-MM-DD.jsonl` | 通过 `statusline-token.sh` 或 Windows `statusline-token.ps1` 收集 Token 数据 |
50
+ | GitHub Copilot CLI | 需要 | `~/.copilot/usage/usage-YYYY-MM-DD.jsonl` | 通过 `statusline-token.sh` 或 Windows `statusline-token.ps1` 收集 Token 数据 |
51
+ | GitHub Copilot Chat(VS Code) | 不需要 | VS Code `workspaceStorage/chatSessions` | 看板直接扫描 VS Code Stable 与 Insiders 的本地聊天 Session |
52
+ | Codex Desktop / CLI | 不需要 | `~/.codex/sessions`、`~/.codex/archived_sessions` | 看板会直接扫描 Codex 活动中与已归档的本地 Session 记录 |
53
+ | Claude Code | 不需要 | `~/.claude/projects` | 看板会直接扫描 Claude Code 的本地项目 Session 记录 |
54
+ | Grok Build | 不需要 | `~/.grok/sessions` | 看板会直接扫描 Grok Build 自动保存的 `updates.jsonl` Session stream |
55
+ | Pi Coding Agent | 不需要 | `~/.pi/agent/sessions` | 看板会直接扫描 Pi Coding Agent 自动保存的本地 Session JSONL 文件 |
56
+ | OMP | 不需要 | `~/.omp/agent/sessions` | 看板会直接扫描 OMP 自动保存的本地 Session JSONL 文件 |
57
+
58
+ **只使用 VS Code Copilot、Codex Desktop、Codex CLI、Claude Code、Grok Build、Pi Coding Agent 或 OMP 时,执行一行安装命令并打开看板即可。**
59
+
60
+ ### Windows 原生使用
61
+
62
+ Windows 的一行安装会创建 `%USERPROFILE%\bin\token-usage-insights.cmd` 启动文件;不需要 Rust MSVC toolchain、Visual Studio Build Tools、WSL、Git Bash 或 `jq`。
63
+
64
+ Windows 默认使用以下原生路径:
65
+
66
+ | 用途 | Windows 默认路径 |
67
+ | --- | --- |
68
+ | SQLite | `%LOCALAPPDATA%\TokenUsageInsights\token_usage_insights.db` |
69
+ | Antigravity | `%USERPROFILE%\.gemini\antigravity-cli` |
70
+ | Copilot | `%USERPROFILE%\.copilot` |
71
+ | Codex | `%USERPROFILE%\.codex` |
72
+ | Claude Code | `%USERPROFILE%\.claude` |
73
+ | Cursor | `%USERPROFILE%\.cursor` |
74
+ | Grok Build | `%USERPROFILE%\.grok` |
75
+ | Pi Coding Agent | `%USERPROFILE%\.pi` |
76
+ | OMP | `%USERPROFILE%\.omp` |
77
+
78
+ 看板内的设置指南会在 Windows 显示 PowerShell 复制、设置与诊断命令。PowerShell collector 使用 .NET JSON 与文件 API,不依赖 Bash、`jq`、`sed` 或 `awk`。
79
+
80
+ 驱动器号、含空格或非 ASCII 字符的路径,以及 UNC 路径都会交由原生路径 API 处理。SQLite 数据库仍建议放在本地磁盘,以避免网络共享的 locking 语义差异。
81
+
82
+ * * *
83
+
84
+ ## 支持功能
85
+
86
+ ### 数据分析
87
+
88
+ - 每日、月度、年度 Token 统计
89
+ - 输入、输出、缓存读取、缓存写入、推理 Token 拆分
90
+ - 根据 `pricing.csv` 进行本地费用估算
91
+ - Session 数量、请求次数与 API 耗时统计
92
+ - 模型使用量排名
93
+ - Cursor 可由本地 `state.vscdb` 的 `agentKv` 记录归因到具体模型;无法唯一匹配时保留为 `Unknown Model`
94
+ - 项目工作目录统计
95
+ - 可排序的 Session 列表
96
+ - 自动读取 GitHub Copilot App(桌面应用)`~/.copilot/data.db` 与 `session-store.db`
97
+
98
+ ### Session 还原
99
+
100
+ - 右侧抽屉式 Session 时间轴
101
+ - 用户提示词、助理回复、推理内容与工具调用步骤
102
+ - 工具调用参数、退出码、stdout、stderr
103
+ - Codex subagent 相关字段,例如 parent session、agent nickname、agent role
104
+ - Markdown 回复渲染与内容清理
105
+
106
+ ### 界面操作
107
+
108
+ - 五种 CLI 徽章切换
109
+ - 每日、月度、年度视图
110
+ - 日期、月份、年份快速切换
111
+ - 5 秒、10 秒、30 秒实时自动刷新
112
+ - 手动同步本地日志到 SQLite
113
+ - 深色与浅色主题
114
+ - 繁体中文与英文界面切换
115
+ - 模型费用表查看
116
+
117
+ * * *
118
+
119
+ ## 网址参数(深层链接)
120
+
121
+ 看板支持通过网址查询参数(Query String)直接打开指定状态的画面,方便加入书签、分享链接,或从其他工具跳转过来。在看板上切换 Agent、视图、日期、工作目录或图表类型时,网址也会自动更新为当前的状态。
122
+
123
+ | 参数 | 适用视图 | 可用值 | 说明 |
124
+ | --- | --- | --- | --- |
125
+ | `agent` | 全部 | `antigravity`、`copilot`、`codex`、`claude`、`cursor`、`grok`、`pi`、`omp` | 指定要显示的 Coding Agent。另支持 `claude-code`、`grok-build`、`pi-coding-agent` 等别名写法 |
126
+ | `tab` | 全部 | `daily`、`monthly`、`yearly` | 指定以日(每日)、月(月度)或年(年度)视图显示 |
127
+ | `date` | 全部 | `daily`:`YYYY-MM-DD`;`monthly`:`YYYY-MM`;`yearly`:`YYYY` | 指定要显示的日期、月份或年份,格式会依 `tab` 自动对应 |
128
+ | `dir` | `daily` | 完整路径、`~` 开头的家目录路径,或唯一的路径后缀(如 `TokenUsageInsights`) | 指定每日视图的工作目录筛选。Windows 路径不区分大小写;找不到匹配目录时会显示全部 |
129
+ | `chart` | `daily` | `kline`、`trend` | 指定每日视图的图表类型:K 线图或趋势图 |
130
+
131
+ 示例(`http://localhost:3003` 为默认网址,请依实际 `HOST`/`PORT` 调整):
132
+
133
+ ```text
134
+ http://localhost:3003/?agent=copilot&tab=monthly&date=2026-08
135
+ http://localhost:3003/?agent=codex&tab=yearly&date=2026
136
+ http://localhost:3003/?agent=claude&tab=daily&date=2026-08-09&chart=trend
137
+ http://localhost:3003/?agent=copilot&tab=daily&date=2026-08-09&dir=~/projects/TokenUsageInsights
138
+ ```
139
+
140
+ > 路径含有 `~`、空格或非 ASCII 字符时请先进行 URL 编码(`~` 可编码为 `%7E`)。未提供的参数会沿用上次浏览的状态(Cookie / localStorage)。
141
+
142
+ * * *
143
+
144
+ ## Google Antigravity CLI 设置
145
+
146
+ Antigravity CLI 需要将本项目的 Status Line 脚本连接到 `settings.json`。脚本会把每次对话后的 Token 累计值与增量写入:
147
+
148
+ ```text
149
+ ~/.gemini/antigravity-cli/usage/usage-YYYY-MM-DD.jsonl
150
+ ```
151
+
152
+ ### 1. 安装收集脚本
153
+
154
+ 完成一行安装后,执行:
155
+
156
+ ```bash
157
+ mkdir -p ~/.gemini/antigravity-cli && cp ~/.local/share/token-usage-insights/shell/antigravity/statusline-token.sh ~/.gemini/antigravity-cli/statusline-token.sh && chmod +x ~/.gemini/antigravity-cli/statusline-token.sh
158
+ ```
159
+
160
+ 如果使用自定义安装位置,请将命令中的 `~/.local/share/token-usage-insights` 替换为 `TOKEN_USAGE_INSIGHTS_INSTALL_DIR` 指定的位置。
161
+
162
+ ### 2. 设置 `~/.gemini/antigravity-cli/settings.json`
163
+
164
+ 如果文件不存在,可以创建以下内容。如果文件已经存在,请只合并 `statusLine` 区块,不要覆盖原有设置。
165
+
166
+ ```json
167
+ {
168
+ "statusLine": {
169
+ "type": "command",
170
+ "command": "/ABSOLUTE/HOME/.gemini/antigravity-cli/statusline-token.sh",
171
+ "padding": 1
172
+ }
173
+ }
174
+ ```
175
+
176
+ 请将 `/ABSOLUTE/HOME` 替换为 `echo $HOME` 显示的实际主目录路径,例如 `/Users/will` 或 `/home/will`。
177
+
178
+ ### 3. 验证
179
+
180
+ ```bash
181
+ echo '{}' | ~/.gemini/antigravity-cli/statusline-token.sh
182
+ jq . ~/.gemini/antigravity-cli/settings.json
183
+ ```
184
+
185
+ 完成后重新进入 Antigravity CLI Session,状态栏会输出类似格式:
186
+
187
+ ```text
188
+ model-name • #3 • input 12.3k • cache 4.5k/0 • output 1.2k • reasoning 500 • total 18.5k
189
+ ```
190
+
191
+ * * *
192
+
193
+ ## GitHub Copilot CLI 设置
194
+
195
+ Copilot CLI 与 Antigravity CLI 一样,需要将本项目的 Status Line 脚本连接到 `settings.json`。脚本会把 Token 数据写入:
196
+
197
+ ```text
198
+ ~/.copilot/usage/usage-YYYY-MM-DD.jsonl
199
+ ```
200
+
201
+ ### 1. 安装收集脚本
202
+
203
+ 完成一行安装后,执行:
204
+
205
+ ```bash
206
+ mkdir -p ~/.copilot && cp ~/.local/share/token-usage-insights/shell/copilot/statusline-token.sh ~/.copilot/statusline-token.sh && chmod +x ~/.copilot/statusline-token.sh
207
+ ```
208
+
209
+ 如果使用自定义安装位置,请将命令中的 `~/.local/share/token-usage-insights` 替换为 `TOKEN_USAGE_INSIGHTS_INSTALL_DIR` 指定的位置。
210
+
211
+ ### 2. 设置 `~/.copilot/settings.json`
212
+
213
+ 如果文件不存在,可以创建以下内容。如果文件已经存在,请只合并 `statusLine` 区块,不要覆盖原有设置。
214
+
215
+ ```json
216
+ {
217
+ "statusLine": {
218
+ "type": "command",
219
+ "command": "/ABSOLUTE/HOME/.copilot/statusline-token.sh",
220
+ "padding": 1
221
+ }
222
+ }
223
+ ```
224
+
225
+ 请将 `/ABSOLUTE/HOME` 替换为 `echo $HOME` 显示的实际主目录路径。
226
+
227
+ ### 3. 验证
228
+
229
+ ```bash
230
+ echo '{}' | ~/.copilot/statusline-token.sh
231
+ jq . ~/.copilot/settings.json
232
+ ```
233
+
234
+ 完成后重新进入 Copilot CLI Session,状态栏会开始输出并累积 Token 数据。
235
+
236
+ * * *
237
+
238
+ ## GitHub Copilot App(桌面应用)
239
+
240
+ **Copilot App(Tauri 桌面应用)无需任何设置。** 看板会自动读取本机 `~/.copilot/data.db` 与 `~/.copilot/session-store.db`,将 App session 的 token 使用量与 CLI / VS Code 合并显示在 Copilot 页面;Session 列表以 `App` 标示来源,与 `CLI`、`VS Code` 区分。
241
+
242
+ - 看板会在每次后台同步(每 5 秒)检查这两个 SQLite,并以 `(created_at, id)` 复合游标进行增量同步,避免同一时间戳的多笔 event 重复 upsert;同一个 `(session_id, turn_index)` 不会重复写入。
243
+ - App 的 `assistant_usage_events` 是 per-API-call 粒度;看板会按 Session、Turn、Agent 与模型聚合,保留同一回合的多模型归因,再以 per-turn 统计供时间轴使用。
244
+ - Session 标题取自 `data.db.sessions.title`。
245
+
246
+ 如果 App 与 CLI 分离,或使用非默认目录,可以指定环境变量:
247
+
248
+ ```bash
249
+ COPILOT_APP_DIR="/path/to/copilot-app-data" token-usage-insights
250
+ ```
251
+
252
+ `COPILOT_APP_DIR` 的优先级高于 `COPILOT_DIR`;未设置时回退到 `~/.copilot`。
253
+
254
+ * * *
255
+
256
+ ## GitHub Copilot Chat(VS Code)设置
257
+
258
+ **VS Code Copilot Chat 不需要安装 Status Line、Hook 或额外收集脚本。**看板会直接读取本地 `workspaceStorage` 中的聊天 Session,并与 Copilot CLI 合并显示;Session 列表会以 `VS Code` 或 `CLI` 标示来源。
259
+
260
+ 支持 VS Code Stable 与 Insiders:
261
+
262
+ | 平台 | Stable | Insiders |
263
+ | --- | --- | --- |
264
+ | Windows | `%APPDATA%\Code\User\workspaceStorage` | `%APPDATA%\Code - Insiders\User\workspaceStorage` |
265
+ | macOS | `~/Library/Application Support/Code/User/workspaceStorage` | `~/Library/Application Support/Code - Insiders/User/workspaceStorage` |
266
+ | Linux | `~/.config/Code/User/workspaceStorage` | `~/.config/Code - Insiders/User/workspaceStorage` |
267
+
268
+ 使用方式:
269
+
270
+ 1. 在 VS Code 中使用 GitHub Copilot Chat,创建至少一个聊天 Session。
271
+ 2. 启动看板或按右上角同步按钮。
272
+ 3. 在 Copilot 页面查看合并后的统计与 Session 时间轴。
273
+
274
+ 看板会完整回填现有的 `chatSessions` 文件,并在文件大小或修改时间变化时重新同步;没有 Token 字段的聊天 Session 仍会显示,但 Token 数为 0。数据只读取本地聊天文件,不包含云端 Session、Remote SSH 主机或 `state.vscdb`。
275
+
276
+ 如果 VS Code 使用 `--user-data-dir` 或 Portable Mode,可以指定看板自定义的数据根目录:
277
+
278
+ macOS / Linux:
279
+
280
+ ```bash
281
+ VSCODE_USER_DATA_DIR="/path/to/vscode-user-data" token-usage-insights
282
+ ```
283
+
284
+ Windows PowerShell:
285
+
286
+ ```powershell
287
+ $env:VSCODE_USER_DATA_DIR = "C:\path\to\vscode-user-data"; & "$HOME\bin\token-usage-insights.cmd"
288
+ ```
289
+
290
+ `VSCODE_USER_DATA_DIR` 应指向包含 `User/workspaceStorage` 的 VS Code 用户数据目录。Portable Mode 如果环境变量指向 `data` 目录,请改用 `VSCODE_PORTABLE_DATA_DIR`;看板会同时检查 `data/user-data/User/workspaceStorage` 与 `data/User/workspaceStorage`。
291
+
292
+ * * *
293
+
294
+ ## Codex 设置
295
+
296
+ **Codex Desktop 与 Codex CLI 都不需要安装 Hook、Status Line 或额外收集脚本。**
297
+
298
+ 看板会直接扫描:
299
+
300
+ ```text
301
+ ~/.codex/sessions
302
+ ~/.codex/archived_sessions
303
+ ```
304
+
305
+ 使用方式:
306
+
307
+ 1. 先正常使用 Codex Desktop 或 Codex CLI 创建至少一个 Session。
308
+ 2. 启动本项目。
309
+ 3. 在左侧选择 Codex。
310
+ 4. 按右上角同步按钮,或等待后台同步。
311
+
312
+ 注意事项:
313
+
314
+ - Codex 的身份凭证仍由 Codex 自身管理。
315
+ - 看板只读取本地 Session 记录并进行分析。
316
+ - 每个 Session 会根据 transcript 的 `originator` 显示 `Desktop` 或 `CLI` 来源标记;无法判断的旧格式会保持未分类。
317
+ - 如果显示 API 额度信息,其来源是最后一次本地 Session 日志,并非实时在线查询。
318
+
319
+ * * *
320
+
321
+ ## Claude Code 设置
322
+
323
+ **Claude Code 不需要安装 Hook、Status Line 或额外收集脚本。**
324
+
325
+ 看板会直接扫描:
326
+
327
+ ```text
328
+ ~/.claude/projects
329
+ ```
330
+
331
+ 使用方式:
332
+
333
+ 1. 先正常使用 Claude Code 创建至少一个项目 Session。
334
+ 2. 启动本项目。
335
+ 3. 在左侧选择 Claude Code。
336
+ 4. 按右上角同步按钮,或等待后台同步。
337
+
338
+ 注意事项:
339
+
340
+ - Claude Code 的身份凭证仍由 Claude Code 自身管理。
341
+ - 看板只读取本地项目 Session 记录并进行分析。
342
+ - 如果 `~/.claude/projects` 不存在,Claude Code 页面会显示无数据。
343
+
344
+ * * *
345
+
346
+ ## Grok Build 设置
347
+
348
+ **Grok Build 不需要安装 Hook、Status Line 或额外收集脚本。** 看板会直接扫描:
349
+
350
+ ```text
351
+ ~/.grok/sessions
352
+ ```
353
+
354
+ 这里使用 Grok Build 内置保存的 Session stream;不读取旧规范中的
355
+ `~/.Grok/build/usage/usage-YYYY-MM-DD.jsonl`,也不需要在
356
+ `~/.Grok/build/settings.json` 设置 `statusLine`。
357
+
358
+ 使用方式:
359
+
360
+ 1. 先正常使用 Grok Build 创建至少一个 Session。
361
+ 2. 启动本项目。
362
+ 3. 在左侧选择 Grok Build。
363
+ 4. 按右上角同步按钮,或等待后台同步。
364
+
365
+ Grok Build Session 可能只提供 context token snapshot,也可能包含 provider usage 与成本。看板会优先使用 provider usage/cost;只有 context snapshot 时,费用会根据 `pricing.csv` 的 xAI API 价格估算,并在 Session 列表标示 `Context`,不代表 SuperGrok 或其他订阅方案的每周配额。
366
+
367
+ * * *
368
+
369
+ ## Pi Coding Agent 设置
370
+
371
+ **Pi Coding Agent 不需要安装 Hook、Status Line 或额外收集脚本。** 看板会直接扫描:
372
+
373
+ ```text
374
+ ~/.pi/agent/sessions
375
+ ```
376
+
377
+ Pi Coding Agent 会以树状目录结构自动将 Session 保存为本地 JSONL 文件;看板会直接读取这些 Session 记录。
378
+
379
+ 使用方式:
380
+
381
+ 1. 先正常使用 Pi Coding Agent 创建至少一个 Session。
382
+ 2. 启动或刷新本项目看板。
383
+ 3. 在左侧选择 Pi Coding Agent。
384
+ 4. 按右上角同步按钮,或等待后台同步。
385
+
386
+ Pi Coding Agent 的成本始终直接读取自 Session 每个 turn 自行报告的 `usage.cost` 与相关 usage 数据,不会像 Grok Build 那样回退到 context snapshot 估算;因为 Pi 原生就会提供权威的 token 与成本信息。
387
+
388
+ * * *
389
+
390
+ ## OMP 设置
391
+
392
+ **OMP 不需要安装 Hook、Status Line 或额外收集脚本。** 看板会直接扫描:
393
+
394
+ ```text
395
+ ~/.omp/agent/sessions
396
+ ```
397
+
398
+ OMP 是 Pi Coding Agent 的开源分支(<https://github.com/can1357/oh-my-pi>),并使用完全相同的 JSONL 格式持久化 Session。看板会直接读取这些本地 Session 记录。
399
+
400
+ 使用方式:
401
+
402
+ 1. 先正常使用 OMP 创建至少一个 Session。
403
+ 2. 启动或刷新本项目看板。
404
+ 3. 在左侧选择 OMP。
405
+ 4. 按右上角同步按钮,或等待后台同步。
406
+
407
+ OMP 的成本始终直接读取自 Session 每个 turn 自行报告的 `usage.cost` 与相关 usage 数据,不会像 Grok Build 那样回退到 context snapshot 估算;因为 OMP 原生就会提供权威的 token 与成本信息。
408
+
409
+ * * *
410
+
411
+ ## 本地数据同步方式
412
+
413
+ 启动服务时,后端会初始化本地 SQLite 并立即同步一次数据。服务启动后,也会每 5 秒进行一次后台同步。
414
+
415
+ SQLite 默认位置:
416
+
417
+ ```text
418
+ ~/.token-usage-insights/token_usage_insights.db
419
+ ```
420
+
421
+ 前端右上角的同步按钮会调用:
422
+
423
+ ```text
424
+ GET /api/:assistant/sync
425
+ ```
426
+
427
+ 这会触发一次完整的本地日志增量同步。
428
+
429
+ ## 导入 / 导出(跨机器汇总)
430
+
431
+ **一般使用请直接使用看板右上角的导出与导入按钮。** 安装版只需要浏览器即可完成跨机器数据汇总,并支持最大 200 MB 的导入文件。
432
+
433
+ 看板与 CLI 已整合为同一个 `token-usage-insights` 可执行文件。不带参数会启动看板,使用 `export`、`export-all`、`import` 子命令可操作数据;主命令与各子命令均支持 `--help`、`-h`。此整合从下一个发布版本起提供,旧版需要更新或从源代码构建。
434
+
435
+ `--agent` 用于指定助理(`antigravity` / `copilot` / `codex` / `claude` / `cursor` / `grok` / `pi` / `omp`)。
436
+
437
+ ### 从源代码使用 CLI
438
+
439
+ 先构建一次:
440
+
441
+ ```bash
442
+ cargo build --release --bin token-usage-insights
443
+ ```
444
+
445
+ ```bash
446
+ # 匯出日、月或年資料(輸出 JSON,含匯入唯一 id)
447
+ ./target/release/token-usage-insights export --agent codex --date 2026-07 --out monthly-codex-2026-07.json
448
+ ```
449
+
450
+ ```bash
451
+ # 匯入檔案中的所有資料;每筆資料依 timestamp 決定日期
452
+ ./target/release/token-usage-insights import --agent codex --file monthly-codex-2026-07.json
453
+ ```
454
+
455
+ ```bash
456
+ # 取得 CLI usage 說明
457
+ ./target/release/token-usage-insights --help
458
+ ./target/release/token-usage-insights export --help
459
+ ./target/release/token-usage-insights import --help
460
+ ```
461
+
462
+ 数据格式与前端一致,包含以下字段:
463
+
464
+ - `version`
465
+ - `assistant`
466
+ - `date`
467
+ - `exported_at`
468
+ - `records`(每条记录都会有 `import_source_id`)
469
+
470
+ `import_source_id` 会与 `assistant_type` 一起组成唯一键;重复导入同一条记录会被判定为重复并自动跳过,不会重复写入数据库。
471
+
472
+ * * *
473
+
474
+ ## 环境变量
475
+
476
+ 环境变量指定的路径会被视为权威设置,不必预先创建;`INSIGHTS_DIR` 会在启动时自动创建。支持原生绝对/相对路径,以及以 `~`、`$HOME`、`%USERPROFILE%`、`%LOCALAPPDATA%` 或 `%APPDATA%` 开头的常见写法。
477
+
478
+ | 变量 | 默认值 | 用途 |
479
+ | --- | --- | --- |
480
+ | `HOST` | `0.0.0.0` | 看板服务绑定的 IPv4 或 IPv6 地址 |
481
+ | `PORT` | `3003` | 看板服务端口号 |
482
+ | `INSIGHTS_DIR` | Windows: `%LOCALAPPDATA%\TokenUsageInsights`; 其他平台:`~/.token-usage-insights` | SQLite 数据库目录 |
483
+ | `ANTIGRAVITY_DIR` | `~/.gemini/antigravity-cli` | Antigravity CLI 数据目录 |
484
+ | `COPILOT_DIR` | `~/.copilot` | Copilot CLI 数据目录 |
485
+ | `COPILOT_APP_DIR` | 同 `COPILOT_DIR` | Copilot App(桌面应用)数据目录,应包含 `data.db` 与 `session-store.db` |
486
+ | `VSCODE_USER_DATA_DIR` | 按平台自动检测 | VS Code 用户数据目录,应包含 `User/workspaceStorage` |
487
+ | `VSCODE_PORTABLE_DATA_DIR` | 未设置 | VS Code Portable Mode 的 `data` 目录 |
488
+ | `CODEX_DIR` | `~/.codex` | Codex Desktop 与 Codex CLI 共用的数据目录 |
489
+ | `CLAUDE_DIR` | `~/.claude` | Claude Code 数据目录 |
490
+ | `CURSOR_DIR` | `~/.cursor` | Cursor 数据目录 |
491
+ | `CURSOR_STATE_DB` | 按平台自动检测 | Cursor `User/globalStorage/state.vscdb` 路径,用于只读获取 `agentKv` 模型信息 |
492
+ | `GROK_DIR` | `~/.grok` | Grok Build 数据目录 |
493
+ | `PI_DIR` | `~/.pi` | Pi Coding Agent 数据目录 |
494
+ | `OMP_DIR` | `~/.omp` | OMP 数据目录 |
495
+ | `CORS_ALLOWED_ORIGINS` | `http://localhost:<PORT>,http://127.0.0.1:<PORT>` | 允许的 CORS 来源,以逗号分隔 |
496
+
497
+ > **默认绑定 `0.0.0.0`,同一局域网内的其他设备可能连接到看板。只需在本机浏览时,请将 `HOST` 设置为 `127.0.0.1`。**
498
+
499
+ 示例:
500
+
501
+ ```bash
502
+ HOST="127.0.0.1" INSIGHTS_DIR="/tmp/token-usage-insights" PORT="3010" "$HOME/.local/bin/token-usage-insights"
503
+ ```
504
+
505
+ Windows PowerShell 示例:
506
+
507
+ ```powershell
508
+ $env:HOST = '127.0.0.1'; $env:INSIGHTS_DIR = 'D:\Token Usage Insights\資料庫'; $env:CODEX_DIR = "$env:USERPROFILE\.codex"; $env:PORT = '3010'; & "$HOME\bin\token-usage-insights.cmd"
509
+ ```
510
+
511
+ * * *
512
+
513
+ ## 常驻服务
514
+
515
+ ### Linux:一行安装并启用 systemd 用户服务
516
+
517
+ ```bash
518
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash -s -- --service
519
+ ```
520
+
521
+ 这会下载安装版并立即启用 `token-usage-insights.service`,不需要自行构建或修改 systemd 文件。
522
+
523
+ ### 管理服务
524
+
525
+ ```bash
526
+ systemctl --user status token-usage-insights.service
527
+ journalctl --user -u token-usage-insights.service -n 50 -f
528
+ systemctl --user restart token-usage-insights.service
529
+ systemctl --user stop token-usage-insights.service
530
+ ```
531
+
532
+ * * *
533
+
534
+ ## 安装选项与手动安装
535
+
536
+ GitHub Release 提供 Linux、macOS 与 Windows 的已编译可执行文件,安装与运行都不需要 Rust 或 Cargo。
537
+
538
+ ### 一行安装的可选参数
539
+
540
+ `scripts/get.sh`(Linux / macOS)与 `scripts/get.ps1`(Windows)会自动判断平台与 CPU 架构,从最新(或指定)Release 下载对应压缩包,解压后调用包内的 `install.sh` / `install.ps1`,全程不需要手动下载或解压:
541
+
542
+ Linux / macOS:
543
+
544
+ ```bash
545
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash
546
+ ```
547
+
548
+ Linux 如需同时安装并启用 systemd user service:
549
+
550
+ ```bash
551
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash -s -- --service
552
+ ```
553
+
554
+ Windows PowerShell:
555
+
556
+ ```powershell
557
+ irm https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.ps1 | iex
558
+ ```
559
+
560
+ 安装完成后即可运行(Linux/macOS 需确认 `bin_dir` 已加入 `PATH`;Windows 会创建 `.cmd` shim):
561
+
562
+ ```bash
563
+ token-usage-insights
564
+ ```
565
+
566
+ 环境变量可控制版本与安装路径(均为可选):
567
+
568
+ | 变量 | 适用平台 | 说明 |
569
+ | --- | --- | --- |
570
+ | `TOKEN_USAGE_INSIGHTS_VERSION` | Linux / macOS / Windows | 指定要安装的 Release tag,例如 `v0.6.2`。默认 `latest` |
571
+ | `TOKEN_USAGE_INSIGHTS_INSTALL_DIR` | Linux / macOS | 安装目录,会传递给 `install.sh` |
572
+ | `TOKEN_USAGE_INSIGHTS_BIN_DIR` | Linux / macOS | 可执行文件链接目录,会传递给 `install.sh` |
573
+
574
+ Windows 若要自定义安装位置、bin 目录与端口号,需要先下载脚本再带参数运行(`iex` 管道不支持传递参数):
575
+
576
+ ```powershell
577
+ Invoke-WebRequest -Uri https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.ps1 -OutFile get.ps1
578
+ .\get.ps1 -InstallDir 'D:\Apps\Token Usage Insights' -Port 3010
579
+ ```
580
+
581
+ ### 手动下载安装
582
+
583
+ 如果不想直接执行远程脚本,也可以手动下载对应平台的压缩包并运行包内置的安装脚本。每个 Release 压缩包都包含:
584
+
585
+ - 单一平台可执行文件
586
+ - `static/` 前端资源
587
+ - `pricing.csv` 模型费用表
588
+ - `shell/` 目录下的 Status Line 与服务脚本
589
+ - `scripts/` 目录(含 `install.sh`、`install.ps1`、`get.sh`、`get.ps1`)
590
+ - README、LICENSE 与 VERSION
591
+
592
+ Linux 或 macOS:
593
+
594
+ ```bash
595
+ tar -xzf token-usage-insights-<tag>-<target>.tar.gz
596
+ cd token-usage-insights-<tag>-<target>
597
+ ./install.sh
598
+ ```
599
+
600
+ Linux 如需安装并启用 systemd user service:
601
+
602
+ ```bash
603
+ ./install.sh --service
604
+ ```
605
+
606
+ Windows:
607
+
608
+ ```powershell
609
+ Expand-Archive token-usage-insights-<tag>-x86_64-pc-windows-msvc.zip
610
+ cd token-usage-insights-<tag>-x86_64-pc-windows-msvc
611
+ powershell -ExecutionPolicy Bypass -File .\install.ps1
612
+ ```
613
+
614
+ 自定义 Windows 安装位置与端口号:
615
+
616
+ ```powershell
617
+ .\install.ps1 -InstallDir 'D:\Apps\Token Usage Insights' -BinDir "$HOME\bin" -Port 3010
618
+ ```
619
+
620
+ ### CI 验证
621
+
622
+ `Release` workflow 每次构建都会在 Linux、macOS 与 Windows 上实际运行对应的安装脚本(`install.sh` / `install.ps1`),安装后启动可执行文件并确认:
623
+
624
+ - 服务会在指定端口响应 `/api/<assistant>/pricing`
625
+ - 响应内容确实加载了包内的 `pricing.csv`
626
+ - 全新的 `INSIGHTS_DIR` 会被创建并生成 SQLite 数据库
627
+
628
+ `get.sh` 与 `get.ps1` 也会在每次构建时先进行语法检查(`bash -n` 与 PowerShell AST 解析),确保推送到 Release 的版本可以正常运行。
629
+
630
+ ### 维护者发布
631
+
632
+ 推送 Git tag 后,GitHub Actions 会自动创建对应的 Release:
633
+
634
+ ```bash
635
+ git tag vX.Y.Z
636
+ git push origin vX.Y.Z
637
+ ```
638
+
639
+ * * *
640
+
641
+ ## 旧数据迁移
642
+
643
+ 如果你以前使用过以下独立项目,启动本项目时会自动尝试迁移旧 SQLite 数据:
644
+
645
+ - `~/.gemini/antigravity-cli/antigravity_cli_token_insights.db`
646
+ - `~/.copilot/copilot_cli_token_insights.db`
647
+ - `~/.codex/codex_cli_token_insights.db`
648
+
649
+ 迁移成功后,旧数据库会被重命名为带有 `.bak` 后缀的文件。
650
+
651
+ 如果已确认数据迁移完成,可以停用旧服务:
652
+
653
+ ```bash
654
+ systemctl --user stop copilot-cli-token-insights.service
655
+ systemctl --user disable copilot-cli-token-insights.service
656
+ systemctl --user stop antigravity-cli-token-insights.service
657
+ systemctl --user disable antigravity-cli-token-insights.service
658
+ systemctl --user stop codex-cli-token-insights.service
659
+ systemctl --user disable codex-cli-token-insights.service
660
+
661
+ rm -f ~/.config/systemd/user/copilot-cli-token-insights.service
662
+ rm -f ~/.config/systemd/user/antigravity-cli-token-insights.service
663
+ rm -f ~/.config/systemd/user/codex-cli-token-insights.service
664
+
665
+ systemctl --user daemon-reload
666
+ systemctl --user reset-failed
667
+ ```
668
+
669
+ * * *
670
+
671
+ ## 故障排查
672
+
673
+ ### 看板没有数据
674
+
675
+ 按工具检查数据源是否存在:
676
+
677
+ ```bash
678
+ ls ~/.gemini/antigravity-cli/usage
679
+ ls ~/.copilot/usage
680
+ ls ~/.codex/sessions
681
+ ls ~/.codex/archived_sessions
682
+ ls ~/.claude/projects
683
+ ```
684
+
685
+ Antigravity CLI 与 Copilot CLI 还需要确认 `settings.json` 已设置 `statusLine`,且脚本具有执行权限。
686
+
687
+ Windows PowerShell 可直接检查原生数据目录:
688
+
689
+ ```powershell
690
+ Get-ChildItem "$env:USERPROFILE\.gemini\antigravity-cli\usage"
691
+ Get-ChildItem "$env:USERPROFILE\.copilot\usage"
692
+ Get-ChildItem "$env:USERPROFILE\.codex\sessions"
693
+ Get-ChildItem "$env:USERPROFILE\.codex\archived_sessions"
694
+ Get-ChildItem "$env:USERPROFILE\.claude\projects"
695
+ ```
696
+
697
+ ### Status Line 脚本无法执行
698
+
699
+ ```bash
700
+ command -v jq
701
+ chmod +x ~/.gemini/antigravity-cli/statusline-token.sh
702
+ chmod +x ~/.copilot/statusline-token.sh
703
+ ```
704
+
705
+ Status Line 脚本依赖 `jq` 解析 CLI 传入的 JSON。
706
+
707
+ 上述 `jq` 要求只适用于 `.sh` collector。Windows `.ps1` collector 可使用以下命令测试,并会原生处理反斜杠与包含空格的路径:
708
+
709
+ ```powershell
710
+ Write-Output '{}' | powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.gemini\antigravity-cli\statusline-token.ps1" -Assistant antigravity
711
+ ```
712
+
713
+ ### 配置文件 JSON 格式错误
714
+
715
+ ```bash
716
+ jq . ~/.gemini/antigravity-cli/settings.json
717
+ jq . ~/.copilot/settings.json
718
+ ```
719
+
720
+ 如果已有其他设置,请合并 `statusLine` 对象,不要把整个文件替换成数组或纯字符串。
721
+
722
+ ### 无法连接到 `localhost:3003`
723
+
724
+ ```bash
725
+ PORT=3010 "$HOME/.local/bin/token-usage-insights"
726
+ ```
727
+
728
+ 如果改用其他端口,请打开对应网址,例如:
729
+
730
+ ```text
731
+ http://localhost:3010
732
+ ```
733
+
734
+ * * *
735
+
736
+ ## 开发命令
737
+
738
+ 本节仅供需要修改或从源代码构建项目的开发者使用;一般使用请采用前述一行安装命令。
739
+
740
+ ```bash
741
+ git clone https://github.com/doggy8088/TokenUsageInsights.git
742
+ cd TokenUsageInsights
743
+ cargo fmt
744
+ cargo test
745
+ cargo clippy --all-targets --all-features
746
+ cargo build --release
747
+ ./target/release/token-usage-insights
748
+ ```
749
+
750
+ * * *
751
+
752
+ ## 项目文件
753
+
754
+ ```text
755
+ src/ Rust 後端、API、SQLite 同步、價格與時間軸解析
756
+ static/ 前端 HTML、JavaScript、CSS 與圖片資產
757
+ shell/ Bash/PowerShell Status Line collector 與 systemd 服務範本
758
+ scripts/ Linux/macOS、Windows 安裝與 Windows smoke test
759
+ pricing.csv 模型價格表,本地估算費用依此檔案載入
760
+ ```
761
+
762
+ * * *
763
+
764
+ ## 截图
765
+
766
+ ![Token 战情室每日看板](screenshots/codex-daily-2026-07-07-desktop-chrome.png)
767
+
768
+ ![Token 战情室月度看板](screenshots/codex-daily-2026-07-07.png)
769
+
770
+ ![Token 战情室 Session 时间轴](screenshots/codex-daily-2026-07-07-desktop-chrome.png)