codeburn/gnome
Justin Gheorghe 8ded6ad6fd feat(cli): track local-model cost savings against a paid baseline (#421)
Add a new `localModelSavings` config and `codeburn model-savings` CLI
that maps a local-model name (e.g. llama3.1:8b) to a paid baseline
(e.g. gpt-4o). The local call still costs $0; the new `savingsUSD`
field tracks the counterfactual spend avoided by running locally and
is reported separately from `costUSD` everywhere a number is shown.

* Parser normalization (`applyLocalModelSavings`) runs on Claude
  parse, direct provider calls, and the cached-call path. It forces
  `costUSD` to 0 and attaches `savingsUSD` + `savingsBaselineModel`
  + `isLocalSavings` on the `ParsedApiCall`. Local-savings wins for
  actual cost even when the same model is also in `modelAliases`.
* Session, project, day, model, category, activity, skill, and
  subagent rollups all carry `savingsUSD` alongside `costUSD`.
* `status --format json` adds `today.savings` and `month.savings`.
* `status --format menubar-json` adds a `current.localModelSavings`
  block (totalUSD, calls, byModel, byProvider) plus savings on
  topModels, topProjects, topSessions, topActivities, and history
  daily entries. Schema fields default-decode for backward compat.
* `report --format json` adds savings across overview/daily/
  projects/models/activities/skills/subagents/topSessions, with
  the active paid baseline name on each model row.
* `models` command gains a `Saved` column on table/markdown/CSV
  and a `savingsUSD`/`savingsBaselineModel` pair in JSON. Default
  `--min-cost 0.01` filter now ORs in `savingsUSD >= minCost` so
  local models with $0 actual cost but >0 savings still surface.
* CSV/JSON exports add a `Saved (CODE)` column on summary/daily/
  models/projects/sessions.
* Dashboard TUI shows a green 'saved $X by local models' footer
  line in the overview when any savings are present.
* macOS Swift payload gains a `LocalModelSavings` Codable block
  and savings fields on every model/activity/session/daily
  struct. Hero shows a green leaf 'Saved $X' caption, models
  section gets a green `Saved` column. `swift build` clean.
* GNOME indicator adds 'saved $X' to the hero meta line and a
  `codeburn-model-saved` column to the model row.
* Daily cache schema bumped to v8 (`savingsUSD` on day/model/
  category/provider). `savingsConfigHash` invalidates the cache
  when the user changes their baseline mapping so historical
  saved-spend numbers never lie about a stale baseline.
* Defensive `Object.hasOwn` lookup in `getLocalSavingsBaseline`
  blocks the prototype-pollution test that previously surfaced via
  the savings path with a hostile `__proto__` model name.
* New tests (5 files, 25 tests, 549 lines) cover pricing helpers,
  end-to-end parser normalization, day aggregator savings,
  menubar payload savings, CLI set/list/remove, and
  daily-cache hash invalidation. Existing tests for daily-cache
  / day-aggregator / models-report updated for the new fields.
  Full vitest suite: 1028/1028 passing across 73 test files.
  `tsc --noEmit` clean. `npm run build` clean.
  (Note: `mac/Tests` has a pre-existing `no such module 'Testing'`
  environment error on the installed Swift toolchain, confirmed
  on `main` before this PR; not caused by these changes.)
2026-06-01 11:06:39 +03:00
..
icons feat: add GNOME Shell extension for Linux panel indicator 2026-05-04 09:44:35 -04:00
schemas Overhaul GNOME Shell extension with full-featured UI (#222) 2026-05-04 18:05:59 -07:00
dataClient.js Overhaul GNOME Shell extension with full-featured UI (#222) 2026-05-04 18:05:59 -07:00
extension.js Overhaul GNOME Shell extension with full-featured UI (#222) 2026-05-04 18:05:59 -07:00
indicator.js feat(cli): track local-model cost savings against a paid baseline (#421) 2026-06-01 11:06:39 +03:00
install.sh feat: add GNOME Shell extension for Linux panel indicator 2026-05-04 09:44:35 -04:00
metadata.json Overhaul GNOME Shell extension with full-featured UI (#222) 2026-05-04 18:05:59 -07:00
prefs.js Add Kimi provider 2026-05-11 19:02:28 +03:00
README.md feat: add GNOME Shell extension for Linux panel indicator 2026-05-04 09:44:35 -04:00
stylesheet.css Overhaul GNOME Shell extension with full-featured UI (#222) 2026-05-04 18:05:59 -07:00

CodeBurn GNOME Extension

Monitor AI coding assistant token usage and costs from your GNOME desktop panel.

Requirements

  • GNOME Shell 45 or later
  • CodeBurn CLI installed (npm i -g codeburn)
  • glib-compile-schemas (usually part of glib2-devel or libglib2.0-dev)

Install

cd gnome
chmod +x install.sh
./install.sh

Then restart GNOME Shell:

  • Wayland: Log out and back in
  • X11: Press Alt+F2, type r, press Enter

Enable the extension:

gnome-extensions enable codeburn@codeburn.dev

Configure

Open preferences:

gnome-extensions prefs codeburn@codeburn.dev

Or use the GNOME Extensions app.

Settings

Setting Default Description
Refresh Interval 30s How often to poll CodeBurn CLI
Default Period Today Period shown on open
Compact Mode Off Hide cost label, show icon only
Budget Threshold $0 Daily budget alert (0 = disabled)
Budget Alerts Off Show warning when budget exceeded
CLI Path (auto) Custom path to codeburn binary

Uninstall

gnome-extensions disable codeburn@codeburn.dev
rm -r ~/.local/share/gnome-shell/extensions/codeburn@codeburn.dev

Development

Test changes without installing:

# Compile schemas locally
glib-compile-schemas schemas/

# Symlink for development
ln -sf "$(pwd)" ~/.local/share/gnome-shell/extensions/codeburn@codeburn.dev

# Watch logs
journalctl -f -o cat /usr/bin/gnome-shell