vibe-coding-tracker 2.0.0__tar.gz → 2.1.1__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.0.0
3
+ Version: 2.1.1
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
@@ -61,13 +61,13 @@ Stop wondering how much your AI coding sessions cost. Get **real-time cost track
61
61
 
62
62
  ### Ultra-Lightweight
63
63
 
64
- Built with Rust for minimal resource footprint. The interactive TUI dashboard typically sits at **under ~50 MB of resident memory** once the first refresh is done, even with hundreds of long-context sessions on disk — no Electron, no bloated runtimes. The usage path parses each session file in a lean usage-only mode and bypasses the cache, and we tune glibc's arena count at startup to keep long-running RSS honest.
64
+ Built with Rust for minimal resource footprint. The interactive TUI dashboard typically sits at **under ~50 MB of resident memory** once the first refresh is done, even with hundreds of long-context sessions on disk — no Electron, no bloated runtimes. A compact process-local summary cache reparses only new or changed sources after the first scan, while dedicated scan workers and glibc allocator tuning keep long-running CPU and RSS honest.
65
65
 
66
66
  ### Beautiful Visualizations
67
67
 
68
68
  Choose your preferred view:
69
69
 
70
- - **Interactive Dashboard**: Auto-refreshing terminal UI with live updates, scrollable model list (arrow keys), and compact K/M/B number formatting
70
+ - **Interactive Dashboard**: Responsive terminal UI with an immediate loading spinner, background incremental refreshes, a scrollable model list (arrow keys), a live per-process CPU/memory readout, and compact K/M/B number formatting
71
71
  - **Static Reports**: Professional tables for documentation
72
72
  - **Script-Friendly**: Plain text and JSON for automation
73
73
  - **Full Precision**: Export exact costs for accounting
@@ -88,15 +88,15 @@ Automatically detects and processes logs from Claude Code, Codex, Copilot, Gemin
88
88
 
89
89
  ## Key Features
90
90
 
91
- | Feature | Description |
92
- | --------------------- | ----------------------------------------------------------------------- |
93
- | **Multi-Provider** | Claude Code, Codex, Copilot, Gemini, OpenCode, Cursor, Hermes, and Grok |
94
- | **Smart Pricing** | Fuzzy model matching + daily cache from LiteLLM |
95
- | **4 Display Modes** | Interactive TUI, static table, plain text, and JSON |
96
- | **Dual Analysis** | Token/cost stats (`usage`) + code operation stats (`analysis`) |
97
- | **Live Quota Panels** | Live remaining quota for Claude, Codex, Copilot, and Cursor |
98
- | **Ultra-Lightweight** | Under ~50 MB RSS in the TUI, streaming session parse — built with Rust |
99
- | **Live Updates** | Auto-refreshing dashboard (every 10s) with change highlighting |
91
+ | Feature | Description |
92
+ | --------------------- | ------------------------------------------------------------------------ |
93
+ | **Multi-Provider** | Claude Code, Codex, Copilot, Gemini, OpenCode, Cursor, Hermes, and Grok |
94
+ | **Smart Pricing** | Fuzzy model matching + daily cache from LiteLLM |
95
+ | **4 Display Modes** | Interactive TUI, static table, plain text, and JSON |
96
+ | **Dual Analysis** | Token/cost stats (`usage`) + code operation stats (`analysis`) |
97
+ | **Live Quota Panels** | Live remaining quota for Claude, Codex, Copilot, and Cursor |
98
+ | **Ultra-Lightweight** | Under ~50 MB RSS in the TUI, compact incremental scans — built with Rust |
99
+ | **Live Updates** | Responsive loading and background refreshes with change highlighting |
100
100
 
101
101
  ---
102
102
 
@@ -256,11 +256,13 @@ vct usage --table --merge-providers
256
256
  │ Gemini 207K $0.40 │
257
257
  └─────────────────────────────────────────────────────────────────────────────────────────────┘
258
258
  ┌─────────────────────────────────────────────────────────────────────────────────────────────┐
259
- │ Total Cost: $79.33 | Total Tokens: 49.3M | Models: 3 | Memory: 42.8 MB
259
+ │ Total Cost: $79.33 | Total Tokens: 49.3M | Models: 3 | Memory: 42.8 MB | CPU: 17.9%
260
260
  └─────────────────────────────────────────────────────────────────────────────────────────────┘
261
261
  ↑/↓ scroll m merge r refresh q quit | Star on GitHub
