Skip to content

feat(acp): one install row shows and drives a managed runtime install, for Settings and chat - #29049

Merged
brennanb2025 merged 6 commits into
mainfrom
brennanb2025/agy-chat-U1b-install-row
Oct 17, 2026
Merged

brennanb2025 merged 6 commits into
mainfrom
brennanb2025/agy-chat-U1b-install-row

Conversation

@brennanb2025

@brennanb2025 brennanb2025 commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor
Files Added Deleted Net
Test 1 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​101 0 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​101
Prod 8 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​420 0 $\color{#1a7f37}{\Huge{\mathbf{+}}}$​420

ELI5

Antigravity's chat needs a separate program, its chat server, which Orca downloads for it. When chats fetched that program on their own, the first chat sat on "Working for Ns" for about 18 seconds with no progress and no way to cancel, and opening several chats started several downloads. This stack changes that: nothing downloads until the person clicks Install, with progress and Cancel in Settings and in the chat.

This PR adds the one row that shows the install state and acts on it: an Install button, a download progress bar with Cancel, Retry after a failure, and in Settings Reinstall or Update. Settings and a new chat both use this same row, reading the same host state (#29048), so clicking Install in a chat moves the bar in Settings too. Nothing places the row yet (the chat placement is #29051; the Settings placement comes with #28595, which adds Antigravity), so nothing changes for anyone when this merges alone.

What Changed

This revision (moving to the common pattern):

  • Two lines read less clearly than the common row. A failed status check now says "Could not check {agent} on this host. Retrying.", because the row retries on its own and the person shouldn't wonder whether to act, and the step after the download reads "Checking the downloaded runtime." instead of "Checking the download.".

  • "Cancelling…" flashed on every client for about 50 ms. The host no longer publishes a cancelling state (feat(acp): a managed runtime installs only when asked, with progress and cancel #29023). Only the row whose Cancel was clicked says "Cancelling…" and holds its buttons until the host's cancel answers.

  • A copy found on the host's PATH left Settings with no way to get Orca's copy. An old or incompatible copy there would run, chats would fail, and nothing offered the pinned one short of deleting the person's own install. Settings now offers Install Orca's copy beside "Uses the copy of {agent} found on this host."; once installed, Orca's copy runs first (feat(acp): chat agents can declare a managed runtime that a start runs but never installs #28460). A chat with such a copy keeps its message box, as before.

  • A failed first install dropped the status line, so the row lost what Install costs at the moment the person decides to retry. It now keeps the line ("Not installed.", or the download size once feat(acp): Antigravity in the Chat UI over its ACP server #28595 adds it) beside the failure and Retry.

  • An older installed release now reads "Installed." with Update {agent}, instead of "Version X installed. Y is available.".

  • The status line is announced to screen readers as it changes (a polite live region).

  • The "needs unzip" line is gone: the host unpacks the release itself now (feat(acp): a managed runtime installs only when asked, with progress and cancel #29023).

  • Before: no UI for installing a program Orca provides.

  • After: ManagedRuntimeInstallRow {observation, agentLabel, surface: 'settings' | 'chat'}. What it says and offers is decided by one pure function from the host's answer, checked top to bottom:

Host state Status line Button
downloading "Downloading 42.0 MB of 111.0 MB." + progress bar Cancel installation
extracting / verifying "Extracting {agent}." / "Checking the downloaded runtime." Cancel installation
this row's Cancel still waiting for the host "Cancelling…" buttons held until the host answers
a copy found outside Orca (PATH, install folders) "Uses the copy of {agent} found on this host." Settings: Install Orca's copy; chat: none (it keeps its message box)
installed, current "Installed." Reinstall {agent} (Settings only)
installed, older "Installed." Update {agent} (Settings only)
no release for this host "{agent} is not available on this host." none
damaged copy "This copy of {agent} is damaged." Install {agent} (Install repairs it, #29023)
cancelled "Installation cancelled." Retry installation
failed Settings: "Not installed." beside the host's reason, as an alert Retry installation
not installed "Not installed." (chat: the card heading "Install {agent} to start chatting." says it) Install {agent}
status could not be read "Could not check {agent} on this host.", as an alert none (never treated as "not installed")
first read still out Settings: empty line, space kept; chat: nothing none (no flash)

Why

One row and one decision function for both places is what keeps "the same button, the same state" true: Settings and chat can't drift apart in wording or in which action they offer. Reinstall, Update and "Install Orca's copy" stay in Settings because a chat that can start should show its message box, not setup controls.

Linked Issue

N/A (maintainer; part of the stack that adds Antigravity to chat).

Visual Proof

N/A: nothing places the row yet. Screenshots of its states come with #28595, which places it in Settings and chat and runs the real install in remote Electron QA.

Testing

  • I manually tested these changes locally

  • Automated tests added/updated, or explained why not below

  • One table test of what the row says and offers for each host state on both surfaces, including the damaged copy, a PATH copy (Install Orca's copy in Settings, nothing in a chat), "Cancelling…" only while this row's Cancel is out, a failed install keeping its status line, and that a failed status read is never "not installed".

  • Lint and typecheck: PR CI.

Review

Agent skill upstream boundary

  • Not applicable, or this change copies or mechanically translates no upstream skill-installer source, tests, fixtures, registry entries, path tables, comments, or documentation.

QA, round 2 (M4Air, 10-16, build of 2efa3308959 before this revision's last fixes; Grok drove the hidden window over the Chrome DevTools Protocol only)

  • Settings and the chat showed the same bytes together, about every 0.3 s ("Downloading X MB of 111.5 MB."). Cancel from Settings showed "Cancelling…" only in Settings, with its button disabled, and every surface settled on "Installation cancelled." within 145 ms during download and about 1 s during the check step. After install: "Installed.", Reinstall and the trash icon.

Settings cancelled Chat cancelled Installed with Remove tooltip

Notes

Differences from the common pattern

  • Temporary: before Install the row says "Not installed." without the download size; the Antigravity PR (feat(acp): Antigravity in the Chat UI over its ACP server #28595) adds the size line, in whole MB as the common pattern shows it.
  • Intended: Update vs Reinstall comes from the host's release-identity check, not a version-string compare, so a re-pinned release with the same version number still reads as an update.
  • Intended: a damaged copy offers Install, which repairs it, instead of asking the person to remove it first; the common pattern's own retry fails again on a damaged copy until Remove.
  • Intended: the same row also appears in a chat (first install only), where the common pattern blocks sending and links to settings. This is the requested behavior: the same button in Settings and in the chat.
  • Intended: the status line itself is announced to screen readers as the host's answer changes, instead of a separate hidden "Starting installation" line.

Checklist

  • This PR is small and focused
  • I explained what changed and why (ELI5, the user-facing before/after, the mechanism, and why over the alternatives)
  • Before/after screenshots or videos attached for UI changes, or N/A with reason
  • Self-reviewed for correctness, security, and performance
  • Cross-platform, SSH/remote, and path/shortcut impact considered (or N/A)
  • pnpm lint, pnpm typecheck, pnpm test, and pnpm build pass (or CI will cover; local preferred)

@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from d4542c3 to 109667c Compare October 15, 2026 07:46
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from f1376ad to e1931b8 Compare October 15, 2026 07:46
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 109667c to bd6967d Compare October 15, 2026 08:39
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from e1931b8 to 90a345d Compare October 15, 2026 08:39
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from bd6967d to 3d51bab Compare October 15, 2026 13:34
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 90a345d to 7759b64 Compare October 15, 2026 13:34
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 3d51bab to 2b28947 Compare October 15, 2026 14:24
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 7759b64 to eb7704d Compare October 15, 2026 14:24
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 2b28947 to 0666cf7 Compare October 15, 2026 16:03
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from eb7704d to f1f170e Compare October 15, 2026 16:03
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 0666cf7 to c1c04dd Compare October 15, 2026 16:30
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from f1f170e to f861d95 Compare October 15, 2026 16:30
@brennanb2025
brennanb2025 marked this pull request as ready for review October 15, 2026 17:09
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from c1c04dd to c2bf921 Compare October 15, 2026 19:57
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch 2 times, most recently from 63d868e to 622b414 Compare October 15, 2026 21:20
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch 2 times, most recently from 42622b6 to 18a7191 Compare October 16, 2026 01:33
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 622b414 to 1ae472b Compare October 16, 2026 01:33
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 18a7191 to 8fcba69 Compare October 16, 2026 03:21
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 1ae472b to 13d2fda Compare October 16, 2026 03:21
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 8fcba69 to a84d243 Compare October 16, 2026 03:25
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 13d2fda to ad8cc48 Compare October 16, 2026 03:25
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from a84d243 to e91e7a0 Compare October 16, 2026 03:27
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch 2 times, most recently from 807f56f to d613efc Compare October 16, 2026 19:43
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from ebde44d to 59649a4 Compare October 16, 2026 22:11
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 19d9c6b to 553ffc3 Compare October 16, 2026 22:11
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 59649a4 to 409dcc2 Compare October 16, 2026 22:23
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch 2 times, most recently from 3c4ad4c to 411572d Compare October 17, 2026 00:43
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 409dcc2 to 15f39e9 Compare October 17, 2026 00:43
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1a-install-status branch from 411572d to 25d07d6 Compare October 17, 2026 01:47
@brennanb2025
brennanb2025 changed the base branch from brennanb2025/agy-chat-U1a-install-status to main October 17, 2026 02:03
…, for Settings and chat

The row reads the shared host state: Install, byte progress with Cancel, extract and verify lines,
Retry after a failure or cancel, and in Settings Reinstall or Update once installed. A failed status
read says it could not check, never that nothing is installed. Strings in all six locales.
…TH copy is used, and when the host needs unzip

- A damaged copy reads "This copy of {agent} is damaged." with Install, which repairs it.
- A copy found on this host outside Orca's reads "Uses the copy of {agent} found on this host."
  with no Install, since a launch would never run the download.
- A host without the program to unpack the archive says so, with no Install.
…clicked, offers Orca's copy beside one found on the host, and keeps its status line after a failed install

The host no longer publishes a cancelling phase or a missing unzip, so the row drops both: the
row whose Cancel is still out says Cancelling and holds its button until the host's cancel
settles. A copy found on PATH or in an install folder still gets Install of Orca's copy in
Settings (the chat keeps its composer). An older installed release reads Installed. with Update.
A failed first install keeps Not installed. beside the failure and Retry. The status line is a
polite live region.
@brennanb2025
brennanb2025 force-pushed the brennanb2025/agy-chat-U1b-install-row branch from 15f39e9 to b7b2d37 Compare October 17, 2026 02:03
@coderabbitai

coderabbitai Bot commented Oct 17, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c4c687e4-3ad4-4fda-8bad-d1daba0606fe
📥 Commits

Reviewing files that changed from the base of the PR and between b7b2d37 and ae521d1.

📒 Files selected for processing: 7
  • src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json
🚧 Files skipped from review as they are similar to previous changes: 7
  • src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/zh.json

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

📝 Walkthrough

The changes add a view model that maps managed-runtime snapshots to status, progress, errors, and install or cancellation actions for chat and settings. A new row component renders that view and handles pending requests and request errors. Tests cover active and settled runtime states, surface-specific actions, and failed status reads. Locale files add managed-runtime strings in English, Spanish, French, Japanese, Korean, and Simplified Chinese.

Priority: ⬇️ Low

Merge Risk: ⚪ Minimal · up to ae521

This change adds the shared installation row without placing it in the UI. No issue requiring a fix before merge is established.

Pre-merge checks: Passed 4 · Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 3 files. (6 skipped: 6… Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Title check Passed The title clearly identifies the main change: a shared managed-runtime install row for Settings and chat. It is specific and related to the pull request scope.
Description check Passed The description is complete and focused. It explains the user impact, implementation, rationale, linked-issue exception, visual-proof rationale, testing, QA results, platform considerations, and check…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Full details: Description check

Explanation

The description is complete and focused. It explains the user impact, implementation, rationale, linked-issue exception, visual-proof rationale, testing, QA results, platform considerations, and checklist status.

Full details: Docstring Coverage

Explanation

Docstring coverage is 40.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 5 functions across 3 files. (6 skipped: 6 unsupported.)

Resolution

Write docstrings for the functions missing them to satisfy the coverage threshold.

  • Fix all pre-merge checks with AI
✨ Finishing Touches: 💡 1
📝 Generate docstrings: 💡
  • Commit to this branch
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving 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.

❤️ Share

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

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Actionable comments posted: 1


ℹ️ Review info
⚙️ Run configuration
  • Configuration used: Repository UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: 5e1dc974-ea1c-4ec8-ad61-c1a2d90001f3
📥 Commits

Reviewing files that changed from the base of the PR and between 0e599dd and b7b2d37.

📒 Files selected for processing: 9
  • src/renderer/src/components/managed-runtime/ManagedRuntimeInstallRow.tsx
  • src/renderer/src/components/managed-runtime/managed-runtime-install-view.test.ts
  • src/renderer/src/components/managed-runtime/managed-runtime-install-view.ts
  • src/renderer/src/i18n/locales/en.json
  • src/renderer/src/i18n/locales/es.json
  • src/renderer/src/i18n/locales/fr.json
  • src/renderer/src/i18n/locales/ja.json
  • src/renderer/src/i18n/locales/ko.json
  • src/renderer/src/i18n/locales/zh.json

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

@brennanb2025
brennanb2025 merged commit 1ed735b into main Oct 17, 2026
31 checks passed
@brennanb2025
brennanb2025 deleted the brennanb2025/agy-chat-U1b-install-row branch October 17, 2026 04:33
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