vibe-coding-tracker 2.1.0__tar.gz → 2.2.0__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.
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/PKG-INFO +30 -19
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/README.md +29 -18
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/pyproject.toml +1 -1
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/linux-arm64-gnu/vibe_coding_tracker +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/linux-x64-gnu/vibe_coding_tracker +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/macos-arm64/vibe_coding_tracker +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/macos-x64/vibe_coding_tracker +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/windows-arm64/vibe_coding_tracker.exe +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/binaries/windows-x64/vibe_coding_tracker.exe +0 -0
- {vibe_coding_tracker-2.1.0 → vibe_coding_tracker-2.2.0}/src/vibe_coding_tracker/__init__.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: vibe-coding-tracker
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.2.0
|
|
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.
|
|
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**:
|
|
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,
|
|
99
|
-
| **Live Updates** |
|
|
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
|
|
|
@@ -261,6 +261,8 @@ vct usage --table --merge-providers
|
|
|
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.)
|
|
@@ -331,12 +335,13 @@ Grok `usage` is one point-in-time local context estimate: vct records `signals.j
|
|
|
331
335
|
│ 5h ▰▱▱▱▱ 13% ↻ 1h42m││ 5h ▰▰▱▱▱ 33% ↻ 12m ││ prem ▰▱▱▱▱ 3% ↻ 24d ││ total ▰▱▱▱▱ 6% ↻ 16d │
|
|
332
336
|
│ 7d ▰▰▰▱▱ 58% ↻ 1d23h││ 7d ▰▰▱▱▱ 36% ↻ 1h54m││ reqs ▰▱▱▱▱ 45/1500 ││ auto ▱▱▱▱▱ 0% ↻ 16d │
|
|
333
337
|
│ Fable ▰▰▰▰▱ 79% ↻ 1d23h││ Credits: 0 +3 reset ││ updated just now ││ api ▰▰▰▱▱ 56% ↻ 16d │
|
|
334
|
-
│ Balance: - $0.00 used ││
|
|
338
|
+
│ Balance: - $0.00 used ││ reset expires 17d0h ││ ││ updated just now │
|
|
339
|
+
│ updated just now ││ updated just now ││ ││ │
|
|
335
340
|
└─────────────────────────┘└─────────────────────────┘└─────────────────────────┘└─────────────────────────┘
|
|
336
341
|
```
|
|
337
342
|
|
|
338
343
|
- **Claude** — plan tier, 5-hour, weekly, and per-model weekly usage from the official OAuth usage API (`GET /api/oauth/usage`), read from `~/.claude/.credentials.json`, plus your credit balance. Polled about once a minute to stay under the endpoint's rate limit; a red `LIMIT` flag appears in the title when a cap is hit. The per-model weekly row is best-effort and simply hides when that scope is not returned.
|
|
339
|
-
- **Codex** — plan tier, 5-hour and weekly usage,
|
|
344
|
+
- **Codex** — plan tier, 5-hour and weekly usage, credit balance, and the earliest fetched available earned-reset expiry from the ChatGPT backend (`wham/usage` + `wham/rate-limit-reset-credits`) using `~/.codex/auth.json` (with approximate remaining messages / spend cap when applicable); falls back to the newest `rate_limits` in your Codex session logs when the API is unavailable (the title shows `Codex` vs `Codex (session)`).
|
|
340
345
|
- **Copilot** — plan tier plus your premium-request quota, shown as two gauges: percent used and the used / total request count (e.g. `45/1500`), from GitHub's Copilot API (`GET /copilot_internal/user`), read from `~/.copilot/config.json`. The request impersonates the Copilot CLI. The token is long-lived, so there is no refresh; a `401` / `403` shows a `run: copilot login` hint.
|
|
341
346
|
- **Cursor** — plan tier, total / auto / API percent **used**, and on-demand spend from cursor.com (`GET /api/usage-summary`), using the session token in `~/.config/cursor/auth.json`. Refresh is reactive: vct re-reads the file each poll and uses the token while it is valid, since the official Cursor client keeps it fresh.
|
|
342
347
|
|
|
@@ -593,6 +598,11 @@ refresh_interval = 60
|
|
|
593
598
|
# Seconds between automatic redraws of the analysis TUI (minimum 1).
|
|
594
599
|
refresh_interval = 10
|
|
595
600
|
|
|
601
|
+
[performance]
|
|
602
|
+
# Rayon workers used by CLI session scans. 0 selects the measured auto default;
|
|
603
|
+
# a positive value is capped at the machine's available parallelism.
|
|
604
|
+
scan_threads = 0
|
|
605
|
+
|
|
596
606
|
[providers]
|
|
597
607
|
# Include each provider's sessions in usage / analysis. Set a provider to false
|
|
598
608
|
# to skip it entirely (no directory scan, no API).
|
|
@@ -621,6 +631,7 @@ retention_days = 7
|
|
|
621
631
|
| `usage.quota.panels` | Which quota panels to show (`claude` / `codex` / `copilot` / `cursor`); drop a name to hide it, `[]` to hide the whole band. |
|
|
622
632
|
| `usage.quota.refresh_interval` | Poll cadence for every live quota panel (seconds); higher is safer against a provider's rate limits. |
|
|
623
633
|
| `analysis.refresh_interval` | Redraw cadence of the `analysis` dashboard (seconds). |
|
|
634
|
+
| `performance.scan_threads` | CLI scan workers. `0` uses `RAYON_NUM_THREADS` when positive, otherwise at most two workers; every value is CPU-capped. |
|
|
624
635
|
| `providers.*` | Skip a provider entirely (no scan, no API) when `false` — handy if you don't use one. |
|
|
625
636
|
| `logging.level` | Minimum severity written to the log file (`off`..`trace`); never printed to the terminal. |
|
|
626
637
|
| `logging.retention_days` | Days of daily log files to keep; older `vct-*.log` are pruned on startup (`0` keeps all). |
|
|
@@ -656,10 +667,10 @@ vct config migrate
|
|
|
656
667
|
|
|
657
668
|
### How It Works
|
|
658
669
|
|
|
659
|
-
1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm)
|
|
660
|
-
2. **
|
|
661
|
-
3. **
|
|
662
|
-
4. **
|
|
670
|
+
1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) once per UTC day
|
|
671
|
+
2. **Validated Caching**: Accepts only a successful JSON model map containing real prices, then writes it atomically to `~/.vct/`
|
|
672
|
+
3. **Deterministic Matching**: Finds the most specific model match even for versioned or provider-prefixed names
|
|
673
|
+
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
674
|
|
|
664
675
|
### Model Matching
|
|
665
676
|
|
|
@@ -677,7 +688,7 @@ vct config migrate
|
|
|
677
688
|
- **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
689
|
- **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
|
|
679
690
|
- **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
|
|
691
|
+
- **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
692
|
|
|
682
693
|
---
|
|
683
694
|
|
|
@@ -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.
|
|
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**:
|
|
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,
|
|
73
|
-
| **Live Updates** |
|
|
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
|
|
|
@@ -235,6 +235,8 @@ vct usage --table --merge-providers
|
|
|
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.)
|
|
@@ -305,12 +309,13 @@ Grok `usage` is one point-in-time local context estimate: vct records `signals.j
|
|
|
305
309
|
│ 5h ▰▱▱▱▱ 13% ↻ 1h42m││ 5h ▰▰▱▱▱ 33% ↻ 12m ││ prem ▰▱▱▱▱ 3% ↻ 24d ││ total ▰▱▱▱▱ 6% ↻ 16d │
|
|
306
310
|
│ 7d ▰▰▰▱▱ 58% ↻ 1d23h││ 7d ▰▰▱▱▱ 36% ↻ 1h54m││ reqs ▰▱▱▱▱ 45/1500 ││ auto ▱▱▱▱▱ 0% ↻ 16d │
|
|
307
311
|
│ Fable ▰▰▰▰▱ 79% ↻ 1d23h││ Credits: 0 +3 reset ││ updated just now ││ api ▰▰▰▱▱ 56% ↻ 16d │
|
|
308
|
-
│ Balance: - $0.00 used ││
|
|
312
|
+
│ Balance: - $0.00 used ││ reset expires 17d0h ││ ││ updated just now │
|
|
313
|
+
│ updated just now ││ updated just now ││ ││ │
|
|
309
314
|
└─────────────────────────┘└─────────────────────────┘└─────────────────────────┘└─────────────────────────┘
|
|
310
315
|
```
|
|
311
316
|
|
|
312
317
|
- **Claude** — plan tier, 5-hour, weekly, and per-model weekly usage from the official OAuth usage API (`GET /api/oauth/usage`), read from `~/.claude/.credentials.json`, plus your credit balance. Polled about once a minute to stay under the endpoint's rate limit; a red `LIMIT` flag appears in the title when a cap is hit. The per-model weekly row is best-effort and simply hides when that scope is not returned.
|
|
313
|
-
- **Codex** — plan tier, 5-hour and weekly usage,
|
|
318
|
+
- **Codex** — plan tier, 5-hour and weekly usage, credit balance, and the earliest fetched available earned-reset expiry from the ChatGPT backend (`wham/usage` + `wham/rate-limit-reset-credits`) using `~/.codex/auth.json` (with approximate remaining messages / spend cap when applicable); falls back to the newest `rate_limits` in your Codex session logs when the API is unavailable (the title shows `Codex` vs `Codex (session)`).
|
|
314
319
|
- **Copilot** — plan tier plus your premium-request quota, shown as two gauges: percent used and the used / total request count (e.g. `45/1500`), from GitHub's Copilot API (`GET /copilot_internal/user`), read from `~/.copilot/config.json`. The request impersonates the Copilot CLI. The token is long-lived, so there is no refresh; a `401` / `403` shows a `run: copilot login` hint.
|
|
315
320
|
- **Cursor** — plan tier, total / auto / API percent **used**, and on-demand spend from cursor.com (`GET /api/usage-summary`), using the session token in `~/.config/cursor/auth.json`. Refresh is reactive: vct re-reads the file each poll and uses the token while it is valid, since the official Cursor client keeps it fresh.
|
|
316
321
|
|
|
@@ -567,6 +572,11 @@ refresh_interval = 60
|
|
|
567
572
|
# Seconds between automatic redraws of the analysis TUI (minimum 1).
|
|
568
573
|
refresh_interval = 10
|
|
569
574
|
|
|
575
|
+
[performance]
|
|
576
|
+
# Rayon workers used by CLI session scans. 0 selects the measured auto default;
|
|
577
|
+
# a positive value is capped at the machine's available parallelism.
|
|
578
|
+
scan_threads = 0
|
|
579
|
+
|
|
570
580
|
[providers]
|
|
571
581
|
# Include each provider's sessions in usage / analysis. Set a provider to false
|
|
572
582
|
# to skip it entirely (no directory scan, no API).
|
|
@@ -595,6 +605,7 @@ retention_days = 7
|
|
|
595
605
|
| `usage.quota.panels` | Which quota panels to show (`claude` / `codex` / `copilot` / `cursor`); drop a name to hide it, `[]` to hide the whole band. |
|
|
596
606
|
| `usage.quota.refresh_interval` | Poll cadence for every live quota panel (seconds); higher is safer against a provider's rate limits. |
|
|
597
607
|
| `analysis.refresh_interval` | Redraw cadence of the `analysis` dashboard (seconds). |
|
|
608
|
+
| `performance.scan_threads` | CLI scan workers. `0` uses `RAYON_NUM_THREADS` when positive, otherwise at most two workers; every value is CPU-capped. |
|
|
598
609
|
| `providers.*` | Skip a provider entirely (no scan, no API) when `false` — handy if you don't use one. |
|
|
599
610
|
| `logging.level` | Minimum severity written to the log file (`off`..`trace`); never printed to the terminal. |
|
|
600
611
|
| `logging.retention_days` | Days of daily log files to keep; older `vct-*.log` are pruned on startup (`0` keeps all). |
|
|
@@ -630,10 +641,10 @@ vct config migrate
|
|
|
630
641
|
|
|
631
642
|
### How It Works
|
|
632
643
|
|
|
633
|
-
1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm)
|
|
634
|
-
2. **
|
|
635
|
-
3. **
|
|
636
|
-
4. **
|
|
644
|
+
1. **Automatic Updates**: Fetches pricing from [LiteLLM](https://github.com/BerriAI/litellm) once per UTC day
|
|
645
|
+
2. **Validated Caching**: Accepts only a successful JSON model map containing real prices, then writes it atomically to `~/.vct/`
|
|
646
|
+
3. **Deterministic Matching**: Finds the most specific model match even for versioned or provider-prefixed names
|
|
647
|
+
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
648
|
|
|
638
649
|
### Model Matching
|
|
639
650
|
|
|
@@ -651,7 +662,7 @@ vct config migrate
|
|
|
651
662
|
- **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
663
|
- **Hermes**: priced the same way as OpenCode — an **exact** LiteLLM match prices from tokens, otherwise vct uses Hermes's own stored cost.
|
|
653
664
|
- **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
|
|
665
|
+
- **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
666
|
|
|
656
667
|
---
|
|
657
668
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "vibe_coding_tracker"
|
|
3
|
-
version = "2.
|
|
3
|
+
version = "2.2.0"
|
|
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" }
|
|
index 58aa081..795c22e 100755
|
|
|
Binary file
|
|
index fc1246c..70869ba 100755
|
|
|
Binary file
|
|
index f5957c0..7532269 100755
|
|
|
Binary file
|
|
index 202acba..a10f06c 100755
|
|
|
Binary file
|
|
index 5f5d238..fdd9b15 100644
|
|
|
Binary file
|
|
index 6fcdf4d..dfd5de7 100644
|
|
|
Binary file
|
|
File without changes
|