vibe-coding-tracker 2.2.0__tar.gz → 2.2.2__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: vibe-coding-tracker
3
- Version: 2.2.0
3
+ Version: 2.2.2
4
4
  Summary: Vibe Coding Tracker - AI coding assistant telemetry/usage parser, aggregate JSONL events into CodeAnalysis results
5
5
  Keywords: cli,ai,coding-assistant,telemetry,claude,codex,gemini,usage-tracker,analytics
6
6
  Author: Wei Lee
@@ -302,12 +302,15 @@ Totals (by Provider)
302
302
  "output_tokens": 936186,
303
303
  "cache_read_input_tokens": 138099926,
304
304
  "cache_creation_input_tokens": 6057836,
305
- "reasoning_output_tokens": 0
305
+ "reasoning_output_tokens": 0,
306
+ "total_tokens": 145495885
306
307
  }
307
308
  }
308
309
  ]
309
310
  ```
310
311
 
312
+ Every row serializes the same flat token fields regardless of provider (Codex's internal nested shape is normalized before output).
313
+
311
314
  ### What It Scans
312
315
 
313
316
  The tool automatically scans these directories:
@@ -368,7 +371,7 @@ A panel appears only for a provider whose credentials are present. When four pan
368
371
  | `--json` | Complete parser results as JSON: one object for `<FILE>`, otherwise an array of objects |
369
372
  | `--daily` / `--weekly` / `--monthly` / `--all` | Time range filter for all-session analysis (see table above; not accepted with `<FILE>`) |
370
373
 
371
- See [`examples/`](examples/) for sample inputs and matching JSON outputs for the four JSONL providers, plus the Grok session fixture under [`examples/grok_session/`](examples/grok_session/).
374
+ See [`tests/fixtures/sessions/`](tests/fixtures/sessions/) for sample inputs and matching JSON outputs for the four JSONL providers, plus the Grok session fixture under [`tests/fixtures/sessions/grok/`](tests/fixtures/sessions/grok/).
372
375
 
373
376
  ### Basic Usage
374
377
 
@@ -426,7 +429,7 @@ vct analysis --json --daily > today.json
426
429
 
427
430
  ### Preview: Table & JSON (`vct analysis`)
428
431
 
429
- `--table` renders the per-model breakdown plus a per-provider summary (with an Active Days column). `--text` and `--table` are compact projections of the same normalized parser records. `--json` keeps the complete records, including per-operation details and token usage. With no `<FILE>`, the outer array contains one `CodeAnalysis` object per session; with `<FILE>`, stdout is that single object and matches the corresponding shape under [`examples/`](examples/).
432
+ `--table` renders the per-model breakdown plus a per-provider summary (with an Active Days column). `--text` and `--table` are compact projections of the same normalized parser records. `--json` keeps the complete records, including per-operation details and token usage. With no `<FILE>`, the outer array contains one `CodeAnalysis` object per session; with `<FILE>`, stdout is that single object and matches the corresponding shape under [`tests/fixtures/sessions/`](tests/fixtures/sessions/).
430
433
 
431
434
  ```text
432
435
  Analysis Statistics
@@ -682,12 +685,15 @@ vct config migrate
682
685
  4. **Fuzzy (AI-powered)**: Uses Jaro-Winkler similarity (70% threshold)
683
686
  5. **Fallback**: Shows $0.00 if no match found
684
687
 
688
+ 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.
689
+
685
690
  ### Cost Details
686
691
 
692
+ - **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.
687
693
  - **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.
688
694
  - **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.
689
695
  - **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
690
- - **Grok**: `contextTokensUsed` is priced as cache-read tokens only; this is a point-in-time local context estimate, not cumulative billed usage.
696
+ - **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.
691
697
  - **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.
692
698
 
693
699
  ---
@@ -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:
@@ -342,7 +345,7 @@ A panel appears only for a provider whose credentials are present. When four pan
342
345
  | `--json` | Complete parser results as JSON: one object for `<FILE>`, otherwise an array of objects |
343
346
  | `--daily` / `--weekly` / `--monthly` / `--all` | Time range filter for all-session analysis (see table above; not accepted with `<FILE>`) |
344
347
 
345
- See [`examples/`](examples/) for sample inputs and matching JSON outputs for the four JSONL providers, plus the Grok session fixture under [`examples/grok_session/`](examples/grok_session/).
348
+ See [`tests/fixtures/sessions/`](tests/fixtures/sessions/) for sample inputs and matching JSON outputs for the four JSONL providers, plus the Grok session fixture under [`tests/fixtures/sessions/grok/`](tests/fixtures/sessions/grok/).
346
349
 
347
350
  ### Basic Usage
348
351
 
@@ -400,7 +403,7 @@ vct analysis --json --daily > today.json
400
403
 
401
404
  ### Preview: Table & JSON (`vct analysis`)
402
405
 
403
- `--table` renders the per-model breakdown plus a per-provider summary (with an Active Days column). `--text` and `--table` are compact projections of the same normalized parser records. `--json` keeps the complete records, including per-operation details and token usage. With no `<FILE>`, the outer array contains one `CodeAnalysis` object per session; with `<FILE>`, stdout is that single object and matches the corresponding shape under [`examples/`](examples/).
406
+ `--table` renders the per-model breakdown plus a per-provider summary (with an Active Days column). `--text` and `--table` are compact projections of the same normalized parser records. `--json` keeps the complete records, including per-operation details and token usage. With no `<FILE>`, the outer array contains one `CodeAnalysis` object per session; with `<FILE>`, stdout is that single object and matches the corresponding shape under [`tests/fixtures/sessions/`](tests/fixtures/sessions/).
404
407
 
405
408
  ```text
406
409
  Analysis Statistics
@@ -656,12 +659,15 @@ vct config migrate
656
659
  4. **Fuzzy (AI-powered)**: Uses Jaro-Winkler similarity (70% threshold)
657
660
  5. **Fallback**: Shows $0.00 if no match found
658
661
 
662
+ 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.
663
+
659
664
  ### Cost Details
660
665
 
666
+ - **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
667
  - **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
668
  - **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
669
  - **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.
670
+ - **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
671
  - **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
672
 
667
673
  ---
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vibe_coding_tracker"
3
- version = "2.2.0"
3
+ version = "2.2.2"
4
4
  description = "Vibe Coding Tracker - AI coding assistant telemetry/usage parser, aggregate JSONL events into CodeAnalysis results"
5
5
  authors = [
6
6
  { name = "Wei Lee", email = "mai@mai0313.com" }