Releases: phuryn/claude-usage
Releases · phuryn/claude-usage
Release v1.2.4
Dashboard
- Recoloured the dashboard to a warm, neutral palette aligned with the Claude Code interface (less blue): page
#161617, cards#1E1F20, lighter text#BFBFBF, plus a--raisedhover layer and a dedicated--red. Switched to an elevated layering model — cards sit above the page (lighter), hover lighter still — replacing the previous inverted scheme. - Reworked chart colours: a warm, Anthropic-leaning donut palette (clay/tan/sage/dusty-blue/…); token series are blue / coral / green / amber; chart axis & legend text use a slightly lighter shade so small labels stay legible on the dark cards.
- Chart hovers now lighten consistently (bars/series go to full opacity; the doughnut pops the hovered slice). Tooltip colour swatches are solid and borderless — removed Chart.js's default white
multiKeyBackgroundedge. The hourly chart's legend/tooltip use a coral circle for the output line and a blue square for the turns bars. - Legend series toggles now persist across repaints (filter changes, auto-refresh, sorting) for every chart, including per-slice visibility on the doughnut.
- Header title and gauge icon now use the lightest text colour (neutral) instead of coral. Selected model chips use a neutral background with a coral border; range / timezone tabs use a neutral selected background (no orange).
- Cost values use thousand separators (e.g.
$1,050.49). - Header meta puts "Auto-refresh in 30s" on its own line, with more space before the Rescan button.
- Removed the ⚡ peak-hour markers from the hourly axis labels (they collided with the axis; peak hours are still shown by the red bars and the legend).
- Fixed a stale "Apr 2026" stat sublabel → "May 2026".
Extension
- The loading / status screen now matches the dashboard header — same gauge icon (served via a webview URI), title, and elevated-palette colours — instead of the old coral heading on a mismatched background.
Release v1.2.3
Extension
- Fixed CSV export (Download CSV buttons / "Download CSV to see all" links) not working inside the VS Code webview. The dashboard iframe's sandbox was missing
allow-downloads, so Chromium silently blocked the Blob download; added the token. Keeps the export client-side, so it still respects the current model/range/sort filters. - The extension no longer pops a system browser tab when opening the dashboard — it passes the new
--no-browserflag to the bundledcli.py dashboard. Runningpython cli.py dashboardas a script still opens the browser as before. - Matched the webview's pre-load / behind-iframe background to the dashboard (
#191A1B), removing the brief#0f1117flash before the dashboard renders.
Scanner / CLI
- Added a
--no-browserflag tocli.py dashboardto start the server without opening a browser (used by the VS Code extension; standalone CLI usage is unchanged).
Release v1.1.2
Dashboard
- Show the gauge icon to the left of the header title, tinted to match the title color (
var(--accent)) via a CSSmaskso it tracks the accent dynamically. Served from a newGET /icon.svgroute that locatesresources/icon.svgin both run contexts (bundled.vsix—python/dashboard.py→../resources/icon.svg; and standalone repo —vscode-extension/resources/icon.svg). - Renamed the header from "Claude Code Usage Dashboard" to "Claude Code Usage".
- Fixed charts not resizing when the window is narrowed (they only adjusted on the next data refresh). Grid cards now set
min-width: 0so the container can shrink below the canvas's intrinsic width, letting Chart.js'sResizeObserverfire live. Widening already worked. - Debounced chart resizing with Chart.js
resizeDelay(150 ms) so dragging the window narrower no longer re-renders the canvases on every tick. - Cost by Model, Recent Sessions, Cost by Project, and Cost by Project & Branch tables now reveal rows in steps — 10 → 25 → 50 — with
Show more ▾/Show less ▴controls at the bottom right (Show lessappears only once a table is expanded past the first step). Rendering is capped at 50 rows for performance; past that the footer shows a "Download CSV to see all (N)" link (N = total rows) that triggers the same export as the table's CSV button, alongside Show less (which resets to 10). Sorting re-applies to the full data set, so the visible rows always reflect the active sort; the control is hidden when a table has 10 or fewer rows. Clicking Show less also scrolls back to the top of that table. - Styled scrollbars to match the VS Code dark UI (no arrows) via
::-webkit-scrollbar: a 21px-wide gutter with a#28292Bthumb (#8B8B8Don hover) over a#121314track. The dashboard's webview iframe doesn't inherit VS Code's--vscode-*theme variables, so the colors are set directly. - Added a CSV export for the Cost by Model table (
exportModelCSV), used by its "Download CSV to see more" link. - Adjusted the page background to
#191A1B. - Updated the pricing footnote date to "as of May 2026".
Release 1.2.1
v1.2.1 — 2026-05-29
Extension
- Bundle the Python sources (
cli.py,scanner.py,dashboard.py) inside the.vsixso the extension works standalone — the only end-user dependency is Python 3.8+ onPATH. Thevscode:prepublishscript copies the files from the repo root at package time, so each extension version embeds the matching Python snapshot. - Auto-start the dashboard when the user clicks the sidebar icon (no Command Palette step needed).
DashboardSidebaraccepts anonShowcallback wired toopenDashboard(); in-flight startup coalescing on the host side keeps clicks idempotent. - Discover
cli.pyin any open VS Code workspace folder — covers the "cloned the repo into c:\github\claude-usage and opened it in VS Code" case that the original monorepo-sibling fallback couldn't reach for installed extensions. - Platform-aware error messages: missing-Python guidance now leads with the right install command (python.org installer on Windows with the "Add to PATH" reminder;
brew install pythonon macOS; distro package manager on Linux). The Homebrew suggestion is hidden on Windows. - Add a dedicated vscode-extension/README.md for the marketplace listing.
- Real gauge icon shipped (was a placeholder).
- 4 new install-mode tests for bundled discovery + ordering; 4 sidebar tests for the auto-start callback. Total extension test count: 74.
v1.2.0 — 2026-05-29
Distribution
- Add a VS Code extension under
vscode-extension/. Spawns the existing Python dashboard server in the background and embeds it via a webview iframe — no UI rewrite, all existing charts and filters reused. Activity-bar sidebar entry, four commands (Open Dashboard,Rescan,Restart Server,Show Logs), and two settings (pythonPath,cliPath,port). 63 tests covering Python discovery, install-mode resolution, port allocation, server lifecycle, and webview HTML/CSP. Built as.vsix, installable via scripts/install.sh / install.ps1. - Auto-discovery: extension finds
claude-usageon PATH (Homebrew users) or a siblingcli.pyin the monorepo (dev). Setting overrides for both Python interpreter and CLI path.
CI
- Add
.github/workflows/extension-ci.yml: clean Ubuntu,npm ci && npx tsc && npm test && npm run package, uploads the.vsixas an artifact on every push to DEV/main that touchesvscode-extension/.
Release v1.1.0
Dashboard
- Fix
ReferenceError: cutoff is not definedin the hourly filter that blanked the entire dashboard (#73, thanks @thomasleveil) - Fix hourly chart ignoring the range upper bound for
week/month/prev-monthranges - Fix 404 on dashboard URLs containing query strings (
?range=...&models=...) so reloads and bookmarks work, with regression tests (#81, thanks @jakduch) - Fix blank dashboard for users whose data only contains non-billable / unknown models, or rows with empty model names:
COALESCE(NULLIF(model, ''), 'unknown')normalises empty-string models (in both SELECT and GROUP BY so mixed NULL + '' rows collapse to a single "unknown" group), and the default selection falls back to all models when no billable models exist (#109, thanks @HaydenHaines) - Use
ThreadingHTTPServerso a slow/api/datano longer blocks other dashboard requests (#79, thanks @jakduch) - Add a
Todayrange button (#112, thanks @Fruhji)
Scanner
- Fix incremental scan not updating
first_timestampwhen a newly discovered session's records arrive out of order (#111, thanks @Fruhji)
Project / docs
- Adopt
AGENTS.mdas the canonical agent guide (shared with Codex);CLAUDE.mdis now a thin@AGENTS.mdimport - Codify the rule that future PR merges must preserve original-author commits (
merge --no-fffor full merges,cherry-pickfor partial,Co-Authored-Bytrailers when applying hunks manually) - Drop unused
.claude/launch.json