262
262
  ```
263
263
 
264
+ Both interactive dashboards draw a centered `Loading sessions...` spinner as soon as terminal setup finishes. Loading stays responsive to `q`, Ctrl+C, and resize events. Later scans run in one background worker, keep the last successful data visible with a `Refreshing...` footer, and coalesce repeated refresh requests into at most one pending scan. A failed refresh keeps the last-known-good view and retries on the next scheduled or manual refresh.
265
+
264
266
  ### Preview: Table & JSON (`vct usage`)
265
267
 
266
268
  `--table` prints the same numbers as a static report with a per-provider summary; `--json` emits one enriched row per model (each with `cost_usd`) for scripting.
@@ -321,6 +323,8 @@ The tool automatically scans these directories:
321
323
 
322
324
  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`.
323
325
 
326
+ 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.
327
+
324
328
  ### Live Quota Panels
325
329
 
326
330
  `vct usage` shows **live remaining quota for Claude Code, Codex, GitHub Copilot, and Cursor right in the dashboard — with zero setup.** No status-line hook, no credentials to enter: vct reads each provider's own credentials, calls its usage API on a background thread, and keeps the panels current while you work. (Prefer a quieter dashboard? Trim `panels` under `[usage.quota]` in [`config.toml`](#configuration), or set it to `[]` to hide the band.)
@@ -414,7 +418,7 @@ vct analysis --json --daily > today.json
414
418
  │ Gemini 0 0 0 0 0 0 0 0 1 │
415
419
  └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
416
420
  ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
417
- │ Total Lines: 16.1K | Total Tools: 619 | Models: 3 | Memory: 41.2 MB
421
+ │ Total Lines: 16.1K | Total Tools: 619 | Models: 3 | Memory: 41.2 MB | CPU: 17.9%
418
422
  └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
419
423
  ↑/↓ scroll r refresh q quit | Star on GitHub
