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.
package/README.md ADDED
@@ -0,0 +1,797 @@
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`,未設定時 fallback 到 `~/.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
+ # 一次匯出所有 Agent、所有日期的使用量記錄
452
+ ./target/release/token-usage-insights export-all --out all-usage.json
453
+
454
+ # 自動判斷 Agent,匯入完整匯出檔的全部 Agent 與日期
455
+ ./target/release/token-usage-insights import --file all-usage.json
456
+ ```
457
+
458
+ `export-all` 不需指定 Agent 或日期;省略 `--out` 時輸出 JSON 到 stdout。匯出涵蓋 SQLite 已收錄的所有使用量記錄,包含原生與匯入資料,保留既有匯出格式的完整欄位及 `import_source_id`。執行前請透過看板完成來源日誌同步;此命令不會自行掃描來源日誌,也不是包含原始對話檔、設定與匯入批次歷程的資料庫備份。
459
+
460
+ 完整匯出檔包含 `version`、`exported_at` 與 `exports` 陣列;每個元素都是原有格式的單一 Agent、單日匯出,依 Agent 與日期排序。空資料庫會輸出空的 `exports` 陣列。`import --file` 自動依檔案中的 `assistant` 匯入所有 Agent;單一 Agent 檔案也可自動辨識。只有需要篩選特定 Agent,或舊檔缺少 `assistant` 時,才需要指定 `--agent`。缺少或不支援的 Agent 會在寫入前回報錯誤。
461
+
462
+ 各 Agent 的全部日期合併為一個匯入批次,輸出 JSON 陣列列出各 Agent 與匯入結果。若中途資料庫寫入失敗,先前成功的 Agent 批次會保留;重新匯入會自動去重。
463
+
464
+ ```bash
465
+ # 匯入檔案中的所有資料;每筆資料依 timestamp 決定日期
466
+ ./target/release/token-usage-insights import --file monthly-codex-2026-07.json
467
+ ```
468
+
469
+ ```bash
470
+ # 取得 CLI usage 說明
471
+ ./target/release/token-usage-insights --help
472
+ ./target/release/token-usage-insights export --help
473
+ ./target/release/token-usage-insights export-all --help
474
+ ./target/release/token-usage-insights import --help
475
+ ```
476
+
477
+ 資料格式使用和前端一致,內含欄位:
478
+
479
+ - `version`
480
+ - `assistant`
481
+ - `date`
482
+ - `exported_at`
483
+ - `records`(每筆會有 `import_source_id`)
484
+
485
+ `import_source_id` 會與 `assistant_type` 一起做唯一鍵,重複匯入同一筆會被判為重複並自動跳過,不會重複寫入資料庫。
486
+
487
+ * * *
488
+
489
+ ## 環境變數
490
+
491
+ 環境變數指定的路徑會被視為權威設定,不必預先建立;`INSIGHTS_DIR` 會在啟動時自動建立。支援原生絕對/相對路徑,以及開頭為 `~`、`$HOME`、`%USERPROFILE%`、`%LOCALAPPDATA%` 或 `%APPDATA%` 的常見寫法。
492
+
493
+ | 變數 | 預設值 | 用途 |
494
+ | --- | --- | --- |
495
+ | `HOST` | `0.0.0.0` | 看板服務綁定的 IPv4 或 IPv6 位址 |
496
+ | `PORT` | `3003` | 看板服務埠號 |
497
+ | `INSIGHTS_DIR` | Windows: `%LOCALAPPDATA%\TokenUsageInsights`; 其他平台: `~/.token-usage-insights` | SQLite 資料庫目錄 |
498
+ | `ANTIGRAVITY_DIR` | `~/.gemini/antigravity-cli` | Antigravity CLI 資料目錄 |
499
+ | `COPILOT_DIR` | `~/.copilot` | Copilot CLI 資料目錄 |
500
+ | `COPILOT_APP_DIR` | 同 `COPILOT_DIR` | Copilot App(桌面應用)資料目錄,應包含 `data.db` 與 `session-store.db` |
501
+ | `VSCODE_USER_DATA_DIR` | 依平台自動偵測 | VS Code 使用者資料目錄,應包含 `User/workspaceStorage` |
502
+ | `VSCODE_PORTABLE_DATA_DIR` | 未設定 | VS Code Portable Mode 的 `data` 目錄 |
503
+ | `CODEX_DIR` | `~/.codex` | Codex Desktop 與 Codex CLI 共用資料目錄 |
504
+ | `CLAUDE_DIR` | `~/.claude` | Claude Code 資料目錄 |
505
+ | `CURSOR_DIR` | `~/.cursor` | Cursor 資料目錄 |
506
+ | `CURSOR_STATE_DB` | 依平台自動偵測 | Cursor `User/globalStorage/state.vscdb` 路徑,用於唯讀取得 `agentKv` 模型資訊 |
507
+ | `GROK_DIR` | `~/.grok` | Grok Build 資料目錄 |
508
+ | `PI_DIR` | `~/.pi` | Pi Coding Agent 資料目錄 |
509
+ | `OMP_DIR` | `~/.omp` | OMP 資料目錄 |
510
+ | `CORS_ALLOWED_ORIGINS` | `http://localhost:<PORT>,http://127.0.0.1:<PORT>` | 允許的 CORS 來源,逗號分隔 |
511
+
512
+ > **預設綁定 `0.0.0.0`,同一區網內的其他裝置可能連線到看板。只需在本機瀏覽時,請將 `HOST` 設為 `127.0.0.1`。**
513
+
514
+ 範例:
515
+
516
+ ```bash
517
+ HOST="127.0.0.1" INSIGHTS_DIR="/tmp/token-usage-insights" PORT="3010" "$HOME/.local/bin/token-usage-insights"
518
+ ```
519
+
520
+ Windows PowerShell 範例:
521
+
522
+ ```powershell
523
+ $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"
524
+ ```
525
+
526
+ * * *
527
+
528
+ ## 常駐服務
529
+
530
+ ### Linux:一行安裝並啟用 systemd 使用者服務
531
+
532
+ ```bash
533
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash -s -- --service
534
+ ```
535
+
536
+ 這會下載安裝版並立即啟用 `token-usage-insights.service`,不需要自行建置或修改 systemd 檔案。
537
+
538
+ ### 管理服務
539
+
540
+ ```bash
541
+ systemctl --user status token-usage-insights.service
542
+ journalctl --user -u token-usage-insights.service -n 50 -f
543
+ systemctl --user restart token-usage-insights.service
544
+ systemctl --user stop token-usage-insights.service
545
+ ```
546
+
547
+ * * *
548
+
549
+ ## 安裝選項與手動安裝
550
+
551
+ GitHub Release 提供 Linux、macOS 與 Windows 的已編譯可執行檔,安裝與執行都不需要 Rust 或 Cargo。
552
+
553
+ ### 使用 npx 直接執行
554
+
555
+ 電腦已有 Node.js 18.18 或更新版本時,執行以下命令即可下載目前版本並啟動看板:
556
+
557
+ ```bash
558
+ npx --yes token-usage-insights
559
+ ```
560
+
561
+ `npx` 不會建立全域命令;每次都可使用相同命令啟動。若需要固定的 `token-usage-insights` 系統命令、自訂安裝目錄,或安裝 Linux systemd 服務,請改用下一節的安裝腳本。
562
+
563
+ ### 一行安裝的選用參數
564
+
565
+ `scripts/get.sh`(Linux / macOS)與 `scripts/get.ps1`(Windows)會自動判斷平台與 CPU 架構、從最新(或指定)Release 下載對應壓縮包、解壓後呼叫套件內的 `install.sh` / `install.ps1`,全程不需要手動下載或解壓:
566
+
567
+ Linux / macOS:
568
+
569
+ ```bash
570
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash
571
+ ```
572
+
573
+ Linux 如需同時安裝並啟用 systemd user service:
574
+
575
+ ```bash
576
+ curl -fsSL https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.sh | bash -s -- --service
577
+ ```
578
+
579
+ Windows PowerShell:
580
+
581
+ ```powershell
582
+ irm https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.ps1 | iex
583
+ ```
584
+
585
+ 安裝完成後即可執行(Linux/macOS 需確認 `bin_dir` 已加入 `PATH`;Windows 會建立 `.cmd` shim):
586
+
587
+ ```bash
588
+ token-usage-insights
589
+ ```
590
+
591
+ 環境變數可控制版本與安裝路徑(皆為選用):
592
+
593
+ | 變數 | 適用平台 | 說明 |
594
+ | --- | --- | --- |
595
+ | `TOKEN_USAGE_INSIGHTS_VERSION` | Linux / macOS / Windows | 指定要安裝的 Release tag,例如 `v0.9.0`。預設 `latest` |
596
+ | `TOKEN_USAGE_INSIGHTS_INSTALL_DIR` | Linux / macOS | 安裝目錄,會轉交給 `install.sh` |
597
+ | `TOKEN_USAGE_INSIGHTS_BIN_DIR` | Linux / macOS | 執行檔連結目錄,會轉交給 `install.sh` |
598
+
599
+ Windows 若要自訂安裝位置、bin 目錄與埠號,需先下載腳本再帶參數執行(`iex` 管線不支援傳參數):
600
+
601
+ ```powershell
602
+ Invoke-WebRequest -Uri https://raw.githubusercontent.com/doggy8088/TokenUsageInsights/main/scripts/get.ps1 -OutFile get.ps1
603
+ .\get.ps1 -InstallDir 'D:\Apps\Token Usage Insights' -Port 3010
604
+ ```
605
+
606
+ ### 手動下載安裝
607
+
608
+ 若不想直接執行遠端腳本,也可以手動下載對應平台壓縮包並執行套件內建的安裝腳本。每個 Release 壓縮包都包含:
609
+
610
+ - 單一平台可執行檔
611
+ - `static/` 前端資產
612
+ - `pricing.csv` 模型費用表
613
+ - `shell/` 目錄下的 Status Line 與服務腳本
614
+ - `scripts/` 目錄(含 `install.sh`、`install.ps1`、`get.sh`、`get.ps1`)
615
+ - README、LICENSE 與 VERSION
616
+
617
+ Linux 或 macOS:
618
+
619
+ ```bash
620
+ tar -xzf token-usage-insights-<tag>-<target>.tar.gz
621
+ cd token-usage-insights-<tag>-<target>
622
+ ./install.sh
623
+ ```
624
+
625
+ Linux 如需安裝並啟用 systemd user service:
626
+
627
+ ```bash
628
+ ./install.sh --service
629
+ ```
630
+
631
+ Windows:
632
+
633
+ ```powershell
634
+ Expand-Archive token-usage-insights-<tag>-x86_64-pc-windows-msvc.zip
635
+ cd token-usage-insights-<tag>-x86_64-pc-windows-msvc
636
+ powershell -ExecutionPolicy Bypass -File .\install.ps1
637
+ ```
638
+
639
+ 自訂 Windows 安裝位置與埠號:
640
+
641
+ ```powershell
642
+ .\install.ps1 -InstallDir 'D:\Apps\Token Usage Insights' -BinDir "$HOME\bin" -Port 3010
643
+ ```
644
+
645
+ ### CI 驗證
646
+
647
+ `Release` workflow 每次建置都會在 Linux、macOS 與 Windows 上實際執行對應的安裝腳本(`install.sh` / `install.ps1`),安裝後啟動可執行檔並確認:
648
+
649
+ - 服務會在指定埠號回應 `/api/<assistant>/pricing`
650
+ - 回應內容確實載入了套件內的 `pricing.csv`
651
+ - 全新的 `INSIGHTS_DIR` 會被建立並產生 SQLite 資料庫
652
+
653
+ `get.sh` 與 `get.ps1` 也會在每次建置時先做語法檢查(`bash -n` 與 PowerShell AST 剖析),確保推送到 Release 的版本可以正常執行。
654
+
655
+ ### 維護者發行
656
+
657
+ 推送 Git tag 後,GitHub Actions 會自動建立對應 Release:
658
+
659
+ ```bash
660
+ git tag vX.Y.Z
661
+ git push origin vX.Y.Z
662
+ ```
663
+
664
+ npm 第一次上架、Trusted Publishing 的必要欄位、GitHub Environment、Repository variable 與後續 OIDC 自動發布流程,請依照 [npm 首次上架與 Trusted Publishing 設定](docs/npm-publishing.md) 操作。
665
+
666
+ * * *
667
+
668
+ ## 舊資料遷移
669
+
670
+ 若你以前使用過下列獨立專案,啟動本專案時會自動嘗試遷移舊 SQLite 資料:
671
+
672
+ - `~/.gemini/antigravity-cli/antigravity_cli_token_insights.db`
673
+ - `~/.copilot/copilot_cli_token_insights.db`
674
+ - `~/.codex/codex_cli_token_insights.db`
675
+
676
+ 遷移成功後,舊資料庫會被改名為 `.bak`。
677
+
678
+ 若你已確認資料遷移完成,可以停用舊服務:
679
+
680
+ ```bash
681
+ systemctl --user stop copilot-cli-token-insights.service
682
+ systemctl --user disable copilot-cli-token-insights.service
683
+ systemctl --user stop antigravity-cli-token-insights.service
684
+ systemctl --user disable antigravity-cli-token-insights.service
685
+ systemctl --user stop codex-cli-token-insights.service
686
+ systemctl --user disable codex-cli-token-insights.service
687
+
688
+ rm -f ~/.config/systemd/user/copilot-cli-token-insights.service
689
+ rm -f ~/.config/systemd/user/antigravity-cli-token-insights.service
690
+ rm -f ~/.config/systemd/user/codex-cli-token-insights.service
691
+
692
+ systemctl --user daemon-reload
693
+ systemctl --user reset-failed
694
+ ```
695
+
696
+ * * *
697
+
698
+ ## 疑難排查
699
+
700
+ ### 看板沒有資料
701
+
702
+ 依工具檢查資料來源是否存在:
703
+
704
+ ```bash
705
+ ls ~/.gemini/antigravity-cli/usage
706
+ ls ~/.copilot/usage
707
+ ls ~/.codex/sessions
708
+ ls ~/.codex/archived_sessions
709
+ ls ~/.claude/projects
710
+ ```
711
+
712
+ Antigravity CLI 與 Copilot CLI 還需要確認 `settings.json` 已設定 `statusLine`,且腳本具備執行權限。
713
+
714
+ Windows PowerShell 可直接檢查原生資料目錄:
715
+
716
+ ```powershell
717
+ Get-ChildItem "$env:USERPROFILE\.gemini\antigravity-cli\usage"
718
+ Get-ChildItem "$env:USERPROFILE\.copilot\usage"
719
+ Get-ChildItem "$env:USERPROFILE\.codex\sessions"
720
+ Get-ChildItem "$env:USERPROFILE\.codex\archived_sessions"
721
+ Get-ChildItem "$env:USERPROFILE\.claude\projects"
722
+ ```
723
+
724
+ ### Status Line 腳本無法執行
725
+
726
+ ```bash
727
+ command -v jq
728
+ chmod +x ~/.gemini/antigravity-cli/statusline-token.sh
729
+ chmod +x ~/.copilot/statusline-token.sh
730
+ ```
731
+
732
+ Status Line 腳本依賴 `jq` 解析 CLI 傳入的 JSON。
733
+
734
+ 上述 `jq` 需求只適用於 `.sh` collector。Windows `.ps1` collector 可用下列命令測試,並會原生處理反斜線與含空白路徑:
735
+
736
+ ```powershell
737
+ Write-Output '{}' | powershell.exe -NoProfile -ExecutionPolicy Bypass -File "$env:USERPROFILE\.gemini\antigravity-cli\statusline-token.ps1" -Assistant antigravity
738
+ ```
739
+
740
+ ### 設定檔 JSON 格式錯誤
741
+
742
+ ```bash
743
+ jq . ~/.gemini/antigravity-cli/settings.json
744
+ jq . ~/.copilot/settings.json
745
+ ```
746
+
747
+ 若已經有其他設定,請合併 `statusLine` 物件,不要把整個檔案替換成陣列或純字串。
748
+
749
+ ### 連不上 `localhost:3003`
750
+
751
+ ```bash
752
+ PORT=3010 "$HOME/.local/bin/token-usage-insights"
753
+ ```
754
+
755
+ 若改用其他埠號,請開啟對應網址,例如:
756
+
757
+ ```text
758
+ http://localhost:3010
759
+ ```
760
+
761
+ * * *
762
+
763
+ ## 開發指令
764
+
765
+ 本節僅供需要修改或從原始碼建置專案的開發者使用;一般使用請採用前述一行安裝指令。
766
+
767
+ ```bash
768
+ git clone https://github.com/doggy8088/TokenUsageInsights.git
769
+ cd TokenUsageInsights
770
+ cargo fmt
771
+ cargo test
772
+ cargo clippy --all-targets --all-features
773
+ cargo build --release
774
+ ./target/release/token-usage-insights
775
+ ```
776
+
777
+ * * *
778
+
779
+ ## 專案檔案
780
+
781
+ ```text
782
+ src/ Rust 後端、API、SQLite 同步、價格與時間軸解析
783
+ static/ 前端 HTML、JavaScript、CSS 與圖片資產
784
+ shell/ Bash/PowerShell Status Line collector 與 systemd 服務範本
785
+ scripts/ Linux/macOS、Windows 安裝與 Windows smoke test
786
+ pricing.csv 模型價格表,本地估算費用依此檔案載入
787
+ ```
788
+
789
+ * * *
790
+
791
+ ## 畫面展示
792
+
793
+ ![Token 戰情室每日看板](screenshots/codex-daily-2026-07-07-desktop-chrome.png)
794
+
795
+ ![Token 戰情室月度看板](screenshots/codex-daily-2026-07-07.png)
796
+
797
+ ![Token 戰情室 Session 時間軸](screenshots/codex-daily-2026-07-07-desktop-chrome.png)