Commit graph

8 commits

Author SHA1 Message Date
AgentSeal
6358100d3d fix(extensions): period switching and currency conversion on GNOME
Period bug:
_refresh() returned early when a previous fetch was still in flight, so
clicking a new period tab while the initial load was running silently
dropped the second click. Swap the loading-guard for a generation counter:
every refresh increments a counter, and only the callback whose generation
matches the latest value applies the result. Older responses are dropped,
newer ones win.

Currency bug:
codeburn status --format menubar-json is a raw USD payload; the CLI does
not convert it. The popup was only changing the symbol prefix, not the
values. Fetch the USD->target rate from Frankfurter via Soup and apply it
in formatCost(). Rate is cached per-session so tab switches don't hit the
network; on currency change we kick off a fresh fetch (or reuse the cached
rate) and re-render with the new multiplier.

Other small fixes:
* Show a single-provider tab row (when exactly one provider is installed)
  instead of hiding it, so the user still sees which agent the numbers
  are for.
* Activity bar chart track is now a BoxLayout so the fill width takes
  effect; previously every bar rendered as 100% because the St.Widget
  track stretched its only child.
* Findings CTA no longer runs labels together ("findingssave"). Adds
  8px spacing between count and savings.
2026-04-18 05:21:09 -07:00
AgentSeal
ce94786185 feat(extensions): detect Pi and OpenCode in GNOME agent tab filter
Mirror the Mac ProviderFilter expansion by letting the GNOME popup
surface Pi and OpenCode tabs when their session stores are present.
Extends the provider detection paths with:

  opencode: $XDG_DATA_HOME/opencode (defaults to ~/.local/share/opencode)
  pi:       ~/.pi/agent/sessions

When two or more providers are detected the agent tab row renders with
All plus the detected providers; otherwise the row stays hidden so the
popup doesn't show a filter UI with nothing to filter against.
2026-04-18 05:10:29 -07:00
AgentSeal
6e354c17ed feat(extensions): hide agent tabs for providers with no data
The All / Claude / Codex / Cursor / Copilot tab row was fixed regardless of
which providers the user actually had installed, which made most of the
tabs render as $0 for people who only run one tool. Scan the expected
session directories on startup and only build tabs for providers that are
present. If two or more are detected, show "All" plus those providers;
if fewer than two are detected, skip the row entirely since there is
nothing to filter.

Paths checked:
  $HOME/.claude/projects         (Claude Code)
  $HOME/.codex/sessions          (Codex CLI)
  $HOME/.config/Cursor/User/globalStorage/state.vscdb (Cursor IDE)
  $HOME/.copilot/session-state   (GitHub Copilot)
2026-04-18 04:59:45 -07:00
AgentSeal
d47658c91d feat(extensions): rebuild GNOME popup with native widgets for Mac parity
Replace the PopupMenu text-item list with a custom St.Widget tree that
mirrors the macOS popover pixel for pixel. Same layout the native Quick
Settings panel uses: horizontal tab rows, branded header, hero
typography, inline bar-chart activity rows, and a pill-styled footer.

Structure:
  * Branded header with Code + Burn typography and subhead
  * Agent tab row (All / Claude / Codex / Cursor / Copilot) with active
    pill state and hover feedback
  * Hero block with period dot, label, large cost figure, calls and
    sessions meta
  * Period tab row (Today / 7 Days / 30 Days / Month / All) with same
    active-pill treatment
  * Activity section: bar chart per row scaled to the top cost,
    one-shot rate in brand green, cache and session numbers inline
  * Findings CTA as a full-width branded button, hidden when
    findingCount is zero
  * Footer with currency pill (cycles through 17 ISO codes), Refresh,
    Open Full Report, and an Updated timestamp

Dark and light theme classes drive the track and button palettes so the
popup stays legible regardless of GNOME system theme. Brand orange
(#ff8c42 to #c9521d) is the only hardcoded palette; everything else
inherits from the shell.
2026-04-18 04:52:33 -07:00
AgentSeal
e78a56b348 fix(extensions): stop truncating section titles in GNOME popup
The Activity and Models section headers were being clipped to "Activi..."
and "Mod..." because St.Label ellipsized the combination of
text-transform: uppercase plus letter-spacing in the available popup width.
Drop the uppercase transform and the letter-spacing so the labels render
in full and read consistently across themes.
2026-04-18 04:44:22 -07:00
AgentSeal
5e68981723 feat(extensions): add agent filter and currency switcher to GNOME popup
Adds two more submenus so the GNOME popup matches the agent tabs and
currency picker the Mac menubar app ships with.

* Agent submenu: All / Claude / Codex / Cursor / Copilot. Passes --provider
  through to codeburn status and codeburn report so the numbers and the
  full terminal report both follow the selected filter.
* Currency submenu: 17 ISO codes (USD, EUR, GBP, CAD, AUD, JPY, INR, BRL,
  CHF, SEK, SGD, HKD, KRW, MXN, ZAR, DKK, CNY). Selecting a code shells
  out to codeburn currency <code> and refreshes the popup with the new
  symbol. The current currency is read from ~/.config/codeburn/config.json
  on startup and after each change so all of our surfaces agree.
* formatCost takes the active currency so activity, model, provider and
  findings rows render with the right symbol instead of hardcoded $.
2026-04-18 04:35:29 -07:00
AgentSeal
4c5ec0f985 feat(extensions): polish GNOME extension and follow system theme
Expand the popup to show everything the TUI does: period switcher submenu,
top activities with one-shot rate, top models, provider breakdown when more
than one provider has data, optimize findings, and an updated-timestamp row.
Add per-period Open Full Report so the terminal view matches what the popup
was showing.

For theme compatibility, stop hardcoding colors that don't work on both
light and dark GNOME themes. Keep the brand orange (#ff8c42) for the header
and findings, let everything else inherit the shell palette, and express
dimming through opacity instead of rgba so the popup reads correctly on
Yaru Light, Yaru Dark, Adwaita, Adwaita Dark, and any other theme.

Add a listener on org.gnome.desktop.interface color-scheme so the indicator
re-applies its .codeburn-dark / .codeburn-light class when the user flips
the system theme, without waiting for a reload.
2026-04-18 04:20:14 -07:00
AgentSeal
291c376f06 feat(extensions): add GNOME Shell extension for native panel feel
Ship a GJS extension in extensions/gnome-shell/codeburn@agentseal.org so
GNOME users get the same panel-anchored popover Ubuntu's Quick Settings
uses, rather than the floating window the Tauri tray is limited to through
StatusNotifierItem.

The extension lives inside gnome-shell as a PanelMenu.Button, so it has
direct access to its own icon coordinates and can open a PopupMenu docked
under it without any IPC or DBus plumbing. The tradeoff is it only works
on GNOME 45+; the Tauri app in desktop/ stays the cross-platform option
for KDE, Unity, wlroots, and Windows users.

Data flow: the extension shells out to codeburn status --format menubar-json
every 60 seconds, parses the payload, and renders a header, top 5 activities,
and optimize findings count. Refresh and Open Full Report actions live in
the popup menu; the Open Full Report action spawns gnome-terminal with the
codeburn report TUI.
2026-04-18 04:06:44 -07:00