420
424
  ```
@@ -593,6 +597,11 @@ refresh_interval = 60
593
597
  # Seconds between automatic redraws of the analysis TUI (minimum 1).
594
598
  refresh_interval = 10
595
599
 
600
+ [performance]
601
+ # Rayon workers used by CLI session scans. 0 selects the measured auto default;
602
+ # a positive value is capped at the machine's available parallelism.
603
+ scan_threads = 0
604
+
596
605
  [providers]
597
606
  # Include each provider's sessions in usage / analysis. Set a provider to false
598
607
  # to skip it entirely (no directory scan, no API).
@@ -621,6 +630,7 @@ retention_days = 7
621
630
  | `usage.quota.panels` | Which quota panels to show (`claude` / `codex` / `copilot` / `cursor`); drop a name to hide it, `[]` to hide the whole band. |
622
631
  | `usage.quota.refresh_interval` | Poll cadence for every live quota panel (seconds); higher is safer against a provider's rate limits. |
623
632
  | `analysis.refresh_interval` | Redraw cadence of the `analysis` dashboard (seconds). |
633
+ | `performance.scan_threads` | CLI scan workers. `0` uses `RAYON_NUM_THREADS` when positive, otherwise at most two workers; every value is CPU-capped. |
624
634
  | `providers.*` | Skip a provider entirely (no scan, no API) when `false` — handy if you don't use one. |
625
635
  | `logging.level` | Minimum severity written to the log file (`off`..`trace`); never printed to the terminal. |
626
636
  | `logging.retention_days` | Days of daily log files to keep; older `vct-*.log` are pruned on startup (`0` keeps all). |
@@ -656,10 +666,10 @@ vct config migrate
656
666
 
657
667
  ### How It Works
658
668
 
659
- 1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) daily
660
- 2. **Smart Caching**: Stores pricing in `~/.vct/` for 24 hours
661
- 3. **Fuzzy Matching**: Finds best match even for custom model names
662
- 4. **Always Accurate**: Ensures you get the latest pricing
669
+ 1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) once per UTC day
670
+ 2. **Validated Caching**: Accepts only a successful JSON model map containing real prices, then writes it atomically to `~/.vct/`
671
+ 3. **Deterministic Matching**: Finds the most specific model match even for versioned or provider-prefixed names
672
+ 4. **Failure Safety**: A failed fetch cannot replace a good cache; vct keeps the previous map and backs off for five minutes before another attempt
663
673
 
664
674
  ### Model Matching
665
675
 
@@ -677,7 +687,7 @@ vct config migrate
677
687
  - **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.
678
688
  - **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
679
689
  - **Grok**: `contextTokensUsed` is priced as cache-read tokens only; this is a point-in-time local context estimate, not cumulative billed usage.
680
- - **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 a small in-process LRU keeps repeated lookups cheap during a TUI refresh.
690
+ - **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.
681
691
 
682
692
  ---
683
693
 
@@ -35,13 +35,13 @@ Stop wondering how much your AI coding sessions cost. Get **real-time cost track
35
35
 
36
36
  ### Ultra-Lightweight
37
37
 
38
- Built with Rust for minimal resource footprint. The interactive TUI dashboard typically sits at **under ~50 MB of resident memory** once the first refresh is done, even with hundreds of long-context sessions on disk — no Electron, no bloated runtimes. The usage path parses each session file in a lean usage-only mode and bypasses the cache, and we tune glibc's arena count at startup to keep long-running RSS honest.
38
+ Built with Rust for minimal resource footprint. The interactive TUI dashboard typically sits at **under ~50 MB of resident memory** once the first refresh is done, even with hundreds of long-context sessions on disk — no Electron, no bloated runtimes. A compact process-local summary cache reparses only new or changed sources after the first scan, while dedicated scan workers and glibc allocator tuning keep long-running CPU and RSS honest.
39
39
 
40
40
  ### Beautiful Visualizations
41
41
 
42
42
  Choose your preferred view:
43
43
 
44
- - **Interactive Dashboard**: Auto-refreshing terminal UI with live updates, scrollable model list (arrow keys), and compact K/M/B number formatting
44
+ - **Interactive Dashboard**: Responsive terminal UI with an immediate loading spinner, background incremental refreshes, a scrollable model list (arrow keys), a live per-process CPU/memory readout, and compact K/M/B number formatting
45
45
  - **Static Reports**: Professional tables for documentation
46
46
  - **Script-Friendly**: Plain text and JSON for automation
47
47
  - **Full Precision**: Export exact costs for accounting
@@ -62,15 +62,15 @@ Automatically detects and processes logs from Claude Code, Codex, Copilot, Gemin
62
62
 
63
63
  ## Key Features
64
64
 
65
- | Feature | Description |
66
- | --------------------- | ----------------------------------------------------------------------- |
67
- | **Multi-Provider** | Claude Code, Codex, Copilot, Gemini, OpenCode, Cursor, Hermes, and Grok |
68
- | **Smart Pricing** | Fuzzy model matching + daily cache from LiteLLM |
69
- | **4 Display Modes** | Interactive TUI, static table, plain text, and JSON |
70
- | **Dual Analysis** | Token/cost stats (`usage`) + code operation stats (`analysis`) |
71
- | **Live Quota Panels** | Live remaining quota for Claude, Codex, Copilot, and Cursor |
72
- | **Ultra-Lightweight** | Under ~50 MB RSS in the TUI, streaming session parse — built with Rust |
73
- | **Live Updates** | Auto-refreshing dashboard (every 10s) with change highlighting |
65
+ | Feature | Description |
66
+ | --------------------- | ------------------------------------------------------------------------ |
67
+ | **Multi-Provider** | Claude Code, Codex, Copilot, Gemini, OpenCode, Cursor, Hermes, and Grok |
68
+ | **Smart Pricing** | Fuzzy model matching + daily cache from LiteLLM |
69
+ | **4 Display Modes** | Interactive TUI, static table, plain text, and JSON |
70
+ | **Dual Analysis** | Token/cost stats (`usage`) + code operation stats (`analysis`) |
71
+ | **Live Quota Panels** | Live remaining quota for Claude, Codex, Copilot, and Cursor |
72
+ | **Ultra-Lightweight** | Under ~50 MB RSS in the TUI, compact incremental scans — built with Rust |
73
+ | **Live Updates** | Responsive loading and background refreshes with change highlighting |
74
74
 
75
75
  ---
76
76
 
@@ -230,11 +230,13 @@ vct usage --table --merge-providers
230
230
  │ Gemini 207K $0.40 │
231
231
  └─────────────────────────────────────────────────────────────────────────────────────────────┘
232
232
  ┌─────────────────────────────────────────────────────────────────────────────────────────────┐
233
- │ Total Cost: $79.33 | Total Tokens: 49.3M | Models: 3 | Memory: 42.8 MB
233
+ │ Total Cost: $79.33 | Total Tokens: 49.3M | Models: 3 | Memory: 42.8 MB | CPU: 17.9%
234
234
  └─────────────────────────────────────────────────────────────────────────────────────────────┘
235
235
  ↑/↓ scroll m merge r refresh q quit | Star on GitHub
236
236
  ```
237
237
 
238
+ Both interactive dashboards draw a centered `Loading sessions...` spinner as soon as terminal setup finishes. Loading stays responsive to `q`, Ctrl+C, and resize events. Later scans run in one background worker, keep the last successful data visible with a `Refreshing...` footer, and coalesce repeated refresh requests into at most one pending scan. A failed refresh keeps the last-known-good view and retries on the next scheduled or manual refresh.
239
+
238
240
  ### Preview: Table & JSON (`vct usage`)
