fix(antigravity): keep custom CLI quota controls visible

This commit is contained in:
Neil
2026-09-19 06:16:12 -07:00
parent 567aa4112f
commit 116cfb3385
5 changed files with 23 additions and 9 deletions
@@ -23,6 +23,7 @@ export function StatusBarVisibilityMenu({
menuPoint,
recordFeatureInteraction,
setMenuOpen,
settings,
statusBarItems,
toggleStatusBarItem
} = controller
@@ -74,7 +75,7 @@ export function StatusBarVisibilityMenu({
{translate('auto.components.status.bar.StatusBar.c1df0d67ec', 'Gemini Usage')}
</DropdownMenuCheckboxItem>
)}
{isStatusBarItemAvailable('antigravity', detectedAgentIds) && (
{isStatusBarItemAvailable('antigravity', detectedAgentIds, settings) && (
<DropdownMenuCheckboxItem
checked={statusBarItems.includes('antigravity')}
onCheckedChange={() => {
@@ -2,6 +2,16 @@ import { describe, expect, it } from 'vitest'
import { isStatusBarItemAvailable } from './status-bar-agent-gating'
describe('isStatusBarItemAvailable', () => {
it('keeps configured Antigravity available when PATH detection misses it', () => {
const settings = { agentCmdOverrides: { antigravity: '"/custom tools/agy"' } }
expect(isStatusBarItemAvailable('antigravity', [], settings)).toBe(true)
expect(isStatusBarItemAvailable('gemini', [], settings)).toBe(false)
expect(
isStatusBarItemAvailable('antigravity', [], {
agentCmdOverrides: { antigravity: ' ' }
})
).toBe(false)
})
it('shows non-CLI items regardless of detection', () => {
// Why: ssh, resource-usage, and opencode-go aren't CLIs on PATH, so
// detection results don't apply.
@@ -1,4 +1,6 @@
import type { TuiAgent } from '../../../../shared/tui-agent'
import type { GlobalSettings } from '../../../../shared/global-settings-types'
import { hasExplicitTuiLaunchCommand } from '../../../../shared/tui-agent-launch-command-override'
import type { StatusBarItem } from '../../../../shared/ui-chrome-types'
// Why: CLI-backed usage bars are surface noise when the underlying
@@ -18,8 +20,12 @@ const CLI_GATED_ITEMS: ReadonlySet<StatusBarItem> = new Set([
export function isStatusBarItemAvailable(
id: StatusBarItem,
detectedAgentIds: TuiAgent[] | null
detectedAgentIds: TuiAgent[] | null,
settings?: Pick<GlobalSettings, 'agentCmdOverrides'> | null
): boolean {
if (id === 'antigravity' && hasExplicitTuiLaunchCommand(settings, 'antigravity')) {
return true
}
if (!CLI_GATED_ITEMS.has(id)) {
return true
}
@@ -8,11 +8,7 @@ export type UsageProviderSettings = Pick<
| 'opencodeSessionCookie'
| 'geminiCliOAuthEnabled'
> & {
// Why: Antigravity has no separate persisted usage credential in Orca. The
// checked status-bar item is the durable user signal; StatusBar only sets
// this after PATH detection says the agent is available. Durability further
// requires geminiCliOAuthEnabled — the snapshot mirrors the Gemini fetch,
// which never yields data while that opt-in is off.
// A checked item plus a detected or configured CLI keeps native quota visible while pending.
antigravityUsageConfigured: boolean
// Why: MiniMax/Grok sign-in live on disk, not in settings; main sets these each poll.
minimaxCookieConfigured: boolean
@@ -106,7 +106,7 @@ export function useStatusBarController(floatingTerminalOpen: boolean) {
// Why: Antigravity visibility is based on its own detected CLI and snapshot.
const antigravityUsageConfigured =
statusBarItems.includes('antigravity') &&
isStatusBarItemAvailable('antigravity', detectedAgentIds)
isStatusBarItemAvailable('antigravity', detectedAgentIds, settings)
// Why: thread non-GlobalSettings durability flags so bars stay visible across reloads and snapshot refreshes.
const usageSettings = {
...settings,
@@ -141,7 +141,7 @@ export function useStatusBarController(floatingTerminalOpen: boolean) {
const showAntigravity =
visibleAntigravity !== null &&
statusBarItems.includes('antigravity') &&
isStatusBarItemAvailable('antigravity', detectedAgentIds)
isStatusBarItemAvailable('antigravity', detectedAgentIds, settings)
// Why: MiniMax is cookie-auth, not a CLI on PATH, so detection-gating doesn't apply.
const showMiniMax = visibleMiniMax !== null && statusBarItems.includes('minimax')
const showGrok =
@@ -256,6 +256,7 @@ export function useStatusBarController(floatingTerminalOpen: boolean) {
setMenuOpen,
setMenuPoint,
setStatusBarUsageMode,
settings,
showEmptyUsageCta,
showFloatingTerminalToggle,
showFloatingWorkspaceAttentionDot,