Skip to content

feat(native-chat): chat agents are offered wherever their chat program runs, not only where their CLI is installed - #28709

Merged
brennanb2025 merged 60 commits into
mainfrom
brennanb2025/agy-chat-8b-picker-without-agy
Oct 23, 2026
Merged

brennanb2025 merged 60 commits into
mainfrom
brennanb2025/agy-chat-8b-picker-without-agy

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 27 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​563 $\color{#cf222e}{\Huge{\mathbf{−}}}$​36 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​527
Prod 59 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1458 $\color{#cf222e}{\Huge{\mathbf{−}}}$​340 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​1118

ELI5

With Chat UI on, Orca decided whether an agent could open as a chat by checking whether its terminal program (its CLI) is installed. For most agents that's the same thing, because the chat runs the CLI. Antigravity is different: its chat runs a server that Orca downloads and manages itself, not Google's agy CLI. So on a Mac or Linux machine without agy, Antigravity never appeared as a chat in the + menu, was never used as the default chat, and couldn't be picked from Source Control actions, Fix Checks, work items or the new-workspace composer, even though the chat would work (it opens with an Install button if the runtime isn't downloaded yet). Switching it on in Settings → Chat → Providers showed it disabled as "Not installed", which was false.

What Changed

  • Before: "can open as a chat" and "has a terminal CLI" were the same fact everywhere. Chat-only agents were hidden or shown as "Not installed".

  • After: wherever Orca offers a chat agent, it asks whether the agent's chat program can run on the workspace's machine:

    • the + menu chat rows;
    • Settings → Chat → Providers;
    • the default-agent tooltip;
    • the empty-workspace default chat;
    • the new-agent shortcut;
    • both new-workspace composers;
    • work items;
    • session continuation;
    • dashboard launch options;
    • Source Control actions, the checks panel and recovery;
    • Fix Checks.

    The terminal parts keep using the real CLI check: "(CLI)" rows, the terminal button on chat rows, CLI settings and usage bars. So on a Mac without agy, Antigravity shows as a chat row with no terminal button and no "(CLI)" row.

  • Automatic picks don't change: Orca never newly auto-selects an agent whose CLI isn't installed. If you have no agent CLIs and no default, an empty workspace still opens a shell. A chat-only agent is used when you choose it, or make it your default.

  • Settings: the Providers switch for an agent you never touched shows on when its CLI is installed or its runtime is installed (downloaded or found on PATH). The + menu offers it wherever it can run, per the earlier ruling that routing and the switch display are separate.

  • Terminal fallback: when a chat can't start and the agent's CLI isn't installed, Orca now says why instead of opening a terminal that would fail. A caller's own fallback, like an empty workspace's shell, still opens.

  • Windows, SSH, WSL, Chat UI off: unchanged. Antigravity has no build for Windows, so it stays a disabled "No chat on this host" row there.

Mechanism

  • Host: the per-machine agent health snapshot gains an optional chatProgram per agent (available / installable / missing / unknown). It is found through each agent's own launch resolver, without starting anything, and refreshed when launch settings change, on agent Refresh, and when a managed runtime is installed or removed. Health state and reason are unchanged, and old clients ignore the field.
  • Renderer: one module, src/renderer/src/lib/host-chat-program.ts, answers "can this agent open as a chat on this host" for every consumer. When the host sends the field, it wins. Hosts without it get a permanent fallback: the host marks the agent's runtime as managed by Orca and supports runtime install, or the CLI is detected. Released servers (v1.4.229 / v1.4.230) have the mark and the install feature but not the snapshot, so they use the fallback. Facts not yet loaded read as "unknown", never as "no".
  • Terminal fallback: one shared decline boundary (structured-agent-session-launch-admission.ts) serves both new-tab and work-item launches.

Why this design

The common pattern is that the host decides whether a provider's chat program is present, by resolving the program the chat actually runs, never an unrelated CLI. This follows it. The fallback is kept indefinitely because there is no minimum server version. Alternatives considered:

  • A renderer-only rule ("marked or detected") for all hosts: it reads the CLI check as chat presence on modern hosts too, and every client would have to re-implement it.
  • Counting managed agents as detected CLIs (this PR's earlier version): that would create fake "(CLI)" rows and terminal buttons for a CLI that isn't installed.

Differences from the common pattern:

  • Intended: the in-chat Install button instead of a separate setup step. It's an existing Orca surface, and it keeps setup next to the chat.
  • Temporary: mobile pickers still use the CLI check, tracked in STA-11197.

Visual Proof

Pending Electron QA (screenshots will be added here).

Testing

  • Automated tests added/updated: the host field and its compatibility with older clients; cold start with failed CLI detection, comparing explicit or default picks with automatic ones; composer and saved-action preservation; dashboard republishing; both decline paths with a missing CLI and a caller's shell fallback.
  • Electron QA (pending): Mac with no agy and the runtime absent, managed or external; a machine with no CLIs; new client with a paired v1.4.230 server; Windows; Chat UI off.

CI is the lint and typecheck gate.

Linked Issue

N/A (maintainer). Follow-up for mobile tracked in STA-11197.

AI Disclosure

Review

In review: a full review loop runs next.

Agent skill upstream boundary

  • Not applicable; this change copies no upstream skill-installer material.

Notes

Author: @BrennanKB5. This PR earlier stacked on #28595 (merged). Its old picker change was replaced, and its branch was brought to main's content before this work, without a force-push.

Checklist

  • User problem, behavior, mechanism and tradeoffs explained.
  • Source reviewed for correctness, security and performance.
  • Cross-platform, SSH, folder workspace and mixed-version behavior considered.
  • Full PR workflow passed on the current head.
  • Fresh screenshots attached after platform QA.

@brennanb2025

brennanb2025 commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor Author

Review complete on 4207a637: source, tests, QA and current-head CI accepted. Antigravity chat can run through Orca's managed program even when its separate terminal command is absent. This change offers those chats throughout desktop agent choices, while terminal choices continue to require the command on the execution host. Explicit, saved and default chat choices are supported; automatic fallback still uses detected terminal agents.

The six cumulative source-review rounds and final mechanism comparison remain accepted through QA head 546dc34dc2493961ef1c21de256738e4c684a89f. The later test-only commit 28ea009be58102cbdbaa87ffeb1c869e021d4846 has been reviewed and retains that live evidence under the updated QA rules. It changes only two test files. Five named files passed all 20 tests; after a hook-required fixture assertion adjustment, its four tests passed again, and the normal precommit hook passed. The change is within the agreed budget: 1,798 production / 600 test changed lines against integrated base a164f42b.

Main was integrated in fb598e92a71be5a1303bded07fe3878e98028316 (parents 28ea009b and 68828708). Bounded review accepted all five conflict resolutions: host-specific launch preferences, chat-only menu choices and Source Control recovery/cancellation behavior are preserved. The owner reports 70/70 tests across eight named files, including host preference coverage. A final test-only commit, 4207a63790e0447b50b8baf2a1635b4a3764c455, compacts redundant fixtures without removing assertions. The affected test file passed 4/4 and the normal commit hook passed. The final comparison against integrated main 68828708 is 1,798 production / 600 test changed lines, within both agreed caps.

Brennan's updated October 23 rule preserves QA across main merges, including conflicts. The accepted screenshots and real results on 546dc34d remain evidence; no live rerun is required, and none is claimed on fb598e92. This merge review found no broken flow. Current-head CI on 4207a63790e0447b50b8baf2a1635b4a3764c455 is green: 48 successful checks, 14 skipped, none failed or pending. The cleanup job passed on its third attempt after two GitHub installation API quota failures; the test-line-count job passed on its retry. Those were infrastructure failures, with no source workaround. The PR is out of draft.

The completion marker records merged source head fb598e92a71be5a1303bded07fe3878e98028316. Real app QA ran on 546dc34dc2493961ef1c21de256738e4c684a89f; that evidence carries through test-only 28ea009b, the reviewed main merge fb598e92, and later test-only 4207a637. No live run on the merge is claimed. Current-head CI checks the integration under Brennan's October 23 rule. The reference comparison remains accepted, with multiple-host/older-server adaptation and explicit terminal fallback labelled intended; mobile parity remains temporary, tracked in STA-11197. No new production findings or open P0/P1 remain from this bounded integration review.

Under the updated per-flow QA rules, Claude and Codex's accepted saved-chat restart/replies cover shared chat behavior. The other successful agent runs remain valid additional evidence, with their existing provenance qualifications. An Antigravity-only branch is covered by a contract fed recorded host and detection output. The new renderer contract builds rows from the recorded host/detection boundary values and verifies an enabled Antigravity chat row, no terminal button or separate CLI row, and ArrowRight followed by Enter selecting chat exactly once. Existing detected-agent terminal mouse and keyboard contracts remain. Prior native/SSH setup attempts remain BLOCKED; they are not relabeled passing captures.

Accepted head8 follow-up on QA head 546dc34d:

  • Create retained its form while the nested Agents UI changed Claude to CLI; the visible field changed to “Claude (CLI)” and submission opened a terminal tab. The terminal process was refused by the host cap; field/result agreement is established, and successful CLI startup was covered earlier. The continuation modal cannot retain its form while Settings changes; that simultaneous-settings subcase is unavailable in this UI, not a claimed live pass.
  • Continuation cancellation added no tab. Successful chat continuation retained source context and produced three visible real replies.
  • Setup-enabled Create ran the marker script, opened the default tab, and the new chat replied to a manual send. Quick Create has no initial-prompt field; its workspace Note is not a prompt. No initial-prompt delivery claim is made.
  • The actual Providers switch and Agents Chat/CLI control synchronized in both directions. Claude/on was restored afterward.
  • Direct commit-hook failure recovery opened Claude with the failure context and produced a real answer without edits. The driver did not press Stop; the turn completed naturally. Its alternate fixture path stayed inside the lane's dedicated QA home.
  • Subfolder continuation displayed disabled chat rows with their reason and offered CLI rows. The live process was blocked by host capacity, so no actual pwd result is claimed. The updated QA cut uses existing contracts for the exact nested path through dialog selection, continuation launch, and unchanged local/paired terminal cwd consumers; another live cwd attempt is not required.

The head8 lead reports continuous ticket1622 admission and isolated launch from the exact-head ticket build using the same saved QA profile. Recorded-launch identity was checked by qa-drive. App and source-fixture stop receipts were reviewed. One real Codex-config hash changed on the shared machine with no attribution established; config contents were not read. Prior admission and Windows cleanup qualifications below remain disclosed. These procedural issues are not source defects or successful cleanup claims beyond the recorded receipts.

The remainder of this comment preserves historical evidence and qualifications. Older pending-QA and CI statements are superseded by this completed review. The earlier blocked negative-picker and subfolder-pwd attempts remain blocked observations; their revised contract obligations are met by tests.

Earlier review history and visual evidence

Antigravity chat uses a program Orca manages, but agent choices previously required the separate agy terminal command. This branch offers supported chats independently of terminal installation and keeps the existing Install action. Explicit, saved and default choices may use an installable chat; new automatic choices still require a detected terminal command.

Fresh Loop 3: source accepted; runtime acceptance pending at 546dc34dc2493961ef1c21de256738e4c684a89f. Three independent whole-PR reviews accepted the changed design, followed by bounded audits through 53094707. Two subsequent main merges integrate the default Chat/CLI control, provider-setting save queue, agent version checks and opened-tab type. Their bounded source audit is complete with no proven changed failure. Cumulative history remains six; no additional full round or panel was opened.

The earlier source corrections remain accepted:

  • Both dashboard publishers consume one checked, exhaustive launch-input view, including project runtime preferences and the selected host. Unrelated writes reuse the view before allocation.
  • Saved Source Control actions distinguish success, cancellation and failure. Cancellation/failure reveals the editable dialog without automatically launching on a replacement runtime; manual Start reacquires the current owner.
  • Both foreground and admitted-first declined-chat paths now use the same execution-host inventory decision before opening a replacement terminal. A successful inventory excluding the CLI prevents that replacement. The previous integration defect is corrected.

Independent measurement of the committed change gives 1,798 production / 599 test changed lines against merged main a164f42b. The new head is an empty commit whose tree is identical to source-accepted e1951cd5; no further source round is needed. The owner pushed it before either queued QA run started to obtain a fresh CodeQL run, and both QA specifications now target 546dc34d. The current-head PR workflow completed successfully. The prior complete check summary showed 48 successes, 14 skipped and none failed, cancelled or pending, with the PR out of draft. GitHub was CLEAN at the prior verification and returned UNKNOWN again at this wake; final readiness requires rechecking it. brennan-ready now reports only the missing review-loop marker; the marker is intentionally withheld until runtime acceptance finishes. Default-setup CodeQL created no check run on this empty commit. Its preceding same-tree run was cancelled during a repository-wide cancellation cluster; that incomplete scan is not described as passed. The local lockfile churn has cleared and the worktree is clean. The 53094707 full PR workflow passed and is now historical. Its test-only correction permits multiple disabled-row reasons while retaining all chat/CLI submission checks. The whole-mechanism comparison was accepted through that prior head; the new main integration audit is accepted. Multiple-host/older-server adaptation and explicit terminal fallback are intentional differences from the common pattern. Mobile parity remains temporary, tracked in STA-11197.

Runtime evidence accepted, with exact provenance: Earlier aec0b4f runs established main-versus-branch folder/git defaults, zero CLI/no-default shell, absent/managed/external runtime, released v1.4.230 Settings pairing/Install, older host without Install, composers, saved actions, work items using a local fixture, continuation and provider/Chat UI off routing. Mounted production controls verify same-agent healthy runtime replacement, cancellation/failure, zero automatic callbacks after later healthy facts, manual reacquisition, once-only success and close/reopen. Dashboard traces verify zero work for unrelated writes, meaningful settings publication, release, and the required actual Windows project update with null/[] inventory: continuously mounted live and popout outputs agree with a separate fresh builder. These captures are historical and are not relabeled current-head agent execution.

On the previously accepted head 303217c, Antigravity retained the released v1.4.235 chat and non-default model across restart, returned TWO and THREE, and FOUR after another restart. New menu and default-shortcut chats returned real OK without an agy terminal. Pi retained the released-build chat/model and returned TWO and THREE after fixing the isolated rig's proxy environment; a new Pi chat also returned two OK replies. A new Codex chat returned two real OK replies after one capacity response. Earlier setup failures remain documented; an older Codex chat created before the QA provider configuration still fails authentication and does not count as a passing restart flow. Missing Grok stayed an in-chat startup refusal without opening a terminal; this is not proof of successful Grok execution or of the specific host-admission-decline branch.

Additional restart checks passed on 303217c: Claude (saved opus alias), Codex (GPT-6.1-Sol), OpenCode (MiMo-V2.6-Flash Free) and OMP (existing_lb/gpt-6.1-sol) each received ONE in released v1.4.235, then TWO and THREE after restarting that profile on 303217c. This closes their agent/restart evidence gaps. The Claude picker did not offer a 1M alias; that variant was not claimed. Together with Antigravity and Pi, these establish six affected agents with successful real restart/reply evidence; the later Windows OpenCode 2 result below brings the reported total to seven.

Windows follow-up PASS on prior head 303217c, with build provenance supplied by the QA report: OpenCode 2 was installed as isolated QA tooling. A released v1.4.235 chat returned ONE; the same profile restarted on the PR kept its chat/model and returned TWO and THREE. Relaunching without the load-balancer key produced an authentication-required error; relaunching with it returned AUTH_OK. A dedicated team QA SSH host added through Settings returned SSH_ONE and SSH_TWO from Claude. All eight provider rows remained visible; Antigravity offered its existing Install action. The comparison used main's desktop against the PR's managed server, so it establishes that mixed-version client comparison, not an entirely main stack. The full report and transferred launch/cleanup records and transcripts were reviewed. All 41 manifest file hashes match, and nine decisive screenshots were directly inspected; the uploaded evidence appears below. The release/build identity comes from the worker report and launch records: the screenshots show the workspace commit, not an app-version certificate. Seven affected agents have successful restart/reply evidence on that prior head with that provenance. Guest-port exceptions, a direct Codex driver after fallback preflight failures, and an unrelated desktop restart of undetermined cause remain disclosed in the QA report.

Picker correction accepted in source: The shared picker now retains disabled rows and their reasons even when the caller supplies only runnable agents. This corrects an enabled-but-unavailable agent disappearing from Create worktree, Create folder and continuation pickers. Rendering still disables those rows and excludes their actions; the existing regression test now supplies a restricted caller catalog. The owner reports eight named tests passing. Current-head Create and continuation captures now confirm the disabled row remains visible, searchable and unselectable.

Baseline behavior retained: I withdrew the second picker finding after checking main’s unchanged helper and preserved Create regression. Before submission, a changed host or provider setting can repair the displayed choice to “Claude (CLI)”; Create’s existing test explicitly expects that label and terminal submission after a host change. The same detected-CLI continuation input uses the unchanged helper. My helper reproduction established that pre-submit transition, but did not establish a PR regression or a silent app launch. A separate unchanged continuation contract preserves an explicit Chat request after Start across asynchronous preparation and reports a later host decline without opening a terminal. Targeted QA will compare the editable field and submitted result with main, and retain that post-submit boundary.

Historical Windows follow-up at 53094707: The full Windows report records a PASS on 53094707 for saved-unavailable Fix Checks feedback, a real Claude first reply from Fix with AI, the offered PR-conflict recovery action, and OpenCode 2 saved-chat restart. The OpenCode 2 chat preserved its released-build history/model and returned FIVE and SIX on that head; those screenshots were directly inspected. The workspace still displays its older checkout because the same profile was preserved; exact app-build identity is supported by the build/launch records. The Fix Checks comparison reports the same unavailable-agent toast and no launch on main afcb385c and the branch. Those older Fix Checks captures are not relabeled current-head evidence; the accepted current-head comparison is below. Initial Claude onboarding required retriggering Fix with AI; automatic prompt retention through onboarding is not claimed. The dispatched Codex worker drove CDP directly after its qa-drive child hit a read-only policy refusal. A live discovery-scan failure and Source Control commit/push-failure recovery were not forced; the report only claims the offered PR-conflict recovery. Those limits remain explicit.

Current-head Windows evidence (546dc34d): OpenCode 2 retained a chat and its selected openai/GPT 6.1 Sol model from a previous main build, then returned real FIVE and SIX after restarting the same home/profile on this head. I inspected the FOUR, persisted-chat and final-reply screenshots and raw snapshots. This is a newly created main-to-branch restart check because the earlier released-build fixture was swept. The previous build's exact a164f42b provenance rests on the owner's instruction and QA report, without a retained Git certificate; screenshots identify the conversation by its title/history/model. All five selectively transferred Fix Checks files now match the remote hash receipt, and I directly inspected the three decisive screenshots and raw toast/tab captures. Head and main ca9abc66 show the same “Saved checks agent is not available on this workspace host.” feedback with unchanged tab lists. Different failing PRs/checks were used after the original changed externally; this compares the same unavailable-agent condition. The saved Claude terminal recipe also produced a real first reply to the generated failing-check prompt after retriggering past first-run onboarding. That closes this Windows visual acceptance gap; it does not cover native-chat recovery or the direct commit-failure helper. Initial queued-prompt retention through onboarding is not claimed. The Dispatch's overall failed outcome remains recorded for incomplete early process records and a confirmed cleanup failure: an OpenCode helper service survived for about five hours and was subsequently stopped by the factory agent. The earlier claim that all test copies had stopped was incomplete. Stop receipts and the final incarnation/port audit covered recorded roots, so they did not establish complete cleanup or account for that helper. Isolation hashes match for Windows and both baseline WSL distros. Residual QA build folders remain for the gate's cleanup. These procedural limits are separate from the accepted OpenCode 2 UI result.

Current-head Mac replies accepted, with provenance qualifications: Claude, Codex, Pi, OpenCode, OMP and Antigravity retained saved conversations and models and returned FIVE/SIX on the same QA profile. Together with Windows OpenCode 2, this covers all seven required agents. The owner records a successful build at 546dc34d and reuse of the released v1.4.235-origin profile; raw build/launcher records corroborate the build and profile paths, while exact executable identity and the stop/restart chain rely partly on that receipt. Codex's first FIVE took 9m37s during reported load-balancer slowness, exceeding the three-minute target; SIX took 2s and a repeated FIVE/SIX took 2s/1s. The delay's cause was not independently diagnosed. Pi's displayed model label normalized after sending without a picker change. Antigravity's final SIX took 2s in the raw capture.

Current-head picker and continuation evidence accepted: Actual local discovery includes Antigravity, and an explicit Create terminal selection reached its CLI login-method screen; no sign-in was needed for that check. An OMP source conversation continued into a new Antigravity chat with its context and received a real OK in 8 seconds. OpenCode 2 stayed visible, disabled with “Not installed,” searchable and unselectable by click/Enter in Create and continuation. Create-folder Antigravity returned a real OK in the existing folder workspace under the isolated sign-in fixture; this does not establish creation of a new filesystem folder at the requested root. Claude terminal creation reached its welcome screen. These observations close the corresponding partial picker gaps.

Settings transition remains untested: The earlier provider-off script called the settings IPC method directly, ignored its returned settings and waited for an update the main process deliberately does not echo to the originating window. The renderer therefore retained stale settings. Its apparent PASS is withdrawn; the screenshots establish only agreement between the displayed field and submitted result under that stale state. This is a rig error, with no proven source defect. The next admitted continuation uses the Settings UI only. If the modal cannot remain mounted while Settings is used, that limitation will be stated separately from the preserved mounted regression; actual Providers/Open-as UI synchronization is still required.

Remaining runtime gate: Subfolder CLI directory, cancellation/context handoff, setup/default tabs/prompt, the integrated default Chat/CLI control and direct commit-failure recovery remain incomplete. The exact no-CLI terminal-button/ArrowRight capture is also still owed. Its Windows attempt was blocked: Antigravity was detected despite the narrowed launch PATH, and the dedicated SSH fixture could not connect because of server-template/Node setup failures. No picker PASS is claimed from that attempt. The owner is arranging one narrow native-host capture without changing installed programs or repeating agent replies. The successful Windows unavailable-agent/Fix Checks reply evidence remains accepted as scoped above. grok waived by Brennan on October 21: "You don't have to run grok". Grok is covered by tests only for the final runtime roster. Historical sign-in evidence remains attributed to its earlier head; no changed sign-in implementation requires repeating it.

QA procedure qualification: The Mac admission expired at 12:40, but the owner continued the copy/driver until stopping them at 13:52. The continuation-search capture was made after expiry; it remains an observed UI result with that procedural limit. The other accepted picker/context checks preceded expiry. The owner reports the driver stopped, and my process check found neither recorded app PID. The profile and artifacts are preserved, with resumption restricted to a new admission. Real-config hash drift remains unattributed. The Windows negative-capture report and cleanup records have now transferred. I independently compared all 62 original before/after config entries with no differences and matched the report checksum. The supplied final verification records no remaining recorded roots or ticket-port listeners, and the guest record reports its dedicated server stopped and temporary access revoked. The cleanup transcript contains no individual stop output, and the final check covers its recorded roots and port block; this is bounded evidence, not a complete machine-wide process audit. The owner reports all 43 transferred files matched their remote hashes; no full remote manifest was supplied for independent verification of that broader claim. No duplicate QA or new source round was started by this loop.

Recovery evidence boundary: Earlier paired commit-failure Customize launch and Windows PR-conflict Resolve exercised the saved-action dialog. They do not establish a real launch through the separate direct commit/push-failure recovery helper. The owner has been asked for an existing receipt or one harmless direct commit-failure action through to a real reply in the queued QA. A live discovery-scan failure was not forced; controlled production acquisition evidence is recorded separately. The completion marker remains withheld pending current-head runtime artifacts and final readiness.

Deferred concerns remain recovery validation order, refusal details and catalog feedback. An old discovery completion may clear a shared busy flag, but the exercised current saved cycle stays pending, hidden and unstarted; that behavior predates this PR. No rendered dashboard launcher exists in either compared build, and setup-tab output/exit was not verified. This is a bounded integration review, retaining cumulative history at six. No additional full review round or panel has been opened.

For Brennan's review

Saved Antigravity default, main then branch (fresh main 43b2d95, branch aec0b4f):

Main: saved Antigravity default
Branch: saved Antigravity default opens Chat with Install

No saved default, main then branch; both open a shell:

Main: no default
Branch: no default

Explicit Blank Terminal, main then branch:

Main: Blank Terminal
Branch: Blank Terminal

Historical authentication at aec0b4f (the sign-in implementation is unchanged):

Antigravity installed, signed out
Antigravity signed in
New Antigravity chat returns OK

Prior-head (303217c) restart and real replies:

Antigravity retained chat and model after restart
Pi retained chat replies after restart
Codex new chat returns real replies

Additional prior-head (303217c) saved-chat restart replies:

Claude saved alias after restart
Codex saved chat after restart
OpenCode saved chat after restart
OMP saved chat after restart

Windows OpenCode 2 release then PR, with the saved conversation retained:

Released build: OpenCode 2 ONE
PR: saved OpenCode 2 conversation replies TWO and THREE
PR: OpenCode 2 authentication error then AUTH_OK after relaunch

SSH menu, main desktop then PR desktop against the same PR server:

Main desktop SSH menu
PR desktop SSH menu
SSH Claude real replies
SSH Antigravity Install action

Windows main then branch (historical paired comparison):

Main Windows menu
Branch Windows menu
Main WSL menu
Branch WSL menu

Current-head Mac saved chats (owner build/restart receipt plus retained rendered history/model; timing qualifications above):

Current head: saved Claude conversation returns FIVE and SIX
Current head: saved Codex conversation, including the delayed first reply and successful later replies

Current-head Windows restart evidence (previous main build then 546dc34d, with provenance qualifications above):

Previous main build: OpenCode 2 FOUR
Current head: same OpenCode 2 conversation and model, FIVE and SIX

Current-head Windows Fix Checks, main then branch unavailable-agent feedback, followed by the branch's real Claude reply:

Main: saved checks agent unavailable, no agent tab added
Branch: same unavailable-agent feedback and unchanged tabs
Branch: generated failing-check prompt and real Claude first reply, then interrupted

Current-head continuation and disabled-row captures (the continuation search occurred after the admission expired, as qualified above):

OMP context continued into Antigravity with a real OK
Create: unavailable OpenCode 2 row remains disabled
Continuation: unavailable OpenCode 2 remains searchable and disabled

Three places where human judgment matters:

  1. Shared publisher input boundary.
  2. Saved-action outcome fencing.
  3. Exact-host declined-terminal decision.

For Brennan's review — accepted follow-up on QA head 546dc34d

Create field after the Settings UI switches Claude to CLI, then its submitted terminal tab (the host process cap refused startup):

Create field shows Claude CLI
Create opens the selected terminal tab

Subfolder continuation offers CLI rows and explains why chat rows are disabled:

Subfolder continuation picker

Providers and Agents Chat/CLI controls agree after each change:

Providers reflects CLI selection
Agents control restored to Chat

Setup/default-tab creation followed by a manual reply, and direct commit-failure recovery followed by a real reply:

Setup workspace real reply
Commit failure recovery real reply

…t chat start

An ACP launch spec may name a pinned runtime Orca installs under its locked
data folder. The stock lookup searches it last (Command, PATH, install
directories, managed folder); a start whose lookup missed installs it under
the acquisition's signal, then resolves the launch again. A Command setting,
restart-recovery reads and catalog probes never install.

The pinned-runtime materializer can now publish a verified multi-member
folder: extract once into staging, check each member's sha256, rename into
place, with a per-asset download size limit. Node's runtime path is unchanged.
Once per host start, the ACP registration removes every version beside an
agent's current managed runtime folder, and staging left by an earlier
process. One host owns the data root and ACP servers are never reattached
across host runs, so nothing runs from them. This process's own staging is
kept (a publish may be in flight). Best effort: a failure is logged and never
holds up a launch.
…r turn signed out

An agent that waits for a browser sign-in prints a link on stderr and blocks for
minutes. A launch spec can now name that line (signInPrompt); the connection then
closes with a typed sign-in failure through the existing process owner, so a start
reads notSignedIn and a running turn fails signed out instead of settling unknown.
The matched line, which carries the sign-in URL, never enters the retained stderr
tail, errors or diagnostics.
…session config option

An optional launch-spec field names the session config option and its ask/full values. Every new or
reopened session gets the value for the chat's full-access posture before it is exposed, and a refusal
fails the start. With the field present Orca no longer answers permission requests for the person.
No agent sets it yet.
…t's own mode

The launch spec maps each chat permission mode to its session option value; a start sets the
value for the mode the host launches with (ask when it names none), replacing the global Agent
Permissions full-access read. A mid-chat change takes effect through the host's existing restart
of a child launched with another mode before the next send.
With the experimental chat setting on, Antigravity chats run Google's
Antigravity ACP server, which Orca installs on the first chat start: a
pinned 1.3.0 release whose archive and both executables are verified by
hash (macOS arm64/x64, Linux x64/arm64).

Each host keeps one private sign-in folder for these chats under Orca's
data folder, made owner-only before every start; the server keeps its
sign-in there as a file. A chat signs in with the server's Google method
through the existing auth-required retry; with no saved sign-in the
server's sign-in prompt ends the chat signed out. The Agent Permissions
setting maps to the server's own mode, and a question the server asks
shows as a question that takes one of its choices, never auto-answered.
A chat reopens its session with session/resume.
…per chat

Each mode maps to the server's own (default, auto_edit, yolo). No Approve for me:
the server has no automatic reviewer. Accept edits gets its own description,
since auto_edit approves file edit tools only.
A host now marks each agentSession.agents row whose chat program Orca provides there
(an ACP managed runtime with a pinned build on this host). With Chat UI on, the tab-bar
picker, the empty-workspace default chat and the new-agent shortcut offer those agents
beside the detected ones when the launch opens as a chat. Terminal launches still follow
detection, and an older host that sends no mark keeps today's detection-only offer.
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-8-antigravity-row branch from 7e7d134 to 7ebb0e6 Compare October 14, 2026 18:28
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-8b-picker-without-agy branch from de63d58 to 8df1cde Compare October 14, 2026 18:29
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-8-antigravity-row branch 10 times, most recently from f95fef4 to 9d3ee05 Compare October 15, 2026 15:08
…ctive workspace's host changes

Both dashboard publishers now watch the active workspace and its selected host, which own its launch
options. Two QuickLaunchButton tests assert the current "couldn't list terminal agents" wording.
Restores base forms and drops a duplicate workspace helper to stay inside the change budget.

@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.

Caution

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

⚠️ Outside diff range comments (1)

🟠 Major · Fix the typecheck failure: widen… · useDashboardPopoutBridge.test.tsx:62

src/renderer/src/components/dashboard/useDashboardPopoutBridge.test.tsx:62
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Fix the typecheck failure: widen DashboardSnapshotWatchState in the test.

CI fails at Line 288. The test-local DashboardSnapshotWatchState type on Line 62 is DashboardSnapshotState & Pick<AppState, 'agentStatusEpoch'>. It does not include activeWorkspaceExecutionHostId. The production type now adds that field through Partial<Pick<AppState, 'activeWorktreeId' | 'activeWorkspaceExecutionHostId'>>.

Import the exported type, or add the same Partial<Pick<...>> to the local alias. The object literal then type-checks.

🐛 Proposed fix
-type DashboardSnapshotWatchState = DashboardSnapshotState & Pick<AppState, 'agentStatusEpoch'>
+type DashboardSnapshotWatchState = DashboardSnapshotState &
+  Pick<AppState, 'agentStatusEpoch'> &
+  Partial<Pick<AppState, 'activeWorktreeId' | 'activeWorkspaceExecutionHostId'>>

Source: Pipeline failures

🧹 Nitpick comments: 1
src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx: 1

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

Compute offered and agents from reactive state.

The code reads useAppStore.getState() during render at Lines 72 and 77. The component does not subscribe to the state that agentsOfferedForLaunch and agentChoicePending read. These include host availability, the catalog, and capabilities.

useChatProgramFacts subscribes only to the facts version and the context revision. Store changes outside settings can therefore leave the agent list stale until another re-render occurs. Subscribe to the inputs that these helpers read. Alternatively, derive the list with a selector hook such as useAppStore(useShallow(...)).


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: b267b81b-80e8-44a3-9c31-dd3b29d7c409
📥 Commits

Reviewing files that changed from the base of the PR and between 3392e4b and a5a7641.

📒 Files selected for processing: 11
  • src/main/runtime/structured-agent-availability.test.ts
  • src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx
  • src/renderer/src/components/dashboard/useDashboardPopoutBridge.test.tsx
  • src/renderer/src/components/dashboard/useDashboardPopoutBridge.ts
  • src/renderer/src/components/dashboard/useLiveDashboardSnapshot.ts
  • src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx
  • src/renderer/src/components/tab-bar/QuickLaunchButton.launch-status.test.tsx
  • src/renderer/src/components/tab-bar/QuickLaunchButton.test.ts
  • src/renderer/src/components/tab-bar/use-new-tab-agent-menu-rows.ts
  • src/renderer/src/lib/empty-workspace-default-agent-chat.ts
  • src/renderer/src/lib/new-tab-agent-menu-rows.test.ts
💤 Files with no reviewable changes: 2
  • src/renderer/src/components/right-sidebar/SourceControlAgentActionDialog.test.tsx
  • src/renderer/src/lib/new-tab-agent-menu-rows.test.ts
🚧 Files skipped from review as they are similar to previous changes: 1
  • src/main/runtime/structured-agent-availability.test.ts

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.

…d Source Control discovery settles every outcome

Both dashboard publishers observe and derive launch options from one exhaustive, compiler-checked view of
the store slices the launch-route readers take, so a route input can no longer be missed by one list. A
saved Source Control action's discovery now ends as success, cancelled or failed; only success can auto-start,
and a cancelled or failed attempt reveals the editable dialog instead of launching on a replacement runtime.
Restores base forms and shares one worktree workspace helper to stay inside the change budget.
…-8b-picker-without-agy

# Conflicts:
#	src/main/runtime/structured-agent-availability.ts
#	src/renderer/src/lib/launch-agent-in-new-tab-structured-route.ts
#	src/renderer/src/lib/structured-agent-session-launch-admission.ts
#	src/renderer/src/lib/structured-agent-session-provisional-tab.ts
…e opening a declined terminal; compact to the size cap
…-8b-picker-without-agy

# Conflicts:
#	src/renderer/src/components/NewWorkspaceComposerModal.tsx
#	src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.test.tsx
#	src/renderer/src/components/agent-session-continuation/AgentSessionContinuationDialog.tsx
#	src/renderer/src/components/dashboard/dashboard-worktree-launch-options.ts
#	src/renderer/src/components/dashboard/useLiveDashboardSnapshot.ts
#	src/renderer/src/components/tab-bar/use-new-tab-agent-menu-rows.ts
#	src/renderer/src/lib/launch-agent-session-continuation.test.ts
#	src/renderer/src/lib/launch-agent-session-continuation.ts
…n instead of hiding it

The Create workspace and continuation pickers only searched the agents the caller could launch, so an enabled agent with no chat on this host (for example Antigravity when the host can't run it) lost its disabled row, while the + menu showed it.
…-8b-picker-without-agy

# Conflicts:
#	src/renderer/src/components/settings/AgentDefaultSetting.tsx
#	src/renderer/src/components/settings/AgentLaunchSettingsCatalog.tsx
#	src/renderer/src/components/settings/NativeChatProvidersSetting.tsx
…-8b-picker-without-agy

# Conflicts:
#	src/main/runtime/structured-agent-availability.test.ts
#	src/renderer/src/lib/structured-agent-session-action-launch.ts
#	src/renderer/src/lib/structured-agent-session-launch-admission.test.ts
Resolve conflicts with #31971 (paired host launch preferences) and #28569
(Resolve with AI): the + menu, new-agent shortcut and default-agent pick
use the host's disabled list and default together with the host chat
program answer; the Source Control dialog uses main's availability helper
over the PR's launchable agents. Main's new auto-start test lands its
detected agents in the store the dialog reads.
@brennanb2025
brennanb2025 merged commit e268135 into main Oct 23, 2026
62 of 65 checks passed
smwbev added a commit to smwbev/orca that referenced this pull request Oct 24, 2026
187 commits landed on main between f045046 and 7cafdb0. All seven catalogs conflicted along with en-runtime-required.json, so they are taken from main and the prune is recomputed in one pass. It is the previous 1,624 keys plus 9: five lost their reader when stablyai#32284 unified the single and multiple PR hover details, two when stablyai#31688 moved skill updates to Orca's own installer, and two when stablyai#28709 reworked where chat agents are offered. None left the set. Since stablyai#32782 filled the missing entries in the other catalogs, all seven now shed the same 1,633 keys. en.json goes from 16,992 entries to 15,359; en-runtime-required.json keeps 615 of them.

native-chat-shared-copy-matches-catalog.test.ts merged cleanly this time and still differs from main by exactly the branch's edit.
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.

1 participant