Repository navigation
fix(status-bar): show Antigravity's model-group pools instead of an empty segment - #24074
Conversation
|
| const { ProviderSegment } = await import('./StatusBar') | ||
| const markup = renderToStaticMarkup( | ||
| <ProviderSegment | ||
| p={antigravityLimits({ buckets: [] })} |
There was a problem hiding this comment.
Weekly fallback remains untested The empty bucket list takes the no-buckets branch, so this test never reaches the new weekly fallback. The
100% assertion can also pass from the MiniBar’s width even if no percentage label is shown. Use nonempty buckets that are all filtered out and assert the visible label, so a fallback regression fails the test.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
There was a problem hiding this comment.
ℹ️ Minor suggestions only.
Reviewed changes
- Antigravity's pools bypass the bucket allowlist —
isVisibleStatusBarBucketnow takes the provider and returnstrueforantigravity, so its model-group pools ("Gemini Models", "Claude and GPT models") render by name in verbose mode instead of being filtered out by the Gemini/Cursor name match. - Verbose fallback chain gains
weekly— when buckets exist but are all filtered, the fallback is nowsession ?? monthly ?? weekly. - Bucket-shaped pending snapshot for Antigravity —
createPendingProviderSnapshotemitsbuckets: []forantigravity, matching Gemini and Cursor. No behavior change:hasUsageDataignores empty buckets. - New test file — 4 tests covering both pools rendering by name, the weekly-window path, and the Gemini allowlist guard.
DeepSeek Flash (free via Pullfrog for OSS) | 𝕏
|
|
||
| it('shows the weekly window when a tier reports no session pool', async () => { | ||
| // Why: the verbose fallback chain was `session ?? monthly`, so a weekly-only provider with a | ||
| // real limit rendered an empty segment. |
There was a problem hiding this comment.
The rationale here doesn't match the code path this test takes. With buckets: [] (and buckets: undefined in the next test), VerboseProviderUsage skips the p.buckets.length > 0 branch and goes to the second branch, which already rendered p.weekly before this PR. I verified this: reverting the changed session ?? monthly ?? weekly line to session ?? monthly still leaves all four tests passing, so the new ?? p.weekly fallback has no coverage.
To actually pin it, a fixture needs buckets present but all filtered (e.g. an unrecognised name) with session and monthly null and weekly set — only then does execution reach the fallback line.
Technical details
# `weekly` fallback in the bucket branch is untested
## Affected sites
- `src/renderer/src/components/status-bar/status-bar-antigravity-segment.test.tsx:66` — "shows the weekly window when a tier reports no session pool" passes `buckets: []`, taking the `visibleWindows` branch.
- `src/renderer/src/components/status-bar/status-bar-antigravity-segment.test.tsx:82` — "still renders a reading when only the weekly window is known" passes `buckets: undefined`, same branch.
- `src/renderer/src/components/status-bar/StatusBarProviderSegment.tsx:197` — `session ?? monthly ?? weekly` is only reached when `p.buckets.length > 0` and every bucket is filtered out.
## Required outcome
- Either add a test that reaches the fallback line (buckets present but all filtered, `session`/`monthly` null, `weekly` set), or correct the comments to describe the path actually taken.
## Note
- After this PR's provider bypass, Antigravity buckets are always visible, so the fallback line is also unreachable for the provider it was added for in the first place.f7a2ee2 to
1a13654
Compare
…mpty segment The verbose bucket allowlist was written for Gemini's experimental models, and its fallback window was session-or-monthly. Antigravity reports one pool per model group and some tiers meter weekly only, so a signed-in account with an exhausted pool rendered an icon and no number. Antigravity bypasses the allowlist by provider, because its group names come from the account's tier and cannot be enumerated. Cursor stays name-matched so an unrecognised pool still falls back to the plan total. Refs #22511 Refs #16704
1a13654 to
14816cb
Compare
|
Navigate logical layers of code changes, visualize relationships, and explore their blast radius. Note Repository guideline files applied to this review (1)No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (3)
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review. 📝 WalkthroughWalkthroughThe status bar now displays every Antigravity bucket and falls back to session, monthly, then weekly windows when no bucket is visible. Pending Antigravity snapshots now include an empty bucket list. New tests check Antigravity pool rendering and bucket states, plus Gemini bucket visibility. Priority: ⬇️ Low Merge Risk: ⚪ Minimal · up to The change displays Antigravity model pools while preserving other providers’ filtering. No actionable merge-blocking risk is established; the previously noted weekly-fallback test gap remains a bounded follow-up. 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
🛠️ Fix failing CI checks 💡
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Merge stablyai/orca main up to 78daf71 on top of the 2026-10-01 sync and fork/main 49d4264. - Antigravity quota: upstream stablyai#24073/stablyai#24074 land their own agy-CLI quota reader and model-group pools; the fork's earlier implementation, its configured-command override and its status-bar extras (grouped compact metrics, reset countdown, grouped tooltip/roster) are removed in favour of upstream's. - Agent exit confirmation: keep the fork rule that only a shell in the foreground closes chat, with Windows PTY job proof (07da011, 7a40146), on top of upstream's hook-presence verdicts; upstream's wsl.exe/tmux and owner-less silence cases are adapted to that rule. - Claude adapter: prompt suggestion bookkeeping folded into upstream's child-record observation. - Coordinator identity loader opens the orchestration database only if it exists; upstream's idle-edge mail lookup otherwise created it for every structured session. - Fork capabilities advertised via shared/agent-provider-runtime-capabilities.ts, prompt-suggestion reducer wrapper and frame-field alias keep upstream files under max-lines. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

ELI5
Stacked on #24073. Once Orca reads Antigravity's real pools, the status bar has to actually draw them — today it throws them away and shows an icon with no number.
What Changed
Before: in verbose mode the segment filtered buckets through an allowlist of three Gemini model names (
Flash,Pro,1.5 Pro) plus Cursor's pool names, then fell back tosession ?? monthly. Antigravity's pools are named after model groups, so every one was filtered out; and a tier metered weekly only has no session window, so the fallback was null too. Net result for a signed-in account with an exhausted pool: an icon and nothing else.After: Antigravity's pools render by name with their percentages, and the fallback chain includes
weekly.session ?? monthly ?? weekly.Why
This is the renderer half of #24073. Without it the main-process fix is invisible: Orca would hold a correct reading ("Gemini Models 100% used, resets in 7d") and draw nothing. The fallback chain is a latent bug on its own — any weekly-only provider hits it — and Antigravity is the first provider to have that shape.
Matching by provider rather than by adding names to the allowlist is the point: an allowlist of tier-specific group names would need editing every time Google renames a model group, and would silently blank the segment again when it happened.
Linked Issue
Refs #22511
Refs #16704
Depends on #24073.
Visual Proof
Verbose segment, rendered from the record a live
agy1.2.11 produced for an account whose Gemini pool is genuinely exhausted:sessionandmonthlyboth null)Gemini Models 100% used · Claude and GPT models 0% usedLive app, this branch, CDP screenshot of the real status bar (Orca dev instance
nwparker/agy-quota-visible, reading fetched from the installedagy— not a fixture):The rendered DOM text, read back through CDP:
["Gemini Models 100% used", "Claude and GPT models 0% used"]. Onmainthe same account renders the Antigravity icon with no text at all.Testing
pnpm test src/renderer/src/components/status-bar/— 56 files, 407 tests, all passing.4 new tests: both pools render by name; the weekly fallback fires when a tier has no session pool; the same when
bucketsis absent entirely; and Gemini's experimental buckets are still filtered, so the allowlist was narrowed rather than abandoned.pnpm tc:web,oxlint,pnpm run check:code-quality:changed, design-system gate — clean.Fixture is the verbatim record captured from agy 1.2.11 on macOS, not an invented one.
I manually tested these changes locally
Automated tests added/updated
Review
Renderer-only. No wire change, no new state, no IPC. Cross-platform and SSH are unaffected — this is presentation of a record that already crosses those boundaries.
Worth a reviewer's eye on one judgement call: Antigravity bypasses the allowlist entirely, which means if agy ever reports a junk bucket name it will be displayed. I think that is the right trade — a wrong label is recoverable, a blank meter on an exhausted account is what sent users into 429s in #22511.
Agent skill upstream boundary
Notes
Credit for identifying that Antigravity's pools are per-model-group and must be shown as such, rather than squeezed into a single session number:
Co-authored-by: rsuzukimktdigital rsuzukimktdigital@users.noreply.github.com
Co-authored-by: bluetomlee bluetomlee@users.noreply.github.com
Co-authored-by: artile artile@users.noreply.github.com
Co-authored-by: andrecristodev andrecristodev@users.noreply.github.com
Checklist
oxlint,pnpm tc:web, status-bar suite pass locally