Releases: TheKrush/PromptFuel
📦 PromptFuel v1.0.6
Fixes the usage dashboard refreshing about once per second when idle.
Included in this release:
- Fixed the usage dashboard and status bar refreshing in a continuous ~1s loop regardless of activity. The state-directory file watcher matched
*.json, which also caughtauthenticated-quota-cache.json— a file the extension rewrites on every refresh. That self-write retriggered the watcher, which scheduled another refresh, which rewrote the cache again, spinning indefinitely. The watcher now targets the external bridge state files explicitly (claude.json,codex.json,codex-completed-turns.json) and no longer reacts to the extension's own cache writes. Periodic refresh (promptFuel.refreshIntervalMinutes, default 5) and live updates from real provider/session file changes are unaffected.
📦 PromptFuel v1.0.5
Improves history refresh performance, hardens quota source tracking, expands CI validation, and adds README privacy disclosure.
Included in this release:
- Improved dashboard/history refresh performance by replacing repeated large Claude/Codex JSONL rescans with incremental per-file history aggregation.
- Changed Codex correlated history scanning to stream session files line-by-line instead of loading entire files into memory.
- Hardened quota source handling by carrying explicit
sourceKindmetadata instead of relying on display-label substring inference. - Expanded CI compile validation to run the full smoke suite through
smoke:ci. - Added README disclosure for the Claude/Codex credential files PromptFuel reads, the provider usage endpoints contacted, sanitized quota-cache behavior, and the unofficial nature of those endpoints.
- Added incremental history cache tests for cold cache, warm cache, changed files, deleted files, day rollover, out-of-range records, and Codex variants.
- Added quota sourceKind regression tests to ensure display-label wording changes do not alter merge behavior.
📦 PromptFuel v1.0.4
Adds Claude Fable 5 to PromptFuel's API-equivalent pricing estimates.
Included in this release:
- Added first-party Anthropic
claude-fable-5pricing at $10 input / $50 output per MTok, with $12.50 5-minute cache write, $20 1-hour cache write, and $1 cache hit / refresh per MTok. - Added
anthropic/claude-fable-5as an OpenRouter-style pricing alias that maps to the same Claude Fable 5 rates.
📦 PromptFuel v1.0.3
Getting package.json / package-lock.json correctly aligned.
📦 PromptFuel v1.0.2
Fixes Codex 5h quota showing 0% remaining after the first message in a fresh window.
Included in this release:
- Fixed a misidentification of Codex's
used_percentfield as a 0–1 fraction. The Codex API returnsused_percentas a 0–100 value, but the parser was applying a fraction-conversion heuristic (× 100) to any value ≤ 1. Sending a single message into a fresh 5h window produces aused_percentnear1(≈1% used), which the heuristic inflated to 100% used → 0% remaining. The fix clampsused_percentandusedPercentagedirectly to [0, 100] without scaling; theutilizationfield (a genuine 0–1 fraction) continues to be scaled. Applied to both the live authenticated-quota path and the local Codex session-log scanner.
📦 PromptFuel v1.0.1
Fixes a false-critical quota display when the server's reset time has already passed and a live refresh fails.
Included in this release:
- Fixed expired cached quota windows showing as critical / 0% remaining after a live refresh failure. When the provider's reset boundary is in the past, the stale usage value is no longer meaningful — the window is now treated as fully reset (0% used, 100% remaining) until a fresh value arrives from the server. The cached source label and incident indicator (e.g. network error) are preserved so the fallback state is still visible.
- Local heuristic sources (local session, status line, hook) with expired windows continue to be marked unavailable rather than reset, since they carry no authoritative reset boundary from the provider.
📦 PromptFuel v1.0.0
PromptFuel 1.0.0 is live on the VS Code Marketplace.
It’s a local-first usage dashboard and quota monitor for AI coding tools. Track Claude and Codex usage, quota windows, token trends, model distribution, API-equivalent cost estimates, and imported snapshots from your other machines — without sending usage data to a hosted analytics service.
Marketplace:
https://marketplace.visualstudio.com/items?itemName=thekrush.prompt-fuel
Included in this release:
- Added
promptFuel.sourcesas the canonical configuration for local providers and imported snapshot sources, includinglabel,shortLabel,enabled, andstatusBarcontrols. - Added top-level
promptFuel.refreshIntervalMinutesfor periodic local scanning and authenticated quota refresh. - Restored
promptFuel.statusBarDensityfor choosingstandardorcompactstatus bar display. - Removed older scattered provider, authenticated-quota, snapshot-source, status-bar-source, and public threshold settings from the public configuration surface.
- Kept snapshot writer/reader settings separate as
promptFuel.snapshot.enabled,promptFuel.snapshot.machineLabel, andpromptFuel.snapshot.path. - Updated source semantics so omitted local providers do not appear as unavailable in the dashboard or status bar.
- Improved imported snapshot source labels, including compact status-bar short labels and full labels in dashboard/tooltip views.
- Removed the unsupported
blockedstatus-bar label while preserving raw 7d/5h remaining values. - Simplified the status-bar tooltip and set the dashboard webview tab icon to the PromptFuel icon.
- Moved model pricing estimates to
data/model-pricing-estimates.csv, loaded at extension startup and cached in memory. - Updated the model distribution table with Provider, Model, Tokens, Share, Est. API Cost, and Rate / 1M columns, including right-aligned numeric fields and tighter model/provider spacing.
- Reduced hardcoded model pricing to fallback estimate behavior and documented the
codex-auto-reviewalias mapping. - Updated validation so
.\tools\dev-validate-install.ps1runs unit tests as part of the dev package/install pass. - Decoupled smoke coverage from brittle UI text where practical while preserving behavior checks for source filtering, snapshots, dashboard rendering, status text, and pricing.
Breaking/config changes from 0.9.1:
- Use
promptFuel.sourcesinstead of the removed provider/snapshot/status-bar source settings. - Use top-level
promptFuel.refreshIntervalMinutesinstead of removed authenticated-quota refresh interval settings. - Use
promptFuel.statusBarDensityto choose standard or compact status bar display. - Public quota threshold settings were removed; PromptFuel uses its built-in 6-level remaining-quota scale.
- API-equivalent cost estimates are approximate and based on PromptFuel's configured model-rate table. They are not actual billing records.
📦 PromptFuel v0.9.1
Release v0.9.1
📦 PromptFuel v0.9.0
PromptFuel simplifies its dashboard rendering model by removing the Merged/Separate layout toggle, unifying the aggregate card path, and adding consistent contributor breakdowns across all tabs.
Included in this release:
- Removed the Merged / Separate dashboard layout toggle.
- Kept the existing Overview, Claude, and Codex tabs while simplifying the dashboard rendering model.
- Combined Overview Today cards into one aggregate provider-level card set.
- Unified the dashboard aggregate rendering path below At-a-glance.
- Added consistent contributor breakdowns:
- Overview breaks down by provider: Claude / Codex.
- Claude and Codex tabs break down by source: Local / remote alias.
- Aligned API-equivalent footer breakdowns with the metric cards.
- Preserved honest API-equivalent unavailable behavior: no fake partial dollar breakdowns.
- Improved At-a-glance quota rows with stable aligned columns.
- Aligned dashboard quota bar colors with the same threshold scale used by status bar indicators.
- Removed dead dashboard model-distribution render/test path.
- Retargeted dashboard smoke coverage to the live render path.
📦 PromptFuel v0.8.0
PromptFuel hardens its snapshot schema, surfaces remote Today activity counts, sharpens the quota display scale, and refactors the extension internals into focused modules.
Included in this release:
- Snapshot schema simplified to V1 as the sole supported baseline; the private V2–V4 upgrade chain is removed. Existing snapshot files can be migrated to V1 with the new
npm run maintenance:normalize-snapshot-schemascript (creates.bakbackups; supports dry-run). - Remote Today dashboard cards now show assistant-message and turn activity counts when the snapshot provides them, replacing the "Activity count not available from snapshot data" placeholder.
- Merged/Overview Today section suppresses empty provider groups when another provider has real local or remote data.
- Separate-view remote Today cards now populate correctly when a provider has no local today data but a remote snapshot does.
- Quota threshold display expanded to a 6-level scale: purple (91–100%), blue (71–90%), green (51–70%), yellow (31–50%), orange (11–30%), red (0–10%).
- Dashboard placeholder copy updated to neutral loading wording.
extension.tsrefactored into focused modules:statusBar.ts(status bar helpers),watchers.ts(file watchers and debounce timers), andrefreshController.ts(refresh orchestration and history-scan cache). Runtime behavior is unchanged.- Dashboard webview styles and scripts moved to media assets; inline injection removed.
- Token count formatting unified across status bar and dashboard (locale-independent output).
- Model usage contribution mapping centralized across Claude and Codex paths.
- CI workflow now gates on unit tests and dashboard smoke before packaging.
- Dead code, unreferenced imports, and unused variables removed.
Scope notes:
- PromptFuel continues to display aggregate usage only.
- PromptFuel does not display prompts, responses, transcripts, raw JSONL, local paths, usernames, secrets, tokens, or raw provider payloads.
- Snapshot imports and exports remain aggregate-only, with safe source labels permitted only after sanitization.
- Live quota remains independent from the selected dashboard usage source.
- Live authenticated quota refresh stays opt-in and makes no live calls when disabled.