Skip to content

feat(status-bar): Antigravity usage status - #7996

Merged
brennanb2025 merged 22 commits into
stablyai:mainfrom
bbingz:feat/antigravity-grok-usage-status
Jul 10, 2026
Merged

feat(status-bar): Antigravity usage status#7996
brennanb2025 merged 22 commits into
stablyai:mainfrom
bbingz:feat/antigravity-grok-usage-status

Conversation

@bbingz

@bbingz bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Summary

Antigravity usage visibility in the status bar (originally #7878). This PR previously also carried a Grok usage stack (#7901 lineage); Grok usage has since landed on main via #7869, so this PR has been reconciled down to Antigravity only — main's Grok implementation is kept everywhere the two overlapped.

Behavior

  • Antigravity joins status-bar defaults, the status-bar context-menu toggle, Appearance search/toggles, CLI PATH gating, RPC ui.set schema (antigravity item + _antigravityStatusBarDefaultAdded one-shot migration), and rate-limit state.
  • Rate-limit service mirrors the Gemini usage snapshot under provider: 'antigravity' (Antigravity shares Google/Gemini usage credentials today) so the bar gets a real fetch lifecycle instead of staying pending.
  • A checked Antigravity status item plus PATH detection, combined with the Gemini CLI OAuth opt-in (geminiCliOAuthEnabled), is the durable visibility signal — Antigravity has no separate persisted usage credential in Orca. Without the OAuth opt-in the mirrored snapshot is permanently unavailable, so the default-on item alone must not pin a dead -- bar or suppress the usage setup CTA (fixed in 6becd7488).
  • All 5 locales (en/es/ja/ko/zh) gain the 6 Antigravity keys, translated (not English-stubbed) following the phrasing of the neighboring provider entries.

Superseded / dropped

Testing

  • pnpm typecheck — clean
  • Focused vitest (32 files, 358 tests): status-bar visibility/gating/tooltip/usage-error-copy, StatusBar, appearance search, AppearancePane, client-ui RPC schema, rate-limit types/slice/service, ui slice, GrokUsagePane
  • Manual validation on a dev instance (fresh profile, real agy 1.1.1 from Homebrew): PATH detection, default-on toggle + context-menu round-trip, no dead bar / CTA visible with Gemini OAuth off, Gemini+Antigravity bars appear as a consistent pair with OAuth on, Antigravity details popover branding/copy.
  • pnpm lint — oxlint, switch-exhaustiveness, reliability gates, max-lines ratchet, localization coverage all pass. Note: verify:localization-catalog fails on main too (pre-existing ja.json interpolation mismatch for components.native-chat.composer.uploadingAttachments, unrelated to this PR).

Cross-platform

Status-bar and Appearance surfaces are platform-agnostic; no keyboard shortcuts, paths, or shell behavior touched. No new IPC/preload surface beyond the antigravity unions on existing rate-limit patterns. SSH/remote: provider unions only, same fail-closed behavior as existing providers.

bbingz and others added 8 commits July 9, 2026 11:17
- Guard auth.json read/parse so missing files return null
- Thread AbortSignal through Grok rate-limit fetch and ACP auth
- Pass isRemote:false for floating-terminal agent launch env
Merge stablyai#7878 (fix/antigravity-usage-status) onto main as the first half of
the combined Antigravity + Grok usage status replacement PR.
Merge stablyai#7878 and stablyai#7901 into one replacement branch:
- Keep both providers in shared unions, defaults, RPC ui.set schema, locales
- Wire Antigravity into rate-limit fetch lifecycle (mirror Gemini snapshot)
- Preserve Grok managed accounts, GROK_HOME, and usage fetch from stablyai#7901
- Accept grok and _grokStatusBarDefaultAdded on runtime ui.set
@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please re-review this combined Antigravity + Grok usage status PR (replacement for #7878 and #7901).

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

@bbingz Got it — I'll re-review this combined Antigravity + Grok usage status PR now, covering the merged status-bar defaults, gating, RPC ui.set schema, rate-limit fetch lifecycle, and locale updates for both providers.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds managed Grok account lifecycle management, isolated home directories, CLI authentication, billing-based rate-limit fetching, and IPC/preload integration. Grok homes now flow through session scanning, PTY and WSL environment handling, launch resolution, and rate-limit refreshes. Antigravity and Grok are added to shared provider state, status-bar visibility, settings controls, persistence migration, localization, and web fallbacks. Extensive tests cover account operations, authentication, environment routing, session discovery, provider visibility, and UI migrations.

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 3.90% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Title check ✅ Passed The title is concise and accurately captures the main visible change: Antigravity usage status in the status bar.
Description check ✅ Passed The PR description is detailed and on-topic, but it omits the template’s Screenshots, AI Review Report, Security Audit, and Notes sections.

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
src/renderer/src/components/status-bar/StatusBar.tsx (1)

1685-1699: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Grok's letter badge collides with Codex's fallback letter.

grok is explicitly mapped to 'X', but codex has no explicit branch in this ternary and falls through to the same 'X' default. In iconOnly mode both Codex and Grok will render an identical single-letter badge, making them indistinguishable.

🐛 Proposed fix — give Codex its own letter
                 {provider.provider === 'claude'
                   ? 'C'
                   : provider.provider === 'gemini'
                     ? 'G'
                     : provider.provider === 'opencode-go'
                       ? 'O'
                       : provider.provider === 'kimi'
                         ? 'K'
-                        : provider.provider === 'antigravity'
-                          ? 'A'
-                          : provider.provider === 'grok'
-                            ? 'X'
-                            : provider.provider === 'minimax'
-                              ? 'M'
-                              : 'X'}
+                        : provider.provider === 'antigravity'
+                          ? 'A'
+                          : provider.provider === 'grok'
+                            ? 'X'
+                            : provider.provider === 'minimax'
+                              ? 'M'
+                              : provider.provider === 'codex'
+                                ? 'D'
+                                : 'X'}
src/main/ipc/pty.ts (1)

496-501: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Add a Grok restoration mirror for shell-ready PTYs.

src/main/ipc/pty.ts injects GROK_HOME, but only CODEX_HOME has an ORCA_* companion and shell-ready restore path in src/main/providers/local-pty-provider.ts. Managed Grok sessions can be overridden by shell rc re-exports unless Grok gets the same restore hook.

🧹 Nitpick comments (9)
src/renderer/src/components/status-bar/status-bar-agent-gating.ts (1)

3-9: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Duplicate "Why:" comment line left behind.

Lines 3 and 4 both open with "// Why:" restating the same rationale ("...usage bars are surface noise when the underlying..."). This reads as a stray duplicate from a merge/rebase rather than one clean explanation.

✏️ Proposed cleanup
-// Why: Claude/Codex/Gemini/Antigravity usage bars are surface noise when the underlying
-// Why: CLI-backed usage bars are surface noise when the underlying
+// Why: CLI-backed usage bars are surface noise when the underlying
 // CLI isn't installed (e.g. a fresh Ubuntu install showing "Gemini Usage"
src/renderer/src/components/settings/appearance-status-bar-usage-toggles.ts (1)

138-167: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Antigravity locale keys break the hash-based key convention used elsewhere in this file.

Every other entry uses 10-char hash keys (e.g. 9dc15020d7, de50c6f516), but the antigravity entry uses readable keys (antigravityUsageTitle, antigravityUsageDescription, antigravityKeyword). Based on learnings, settings components should use hash-based locale keys generated via pnpm bootstrap:locale-catalog for consistency with the rest of the catalog.

✏️ Suggested direction
-      title: translate(
-        'auto.components.settings.appearance.search.antigravityUsageTitle',
-        'Antigravity Usage'
-      ),
-      description: translate(
-        'auto.components.settings.appearance.search.antigravityUsageDescription',
-        'Show Antigravity subscription usage in the status bar.'
-      ),
+      title: translate('auto.components.settings.appearance.search.<hash1>', 'Antigravity Usage'),
+      description: translate(
+        'auto.components.settings.appearance.search.<hash2>',
+        'Show Antigravity subscription usage in the status bar.'
+      ),

Based on learnings: "use hash-based locale keys with translate('auto.components.<Dir>.<ComponentFile>.<10-char-hash>', 'Default English text') ... run pnpm bootstrap:locale-catalog so translations propagate to es/ja/ko/zh."

Source: Learnings

src/renderer/src/components/settings/appearance-status-bar-search.ts (1)

10-18: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Merge helper correctly papers over the duplicate catalogs, but see the root-cause comment.

mergeUsageStatusBarToggles() is a reasonable stopgap, and the inline "Why" comment appropriately explains the rationale per path instructions for non-obvious code. However, the underlying duplication between getUsageStatusBarToggles() and getUsageStatusBarToggleEntries() (flagged in appearance-status-bar-usage-toggles.ts) means shared entries can drift since Map.set silently prefers whichever source runs second for overlapping ids.

src/renderer/src/lib/resume-sleeping-agent-session.ts (1)

53-72: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Reuse the already-computed platform instead of recomputing.

isRemoteResumeLaunch(record.worktreeId) re-invokes getResumeLaunchPlatform (another useAppStore.getState() + worktree/repo/runtime lookups) even though resumeLaunchPlatform is already available on Line 53. Deriving isRemote from the local value avoids the redundant work and guarantees the two derived values can't diverge.

♻️ Proposed change
-        : resolveTuiAgentLaunchEnv(record.agent, state.settings?.agentDefaultEnv, {
-            settings: state.settings,
-            isRemote: isRemoteResumeLaunch(record.worktreeId),
-            launchPlatform: resumeLaunchPlatform,
-            hostPlatform: CLIENT_PLATFORM
-          }),
+        : resolveTuiAgentLaunchEnv(record.agent, state.settings?.agentDefaultEnv, {
+            settings: state.settings,
+            isRemote: resumeLaunchPlatform !== CLIENT_PLATFORM,
+            launchPlatform: resumeLaunchPlatform,
+            hostPlatform: CLIENT_PLATFORM
+          }),
src/renderer/src/lib/onboarding-folder-agent-startup.ts (1)

22-27: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Reuse the shared CLIENT_PLATFORM constant instead of a local re-implementation.

getClientPlatform() duplicates CLIENT_PLATFORM from src/renderer/src/lib/new-workspace.ts, which every other file touched in this PR already imports for the same purpose. This diff calls the local duplicate twice more (launchPlatform, hostPlatform), compounding the divergence risk if the two implementations ever drift.

♻️ Suggested consolidation
-function getClientPlatform(): NodeJS.Platform {
-  if (navigator.userAgent.includes('Windows')) {
-    return 'win32'
-  }
-  return navigator.userAgent.includes('Mac') ? 'darwin' : 'linux'
-}
+import { CLIENT_PLATFORM } from './new-workspace'
-    agentEnv: resolveTuiAgentLaunchEnv(agent, settings.agentDefaultEnv, {
-      settings,
-      launchPlatform: getClientPlatform(),
-      hostPlatform: getClientPlatform()
-    }),
-    platform: getClientPlatform(),
+    agentEnv: resolveTuiAgentLaunchEnv(agent, settings.agentDefaultEnv, {
+      settings,
+      launchPlatform: CLIENT_PLATFORM,
+      hostPlatform: CLIENT_PLATFORM
+    }),
+    platform: CLIENT_PLATFORM,

Also applies to: 47-51

src/shared/tui-agent-launch-defaults.ts (1)

108-129: 🎯 Functional Correctness | 🔵 Trivial | 💤 Low value

Remove the no-op Grok branch. Both paths here return the same env, and the main PTY path already owns managed GROK_HOME injection. Drop the unused platform/settings plumbing or wire it to the actual injection point.

src/main/ai-vault/session-scanner-source-discovery.ts (1)

164-170: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Add a "why" comment for additionalGrokSessionsDirs.

The merge of additionalGrokSessionsDirs into the discovery root list is a non-obvious addition (presumably to cover managed/isolated Grok homes) with no comment explaining the rationale. As per coding guidelines, "When writing or modifying code driven by a design doc or another non-obvious constraint, add a brief comment explaining why the code behaves that way."

📝 Proposed comment
   return [
+    // Why: managed Grok accounts keep sessions under isolated GROK_HOME
+    // directories outside the default `~/.grok/sessions` path, so scanning
+    // must include each managed account's sessions dir explicitly.
     ...sessionRootDirs(options.grokSessionsDir ?? GROK_SESSIONS_DIR, wslHomeDirs, [
       '.grok',
       'sessions'
     ]),
     ...(options.additionalGrokSessionsDirs ?? [])
   ].map((rootDir) =>

Source: Coding guidelines

src/renderer/src/components/settings/GrokAccountsSection.tsx (1)

60-60: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Widen return type to React.ReactNode.

Static analysis flags JSX.Element as too narrow for a component's return type since it excludes null, strings, and fragments.

♻️ Proposed fix
-export function GrokAccountsSection(): JSX.Element {
+export function GrokAccountsSection(): React.ReactNode {

Source: Linters/SAST tools

src/shared/types.ts (1)

2332-2348: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

GrokManagedAccount and GrokManagedAccountSummary are identical.

Both types declare the exact same fields. If the intent mirrors the Codex/Claude full-vs-summary split (redacting sensitive fields before exposing accounts to the renderer), there's currently nothing to redact, so the duplication buys nothing today and risks drifting out of sync if a sensitive field is later added to the full type but not mirrored (or over-mirrored) into the summary type.

♻️ Suggested consolidation
-export type GrokManagedAccountSummary = {
-  id: string
-  email: string
-  managedHomePath: string
-  createdAt: number
-  updatedAt: number
-  lastAuthenticatedAt: number
-}
+// Why: no sensitive fields currently differ between the persisted account and
+// the renderer-facing summary; alias instead of maintaining two copies that
+// can silently drift.
+export type GrokManagedAccountSummary = GrokManagedAccount

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 3e9fed51-7afa-4678-ae29-d12ed88feb5b

📥 Commits

Reviewing files that changed from the base of the PR and between 4baaca6 and 0b05524.

📒 Files selected for processing (88)
  • src/main/ai-vault/session-scanner-grok-managed.test.ts
  • src/main/ai-vault/session-scanner-source-discovery.ts
  • src/main/ai-vault/session-scanner-types.ts
  • src/main/codex-accounts/runtime-home-service.test.ts
  • src/main/codex-accounts/service.test.ts
  • src/main/daemon/pty-subprocess.test.ts
  • src/main/daemon/pty-subprocess.ts
  • src/main/grok-accounts/grok-auth-file.ts
  • src/main/grok-accounts/managed-home.test.ts
  • src/main/grok-accounts/managed-home.ts
  • src/main/grok-accounts/service.test.ts
  • src/main/grok-accounts/service.ts
  • src/main/index.ts
  • src/main/ipc/ai-vault.test.ts
  • src/main/ipc/ai-vault.ts
  • src/main/ipc/grok-accounts.test.ts
  • src/main/ipc/grok-accounts.ts
  • src/main/ipc/pty.test.ts
  • src/main/ipc/pty.ts
  • src/main/ipc/register-core-handlers.test.ts
  • src/main/ipc/register-core-handlers.ts
  • src/main/providers/local-pty-provider.test.ts
  • src/main/providers/local-pty-provider.ts
  • src/main/rate-limits/codex-fetcher-auth-errors.test.ts
  • src/main/rate-limits/codex-fetcher-pty-settle.test.ts
  • src/main/rate-limits/grok-acp-auth.ts
  • src/main/rate-limits/grok-fetcher.test.ts
  • src/main/rate-limits/grok-fetcher.ts
  • src/main/rate-limits/service.test.ts
  • src/main/rate-limits/service.ts
  • src/main/runtime/orca-runtime-grok-launch-env.test.ts
  • src/main/runtime/orca-runtime.ts
  • src/main/runtime/rpc/methods/client-ui.test.ts
  • src/main/runtime/rpc/methods/client-ui.ts
  • src/main/startup/configure-process.test.ts
  • src/main/startup/configure-process.ts
  • src/main/window/attach-main-window-services.ts
  • src/preload/api-types.ts
  • src/preload/index.ts
  • src/renderer/src/components/floating-terminal/FloatingTerminalWindowControls.tsx
  • src/renderer/src/components/settings/AccountsPane.tsx
  • src/renderer/src/components/settings/AgentsPane.tsx
  • src/renderer/src/components/settings/AppearancePane.test.tsx
  • src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
  • src/renderer/src/components/settings/GrokAccountsSection.tsx
  • src/renderer/src/components/settings/accounts-search.ts
  • src/renderer/src/components/settings/appearance-status-bar-search.test.ts
  • src/renderer/src/components/settings/appearance-status-bar-search.ts
  • src/renderer/src/components/settings/appearance-status-bar-usage-toggle-entries.ts
  • src/renderer/src/components/settings/appearance-status-bar-usage-toggles.ts
  • src/renderer/src/components/status-bar/StatusBar.tsx
  • src/renderer/src/components/status-bar/status-bar-agent-gating.test.ts
  • src/renderer/src/components/status-bar/status-bar-agent-gating.ts
  • src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts
  • src/renderer/src/components/status-bar/status-bar-provider-visibility.ts
  • src/renderer/src/components/status-bar/tooltip.test.ts
  • src/renderer/src/components/status-bar/tooltip.tsx
  • src/renderer/src/components/status-bar/usage-error-copy.test.ts
  • src/renderer/src/components/status-bar/usage-error-copy.ts
  • src/renderer/src/components/terminal-pane/pty-connection.ts
  • src/renderer/src/hooks/useComposerState.ts
  • src/renderer/src/hooks/useIpcEvents.test.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
  • src/renderer/src/lib/ai-vault-resume-command.ts
  • src/renderer/src/lib/github-work-item-background-request.ts
  • src/renderer/src/lib/launch-agent-background-session.ts
  • src/renderer/src/lib/launch-agent-in-new-tab.ts
  • src/renderer/src/lib/launch-work-item-direct-agent.ts
  • src/renderer/src/lib/onboarding-folder-agent-startup.ts
  • src/renderer/src/lib/resume-sleeping-agent-launch-platform.ts
  • src/renderer/src/lib/resume-sleeping-agent-session.ts
  • src/renderer/src/lib/worktree-activation.ts
  • src/renderer/src/store/slices/rate-limits.test.ts
  • src/renderer/src/store/slices/rate-limits.ts
  • src/renderer/src/store/slices/ui.test.ts
  • src/renderer/src/store/slices/ui.ts
  • src/renderer/src/web/web-preload-api.ts
  • src/shared/constants.ts
  • src/shared/rate-limit-types.test.ts
  • src/shared/rate-limit-types.ts
  • src/shared/status-bar-defaults.ts
  • src/shared/tui-agent-launch-defaults.test.ts
  • src/shared/tui-agent-launch-defaults.ts
  • src/shared/types.ts

Comment thread src/main/daemon/pty-subprocess.ts Outdated
Comment thread src/main/rate-limits/service.ts Outdated
Comment thread src/renderer/src/components/settings/appearance-status-bar-usage-toggles.ts Outdated
Comment thread src/renderer/src/components/status-bar/StatusBar.tsx
Comment thread src/renderer/src/components/status-bar/StatusBar.tsx Outdated
Comment thread src/renderer/src/components/status-bar/StatusBar.tsx Outdated
- Pin WSL shell distro when resolving managed GROK_HOME (parity with Codex)
- Refresh only Grok on account change via fetchGrokOnly
- Consolidate usage status-bar toggle catalogs; add Grok locale keys
- Fix Grok aria-label, feature-interaction tracking, and test fixture

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
src/renderer/src/components/settings/appearance-status-bar-usage-toggle-entries.ts (1)

1-7: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Remove the unused shim export. No files reference appearance-status-bar-usage-toggle-entries, so this re-export can be deleted.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: dabd12d0-d135-441a-bf89-f98018af8bc9

📥 Commits

Reviewing files that changed from the base of the PR and between 0b05524 and fb5ede1.

📒 Files selected for processing (12)
  • src/main/daemon/pty-subprocess.ts
  • src/main/rate-limits/service.ts
  • src/renderer/src/components/settings/appearance-status-bar-search.ts
  • src/renderer/src/components/settings/appearance-status-bar-usage-toggle-entries.ts
  • src/renderer/src/components/settings/appearance-status-bar-usage-toggles.ts
  • src/renderer/src/components/status-bar/StatusBar.tsx
  • src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
✅ Files skipped from review due to trivial changes (1)
  • src/renderer/src/i18n/locales/en.json
🚧 Files skipped from review as they are similar to previous changes (8)
  • src/renderer/src/components/settings/appearance-status-bar-usage-toggles.ts
  • src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts
  • src/main/daemon/pty-subprocess.ts
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/components/status-bar/StatusBar.tsx
  • src/renderer/src/i18n/locales/zh.json

bbingz and others added 2 commits July 10, 2026 10:25
Remove the leftover re-export path so Appearance search has a single
source of truth for usage provider toggles (including Antigravity + Grok).
Keep Grok accounts section imports with remote provider account client
helpers from stablyai#7999, and preserve both status-bar usage + remoteServer
locale keys.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2


ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: 8bccc9c1-db2a-4a59-b99c-b0e161cb5806

📥 Commits

Reviewing files that changed from the base of the PR and between fb5ede1 and 2c277ef.

📒 Files selected for processing (9)
  • src/main/codex-accounts/service.test.ts
  • src/main/runtime/orca-runtime.ts
  • src/renderer/src/components/settings/AccountsPane.tsx
  • src/renderer/src/components/status-bar/StatusBar.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
🚧 Files skipped from review as they are similar to previous changes (3)
  • src/main/codex-accounts/service.test.ts
  • src/renderer/src/components/status-bar/StatusBar.tsx
  • src/main/runtime/orca-runtime.ts

Comment thread src/renderer/src/components/settings/AccountsPane.tsx Outdated
Comment thread src/renderer/src/components/settings/AccountsPane.tsx Outdated
bbingz added 3 commits July 10, 2026 10:52
Re-do AccountsPane three-way merge with binary-safe git objects and keep
both Grok accounts + remote provider client imports. Rebuild locale JSON
merges so em dash/ellipsis/middle-dot strings are no longer mojibake.
Deep-merge locale JSON from binary-safe git objects so PR usage keys and
main remote-server strings coexist without conflict markers or mojibake.
@brennanb2025
brennanb2025 self-requested a review July 10, 2026 03:06
@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main (locale conflicts only). Deep-merged en/es/ja/ko/zh JSON so PR usage strings + main remote-server keys coexist. 75a8580e8.

@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main. Took main's split resume-sleeping-agent-session / sleeping-agent-session-launch layout. b5aa61ef2.

Bring in browser CDP attach, HTML preview-to-side, and Antigravity sandbox flag updates from main. No conflicts expected with this branch's status-bar/Grok surfaces.
@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main (no conflicts: CDP attach, HTML preview-to-side, Antigravity sandbox flag). Focused Vitest 76/76 green. PR description filled to template. Head: fe9be8cb6.

Prefer PR managed Grok accounts + Antigravity usage over main stablyai#7869
minimal CLI status surfaces. Deduplicate auto-merged Grok IPC/preload
registrations and deep-merge locale catalogs.
@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Merged latest origin/main (includes #7869 Grok CLI usage). Kept this PR's managed Grok accounts + Antigravity usage path, deduped auto-merged Grok IPC/preload, deep-merged locales. 3867ad0a77742c4e1762dcf6fe0e9088bd2f4f99.

Brennan Benson added 4 commits July 10, 2026 00:37
Grok usage landed on main via stablyai#7869 (superseding this PR's stablyai#7901 lineage),
so this merge keeps main's Grok implementation everywhere the two stacks
overlapped and drops the PR-side Grok stack (managed accounts/GROK_HOME,
fetcher, launch/resume env, appearance catalog). The PR now carries only
the Antigravity usage surfaces.
RateLimitState gained a required antigravity field; the pane fixture must
carry it to typecheck.
…reconciliation

The fork-side merge (3867ad0) resolved against main@fa2b228ad keeping both
usage stacks. Main's Grok implementation (stablyai#7869) already covers Grok, so the
maintainer-side resolution (58745b2 + 46cfc00) that reduces this PR to
Antigravity-only wins; this merge records that supersession.
@brennanb2025 brennanb2025 changed the title feat(status-bar): combine Antigravity and Grok usage status feat(status-bar): Antigravity usage status Jul 10, 2026
@brennanb2025

Copy link
Copy Markdown
Contributor

Maintainer note (@bbingz): Grok usage landed on main via #7869, so I reconciled this branch down to Antigravity-only rather than carrying two competing Grok stacks:

  • Merged main and kept main's Grok implementation everywhere the two overlapped (status bar, rate-limit service/types, ui slice, appearance, locales).
  • Removed this branch's Grok stack: managed accounts / GROK_HOME PTY env / fetcher / launch-resume paths, and the single-catalog appearance refactor (main keeps inline entries + per-provider search files; Antigravity now follows that same pattern in appearance-status-bar-antigravity-toggle-search.ts).
  • Your fork-side merge commit 3867ad0a7 (which resolved against an older main keeping both stacks) is recorded as superseded via an ours-strategy merge — nothing from it was lost that isn't already on main.

If Grok managed accounts / GROK_HOME isolation is still something you want, please open a fresh PR building on main's #7869 base.

Validation on the reconciled tip: pnpm typecheck clean, 358 focused vitest tests green, full lint green except the pre-existing ja.json catalog-parity failure that also reproduces on pristine main (components.native-chat.composer.uploadingAttachments interpolation mismatch — unrelated to this PR).

@bbingz

bbingz commented Jul 10, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @brennanb2025 — this reconciliation looks right.

Keeping main’s Grok from #7869 and narrowing this PR to Antigravity-only avoids two competing stacks. I’m fine with dropping the fork-side Grok managed accounts / GROK_HOME work from this branch; if we still want that isolation later, I’ll open a fresh PR on top of main’s #7869 base.

Appreciate you landing the Antigravity path cleanly and validating typecheck / focused tests / lint on the tip.

@brennanb2025

brennanb2025 commented Jul 10, 2026

Copy link
Copy Markdown
Contributor

First off — thank you for all the work you've put into this PR, and for being so gracious about the Grok reconciliation. We appreciate the offer to rebuild the managed-accounts piece on the new base!

That said, please hold off on that fresh PR — we don't want to add GROK_HOME isolation until we've done real research and planned it out. Our CODEX_HOME managed-home experience surfaced a lot of subtle issues (config write-back/mirroring churn, WSL/remote env injection surface), so we want to design any second owned-home deliberately rather than inherit that class of problems. Today's read-only ~/.grok/auth.json integration covers usage visibility without any of that surface. If multi-account demand or a write-access need materializes, we'll do the design work and drive it from our side — we wouldn't ask you to build it twice.

Thanks again for the Antigravity work — it's ready to go, and we're glad to have it.

…opt-in

The Antigravity snapshot mirrors the Gemini fetch, which is permanently
'unavailable' until the user opts into Gemini CLI OAuth. Without this gate
the default-on checked item plus a detected agy CLI pinned a dead 'A --'
bar (Gemini itself hides in that state) and suppressed the usage setup CTA
for users who configured nothing.
@brennanb2025
brennanb2025 merged commit 4209889 into stablyai:main Jul 10, 2026
3 checks passed
andrecristodev added a commit to andrecristodev/orca that referenced this pull request Jul 11, 2026
Replace the Gemini-mirrored Antigravity snapshot (stablyai#7996) with a real Code
Assist ANTIGRAVITY fetch, OS keyring credential reads (agy), encrypted
multi-account store, and a status-bar account switcher.

Why: stablyai#7996 landed the status-bar slot but mirrored Gemini OAuth usage,
which does not match Antigravity quota and requires Gemini CLI login.
This upgrade reads agy/keyring credentials, groups family limits like
the Antigravity app, and lets users switch Google accounts from Orca.
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