239
241
 
240
242
  `--table` prints the same numbers as a static report with a per-provider summary; `--json` emits one enriched row per model (each with `cost_usd`) for scripting.
@@ -295,6 +297,8 @@ The tool automatically scans these directories:
295
297
 
296
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`.
297
299
 
300
+ 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
+
298
302
  ### Live Quota Panels
299
303
 
300
304
  `vct usage` shows **live remaining quota for Claude Code, Codex, GitHub Copilot, and Cursor right in the dashboard — with zero setup.** No status-line hook, no credentials to enter: vct reads each provider's own credentials, calls its usage API on a background thread, and keeps the panels current while you work. (Prefer a quieter dashboard? Trim `panels` under `[usage.quota]` in [`config.toml`](#configuration), or set it to `[]` to hide the band.)
@@ -388,7 +392,7 @@ vct analysis --json --daily > today.json
388
392
  │ Gemini 0 0 0 0 0 0 0 0 1 │
389
393
  └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
390
394
  ┌─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
391
- │ Total Lines: 16.1K | Total Tools: 619 | Models: 3 | Memory: 41.2 MB
395
+ │ Total Lines: 16.1K | Total Tools: 619 | Models: 3 | Memory: 41.2 MB | CPU: 17.9%
392
396
  └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
393
397
  ↑/↓ scroll r refresh q quit | Star on GitHub
394
398
  ```
@@ -567,6 +571,11 @@ refresh_interval = 60
567
571
  # Seconds between automatic redraws of the analysis TUI (minimum 1).
568
572
  refresh_interval = 10
569
573
 
574
+ [performance]
575
+ # Rayon workers used by CLI session scans. 0 selects the measured auto default;
576
+ # a positive value is capped at the machine's available parallelism.
577
+ scan_threads = 0
578
+
570
579
  [providers]
571
580
  # Include each provider's sessions in usage / analysis. Set a provider to false
572
581
  # to skip it entirely (no directory scan, no API).
@@ -595,6 +604,7 @@ retention_days = 7
595
604
  | `usage.quota.panels` | Which quota panels to show (`claude` / `codex` / `copilot` / `cursor`); drop a name to hide it, `[]` to hide the whole band. |
596
605
  | `usage.quota.refresh_interval` | Poll cadence for every live quota panel (seconds); higher is safer against a provider's rate limits. |
597
606
  | `analysis.refresh_interval` | Redraw cadence of the `analysis` dashboard (seconds). |
607
+ | `performance.scan_threads` | CLI scan workers. `0` uses `RAYON_NUM_THREADS` when positive, otherwise at most two workers; every value is CPU-capped. |
598
608
  | `providers.*` | Skip a provider entirely (no scan, no API) when `false` — handy if you don't use one. |
599
609
  | `logging.level` | Minimum severity written to the log file (`off`..`trace`); never printed to the terminal. |
600
610
  | `logging.retention_days` | Days of daily log files to keep; older `vct-*.log` are pruned on startup (`0` keeps all). |
@@ -630,10 +640,10 @@ vct config migrate
630
640
 
631
641
  ### How It Works
632
642
 
633
- 1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) daily
634
- 2. **Smart Caching**: Stores pricing in `~/.vct/` for 24 hours
635
- 3. **Fuzzy Matching**: Finds best match even for custom model names
636
- 4. **Always Accurate**: Ensures you get the latest pricing
643
+ 1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) once per UTC day
644
+ 2. **Validated Caching**: Accepts only a successful JSON model map containing real prices, then writes it atomically to `~/.vct/`
645
+ 3. **Deterministic Matching**: Finds the most specific model match even for versioned or provider-prefixed names
646
+ 4. **Failure Safety**: A failed fetch cannot replace a good cache; vct keeps the previous map and backs off for five minutes before another attempt
637
647
 
638
648
  ### Model Matching
639
649
 
@@ -651,7 +661,7 @@ vct config migrate
651
661
  - **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.
652
662
  - **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
653
663
  - **Grok**: `contextTokensUsed` is priced as cache-read tokens only; this is a point-in-time local context estimate, not cumulative billed usage.
654
- - **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 a small in-process LRU keeps repeated lookups cheap during a TUI refresh.
664
+ - **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.
655
665
 
656
666
  ---
657
667
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "vibe_coding_tracker"
3
- version = "2.0.0"
3
+ version = "2.1.1"
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" }