Skip to content

feat: add an Extra Usage Limit widget - #33

Closed
eric-engberg wants to merge 2 commits into
developfrom
feat/extra-usage-limit-widget
Closed

eric-engberg wants to merge 2 commits into
developfrom
feat/extra-usage-limit-widget

Conversation

@eric-engberg

@eric-engberg eric-engberg commented Oct 5, 2026 •

Copy link
Copy Markdown
Owner

Standalone, cut from main (rebuilt 2026-10-27 as one commit after #32 merged upstream as sirmalloc#670). Upstream: sirmalloc#756.

What

A new Extra Usage Limit widget shows the monthly extra usage limit itself: Overage Limit: $50.00. It sits with the other Extra Usage widgets in the picker's Usage category.

Why

The Extra Usage widgets show the amount spent, what's left and the percentage used, but never the limit. A line could read Overage Used: $123.45 with no way to add "of $500"; Remaining and Utilization only imply it. The limit is already in the usage API response (extra_usage.monthly_limit, in cents) and in the usage cache, so showing it costs nothing extra.

How

  • Modeled on Extra Usage Used: the reported currency and the cost number format, raw value mode, a fixed Overage Limit: label like the other Extra Usage widgets (the label editor can change it), and the same disabled and no-data hide options.
  • States: extra usage off shows n/a. Extra usage on with no monthly limit shows none (once the API has reported extra usage as on, a missing limit means none is set; it's already treated as conclusive, Extra usage widgets show permanent [Timeout] when account has no monthly limit set sirmalloc/ccstatusline#413). An unknown state with an error shows the usage error, like its siblings.
  • Fetch: it needs only the extra usage state and the limit, which come from the usage fetch the other Extra Usage widgets already make.
  • Preview: $4,000.00, consistent with the Used ($106) and Remaining ($3,894) samples.

Demo

Rendered from a fake usage cache (no login, no API call): an Enterprise account ($123.45 of a $500 limit), a Max account ($12.50 of $50), and a Max account with no monthly limit.

Powerline

Extra Usage Limit next to the other Extra Usage widgets, Powerline mode

Plain

Extra Usage Limit next to the other Extra Usage widgets, plain mode

Testing

  • New widget tests: the limit in USD and in the API's currency, the global cost style, none without a limit, n/a and the hidden disabled state, errors and the no-data state, the preview, and the hideable states. A prefetch test checks the widget triggers a fetch for exactly the extra usage state and the limit.
  • bun test: 2378 pass, 0 fail. bun run lint passes.
  • Under Node (Vitest): the new widget tests and the prefetch tests pass, 51 of 51.
  • Built CLI under Bun 1.4.2 and Node 26.10.0 with an Enterprise usage cache: all runtimes give identical output in plain and Powerline modes, differing from main only by the new widget. The TUI opens and exits cleanly under both.
  • Piped renders from fake caches: Overage Used: $12.50 | Overage Limit: $50.00, Overage Limit: none (no monthly limit), n/a with extra usage off.
  • Picker search: "limit", "enterprise" and "spend" list the four Extra Usage widgets first.
  • Rebuilt as one commit on today's main, after the Enterprise Spend wording it built on merged as fix(widgets): describe the Extra Usage widgets for Enterprise accounts too sirmalloc/ccstatusline#670: bun test 3258 pass, 0 fail; bun run lint clean. Built CLI under Bun 1.4.2 and Node 26.10.0: all runtimes agree in plain and Powerline modes, and the TUI opens and exits cleanly under both.

The Extra Usage widgets show the amount spent, what's left and the
percentage used, but never the monthly limit itself, so a line could
read "Spend Used: $123.45" with no way to show "of $500". Remaining
and Utilization only imply it.

Extra Usage Limit shows the monthly limit from the usage API, in the
reported currency and the cost number format, labeled like the other
Extra Usage widgets ("Overage Limit", or "Spend Limit" on accounts
without plan limits). When extra usage is on without a monthly limit
it shows "none", and when it's off "n/a", with the same hide options as
its siblings. It needs only the extra usage state and the limit, which
come from the fetch the other Extra Usage widgets already make.
@eric-engberg
eric-engberg force-pushed the feat/extra-usage-limit-widget branch from 455096d to 89ba686 Compare October 27, 2026 16:28
@eric-engberg
eric-engberg marked this pull request as ready for review October 27, 2026 16:29
@sonarqubecloud

Copy link
Copy Markdown

@eric-engberg

Copy link
Copy Markdown
Owner Author

Merged upstream as sirmalloc#756.

eric-engberg added a commit that referenced this pull request Oct 30, 2026
Brings in upstream main through #41, which now holds #33 as upstream
sirmalloc#756. Main adds Extra Usage Limit at the same places the #33 branch
merged here did, so the widget manifest, the usage prefetch's widget list
and requirements, and its prefetch test keep main's single entry. Daily
Cost Rate's billed-spend test stubs getUsageFetchedAtMs, which #36 now
reads in place of its own getUsageFetchedAt.

# Conflicts:
#	docs/USAGE.md
#	src/ccstatusline.ts
#	src/types/RenderContext.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants