Repository navigation
refactor: remove legacy Gemini CLI support - #12789
AmethystLiang wants to merge 11 commits into
Conversation
|
Too many files changed for review (264 files, 100 file limit). Bypass the limit by tagging |
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughThis change retires Gemini support across the application. It removes Gemini agent configuration, hooks, session scanning, OAuth and rate-limit handling, title detection, status-bar usage, native-chat support, settings UI, and shared type entries. Persisted profiles are cleaned during loading. Compatibility schemas still accept retired status-bar values before filtering them. Tests, fixtures, mobile mappings, help text, and bundled skill guides are updated accordingly. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
✨ Finishing Touches 💡 2📝 Generate docstrings 💡
⚔️ Resolve merge conflicts 💡
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 |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (2)
src/main/retired-agent-settings-cleanup.test.ts (1)
71-84: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win
toMatchObjectcannot prove that retired keys were removed.
toMatchObjectmatches nested objects partially. A leftovergeminikey insideselectedModelByAgent,discoveredModelsByAgent, ormodelOverridesByOperationstill satisfies this assertion, so the test passes even ifdropRetiredAgentKeysregresses. UsetoEqualon the cleanedsourceControlAiobject, as the sibling tests at lines 92 and 104 already do.💚 Proposed assertion change
- expect(ai).toMatchObject({ + expect(ai).toEqual({ agentId: null, selectedModelByAgent: { claude: 'opus' }, selectedModelByAgentByHost: { 'ssh:box': {} }, discoveredModelsByAgent: {}, actions: { commitMessage: { agentId: null, commandInputTemplate: '{diff}' }, pullRequest: { agentId: 'claude' } }, launchActionDefaults: { fixCommitFailure: { agentId: null } }, modelOverridesByOperation: { commitMessage: { selectedModelByAgent: {} } } })src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts (1)
13-15: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueNarrow
RendererPolicyDecision.confidence.
resolvePaneRendererPolicyreturns only'authoritative', and current consumers pass onlygpuEnabled. DropfallbackfromRendererPolicyDecision, or removeconfidenceif this value is not needed by consumers.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: 64f5840f-d409-4e22-bc84-e7bcbca98ee7
📒 Files selected for processing (187)
mobile/scripts/mock-server-rpc-handlers.tsmobile/src/components/accounts-snapshot.tsmobile/src/components/mobile-agent-icon-assets.tsmobile/src/tasks/mobile-tui-agents.tsmobile/src/worktree/agent-row-display.tsskill-guides/orca-cli.mdskill-guides/orchestration.mdsrc/cli/bundled-skill-guides.tssrc/cli/help.tssrc/main/agent-hooks/installer-utils.test.tssrc/main/agent-hooks/installer-utils.tssrc/main/agent-hooks/managed-agent-hook-registry.tssrc/main/agent-hooks/managed-hook-local-filesystem.test.tssrc/main/agent-hooks/managed-hook-stdin-lifecycle.test.tssrc/main/agent-hooks/managed-hook-timeout.test.tssrc/main/agent-hooks/remote-hook-service-installers.test.tssrc/main/agent-hooks/remote-managed-hook-installers.tssrc/main/agent-hooks/server.test.tssrc/main/ai-vault/remote-session-scanner-sources.tssrc/main/ai-vault/session-scanner-accumulator.tssrc/main/ai-vault/session-scanner-agent-parser.tssrc/main/ai-vault/session-scanner-codex-workers.test.tssrc/main/ai-vault/session-scanner-gemini-parsers.tssrc/main/ai-vault/session-scanner-incremental-fixtures.tssrc/main/ai-vault/session-scanner-parse-cache.tssrc/main/ai-vault/session-scanner-scope.test.tssrc/main/ai-vault/session-scanner-source-discovery.tssrc/main/ai-vault/session-scanner-test-fixtures.tssrc/main/ai-vault/session-scanner-types.tssrc/main/ai-vault/session-scanner.test.tssrc/main/ai-vault/session-scanner.tssrc/main/automations/service.test.tssrc/main/codex-accounts/runtime-home-service.test.tssrc/main/codex-accounts/service.test.tssrc/main/gemini/hook-service.test.tssrc/main/gemini/hook-service.tssrc/main/index.tssrc/main/ipc/agent-hooks.tssrc/main/ipc/notification-options.tssrc/main/opencode/hook-service.tssrc/main/persistence.test.tssrc/main/persistence.tssrc/main/pi/agent-status-extension-source.tssrc/main/providers/agent-foreground-process.test.tssrc/main/rate-limits/gemini-bucket-formatting.test.tssrc/main/rate-limits/gemini-bucket-formatting.tssrc/main/rate-limits/gemini-cli-oauth-extractor.tssrc/main/rate-limits/gemini-oauth-sources.tssrc/main/rate-limits/gemini-usage-fetcher.fallback.test.tssrc/main/rate-limits/gemini-usage-fetcher.test-fixtures.tssrc/main/rate-limits/gemini-usage-fetcher.test.tssrc/main/rate-limits/gemini-usage-fetcher.tssrc/main/rate-limits/service.test.tssrc/main/rate-limits/service.tssrc/main/retired-agent-settings-cleanup.test.tssrc/main/retired-agent-settings-cleanup.tssrc/main/runtime/orca-runtime.tssrc/main/runtime/orchestration/groups.tssrc/main/runtime/rpc/methods/client-ui-schemas.tssrc/main/runtime/rpc/methods/client-ui-status-bar-items.tssrc/main/runtime/rpc/methods/client-ui.test.tssrc/main/runtime/rpc/methods/orchestration.tssrc/main/skills/discovery.test.tssrc/main/skills/skill-discovery-sources.tssrc/preload/api-types.tssrc/preload/index.tssrc/relay/pty-shell-utils.test.tssrc/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.test.tssrc/renderer/src/components/feature-wall/feature-wall-usage-tracking.tssrc/renderer/src/components/native-chat/NativeChatView.test.tsxsrc/renderer/src/components/native-chat/native-chat-availability.test.tssrc/renderer/src/components/native-chat/native-chat-availability.tssrc/renderer/src/components/native-chat/native-chat-image-paste.tssrc/renderer/src/components/native-chat/native-chat-pane-resolution.test.tssrc/renderer/src/components/native-chat/native-chat-session-option-enrichment.test.tssrc/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.test.tssrc/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.tssrc/renderer/src/components/settings/AccountsPane.test.tsxsrc/renderer/src/components/settings/AccountsPane.tsxsrc/renderer/src/components/settings/AppearancePane.test.tsxsrc/renderer/src/components/settings/AppearanceWindowSidebarSection.tsxsrc/renderer/src/components/settings/CommitMessageAiPane.test.tsxsrc/renderer/src/components/settings/OrchestrationPane.test.tsxsrc/renderer/src/components/settings/accounts-search.tssrc/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.tssrc/renderer/src/components/settings/appearance-status-bar-search.test.tssrc/renderer/src/components/settings/appearance-status-bar-search.tssrc/renderer/src/components/sidebar/smart-attention.test.tssrc/renderer/src/components/sidebar/worktree-title-derived-agent-rows.tssrc/renderer/src/components/stats/GrokUsagePane.test.tsxsrc/renderer/src/components/status-bar/StatusBar.tsxsrc/renderer/src/components/status-bar/StatusBarUsageEmptyCta.tsxsrc/renderer/src/components/status-bar/UsageRosterPanel.tsxsrc/renderer/src/components/status-bar/icons.tsxsrc/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsxsrc/renderer/src/components/status-bar/status-bar-agent-gating.test.tssrc/renderer/src/components/status-bar/status-bar-agent-gating.tssrc/renderer/src/components/status-bar/status-bar-provider-visibility.test.tssrc/renderer/src/components/status-bar/status-bar-provider-visibility.tssrc/renderer/src/components/status-bar/tooltip.test.tssrc/renderer/src/components/status-bar/tooltip.tsxsrc/renderer/src/components/status-bar/usage-error-copy.test.tssrc/renderer/src/components/status-bar/usage-error-copy.tssrc/renderer/src/components/status-bar/usage-provider-settings-target.test.tssrc/renderer/src/components/status-bar/usage-provider-settings-target.tssrc/renderer/src/components/tab-bar/QuickLaunchButton.test.tssrc/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsxsrc/renderer/src/components/tab-bar/tab-agent-launch-options.test.tssrc/renderer/src/components/terminal-pane/agent-completion-coordinator.test.tssrc/renderer/src/components/terminal-pane/agent-completion-coordinator.tssrc/renderer/src/components/terminal-pane/agent-interrupt-inference.test.tssrc/renderer/src/components/terminal-pane/agent-interrupt-inference.tssrc/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.test.tssrc/renderer/src/components/terminal-pane/pty-connection.test.tssrc/renderer/src/components/terminal-pane/pty-connection.tssrc/renderer/src/components/terminal-pane/terminal-renderer-policy.test.tssrc/renderer/src/components/terminal-pane/terminal-renderer-policy.tssrc/renderer/src/components/terminal-pane/terminal-title-evidence.test.tssrc/renderer/src/components/terminal-pane/terminal-title-evidence.tssrc/renderer/src/components/terminal-pane/title-agent-identity.tssrc/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.test.tssrc/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.tssrc/renderer/src/hooks/useSettingsNavigationMetadata.tssrc/renderer/src/lib/agent-catalog.tsxsrc/renderer/src/lib/agent-favicon-assets.tssrc/renderer/src/lib/agent-launch-prompt-delivery.test.tssrc/renderer/src/lib/agent-paste-draft.test.tssrc/renderer/src/lib/agent-paste-draft.tssrc/renderer/src/lib/agent-send-title-status.tssrc/renderer/src/lib/agent-status-count.test.tssrc/renderer/src/lib/agent-status.test.tssrc/renderer/src/lib/agent-status.tssrc/renderer/src/lib/native-chat-initial-view-mode.test.tssrc/renderer/src/lib/native-chat-launch-draft-mirrorability.test.tssrc/renderer/src/lib/orchestration-skill-coverage.test.tssrc/renderer/src/lib/tui-agent-startup.test.tssrc/renderer/src/lib/use-tab-agent-pi-identity.test.tssrc/renderer/src/lib/use-tab-agent-retained-identity.test.tssrc/renderer/src/lib/use-tab-agent-sleeping-session.test.tssrc/renderer/src/lib/use-tab-agent.test.tssrc/renderer/src/store/slices/rate-limits.test.tssrc/renderer/src/store/slices/rate-limits.tssrc/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.tssrc/renderer/src/store/slices/ui.test.tssrc/renderer/src/store/slices/ui.tssrc/renderer/src/store/slices/workspace-cleanup.tssrc/renderer/src/web/web-preload-api.tssrc/shared/agent-detection.tssrc/shared/agent-hook-listener.test.tssrc/shared/agent-hook-listener.tssrc/shared/agent-hook-relay.tssrc/shared/agent-hook-types.tssrc/shared/agent-kind.tssrc/shared/agent-name-token-match.tssrc/shared/agent-process-recognition.test.tssrc/shared/agent-process-recognition.tssrc/shared/agent-row-conversation-name.test.tssrc/shared/agent-row-conversation-name.tssrc/shared/agent-session-option-catalog-cursor.tssrc/shared/agent-session-option-catalog.tssrc/shared/agent-session-resume.test.tssrc/shared/agent-session-resume.tssrc/shared/agent-status-types.tssrc/shared/agent-title-core.tssrc/shared/agent-title-decoration.tssrc/shared/agent-title-identity.tssrc/shared/agent-title-status.tssrc/shared/agent-type-label.tssrc/shared/ai-vault-resume-command.tssrc/shared/ai-vault-types.tssrc/shared/constants.test.tssrc/shared/constants.tssrc/shared/feature-wall-tiles.tssrc/shared/rate-limit-types.test.tssrc/shared/rate-limit-types.tssrc/shared/skills-cli-agent-keys.tssrc/shared/status-bar-defaults.tssrc/shared/telemetry-events.tssrc/shared/terminal-quick-commands.test.tssrc/shared/terminal-title-agent-type.test.tssrc/shared/terminal-title-agent-type.tssrc/shared/tui-agent-config.tssrc/shared/tui-agent-display-names.tssrc/shared/tui-agent-permissions.tssrc/shared/tui-agent-selection.test.tssrc/shared/tui-agent-selection.tssrc/shared/types.ts
💤 Files with no reviewable changes (90)
- src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
- src/main/ai-vault/session-scanner-test-fixtures.ts
- src/renderer/src/components/stats/GrokUsagePane.test.tsx
- src/shared/status-bar-defaults.ts
- src/renderer/src/components/status-bar/usage-provider-settings-target.test.ts
- src/shared/agent-type-label.ts
- src/main/ai-vault/session-scanner-codex-workers.test.ts
- src/shared/agent-status-types.ts
- src/main/ai-vault/session-scanner-scope.test.ts
- src/main/ai-vault/session-scanner-agent-parser.ts
- src/renderer/src/components/status-bar/usage-error-copy.test.ts
- src/main/ai-vault/session-scanner-incremental-fixtures.ts
- src/main/rate-limits/gemini-usage-fetcher.test.ts
- src/shared/agent-hook-relay.ts
- src/main/ai-vault/session-scanner-gemini-parsers.ts
- src/renderer/src/components/settings/CommitMessageAiPane.test.tsx
- src/main/gemini/hook-service.ts
- src/renderer/src/components/terminal-pane/agent-interrupt-inference.test.ts
- src/main/rate-limits/gemini-usage-fetcher.ts
- src/main/rate-limits/gemini-bucket-formatting.test.ts
- src/main/rate-limits/gemini-usage-fetcher.test-fixtures.ts
- src/main/ai-vault/session-scanner-types.ts
- src/main/rate-limits/gemini-cli-oauth-extractor.ts
- src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts
- src/main/ipc/notification-options.ts
- src/shared/terminal-quick-commands.test.ts
- src/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsx
- src/main/rate-limits/gemini-bucket-formatting.ts
- src/renderer/src/components/settings/AppearancePane.test.tsx
- src/main/runtime/orchestration/groups.ts
- src/main/gemini/hook-service.test.ts
- src/shared/tui-agent-selection.ts
- src/shared/agent-hook-listener.test.ts
- src/main/ai-vault/session-scanner-source-discovery.ts
- src/shared/tui-agent-permissions.ts
- src/renderer/src/components/native-chat/native-chat-image-paste.ts
- src/main/index.ts
- src/renderer/src/components/settings/appearance-status-bar-search.test.ts
- src/preload/api-types.ts
- src/main/ipc/agent-hooks.ts
- src/main/skills/skill-discovery-sources.ts
- src/shared/agent-row-conversation-name.test.ts
- src/shared/agent-session-option-catalog-cursor.ts
- src/shared/agent-title-identity.ts
- src/shared/constants.ts
- src/main/agent-hooks/remote-managed-hook-installers.ts
- src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts
- src/shared/ai-vault-resume-command.ts
- src/shared/agent-kind.ts
- src/preload/index.ts
- src/shared/constants.test.ts
- src/main/rate-limits/gemini-oauth-sources.ts
- src/renderer/src/components/settings/AccountsPane.test.tsx
- mobile/src/tasks/mobile-tui-agents.ts
- src/main/codex-accounts/service.test.ts
- src/main/ai-vault/session-scanner.test.ts
- src/shared/agent-session-resume.ts
- src/shared/tui-agent-display-names.ts
- src/main/skills/discovery.test.ts
- src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts
- src/shared/telemetry-events.ts
- src/renderer/src/components/status-bar/icons.tsx
- src/main/codex-accounts/runtime-home-service.test.ts
- src/shared/agent-name-token-match.ts
- src/shared/ai-vault-types.ts
- src/renderer/src/components/settings/accounts-search.ts
- src/renderer/src/components/status-bar/usage-error-copy.ts
- src/shared/skills-cli-agent-keys.ts
- src/main/ai-vault/remote-session-scanner-sources.ts
- src/renderer/src/lib/agent-catalog.tsx
- src/shared/agent-title-core.ts
- src/shared/agent-detection.ts
- src/shared/agent-hook-listener.ts
- src/shared/terminal-title-agent-type.ts
- src/renderer/src/components/settings/appearance-status-bar-search.ts
- src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts
- mobile/src/components/mobile-agent-icon-assets.ts
- src/main/agent-hooks/managed-agent-hook-registry.ts
- src/renderer/src/store/slices/workspace-cleanup.ts
- src/shared/agent-title-status.ts
- src/renderer/src/components/terminal-pane/agent-completion-coordinator.ts
- src/renderer/src/lib/agent-status.ts
- src/renderer/src/lib/agent-favicon-assets.ts
- src/renderer/src/components/terminal-pane/terminal-title-evidence.ts
- src/shared/types.ts
- src/renderer/src/components/status-bar/usage-provider-settings-target.ts
- src/renderer/src/lib/agent-send-title-status.ts
- src/renderer/src/store/slices/rate-limits.ts
- src/renderer/src/web/web-preload-api.ts
- src/shared/tui-agent-config.ts
|
@coderabbitai Fixing. Will be in the next commit |
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
37d6238 to
c49f4c4
Compare
|
Note GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer. |
There was a problem hiding this comment.
Actionable comments posted: 2
🧹 Nitpick comments (3)
src/main/agent-hooks/remote-managed-hook-installers.ts (1)
83-88: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winCheck the abort signal before the remote cleanup.
The cleanup performs SFTP writes and unlinks on the remote home. It runs before any
options?.signal?.throwIfAborted()call. If the relay request is already cancelled, this still mutates remote user config, which contradicts the contract stated at Lines 95-97.Add the abort check first. Note that
removeRetiredGeminiManagedHooksRemotealready swallows its own errors, so the surroundingtry/catchis defensive only.♻️ Proposed change
// Why: strip retired Gemini CLI hooks on remote homes the same way as local. + options?.signal?.throwIfAborted() try { await removeRetiredGeminiManagedHooksRemote(sftp, remoteHome) } catch (error) { console.warn('[agent-hooks] Failed to clean retired remote Gemini managed hooks:', error) }src/main/automations/headless-dispatch.ts (1)
120-140: 🩺 Stability & Availability | 🔵 Trivial | ⚡ Quick winTerminate the completion chain with a final rejection handler.
markDispatchResultperforms store writes and usage collection, so it can reject. Two paths leak that rejection:
- If
markDispatchResultrejects inside.thenat Lines 122-131, the.catchat Lines 132-139 runs and callsmarkDispatchResulta second time withdispatch_failed.- If the
.catchhandler itself rejects, nothing handles it. The chain starts withvoid, so the process reports an unhandled rejection.Add a terminal
.catchthat only logs. Also consider passingprecheckResultin the failure branch for parity with the success branch.♻️ Proposed change
.catch((error) => markDispatchResult({ runId: run.id, status: 'dispatch_failed', ...launchRunTarget, + precheckResult, error: error instanceof Error ? error.message : String(error) }) ) + .catch((error) => { + console.warn('[automations] Failed to persist headless dispatch result:', error) + })src/main/retired-agent-settings-cleanup.ts (1)
91-104: 🚀 Performance & Scalability | 🔵 Trivial | ⚖️ Poor tradeoffAvoid two full serializations of the persisted state.
JSON.stringify(state)runs twice over the whole profile, which includesgithubCache,automationRuns, and workspace session partitions. Large profiles reach several megabytes, so this allocates two full copies on every load in addition to the recursive walk.Track mutations with a flag inside
scrubanddropRetiredKeysinstead.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro Plus
Run ID: bb096cad-c008-4cb2-a8ef-3b714539512a
⛔ Files ignored due to path filters (1)
src/shared/agent-icons/gemini.pngis excluded by!**/*.png
📒 Files selected for processing (230)
config/electron-builder.config.cjsconfig/scripts/verify-agent-hook-stdin-lifecycle.mjsconfig/tsconfig.cli.jsonmobile/scripts/mock-server-rpc-handlers.tsmobile/src/components/accounts-snapshot.tsmobile/src/components/mobile-agent-icon-assets.tsmobile/src/session/mobile-terminal-tab-agent.test.tsmobile/src/tasks/mobile-tui-agents.tsmobile/src/worktree/agent-row-display.tsskill-guides/orca-cli.mdskill-guides/orchestration.mdsrc/cli/bundled-skill-guides.tssrc/cli/help.tssrc/main/agent-hooks/installer-utils.test.tssrc/main/agent-hooks/installer-utils.tssrc/main/agent-hooks/managed-agent-hook-controls.tssrc/main/agent-hooks/managed-agent-hook-registry.tssrc/main/agent-hooks/managed-hook-local-filesystem.test.tssrc/main/agent-hooks/managed-hook-runtime.tssrc/main/agent-hooks/managed-hook-stdin-lifecycle.test.tssrc/main/agent-hooks/managed-hook-timeout.test.tssrc/main/agent-hooks/remote-hook-service-installers.test.tssrc/main/agent-hooks/remote-managed-hook-installers.tssrc/main/agent-hooks/retired-gemini-hook-cleanup.test.tssrc/main/agent-hooks/retired-gemini-hook-cleanup.tssrc/main/agent-hooks/server.test.tssrc/main/agent-hooks/wsl-hook-fs-adapter.tssrc/main/agent-hooks/wsl-hook-relay-manager.test.tssrc/main/ai-vault/remote-session-scanner-sources.tssrc/main/ai-vault/session-scanner-accumulator.tssrc/main/ai-vault/session-scanner-agent-parser.tssrc/main/ai-vault/session-scanner-codex-workers.test.tssrc/main/ai-vault/session-scanner-gemini-parsers.tssrc/main/ai-vault/session-scanner-incremental-fixtures.tssrc/main/ai-vault/session-scanner-parse-cache.tssrc/main/ai-vault/session-scanner-scope.test.tssrc/main/ai-vault/session-scanner-source-discovery.tssrc/main/ai-vault/session-scanner-test-fixtures.tssrc/main/ai-vault/session-scanner-types.tssrc/main/ai-vault/session-scanner.test.tssrc/main/ai-vault/session-scanner.tssrc/main/automations/headless-dispatch.tssrc/main/automations/headless-workspace-create.test.tssrc/main/automations/headless-workspace-create.tssrc/main/automations/service.test.tssrc/main/automations/service.tssrc/main/codex-accounts/runtime-home-service.test.tssrc/main/codex-accounts/service.test.tssrc/main/gemini/hook-service.test.tssrc/main/gemini/hook-service.tssrc/main/index.tssrc/main/ipc/agent-hooks.test.tssrc/main/ipc/agent-hooks.tssrc/main/ipc/notification-options.tssrc/main/opencode/hook-service.tssrc/main/persistence.test.tssrc/main/persistence.tssrc/main/pi/agent-status-extension-source.tssrc/main/providers/agent-foreground-process.test.tssrc/main/rate-limits/gemini-bucket-formatting.test.tssrc/main/rate-limits/gemini-bucket-formatting.tssrc/main/rate-limits/gemini-cli-oauth-extractor.tssrc/main/rate-limits/gemini-oauth-sources.tssrc/main/rate-limits/gemini-usage-fetcher.fallback.test.tssrc/main/rate-limits/gemini-usage-fetcher.test-fixtures.tssrc/main/rate-limits/gemini-usage-fetcher.test.tssrc/main/rate-limits/gemini-usage-fetcher.tssrc/main/rate-limits/service.test.tssrc/main/rate-limits/service.tssrc/main/retired-agent-settings-cleanup.test.tssrc/main/retired-agent-settings-cleanup.tssrc/main/runtime/orca-runtime.tssrc/main/runtime/orchestration/groups.tssrc/main/runtime/rpc/methods/client-ui-schemas.tssrc/main/runtime/rpc/methods/client-ui-status-bar-items.tssrc/main/runtime/rpc/methods/client-ui.test.tssrc/main/runtime/rpc/methods/orchestration-worker-launch-preferences.test.tssrc/main/runtime/rpc/methods/orchestration.tssrc/main/runtime/rpc/methods/worktree-schemas.test.tssrc/main/runtime/rpc/methods/worktree-schemas.tssrc/main/skills/discovery.test.tssrc/main/skills/skill-discovery-sources.tssrc/main/ssh/ssh-relay-session-managed-hooks.test.tssrc/main/ssh/ssh-relay-session.tssrc/preload/api-types.tssrc/preload/index.tssrc/relay/agent-exec-handler-test-harness.tssrc/relay/agent-exec-handler.test.tssrc/relay/pty-shell-utils.test.tssrc/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.test.tssrc/renderer/src/components/automations/AutomationDetail.tsxsrc/renderer/src/components/automations/AutomationsPage.tsxsrc/renderer/src/components/automations/automation-draft-model.tssrc/renderer/src/components/automations/automation-host-client.test.tssrc/renderer/src/components/automations/automation-source-availability.tssrc/renderer/src/components/automations/automation-target-availability.tssrc/renderer/src/components/dashboard/dashboard-worktree-launch-options.test.tssrc/renderer/src/components/feature-wall/feature-wall-usage-tracking.tssrc/renderer/src/components/native-chat/NativeChatView.test.tsxsrc/renderer/src/components/native-chat/native-chat-availability.test.tssrc/renderer/src/components/native-chat/native-chat-availability.tssrc/renderer/src/components/native-chat/native-chat-image-paste.tssrc/renderer/src/components/native-chat/native-chat-pane-resolution.test.tssrc/renderer/src/components/native-chat/native-chat-session-option-enrichment.test.tssrc/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.test.tssrc/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.tssrc/renderer/src/components/settings/AccountsPane.test.tsxsrc/renderer/src/components/settings/AccountsPane.tsxsrc/renderer/src/components/settings/AppearancePane.test.tsxsrc/renderer/src/components/settings/AppearanceWindowSidebarSection.tsxsrc/renderer/src/components/settings/CommitMessageAiPane.test.tsxsrc/renderer/src/components/settings/OrchestrationPane.test.tsxsrc/renderer/src/components/settings/accounts-search.tssrc/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.tssrc/renderer/src/components/settings/appearance-status-bar-search.test.tssrc/renderer/src/components/settings/appearance-status-bar-search.tssrc/renderer/src/components/sidebar/smart-attention.test.tssrc/renderer/src/components/sidebar/worktree-title-derived-agent-rows.tssrc/renderer/src/components/stats/GrokUsagePane.test.tsxsrc/renderer/src/components/status-bar/StatusBar.tsxsrc/renderer/src/components/status-bar/StatusBarUsageEmptyCta.tsxsrc/renderer/src/components/status-bar/UsageRosterPanel.tsxsrc/renderer/src/components/status-bar/icons.tsxsrc/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsxsrc/renderer/src/components/status-bar/status-bar-agent-gating.test.tssrc/renderer/src/components/status-bar/status-bar-agent-gating.tssrc/renderer/src/components/status-bar/status-bar-provider-visibility.test.tssrc/renderer/src/components/status-bar/status-bar-provider-visibility.tssrc/renderer/src/components/status-bar/tooltip.test.tssrc/renderer/src/components/status-bar/tooltip.tsxsrc/renderer/src/components/status-bar/usage-error-copy.test.tssrc/renderer/src/components/status-bar/usage-error-copy.tssrc/renderer/src/components/status-bar/usage-provider-settings-target.test.tssrc/renderer/src/components/status-bar/usage-provider-settings-target.tssrc/renderer/src/components/tab-bar/QuickLaunchButton.test.tssrc/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsxsrc/renderer/src/components/tab-bar/tab-agent-launch-options.test.tssrc/renderer/src/components/terminal-pane/agent-completion-coordinator.test.tssrc/renderer/src/components/terminal-pane/agent-completion-coordinator.tssrc/renderer/src/components/terminal-pane/agent-interrupt-inference.test.tssrc/renderer/src/components/terminal-pane/agent-interrupt-inference.tssrc/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.test.tssrc/renderer/src/components/terminal-pane/pty-connection.test.tssrc/renderer/src/components/terminal-pane/pty-connection.tssrc/renderer/src/components/terminal-pane/remote-hidden-output-restore-outcomes.test.tssrc/renderer/src/components/terminal-pane/remote-hidden-output-restore-unavailable-banner.repro.test.tssrc/renderer/src/components/terminal-pane/terminal-renderer-policy.test.tssrc/renderer/src/components/terminal-pane/terminal-renderer-policy.tssrc/renderer/src/components/terminal-pane/terminal-title-evidence.test.tssrc/renderer/src/components/terminal-pane/terminal-title-evidence.tssrc/renderer/src/components/terminal-pane/title-agent-identity.tssrc/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.test.tssrc/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.tssrc/renderer/src/hooks/useAutomationDispatchEvents.tssrc/renderer/src/hooks/useSettingsNavigationMetadata.tssrc/renderer/src/i18n/locales/en.jsonsrc/renderer/src/i18n/locales/es.jsonsrc/renderer/src/i18n/locales/ja.jsonsrc/renderer/src/i18n/locales/ko.jsonsrc/renderer/src/i18n/locales/zh.jsonsrc/renderer/src/lib/agent-catalog.tsxsrc/renderer/src/lib/agent-favicon-assets.tssrc/renderer/src/lib/agent-launch-prompt-delivery.test.tssrc/renderer/src/lib/agent-paste-draft.test.tssrc/renderer/src/lib/agent-paste-draft.tssrc/renderer/src/lib/agent-send-title-status.tssrc/renderer/src/lib/agent-status-count.test.tssrc/renderer/src/lib/agent-status.test.tssrc/renderer/src/lib/agent-status.tssrc/renderer/src/lib/launch-agent-background-session.tssrc/renderer/src/lib/native-chat-initial-view-mode.test.tssrc/renderer/src/lib/native-chat-launch-draft-mirrorability.test.tssrc/renderer/src/lib/orchestration-skill-coverage.test.tssrc/renderer/src/lib/tui-agent-startup.test.tssrc/renderer/src/lib/use-tab-agent-pi-identity.test.tssrc/renderer/src/lib/use-tab-agent-retained-identity.test.tssrc/renderer/src/lib/use-tab-agent-sleeping-session.test.tssrc/renderer/src/lib/use-tab-agent.test.tssrc/renderer/src/store/slices/rate-limits.test.tssrc/renderer/src/store/slices/rate-limits.tssrc/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.tssrc/renderer/src/store/slices/ui.test.tssrc/renderer/src/store/slices/ui.tssrc/renderer/src/store/slices/workspace-cleanup.tssrc/renderer/src/web/web-preload-api.tssrc/shared/agent-detection.tssrc/shared/agent-hook-listener.test.tssrc/shared/agent-hook-listener.tssrc/shared/agent-hook-relay.tssrc/shared/agent-hook-types.tssrc/shared/agent-kind.tssrc/shared/agent-name-token-match.tssrc/shared/agent-process-recognition.test.tssrc/shared/agent-process-recognition.tssrc/shared/agent-row-conversation-name.test.tssrc/shared/agent-row-conversation-name.tssrc/shared/agent-session-option-catalog-cursor.tssrc/shared/agent-session-option-catalog.tssrc/shared/agent-session-resume.test.tssrc/shared/agent-session-resume.tssrc/shared/agent-status-types.tssrc/shared/agent-title-core.tssrc/shared/agent-title-decoration.tssrc/shared/agent-title-identity.tssrc/shared/agent-title-status.tssrc/shared/agent-type-label.tssrc/shared/ai-vault-resume-command.tssrc/shared/ai-vault-types.tssrc/shared/automations-types.tssrc/shared/constants.test.tssrc/shared/constants.tssrc/shared/feature-wall-tiles.tssrc/shared/rate-limit-types.test.tssrc/shared/rate-limit-types.tssrc/shared/skills-cli-agent-keys.tssrc/shared/status-bar-defaults.tssrc/shared/telemetry-events.tssrc/shared/terminal-quick-commands.test.tssrc/shared/terminal-title-agent-type.test.tssrc/shared/terminal-title-agent-type.tssrc/shared/tui-agent-config.tssrc/shared/tui-agent-display-names.tssrc/shared/tui-agent-draft-launch.tssrc/shared/tui-agent-permissions.tssrc/shared/tui-agent-selection.test.tssrc/shared/tui-agent-selection.tssrc/shared/tui-agent-session-option-props.tssrc/shared/tui-agent-startup.test.tssrc/shared/tui-agent-startup.tssrc/shared/types.ts
💤 Files with no reviewable changes (91)
- src/renderer/src/components/terminal-pane/remote-hidden-output-restore-outcomes.test.ts
- src/renderer/src/components/native-chat/native-chat-image-paste.ts
- src/shared/constants.test.ts
- src/shared/ai-vault-resume-command.ts
- src/main/rate-limits/gemini-usage-fetcher.test.ts
- src/preload/index.ts
- src/main/runtime/orchestration/groups.ts
- mobile/src/tasks/mobile-tui-agents.ts
- src/renderer/src/components/settings/AppearanceWindowSidebarSection.tsx
- src/renderer/src/components/terminal-pane/remote-hidden-output-restore-unavailable-banner.repro.test.ts
- src/renderer/src/components/settings/AccountsPane.test.tsx
- src/renderer/src/components/terminal-pane/agent-completion-coordinator.ts
- src/main/rate-limits/gemini-cli-oauth-extractor.ts
- src/main/ai-vault/session-scanner-scope.test.ts
- src/main/runtime/rpc/methods/orchestration-worker-launch-preferences.test.ts
- mobile/src/components/mobile-agent-icon-assets.ts
- src/main/ai-vault/session-scanner-codex-workers.test.ts
- src/renderer/src/components/stats/GrokUsagePane.test.tsx
- src/renderer/src/lib/agent-status.ts
- src/main/ai-vault/session-scanner-source-discovery.ts
- src/main/ai-vault/session-scanner-test-fixtures.ts
- src/main/skills/skill-discovery-sources.ts
- src/shared/agent-title-identity.ts
- src/shared/agent-name-token-match.ts
- src/main/agent-hooks/managed-agent-hook-registry.ts
- src/main/ai-vault/session-scanner.test.ts
- src/renderer/src/components/settings/CommitMessageAiPane.test.tsx
- src/main/ai-vault/session-scanner-gemini-parsers.ts
- src/renderer/src/components/sidebar/worktree-title-derived-agent-rows.ts
- src/main/codex-accounts/runtime-home-service.test.ts
- src/main/ipc/agent-hooks.test.ts
- src/shared/agent-status-types.ts
- src/main/rate-limits/gemini-usage-fetcher.ts
- src/shared/agent-detection.ts
- src/shared/agent-hook-listener.ts
- src/shared/agent-title-core.ts
- src/renderer/src/components/status-bar/provider-segment-monthly-window.test.tsx
- src/main/rate-limits/gemini-usage-fetcher.test-fixtures.ts
- src/renderer/src/components/status-bar/icons.tsx
- src/renderer/src/components/status-bar/usage-error-copy.test.ts
- src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.ts
- src/renderer/src/components/status-bar/usage-provider-settings-target.ts
- src/shared/constants.ts
- src/main/ai-vault/session-scanner-agent-parser.ts
- src/renderer/src/web/web-preload-api.ts
- src/preload/api-types.ts
- src/renderer/src/lib/agent-send-title-status.ts
- src/main/ipc/agent-hooks.ts
- src/shared/agent-hook-listener.test.ts
- src/renderer/src/store/slices/workspace-cleanup.ts
- src/shared/agent-row-conversation-name.test.ts
- src/renderer/src/lib/agent-catalog.tsx
- src/renderer/src/lib/agent-favicon-assets.ts
- src/renderer/src/components/status-bar/usage-provider-settings-target.test.ts
- src/renderer/src/components/status-bar/usage-error-copy.ts
- src/main/ai-vault/session-scanner-types.ts
- src/main/ai-vault/remote-session-scanner-sources.ts
- config/electron-builder.config.cjs
- src/renderer/src/components/settings/appearance-status-bar-antigravity-toggle-search.ts
- src/main/ipc/notification-options.ts
- src/shared/agent-session-option-catalog-cursor.ts
- src/shared/agent-title-status.ts
- src/main/rate-limits/gemini-oauth-sources.ts
- src/shared/agent-session-resume.ts
- src/main/skills/discovery.test.ts
- src/shared/agent-hook-relay.ts
- src/shared/status-bar-defaults.ts
- src/main/ai-vault/session-scanner-incremental-fixtures.ts
- src/renderer/src/store/slices/rate-limits.ts
- src/shared/agent-kind.ts
- src/main/gemini/hook-service.ts
- src/shared/agent-type-label.ts
- src/main/rate-limits/gemini-usage-fetcher.fallback.test.ts
- src/main/rate-limits/gemini-bucket-formatting.ts
- src/main/codex-accounts/service.test.ts
- src/renderer/src/components/settings/appearance-status-bar-search.ts
- src/shared/ai-vault-types.ts
- src/main/gemini/hook-service.test.ts
- src/renderer/src/components/settings/appearance-status-bar-search.test.ts
- src/shared/tui-agent-display-names.ts
- src/renderer/src/components/terminal-pane/terminal-title-evidence.ts
- src/renderer/src/components/settings/AppearancePane.test.tsx
- src/renderer/src/components/terminal-pane/agent-interrupt-inference.test.ts
- src/shared/skills-cli-agent-keys.ts
- src/shared/terminal-title-agent-type.ts
- src/main/rate-limits/gemini-bucket-formatting.test.ts
- src/shared/telemetry-events.ts
- src/renderer/src/components/settings/accounts-search.ts
- src/shared/types.ts
- src/shared/terminal-quick-commands.test.ts
- src/shared/tui-agent-permissions.ts
🚧 Files skipped from review as they are similar to previous changes (94)
- mobile/scripts/mock-server-rpc-handlers.ts
- src/main/agent-hooks/installer-utils.test.ts
- src/renderer/src/lib/use-tab-agent-retained-identity.test.ts
- src/renderer/src/components/native-chat/NativeChatView.test.tsx
- src/shared/feature-wall-tiles.ts
- src/renderer/src/hooks/useSettingsNavigationMetadata.ts
- src/renderer/src/components/native-chat/native-chat-session-option-enrichment.test.ts
- src/renderer/src/lib/agent-launch-prompt-delivery.test.ts
- src/renderer/src/lib/native-chat-initial-view-mode.test.ts
- src/shared/agent-row-conversation-name.ts
- mobile/src/worktree/agent-row-display.ts
- src/shared/agent-process-recognition.ts
- src/renderer/src/components/tab-bar/TabBarCreateEntry.keyboard.test.tsx
- src/main/agent-hooks/installer-utils.ts
- src/main/agent-hooks/managed-hook-timeout.test.ts
- src/renderer/src/components/tab-bar/tab-agent-launch-options.test.ts
- src/renderer/src/lib/use-tab-agent-pi-identity.test.ts
- src/shared/agent-process-recognition.test.ts
- skill-guides/orchestration.md
- src/shared/agent-session-option-catalog.ts
- src/renderer/src/store/slices/rate-limits.test.ts
- src/main/runtime/rpc/methods/client-ui.test.ts
- src/renderer/src/lib/use-tab-agent-sleeping-session.test.ts
- src/renderer/src/lib/agent-paste-draft.ts
- src/renderer/src/components/terminal-quick-commands/terminal-quick-command-agent-options.test.ts
- src/renderer/src/components/agent-session-continuation/agent-session-continuation-selection.test.ts
- src/renderer/src/lib/agent-paste-draft.test.ts
- src/main/ai-vault/session-scanner-accumulator.ts
- src/main/pi/agent-status-extension-source.ts
- src/renderer/src/components/terminal-pane/terminal-renderer-policy.ts
- src/main/persistence.test.ts
- src/renderer/src/components/terminal-pane/agent-interrupt-inference.ts
- src/renderer/src/store/slices/ui.test.ts
- mobile/src/components/accounts-snapshot.ts
- src/renderer/src/components/settings/OrchestrationPane.test.tsx
- src/main/ai-vault/session-scanner.ts
- src/renderer/src/components/terminal-pane/title-agent-identity.ts
- src/main/runtime/rpc/methods/orchestration.ts
- src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.test.ts
- src/renderer/src/store/slices/runtime-pane-title-sort-epoch.test.ts
- src/renderer/src/i18n/locales/en.json
- src/main/runtime/rpc/methods/client-ui-schemas.ts
- src/renderer/src/components/native-chat/native-chat-pane-resolution.test.ts
- src/renderer/src/components/feature-wall/feature-wall-usage-tracking.ts
- src/renderer/src/lib/native-chat-launch-draft-mirrorability.test.ts
- src/main/opencode/hook-service.ts
- src/renderer/src/components/status-bar/status-bar-agent-gating.test.ts
- src/main/agent-hooks/managed-hook-local-filesystem.test.ts
- src/renderer/src/components/tab-bar/QuickLaunchButton.test.ts
- src/main/agent-hooks/server.test.ts
- src/renderer/src/components/terminal-pane/pane-foreground-agent-tracker.test.ts
- src/relay/agent-exec-handler-test-harness.ts
- src/renderer/src/components/terminal-pane/agent-completion-coordinator.test.ts
- src/renderer/src/components/terminal-pane/terminal-renderer-policy.test.ts
- src/renderer/src/lib/agent-status-count.test.ts
- src/renderer/src/lib/use-tab-agent.test.ts
- src/renderer/src/lib/orchestration-skill-coverage.test.ts
- src/cli/help.ts
- src/renderer/src/store/slices/ui.ts
- src/renderer/src/components/terminal-pane/pty-connection.ts
- src/renderer/src/i18n/locales/es.json
- src/main/ai-vault/session-scanner-parse-cache.ts
- src/main/persistence.ts
- src/shared/agent-hook-types.ts
- src/main/rate-limits/service.ts
- src/renderer/src/components/native-chat/native-chat-availability.test.ts
- src/relay/pty-shell-utils.test.ts
- src/main/runtime/rpc/methods/client-ui-status-bar-items.ts
- src/main/rate-limits/service.test.ts
- src/renderer/src/components/native-chat/native-chat-availability.ts
- src/shared/agent-session-resume.test.ts
- src/main/providers/agent-foreground-process.test.ts
- src/renderer/src/components/native-chat/use-native-chat-toggle-shortcut.ts
- src/renderer/src/i18n/locales/ko.json
- src/main/agent-hooks/managed-hook-stdin-lifecycle.test.ts
- src/renderer/src/components/settings/AccountsPane.tsx
- src/shared/rate-limit-types.ts
- src/renderer/src/i18n/locales/zh.json
- src/main/runtime/orca-runtime.ts
- src/main/agent-hooks/remote-hook-service-installers.test.ts
- src/renderer/src/components/terminal-pane/terminal-title-evidence.test.ts
- src/renderer/src/components/status-bar/status-bar-agent-gating.ts
- src/shared/rate-limit-types.test.ts
- src/renderer/src/components/status-bar/tooltip.tsx
- src/renderer/src/components/status-bar/status-bar-provider-visibility.ts
- src/shared/agent-title-decoration.ts
- src/renderer/src/lib/agent-status.test.ts
- src/renderer/src/components/status-bar/tooltip.test.ts
- src/renderer/src/components/status-bar/UsageRosterPanel.tsx
- src/renderer/src/components/sidebar/smart-attention.test.ts
- src/renderer/src/components/status-bar/StatusBarUsageEmptyCta.tsx
- src/shared/terminal-title-agent-type.test.ts
- src/renderer/src/components/status-bar/StatusBar.tsx
- src/renderer/src/components/status-bar/status-bar-provider-visibility.test.ts
|
@coderabbitai Fixing. Will be in the next commit |
|
Tip For best results, initiate chat on the files or code changes.
You are interacting with an AI system. |
7e71335 to
2048398
Compare
Gemini CLI is no longer a launchable agent, a usage/rate-limit provider, an AI-vault session source, or a managed-hook target. This removes that code and the Antigravity usage surface that only existed on top of the Gemini OAuth credentials, while keeping Antigravity itself (its sessions, hooks, and skills live under ~/.gemini/ but are not Gemini CLI). Existing profiles that reference the retired ids are scrubbed at the profile-load boundary instead of crashing or preselecting a missing agent: retired-agent-settings-cleanup.ts clears defaultTuiAgent, disabled/override maps, Source Control AI + commitMessageAi agent selections (including per-repo and per-project-host overrides), the geminiCliOAuthEnabled toggle, and retired status-bar items. Wire compatibility is preserved in both directions: the ui.set schema still accepts the retired status-bar ids and _antigravityStatusBarDefaultAdded as no-ops (unknown keys are a hard rejection there), and the mobile accounts snapshot still parses retired providers from an older paired host.
Removes Gemini CLI credential extraction, which was an experimental fallback for Google auth. This eliminates the non-authoritative renderer confidence path that relied on Gemini title parsing. Updates all i18n strings and test assertions accordingly.
- Change --provider help example from cursor to opencode - Move comment explaining why retired providers are kept closer to enum entries
Collapse the settings migration from eleven shape-specific walkers into one key-matched depth-first pass (219 -> 104 lines), and trim the managed-hook cleanup to its read/strip/write core (120 -> 87 lines). Fixes two bugs the rewrite exposed: commitMessageAi kept its `enabled` flag (only automations disable on a retired agent), and already-disabled automations no longer re-trigger a save. Co-authored-by: Orca <help@stably.ai>
- Use `isTuiAgent()` to validate agent IDs instead of just falsy checks, properly rejecting retired/cleared agents persisted by older hosts - Add abort-first safety for remote Gemini hook cleanup to prevent config mutations after client disconnect - Add error handling to prevent unhandled rejections from dispatch result persistence - Fix test mock specifier to match cleanup's `node:os` import
When Orca clients and hosts run different versions, retired agent ids (e.g. gemini) can still be sent. Rather than silently dropping associated data, rehome it: prompts become drafts, hooks are preserved until cleanup confirms no references remain. Add per-mutation dirty tracking to retired-agent cleanup so the settings file isn't rewritten unnecessarily, and only run cleanup once if no supported agents are detected — avoiding duplicate passes over the same config.
Update tests to use Copilot as the example deletable agent instead of Gemini, completing the removal of legacy Gemini CLI support from session deletion workflows.
- Remove Gemini from documented AI_VAULT_AGENTS sources in capability matrix - Remove Gemini i18n test cases for status bar menu and settings index - Update agent-send-title-status test to use Codex instead of Gemini example - Update AI Vault session delete test to use Hermes sample data
…el key to all locales
Safely retire the Gemini agent throughout the system: - Strip Gemini managed hooks from homes during installs and empty-allowlist cleanup - Clean retired agent references from settings with proper scoping to avoid touching unrelated state - Re-enable automations when user picks a new agent after retirement cleared the previous one - Handle mixed-version RPC clients that send retired agent IDs without breaking unrelated edits - Filter unsupported agents from detected allowlists and drop legacy status bar keys for backwards compatibility - Clear sleeping agent sessions referencing retired agents so they don't wedge recovery
- Clients and hosts update independently, so old clients send retired agent ids that the host no longer ships. Add a compat layer to rehome startup params instead of silently spawning unavailable agents. - When auditing configs for cleanup, return an explicit 'unverified' outcome if the shape is unexpected (array, scalar, or unreadable values). Skip the script sweep rather than silently reporting clean and unlinking files the config may still reference. - Transform SettingsUpdate to omit undefined values, preventing rejected/retired keys from clearing valid post-upgrade defaults via spread. - Expand edge-case tests for corrupt automations collections, unexpected hook shapes, and retired agent launch bundles.
2048398 to
1e763e4
Compare
|
Migration review of head The candidate deletes Antigravity from {"settings":{"defaultTuiAgent":"antigravity"},"ui":{"statusBarItems":["antigravity","codex"]},"automations":[]}It returns The stated reason for deleting Antigravity usage—its dependence on Gemini OAuth—has a replacement in #21654, which reads agy's native ELI5: retiring Gemini should not remove Antigravity's usage display or erase the user's choice to show it. Any takeover should retain the native Antigravity provider, named quota buckets, UI entry, and persisted selection, and reconcile the independent-account work before removing old Gemini plumbing. The migration reproduction uses an in-memory fixture; no real profile was edited. No PR merged or issue closed. Legacy history retention and mixed-version running-session behavior also need a separate review before adopting the broad removal. |
|
Additional compatibility finding at head P2 — existing Gemini sessions lose the resume path. The candidate removes Gemini from I compiled the exact current and candidate
This is an exact-module compatibility check, not a real Gemini or agy session launch. The scanner removal is additionally visible in Please separate deprecating new setup from deleting persisted-session readers/resume compatibility. Keep old history readable and either retain a clearly labeled legacy resume route or provide an explicit supported migration before removing it. The same distinction matters when an older execution host still publishes a Gemini identity. Do not relabel those sessions as Antigravity without evidence they can actually resume. This reinforces why I have not adopted the removal candidate as the completion of #17345. The existing native Antigravity fixes can proceed independently of deleting legacy records/readers. |
Supersedes #5924 (which stays open). Credit to @siddqamar for the original work and audit — this is a clean re-implementation against current
mainrather than a rebase of those commits, becausemainhas moved a long way since.What this removes
Legacy Gemini CLI support, re-audited against current
mainrather than taken from the old branch:geminiis gone fromTuiAgent, the agent catalog, quick-launch/quick-command options, launch args/permissions, and mobile's agent list.ProviderRateLimits['buckets'](Gemini-only) is removed from the type.src/main/gemini/hook-service.tsand its installer wiring.isGeminiTerminalTitleand the✦ ⏲ ◇ ✋glyph classifiers.What this deliberately keeps
Antigravity is not Gemini CLI. Its sessions live under
~/.gemini/antigravity-cli/, its hooks at~/.gemini/config/hooks.json, its skills at~/.gemini/antigravity/skills, and its models are literally named "Gemini 3.5 Flash". All of that stays. Every~/.geminipath site was checked individually.Not breaking existing configs
New
src/main/retired-agent-settings-cleanup.tsscrubs retired ids at the profile-load boundary inpersistence.ts(before the defaults merge, withloadNeedsSave = true), so a profile that referenced Gemini degrades instead of crashing or preselecting a missing agent. It covers:defaultTuiAgent(→null, so the composer falls back rather than preselecting),disabledTuiAgents,agentCmdOverrides,agentDefaultArgs,agentDefaultEnv,commitMessageAi,sourceControlAi(agentId,selectedModelByAgent,selectedModelByAgentByHost,discoveredModelsByAgent,actions,launchActionDefaults,actionOverrides,modelOverridesByOperation),ui.statusBarItems, and per-repo / per-projectHostSetupoverrides.geminiCliOAuthEnabledis dropped.Remote wire compatibility
Mixed client/host versions are the normal state, so retired ids stay accepted on the wire even though nothing publishes them anymore:
client-ui-schemas.ts—UiUpdateis.strict(), so an unknown key is a hard rejection._antigravityStatusBarDefaultAddedstays as an accepted no-op, and the retired status-bar ids stay in the enum but are stripped by a transform (dropping them from the enum would maketolerateUnknownValuesdiscard the wholestatusBarItemsfield, silently losing an old client's other toggles). Extracted toclient-ui-status-bar-items.tsto stay undermax-lines.mobile/src/components/accounts-snapshot.ts— still parses retired providers, so an older paired host's usage snapshot doesn't fail wholesale over one unused entry.Reviewer callouts
resolvePaneRendererPolicyno longer takes a title or an owner; it resolves fromuserGpuMode,webglUnavailable, and context-loss containment only. This is a behavior change for anyone who was relying on Gemini panes silently falling back to DOM.MANAGED_HOOK_TIMEOUT_MILLISECONDSwas deleted as dead once the Gemini hook service went.locales/*.json. Bothverify:localization-catalogandverify:localization-extractionpass; pruning them is a separate sweep.Testing
pnpm typecheck(node + cli + web) — passes, 0 errorspnpm lint(oxlint, code-quality audits, reliability gates, max-lines ratchet, bundled skill guides, skill bundle manifest, all three localization gates) — passespnpm test— 4329 files / 46397 tests pass. The only failures are the 2 insrc/relay/agent-exec-handler.test.ts, which fail identically on unmodifiedmain(verified by stashing this branch's changes and re-running); they assert on spawn env and trip overGIT_CONFIG_COUNTleaking from the local shell. Unrelated to this change.Tests were updated rather than deleted wherever the case covered a still-live contract that merely used Gemini as a fixture — substituting
codex/droid/aider/piso the original intent ("an unsupported agent", "a third agent row", "ambiguous sibling agents") survives. Tests were deleted only where they existed solely to cover removed behavior: the bucket windows, Antigravity usage durability,isGeminiTerminalTitle, and the four #7428 DOM-gating cases.retired-agent-settings-cleanup.test.tsis new and covers every scrubbed field, including the no-op path and a profile missing every optional collection.Mobile typecheck could not run in this worktree (
expo/tsconfig.base.jsonmissing — deps not installed), so the mobile edits rely on CI.Made with Orca 🐋