@mai0313/vibe-coding-tracker 2.2.1 → 2.2.3

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 CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  # Vibe Coding Tracker — AI Coding Assistant Usage Tracker
4
4
 
5
- [![Crates.io](https://img.shields.io/crates/v/vibe_coding_tracker?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vibe_coding_tracker)
6
- [![Crates.io Downloads](https://img.shields.io/crates/d/vibe_coding_tracker?logo=rust&style=flat-square)](https://crates.io/crates/vibe_coding_tracker)
5
+ [![Crates.io](https://img.shields.io/crates/v/vct-cli?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vct-cli)
6
+ [![Crates.io Downloads](https://img.shields.io/crates/d/vct-cli?logo=rust&style=flat-square)](https://crates.io/crates/vct-cli)
7
7
  [![npm version](https://img.shields.io/npm/v/vibe-coding-tracker?logo=npm&style=flat-square&color=CB3837)](https://www.npmjs.com/package/vibe-coding-tracker)
8
8
  [![npm downloads](https://img.shields.io/npm/dt/vibe-coding-tracker?logo=npm&style=flat-square)](https://www.npmjs.com/package/vibe-coding-tracker)
9
9
  [![PyPI version](https://img.shields.io/pypi/v/vibe_coding_tracker?logo=python&style=flat-square&color=3776AB)](https://pypi.org/project/vibe_coding_tracker/)
@@ -117,7 +117,7 @@ uvx vibe_coding_tracker usage
117
117
  Install using Cargo from the official Rust package registry:
118
118
 
119
119
  ```bash
120
- cargo install vibe_coding_tracker
120
+ cargo install vct-cli
121
121
  ```
122
122
 
123
123
  ### First Run
@@ -148,7 +148,7 @@ Commands:
148
148
  usage Display token usage statistics
149
149
  version Display version information
150
150
  update Update to the latest version from GitHub releases
151
- fetch Fetch a provider's raw quota/usage API response
151
+ quota Fetch a provider's raw quota/usage API response
152
152
  config Show or edit the persistent settings file (~/.vct/config.toml)
153
153
  help Print this message or the help of the given subcommand(s)
154
154
  ```
@@ -276,12 +276,15 @@ Totals (by Provider)
276
276
  "output_tokens": 936186,
277
277
  "cache_read_input_tokens": 138099926,
278
278
  "cache_creation_input_tokens": 6057836,
279
- "reasoning_output_tokens": 0
279
+ "reasoning_output_tokens": 0,
280
+ "total_tokens": 145495885
280
281
  }
281
282
  }
282
283
  ]
283
284
  ```
284
285
 
286
+ Every row serializes the same flat token fields regardless of provider (Codex's internal nested shape is normalized before output).
287
+
285
288
  ### What It Scans
286
289
 
287
290
  The tool automatically scans these directories:
@@ -295,7 +298,7 @@ The tool automatically scans these directories:
295
298
  - `~/.hermes/state.db` (Hermes — SQLite database, honors `$HERMES_HOME`; `usage` only)
296
299
  - `$GROK_HOME/sessions/*/*/signals.json` (Grok CLI — defaults to `~/.grok`; sibling `updates.jsonl` supplies `analysis` data)
297
300
 
298
- Grok `usage` is one point-in-time local context estimate: vct records `signals.json`'s `contextTokensUsed` as cache-read tokens and estimates cost at the model's cache-read price. It is not cumulative billed usage. `analysis` reconstructs completed Read / Write / Edit / Bash / TodoWrite operations from the sibling `updates.jsonl`. Grok does not support quota panels or `vct fetch`.
301
+ Grok `usage` is one point-in-time local context estimate: vct records `signals.json`'s `contextTokensUsed` as cache-read tokens and estimates cost at the model's cache-read price. It is not cumulative billed usage. `analysis` reconstructs completed Read / Write / Edit / Bash / TodoWrite operations from the sibling `updates.jsonl`. Grok does not support quota panels or `vct quota`.
299
302
 
300
303
  For noninteractive `usage` and `analysis` scans, vct exits with an error when every discovered source fails. If only some sources fail, it keeps the successful results and prints one diagnostic summary to stderr. The TUI stays best-effort and preserves its last successful payload instead.
301
304
 
@@ -506,12 +509,14 @@ The binary version is produced at build time by `build.rs` from `git describe`,
506
509
 
507
510
  ---
508
511
 
509
- ## Fetch Command
512
+ ## Quota Command
510
513
 
511
514
  **Print a provider's raw quota/usage API response — no parsing, no aggregation.**
512
515
 
513
516
  Calls the same quota endpoint the `usage` dashboard uses (Claude / Codex / Copilot / Cursor) exactly once and prints the raw body, so you can inspect the exact API shape or sanity-check your credentials. It reads each provider's stored credentials and does **not** refresh tokens: if a token is expired, re-auth with that provider's own CLI (`claude` / `codex` / `copilot` / `cursor-agent`).
514
517
 
518
+ > The previous name `vct fetch` is kept as a hidden alias, so existing scripts keep working.
519
+
515
520
  ### Flags
516
521
 
517
522
  | Flag | Purpose |
@@ -525,16 +530,16 @@ Calls the same quota endpoint the `usage` dashboard uses (Claude / Codex / Copil
525
530
 
526
531
  ```bash
527
532
  # Raw JSON (default)
528
- vct fetch claude
529
- vct fetch codex
530
- vct fetch copilot
531
- vct fetch cursor
533
+ vct quota claude
534
+ vct quota codex
535
+ vct quota copilot
536
+ vct quota cursor
532
537
 
533
538
  # Flattened plain text
534
- vct fetch codex --text
539
+ vct quota codex --text
535
540
 
536
541
  # Flattened key/value table
537
- vct fetch copilot --table
542
+ vct quota copilot --table
538
543
  ```
539
544
 
540
545
  > [!NOTE]
@@ -656,12 +661,15 @@ vct config migrate
656
661
  4. **Fuzzy (AI-powered)**: Uses Jaro-Winkler similarity (70% threshold)
657
662
  5. **Fallback**: Shows $0.00 if no match found
658
663
 
664
+ Generic placeholder names (e.g. `default`, what cursor-agent records for auto-mode sessions) and very short names never take a substring/fuzzy match — unpriced is safer than a coincidental neighbor's price.
665
+
659
666
  ### Cost Details
660
667
 
668
+ - **Context tiers are per request**: LiteLLM's "above Nk tokens" rates (e.g. GPT-5.x above 272k, Gemini above 200k) apply only to requests whose own prompt context crossed the threshold. Providers without per-request granularity — and offline scans — bill at base rates, so tiered-model costs are a lower bound there.
661
669
  - **Beyond tokens**: Claude web-search tool calls (`server_tool_use.web_search_requests`) are billed per query on top of the token cost; every other model's per-query charge is $0.
662
670
  - **OpenCode**: a novel model name is priced from its tokens only on an **exact** LiteLLM match; with no exact match, vct trusts the assistant message's own stored cost instead of guessing from a loosely-similar name.
663
671
  - **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
664
- - **Grok**: `contextTokensUsed` is priced as cache-read tokens only; this is a point-in-time local context estimate, not cumulative billed usage.
672
+ - **Grok**: `contextTokensUsed` is priced as cache-read tokens only (falling back to the input rate when the model publishes no cache-read price); this is a point-in-time local context estimate, not cumulative billed usage.
665
673
  - **Cache is raw**: the daily cache stores the filtered upstream LiteLLM JSON (not a derived shape), so tiered / batch pricing stays available without re-fetching, and each pricing map owns a small in-process LRU so repeated lookups stay cheap without cross-map contamination.
666
674
 
667
675
  ---
package/README.zh-CN.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  # Vibe Coding Tracker — AI 编程助手使用量追踪器
4
4
 
5
- [![Crates.io](https://img.shields.io/crates/v/vibe_coding_tracker?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vibe_coding_tracker)
6
- [![Crates.io Downloads](https://img.shields.io/crates/d/vibe_coding_tracker?logo=rust&style=flat-square)](https://crates.io/crates/vibe_coding_tracker)
5
+ [![Crates.io](https://img.shields.io/crates/v/vct-cli?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vct-cli)
6
+ [![Crates.io Downloads](https://img.shields.io/crates/d/vct-cli?logo=rust&style=flat-square)](https://crates.io/crates/vct-cli)
7
7
  [![npm version](https://img.shields.io/npm/v/vibe-coding-tracker?logo=npm&style=flat-square&color=CB3837)](https://www.npmjs.com/package/vibe-coding-tracker)
8
8
  [![npm downloads](https://img.shields.io/npm/dt/vibe-coding-tracker?logo=npm&style=flat-square)](https://www.npmjs.com/package/vibe-coding-tracker)
9
9
  [![PyPI version](https://img.shields.io/pypi/v/vibe_coding_tracker?logo=python&style=flat-square&color=3776AB)](https://pypi.org/project/vibe_coding_tracker/)
@@ -117,7 +117,7 @@ uvx vibe_coding_tracker usage
117
117
  使用 Cargo 从 Rust 官方包注册中心安装:
118
118
 
119
119
  ```bash
120
- cargo install vibe_coding_tracker
120
+ cargo install vct-cli
121
121
  ```
122
122
 
123
123
  ### 首次运行
@@ -148,7 +148,7 @@ Commands:
148
148
  usage Display token usage statistics
149
149
  version Display version information
150
150
  update Update to the latest version from GitHub releases
151
- fetch Fetch a provider's raw quota/usage API response
151
+ quota Fetch a provider's raw quota/usage API response
152
152
  config Show or edit the persistent settings file (~/.vct/config.toml)
153
153
  help Print this message or the help of the given subcommand(s)
154
154
  ```
@@ -276,12 +276,15 @@ Totals (by Provider)
276
276
  "output_tokens": 936186,
277
277
  "cache_read_input_tokens": 138099926,
278
278
  "cache_creation_input_tokens": 6057836,
279
- "reasoning_output_tokens": 0
279
+ "reasoning_output_tokens": 0,
280
+ "total_tokens": 145495885
280
281
  }
281
282
  }
282
283
  ]
283
284
  ```
284
285
 
286
+ 无论来源 provider 是什么,每一行都会输出相同的扁平 token 字段(Codex 内部的嵌套结构会在输出前规范化)。
287
+
285
288
  ### 扫描范围
286
289
 
287
290
  该工具会自动扫描以下目录:
@@ -295,7 +298,7 @@ Totals (by Provider)
295
298
  - `~/.hermes/state.db`(Hermes,SQLite 数据库,遵循 `$HERMES_HOME`;仅 `usage`)
296
299
  - `$GROK_HOME/sessions/*/*/signals.json`(Grok CLI,默认使用 `~/.grok`;同层的 `updates.jsonl` 提供 `analysis` 数据)
297
300
 
298
- Grok 的 `usage` 是单一时点的本地 context 估算:vct 会把 `signals.json` 的 `contextTokensUsed` 记为 cache-read token,并按该 model 的 cache-read 费率估算费用。这不是累计的 billed usage。`analysis` 会从同层的 `updates.jsonl` 还原已完成的 Read / Write / Edit / Bash / TodoWrite 操作。Grok 不支持 quota panel 或 `vct fetch`。
301
+ Grok 的 `usage` 是单一时点的本地 context 估算:vct 会把 `signals.json` 的 `contextTokensUsed` 记为 cache-read token,并按该 model 的 cache-read 费率估算费用。这不是累计的 billed usage。`analysis` 会从同层的 `updates.jsonl` 还原已完成的 Read / Write / Edit / Bash / TodoWrite 操作。Grok 不支持 quota panel 或 `vct quota`。
299
302
 
300
303
  对于非交互式 `usage` 与 `analysis` 扫描, 如果所有找到的 source 都失败, vct 会以错误结束. 如果只有部分 source 失败, vct 会保留成功的结果, 并向 stderr 打印一则诊断摘要. TUI 则保持 best-effort, 并保留上一次成功的 payload.
301
304
 
@@ -506,12 +509,14 @@ Binary version 由 `build.rs` 在编译期通过 `git describe` 写入,开发
506
509
 
507
510
  ---
508
511
 
509
- ## Fetch 命令
512
+ ## Quota 命令
510
513
 
511
514
  **打印某个供应商的原始 quota/usage API 响应 — 不解析、不聚合。**
512
515
 
513
516
  对 `usage` 面板使用的同一个 quota 端点(Claude / Codex / Copilot / Cursor)发一次请求,直接打印原始 body,方便你查看 API 的实际结构或检查凭证是否正常。它读取各供应商已保存的凭证,并且**不会**刷新 token:token 过期时,请用对应供应商自己的 CLI 重新登录(`claude` / `codex` / `copilot` / `cursor-agent`)。
514
517
 
518
+ > 旧名称 `vct fetch` 保留为隐藏别名,现有脚本仍可继续使用。
519
+
515
520
  ### 参数
516
521
 
517
522
  | 参数 | 用途 |
@@ -525,16 +530,16 @@ Binary version 由 `build.rs` 在编译期通过 `git describe` 写入,开发
525
530
 
526
531
  ```bash
527
532
  # 原始 JSON(默认)
528
- vct fetch claude
529
- vct fetch codex
530
- vct fetch copilot
531
- vct fetch cursor
533
+ vct quota claude
534
+ vct quota codex
535
+ vct quota copilot
536
+ vct quota cursor
532
537
 
533
538
  # 摊平成纯文本
534
- vct fetch codex --text
539
+ vct quota codex --text
535
540
 
536
541
  # 摊平成 key/value 表格
537
- vct fetch copilot --table
542
+ vct quota copilot --table
538
543
  ```
539
544
 
540
545
  > [!NOTE]
@@ -655,12 +660,15 @@ vct config migrate
655
660
  4. **模糊匹配(AI 驱动)**:使用 Jaro-Winkler 相似度算法(70% 阈值)
656
661
  5. **兜底方案**:如果未找到匹配,显示 $0.00
657
662
 
663
+ 通用的占位名称(例如 cursor-agent 在 auto 模式写入的 `default`)与过短的名称不会进行子串或模糊匹配——宁可不计价,也不捡相似名称的价格。
664
+
658
665
  ### 费用细节
659
666
 
667
+ - **Context tier 按单个 request 计**:LiteLLM 的「above Nk tokens」费率(如 GPT-5.x 超过 272k、Gemini 超过 200k)只应用在自身 prompt context 超过阈值的那些 request 上。没有 per-request 粒度的 provider(以及离线扫描)一律按基础费率计价,因此这类 model 的费用是下界。
660
668
  - **不止 token**:Claude 的 web-search 工具调用(`server_tool_use.web_search_requests`)会在 token 费用之外按每次查询计费;其他所有 model 的每次查询费用均为 $0。
661
669
  - **OpenCode**:只有在 LiteLLM 上**精确**匹配时,才会根据 token 为一个全新的 model 名称定价;若没有精确匹配,vct 会信任该 assistant message 自身存储的费用,而不是从一个只是大致相似的名称去猜测。
662
670
  - **Hermes**:与 OpenCode 相同,LiteLLM 上**精确**匹配时按 token 定价,否则使用 Hermes 自身存储的费用。
663
- - **Grok**:只会把 `contextTokensUsed` 作为 cache-read token 计价;这是单一时点的本地 context 估算,不是累计的 billed usage。
671
+ - **Grok**:只会把 `contextTokensUsed` 作为 cache-read token 计价(若该 model 未公布 cache-read 费率则改用 input 费率);这是单一时点的本地 context 估算,不是累计的 billed usage。
664
672
  - **缓存为原始数据**: 每日 cache 保存经过筛选的 LiteLLM 上游原始 JSON (而非派生结构), 因此 tiered / batch 定价无需重新获取即可使用. 每个 pricing map 各自拥有一个小型 process-local LRU, 重复查找保持低开销, 也不会在不同 map 之间互相污染.
665
673
 
666
674
  ---
package/README.zh-TW.md CHANGED
@@ -2,8 +2,8 @@
2
2
 
3
3
  # Vibe Coding Tracker — AI 程式設計助手使用量追蹤器
4
4
 
5
- [![Crates.io](https://img.shields.io/crates/v/vibe_coding_tracker?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vibe_coding_tracker)
6
- [![Crates.io Downloads](https://img.shields.io/crates/d/vibe_coding_tracker?logo=rust&style=flat-square)](https://crates.io/crates/vibe_coding_tracker)
5
+ [![Crates.io](https://img.shields.io/crates/v/vct-cli?logo=rust&style=flat-square&color=E05D44)](https://crates.io/crates/vct-cli)
6
+ [![Crates.io Downloads](https://img.shields.io/crates/d/vct-cli?logo=rust&style=flat-square)](https://crates.io/crates/vct-cli)
7
7
  [![npm version](https://img.shields.io/npm/v/vibe-coding-tracker?logo=npm&style=flat-square&color=CB3837)](https://www.npmjs.com/package/vibe-coding-tracker)
8
8
  [![npm downloads](https://img.shields.io/npm/dt/vibe-coding-tracker?logo=npm&style=flat-square)](https://www.npmjs.com/package/vibe-coding-tracker)
9
9
  [![PyPI version](https://img.shields.io/pypi/v/vibe_coding_tracker?logo=python&style=flat-square&color=3776AB)](https://pypi.org/project/vibe_coding_tracker/)
@@ -117,7 +117,7 @@ uvx vibe_coding_tracker usage
117
117
  使用 Cargo 從官方 Rust 套件倉庫安裝:
118
118
 
119
119
  ```bash
120
- cargo install vibe_coding_tracker
120
+ cargo install vct-cli
121
121
  ```
122
122
 
123
123
  ### 首次執行
@@ -148,7 +148,7 @@ Commands:
148
148
  usage Display token usage statistics
149
149
  version Display version information
150
150
  update Update to the latest version from GitHub releases
151
- fetch Fetch a provider's raw quota/usage API response
151
+ quota Fetch a provider's raw quota/usage API response
152
152
  config Show or edit the persistent settings file (~/.vct/config.toml)
153
153
  help Print this message or the help of the given subcommand(s)
154
154
  ```
@@ -276,12 +276,15 @@ Totals (by Provider)
276
276
  "output_tokens": 936186,
277
277
  "cache_read_input_tokens": 138099926,
278
278
  "cache_creation_input_tokens": 6057836,
279
- "reasoning_output_tokens": 0
279
+ "reasoning_output_tokens": 0,
280
+ "total_tokens": 145495885
280
281
  }
281
282
  }
282
283
  ]
283
284
  ```
284
285
 
286
+ 無論來源 provider 為何,每一列都會輸出相同的扁平 token 欄位(Codex 內部的巢狀結構會在輸出前正規化)。
287
+
285
288
  ### 掃描範圍
286
289
 
287
290
  此工具會自動掃描以下目錄:
@@ -295,7 +298,7 @@ Totals (by Provider)
295
298
  - `~/.hermes/state.db`(Hermes,SQLite 資料庫,遵循 `$HERMES_HOME`;僅 `usage`)
296
299
  - `$GROK_HOME/sessions/*/*/signals.json`(Grok CLI,預設使用 `~/.grok`;同層的 `updates.jsonl` 提供 `analysis` 資料)
297
300
 
298
- Grok 的 `usage` 是單一當下的本地 context 估算:vct 會把 `signals.json` 的 `contextTokensUsed` 記為 cache-read token,並以該 model 的 cache-read 費率估算費用。這不是累計的 billed usage。`analysis` 會從同層的 `updates.jsonl` 還原已完成的 Read / Write / Edit / Bash / TodoWrite 操作。Grok 不支援 quota panel 或 `vct fetch`。
301
+ Grok 的 `usage` 是單一當下的本地 context 估算:vct 會把 `signals.json` 的 `contextTokensUsed` 記為 cache-read token,並以該 model 的 cache-read 費率估算費用。這不是累計的 billed usage。`analysis` 會從同層的 `updates.jsonl` 還原已完成的 Read / Write / Edit / Bash / TodoWrite 操作。Grok 不支援 quota panel 或 `vct quota`。
299
302
 
300
303
  對於非互動式 `usage` 與 `analysis` 掃描, 如果所有找到的 source 都失敗, vct 會回傳錯誤. 如果只有部分 source 失敗, vct 會保留成功的結果, 並向 stderr 印出一則診斷摘要. TUI 則保持 best-effort, 並保留上一次成功的 payload.
301
304
 
@@ -506,12 +509,14 @@ Binary version 由 `build.rs` 在編譯期透過 `git describe` 寫入,開發
506
509
 
507
510
  ---
508
511
 
509
- ## Fetch 指令
512
+ ## Quota 指令
510
513
 
511
514
  **印出某個供應商的原始 quota/usage API 回應 — 不解析、不彙整。**
512
515
 
513
516
  對 `usage` 面板使用的同一個 quota 端點(Claude / Codex / Copilot / Cursor)發一次請求,直接印出原始 body,方便你檢視 API 的實際結構或確認憑證是否正常。它讀取各供應商已儲存的憑證,而且**不會**刷新 token:token 過期時,請用對應供應商自己的 CLI 重新登入(`claude` / `codex` / `copilot` / `cursor-agent`)。
514
517
 
518
+ > 舊名稱 `vct fetch` 保留為隱藏別名,現有 script 仍可繼續使用。
519
+
515
520
  ### 參數
516
521
 
517
522
  | 參數 | 用途 |
@@ -525,16 +530,16 @@ Binary version 由 `build.rs` 在編譯期透過 `git describe` 寫入,開發
525
530
 
526
531
  ```bash
527
532
  # 原始 JSON(預設)
528
- vct fetch claude
529
- vct fetch codex
530
- vct fetch copilot
531
- vct fetch cursor
533
+ vct quota claude
534
+ vct quota codex
535
+ vct quota copilot
536
+ vct quota cursor
532
537
 
533
538
  # 攤平成純文字
534
- vct fetch codex --text
539
+ vct quota codex --text
535
540
 
536
541
  # 攤平成 key/value 表格
537
- vct fetch copilot --table
542
+ vct quota copilot --table
538
543
  ```
539
544
 
540
545
  > [!NOTE]
@@ -655,12 +660,15 @@ vct config migrate
655
660
  4. **模糊比對(AI 驅動)**:使用 Jaro-Winkler 相似度(70% 門檻值)
656
661
  5. **備援方案**:若無法配對則顯示 $0.00
657
662
 
663
+ 泛用的佔位名稱(例如 cursor-agent 在 auto 模式寫入的 `default`)與過短的名稱不會進行子字串或模糊比對——寧可不計價,也不撿相似名稱的價格。
664
+
658
665
  ### 費用細節
659
666
 
667
+ - **Context tier 以單一 request 計**:LiteLLM 的「above Nk tokens」費率(如 GPT-5.x 超過 272k、Gemini 超過 200k)只套用在自身 prompt context 超過門檻的那些 request 上。沒有 per-request 粒度的 provider(以及離線掃描)一律以基本費率計價,因此這類 model 的費用是下界。
660
668
  - **不只 token**:Claude 的網頁搜尋工具呼叫(`server_tool_use.web_search_requests`)會在 token 費用之外,按每次查詢計費;其他所有 model 的每次查詢費用皆為 $0。
661
669
  - **OpenCode**:只有在 LiteLLM **完全比對**成功時,才會依 token 為新型 model 計價;若沒有完全比對,vct 會採信該 assistant 訊息本身儲存的費用,而不是從名稱相近的 model 去猜測。
662
670
  - **Hermes**:與 OpenCode 相同,LiteLLM **完全比對**成功時依 token 計價,否則使用 Hermes 本身儲存的費用。
663
- - **Grok**:只會把 `contextTokensUsed` 當成 cache-read token 計價;這是單一當下的本地 context 估算,不是累計的 billed usage。
671
+ - **Grok**:只會把 `contextTokensUsed` 當成 cache-read token 計價(若該 model 沒有公布 cache-read 費率則改用 input 費率);這是單一當下的本地 context 估算,不是累計的 billed usage。
664
672
  - **原始 cache**: 每日 cache 儲存經過篩選的 LiteLLM 上游原始 JSON (而非衍生結構), 因此 tiered / batch 定價不需重新取得即可使用. 每個 pricing map 各自擁有一個小型 process-local LRU, 重複查詢維持低成本, 也不會在不同 map 之間互相污染.
665
673
 
666
674
  ---
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mai0313/vibe-coding-tracker",
3
- "version": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "description": "Vibe Coding Tracker - AI coding assistant telemetry/usage parser, aggregate JSONL events into CodeAnalysis results",
5
5
  "author": "Wei Lee <mai@mai0313.com>",
6
6
  "license": "MIT",