Commit Graph
16002 Commits
Author SHA1 Message Date
Neil 8e61c440df plugins: derive the publisher from where a plugin comes from, like a Go module path (#36281)
The manifest publisher is deprecated and ignored for catalog and Git installs:
catalog installs use the listing id, Git URL installs the URL owner, folders
'local' (or their still-declared publisher). Existing installs keep their key.
A format 2 manifest may omit publisher only with engines.orca >=1.4.246, so
older Orca reports 'requires Orca X' instead of failing to parse it. The v2
catalog documents an optional ownerId, which older Orca already strips.
2026-10-30 00:45:00 -07:00
Kelvin Amoaba 4410ef318e fix(browser): let agents and users answer page alert, confirm and prompt dialogs on their page (#36268)
* fix(browser): let agents and users answer page alert, confirm and prompt dialogs on their page

* fix(browser): watch a replacement guest for dialogs and ignore the opening keypress

* fix(browser): ignore a repeated Enter in a guarded prompt field
2026-10-30 07:39:38 +00:00
Neil 9470b4618c plugins: require an explicit approve fingerprint for RPC plugin grants (#36279) 2026-10-30 00:36:49 -07:00
Brennan Benson ca84c49b35 Keep cancelled async questions hidden and show new ones (#35870)
* fix(chat): show each repeated async question

* fix(chat): keep async question identity stable across readbacks

* test(chat): preserve async question fixture types

* Keep async question cancellation scoped to individual occurrences

* Use checked types in async question test fixtures

* Share sender-aware async question retirement across chat views
2026-10-30 00:36:11 -07:00
Neil 636164029c fix(plugins): re-verify installed plugin content on every load (#36277)
* fix(plugins): re-verify installed plugin content on every load

* test: rename integrity cases
2026-10-30 00:28:38 -07:00
Brennan Benson 46595532b9 fix(pi): use discovery for shared model menus and defaults (#36194)
* fix(pi): keep the last good model list when discovery fails

* test(pi): allow void-returning catalog close mock

* fix(pi): make discovery own account model menus and defaults

* test(pi): align prewarm recovery with discovery ownership

* refactor: compact catalog default entry construction
2026-10-30 00:26:00 -07:00
Kelvin Amoaba bafbf406c9 fix(browser): keep snapshot refs on server browsers that use an external Chromium (#36276)
Every command re-selected its tab first, and agent-browser drops the last
snapshot's refs on any tab select, so each @ref failed as Unknown ref.
Select the tab only when it is not already active.
2026-10-30 07:24:24 +00:00
Neil f879c8d6f9 plugins: open only the install-source repository link and render only host-served plugin images (#36270)
* plugins: open only the install-source repository link and render only host-served plugin images

* i18n: drop the removed plugin Homepage label
2026-10-30 00:19:36 -07:00
Kelvin Amoaba 7358da227b fix(browser): keep SSH workspace browser pages from reloading when you switch back (#36266)
* fix(browser): keep SSH workspace pages from reloading when their pane remounts

* fix(browser): re-gate SSH pages after unrouted browsing and recheck verified routes on remount

* fix(browser): destroy only SSH page guests that are off the verified route

* refactor(browser): share the ready route builder and isolate SSH route tests
2026-10-30 06:55:57 +00:00
Kelvin Amoaba b67c5254f0 fix(browser): agent fill, select, upload and type change the page or fail with a reason (#36263)
* fix(browser): fill, select, upload and type act on the agent's element or fail

* refactor(browser): move agent key commands into their own bridge layer; fix test sender call
2026-10-30 06:48:58 +00:00
Neil 24795f5bd1 fix(agent-session): report an ACP or Pi CLI the supervisor could not spawn as missing (#36229)
* fix(agent-session): report an ACP or Pi CLI the supervisor could not spawn as missing

The ACP and Pi connections never marked a supervised spawn ENOENT on their
exit errors, so a missing OpenCode, Grok or Pi CLI read as a provider exit
or a failed start. Mark both connections' exit errors with the managed
process's spawn absence, and route marked exits through the startup failure
fact in the ACP startup end, the ACP and Pi failed-start errors, and Pi's
unexpected exit. Note why Codex's close site cannot see a spawn ENOENT.

* fix(acp): mark a failed start whose exit only the close proved

When the stream closed before the exit report and the exit landed after the
grace wait, the start rethrew its error without the spawn-absence mark. Mark
the start's error once its exit is proven, which the exit-proven wrapper also
carries as its cause.
2026-10-29 23:02:21 -07:00
Neil 480bcfc3ba fix(wsl): re-read a distro's automount root after Orca wakes it, at most every 5 min (#36225)
* fix(wsl): re-read a distro's automount root after Orca wakes it, at most every 5 min

* test(wsl): pin that an unchanged automount re-read does not notify
2026-10-29 23:02:13 -07:00
Neil 511e4feca4 docs(wsl): say what keeps a WSL distro up besides the holder (#36241)
On WSL 2.7.10 a process started through wsl.exe (orcad via setsid -f, its
terminals) keeps the distro Running with no Windows-side client; the holder
only covers the gaps when nothing runs. Reword the comments that assumed
only a Windows client keeps a distro from idling out.
2026-10-29 23:01:32 -07:00
Brennan Benson 28e4764cdd Keep existing Continue actions reliable after agent exit and failed starts (#36074)
* Fix lifecycle handling for existing Continue actions

* Preserve legacy import and owned Windows cleanup

* Match pending creation membership contract

* fix(continue): align sweep and imported source contracts

* Combine terminal claim type imports

* Classify own-property checks as layout reads

* Report pre-spawn failure in WSL cwd fixture

* Load saved CLI history without a retained source row
2026-10-29 23:00:07 -07:00
Neil a5c0c4465d test(windows): reap every process the isolated-spawner suite starts, including skipped paths (#36249) 2026-10-29 22:56:04 -07:00
Brennan Benson a856bc8af2 fix(cli): preserve runtime access across Linux PID namespaces (#35769)
* fix(cli): preserve runtime access across Linux PID namespaces

* fix(cli): give retry advice after runtime replacement

* fix(cli): preserve private offline admission policy

* test(cli): align admission and launcher contracts

* test(cli): prune resolved wall-clock allowance

* test(cli): narrow dropped runtime errors without casts

* test(cli): use explicit extension for hook service import

* test(cli): replay recorded Linux sandbox denial

* test: verify packaged Linux desktop CLI ownership

* test: handle denied FUSE mounts in desktop fixture

* test: use privileged PID namespace in desktop fixture
2026-10-29 22:55:19 -07:00
Neil 6efdd36dcb fix(ui): notification cards lift above a chat composer they would cover (#36233)
With the right sidebar closed, the bottom-right cards (Update Available,
star prompt, sign-out, Codex notice) sat over the chat composer's Send and
Stop buttons. Composers register their box; while one sits under the
cards' resting column, the stack (and the toaster above it) rises clear of it.

Fixes STA-12887
2026-10-29 22:54:27 -07:00
Neil 58c50f294a fix(wsl): user clicks on cwd-less gh may start the stopped default distro (#36230)
* fix(wsl): user clicks on cwd-less gh may start the stopped default distro

#35709 stopped background gh/glab from booting a stopped default distro,
which also refused explicit clicks for users whose gh lives only in WSL.
Starring Orca, the auth diagnosis, the project picker, opening a work
item and board edits now run as a user act on the distro the fallback
uses; the board table reload, which also runs unprompted, stays gated.
The GitHub and GitLab rate-limit cards keep their last snapshot on the
not-running refusal instead of flipping to unavailable.

* fix(wsl): only an explicit click may start the stopped distro for project gh calls

Wrapping the project-view and auth-diagnosis IPC handlers as user acts
also let mount effects (useProjectViewTable listing a restored board's
views, GhAuthErrorHelp's diagnosis) start a stopped default distro. The
handlers now wake only when the renderer passes wakeWslDistro, which the
picker browse/select, opening an item and every edit set; mount effects
leave it unset, and the auth diagnosis never wakes.
2026-10-29 22:51:03 -07:00
Neil 0b2158a394 fix(wsl): name the stopped distro, in the user's language, when main holds a terminal start (#36228)
Worktree-create startup, setup and initial terminals built their warning
from the raw terminal_held_wsl_distro_* code, and the window showed it
as is, as it did for a held pane recovery. Main now writes the readable
sentence into those warnings, and the window swaps either form for
localized copy naming the distro. The runtime spawn's hold and its
wslBackgroundStart option now share one verdict.
2026-10-29 22:47:30 -07:00
Neil 16f326ed79 test(acp): await the escalation's first check and delivery instead of fixed event-loop turns (#36238) 2026-10-29 22:44:47 -07:00
Neil 11a066b934 fix(wsl-cli): removing the WSL command from a deleted distro forgets its registration (#36227)
wsl.exe refuses any command for a distro that was unregistered, so Remove
failed and the distro stayed in wsl-cli-registrations.json for good. A
distro-not-found failure now drops every bookkeeping entry for it
(registration, inspection time, reconciliation) and reports not installed.

Fixes STA-12893
2026-10-29 22:44:40 -07:00
Kelvin Amoaba 2b6e63ee2f fix(browser): reject a ref from another tab's snapshot after a tab switch (#36251)
Each page has its own agent-browser ref map, so an unpinned `click e2` after
`tab switch` hit the new tab's e2 and reported success.
2026-10-30 05:44:04 +00:00
Brennan Benson 2e37fc4571 fix(editor): scroll combined diffs with keyboard navigation (#35004)
* fix(editor): keep combined diff keyboard cursors visible

* fix(editor): retain focused diff sections through height changes

* test(editor): bound combined diff reveal and measurement work

* fix(editor): share combined diff viewport intent across review hosts

* test: verify worktree tree navigation cancels cursor reveal

* test: assert cursor reveal clears before tree scroll

* test: use typed diff instrumentation and fixture convention

* fix: declare implemented diff content size event

* Simplify combined diff cursor reveal and keep focused regression tests

Keep keyboard cursor geometry mapped to the surrounding viewport and sticky header. Remove speculative focused-row retention, deferred following and its manual-input cancellation; restore existing section-height measurement.

Retain split/inline real-Monaco keyboard cases, click-source preservation, and both PR Files hosts covering the review-found missing viewport markers. Drop redundant timing, tree and operation-count fixtures and restore render-range baseline tests.
2026-10-29 22:36:25 -07:00
Brennan Benson f26fb1cfda Keep async question controls available after agent notices (#35758)
* fix(chat): keep async questions open across agent notices

* test(chat): cover answering async questions after agent notices
2026-10-29 22:33:23 -07:00
Kelvin Amoaba 0c99ccb3da fix(browser): save agent downloads to the requested --path and fail fast when none starts (#36240)
Orca's will-download handler picks every guest download's save path, so
agent-browser's own download (CDP download dir plus guid rename) never saw
the file: it landed in ~/Downloads and the command failed with a GUID error,
or after 30s when nothing downloaded. The bridge now claims the page's next
download for the requested path, clicks through agent-browser, and reports
the saved path, a 10s no-download error, or a failed download.
2026-10-30 05:27:46 +00:00
Neil 7971ccf1ca feat(wsl): let an idle WSL host's orcad exit after 5 minutes (#36243)
An idle orcad alone keeps its WSL distro, and the ~1.2 GB VM, running with
no Windows client. WSL launches now pass ORCA_ORCAD_IDLE_TIMEOUT_MS=300000;
orcad honours it through the same managed idle exit (no clients, terminals
or enabled automations), only to shorten its 15-minute default, with a
one-minute floor. SSH launches never carry it; older orcads ignore it.
2026-10-29 22:18:29 -07:00
Kelvin Amoaba 40552b0596 fix(browser): stop agent tabs in background worktrees reloading every ~10 s (#36245)
The hidden-worktree guest budget ranked worktrees only by user activation, so a
worktree an agent drove in the background sorted last. Its automation lease was
its only veto, and when the lease lapsed 10 s after each command the retention
pass destroyed its webview; the next command loaded a fresh page.

Paint-retention claims (agent lease, phone driver, paired viewer) now count as
use when ordering the budget, and a worktree under a veto keeps its guests
without taking one of the four slots from the user's recent worktrees.
2026-10-30 05:15:13 +00:00
Neil 303cbbbb57 refactor(cli): keep the retrying PATH command private to the idempotent write (#36237) 2026-10-29 22:10:15 -07:00
Neil 17828c78f1 fix(chat): keep unconfirmed effort menus for agents other than Pi (#36242)
#34592 made the effort picker hide any model whose effort menu is
unconfirmed (effortsKnown: false), which Pi needs because its menus are exact.
#36158 relies on OMP showing exactly such recorded menus for models that are
not running, so the two merged into failing OMP tests on main. The hide now
applies to Pi only; OMP, Claude and Codex offer unconfirmed menus as before.
2026-10-30 04:59:32 +00:00
OrcaWinandOrcaWin 8aac9c1254 test: remove 28 low-value test suites (#36226)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 21:39:26 -07:00
Neil 067a0dd1b4 fix(runtime): delegated devices follow the device file, and quarantine keeps external adds (#36222)
* fix(runtime): plan delegated children over the device file as it is now

An unchanged child removed on disk skipped the save and its merge, so
its stale token was handed back. The upsert now adopts external edits
first and mints a fresh child; a parent removed on disk mints none.

* fix(runtime): a delegated phone stops authenticating once its desktop is gone

Removing a desktop's row on disk (or any removal short of
revokeRuntimeAccess's cascade) left its delegated phone rows valid.
Token and per-request principal auth now refuse a delegated child whose
parent device is no longer in the registry.

* fix(runtime): keep devices another writer adds while our own quarantine is unwritten

While quarantinedUntilWritten is set, the save no longer skips the disk
read; it merges with no known baseline, so the file's absence revokes
nothing but a device the pairing CLI added since is kept.
2026-10-29 21:29:32 -07:00
Neil 1ae73d0974 fix(cli): give the Windows user-PATH write 15 s and one retry (#36224)
On a low-spec Windows machine the first in-app "install orca command"
failed with "Windows PATH command timed out after 5000ms" and a retry
succeeded: a cold PowerShell start plus the settings-change broadcast
outran 5 s. Raise the deadline to 15 s and retry once on timeout; the
write sets PATH to a fixed value, so repeating it is safe.
2026-10-29 21:27:09 -07:00
Brennan Benson a05cb89f1e Restore OMP thinking choices for non-running models (#36158)
* fix(acp): restore thinking choices for non-running OMP models

* test: cover OMP catalog persistence and menu scaling

* test: keep OMP scaling measurements in assertions

* test: load ACP fixtures before consumer tests

* test: preserve catalog source types in persistence cases
2026-10-29 21:25:58 -07:00
Neil 6c86dec334 fix(plugins): harden security dialogs, syntax literals and display names against data plugins (#36220)
- Pin dialog and floating surfaces inside .plugin-security-chrome so a theme's --popover can't wash out trust text
- Limit auto-closing pairs and comment markers to 1-8 printable single-line characters (validate:plugin refuses; hosts drop the entry)
- Strip control, bidi and zero-width characters from plugin names, titles and listing text (validate:plugin refuses; hosts and the plugin list strip)
2026-10-29 21:23:52 -07:00
Brennan Benson 54a4f26ec8 Avoid unrelated native chat renders on agent status updates (#34596) 2026-10-29 21:16:15 -07:00
Neil e25e02593d i18n(plugins): translate the new plugin list, filter and access strings in every locale (#36215)
Covers strings added by #36100 and #35846 (category chips, install-state tabs,
access labels, the trusted-code warning, Try it) plus the plugin-pane strings
German, Portuguese, Russian, Turkish and Traditional Chinese never received.
Games, Agents and Integrations chips now read from the catalog instead of the slug.
2026-10-29 21:14:02 -07:00
Neil d6caa43719 feat(telemetry): drop the plugin_uninstalled event; install counts are cumulative (#36214) 2026-10-29 21:09:35 -07:00
Neil 65fec4617e plugins: warn before trusting non-official plugins and review access-growing updates one by one (#36218)
Non-official plugins that run code show a non-dismissable warning on their page and in the
update review; content-only plugins show nothing, language packs keep a one-line note.
Updates that grow access or move repository no longer join Update all: each gets its own
before/after review that installs and approves exactly the reviewed bytes.
2026-10-29 21:00:56 -07:00
Kelvin Amoaba 93ca82a2a7 fix(agent-status): keep the conversation id across hookless claude turns (#36208)
Claude reports slash commands like /context over OSC 7501 with no hooks, so
idle panes lost their session and mobile chat could not find it.

Fixes #36033
2026-10-30 03:36:07 +00:00
Jinjing 0ded87821d Sanitize Git remote errors before credential redaction (#36205)
* fix(git): sanitize ANSI before push error redaction and guidance

* fix(git): strip ANSI before renderer credential redaction

* Sanitize ANSI sequences before redacting remote error credentials

* Strip Git credentials without quadratic URL matching

* Preserve complex credentials when redacting remote URLs
2026-10-29 20:29:56 -07:00
Brennan Benson bf3e7ed405 Show a card in the coordinator's chat when it starts a worker (#35263)
* Snapshot agent message relations and verify task display prefixes

* Show native chat agent messages in navigable cards

* Keep agent message cards derived from canonical input and sidebar state

* test: correct agent card contracts and cover raw queue editing

* test: repair agent card runtime and operation contracts

* fix: preserve queued image previews and typed test measurements

* fix: use checked worker fixture and owned sender button typography

* fix: complete agent card fixtures and native presentation

* test: preserve queued edit exports and current authorship

* test: use namespace type imports in queued edit fixture

* Show newly started workers in native chats

* Preserve sender progress and consolidate card contracts

* Simplify sender and notice contract instrumentation

* Remove duplicate sender and notice measurement mirrors

* Use a template literal for the dispatch boundary fixture

* Correct sender and notice verification phase accounting

* Consolidate agent message tests around user contracts

* Restore folded agent message preview on focus exit

* Consolidate agent message regression coverage

* Consolidate agent message fixture data

* Fix display text test lint diagnostics

* Use conversation view type for mail test records

* Reuse active copy control in card workflow test

* Use fixed timestamp in worker start context fixture

* Count fixture array reads without reflective access

* Use a typed store in runtime state fixture

* Fix worker card fixture types and CLI transport project includes
2026-10-29 20:28:54 -07:00
Kelvin Amoaba 324f138de2 fix(browser): keep an agent on its own tab when the user picks or opens another (#36108) 2026-10-30 03:27:56 +00:00
Neil 8f2e24f893 Revert "Warn macOS 12 users about upcoming support changes" (#36209) 2026-10-29 20:26:46 -07:00
Kelvin Amoaba dc99281085 feat(source-control): resolve merge conflicts and complete merges from the phone (#36160)
* feat(source-control): resolve conflicts with one host operation shared by desktop and mobile

* feat(mobile): resolve merge conflicts and complete merges from Source Control

* test(mobile): pin Complete merge refusals and the older-desktop message

* fix(source-control): only resolve paths Git still reports as conflicted

* fix(source-control): refuse to keep a missing file and serialize conflict resolution per worktree

* fix(source-control): resolve only the exact conflicted path

* fix(source-control): match conflicted paths in Git's separator form on Windows and WSL

* fix(source-control): accept only the resolutions the live conflict offers

* fix(source-control): refuse to keep a both-modified file that is gone from disk

* feat(mobile): translate the merge conflict actions

* test(runtime): keep the mobile allowlist test under its line cap

* fix(mobile): let VoiceOver reach conflict action buttons
2026-10-30 03:18:48 +00:00
OrcaWinandOrcaWin 7679916342 test: remove low-value wrapper, copy, and theme checks (#36202)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 20:18:37 -07:00
Brennan Benson abc8850180 Choose an agent setup from the new tab menu (#34728)
* Unify dedicated agent launch choices and argument badges

* Enable action model and effort menus with argument migration

* Bound argument choice edit range processing

* Preserve independent action effort through launch and migration

* Preserve literal config arguments and explicit launch permissions

* Respect repository action argument groups and share launch controls

* Remove duplicate action launch command coverage

* Add agent setup search and controls to the new tab menu

* Show inherited choices beside picker reset options

* Keep terminal Arguments separate from shared launch choices

* Launch default agents from rows and select resolved setup values

* Keep terminal settings available while Chat defaults load

* Reuse existing launch setup controls and Arguments editor

* Unify Source Control action choices and repository overrides

* Use precise types in action choice contracts

* Consolidate action choice test imports

* Correct action choice types and integration test boundaries

* Complete prepared terminal test result contract

* Align action integration expectations with canonical choices

* Keep launch defaults authoritative and couple CLI controls

* Assert production Chat preparation runs in launch contract

* Preserve alternate Chat launches and bound picker argument derivation

* Publish committed picker priority and satisfy control contracts

* test(mobile): type the file preview retry test helpers so the test typecheck passes (#35431)

(cherry picked from commit 0774fc9373)

* fix: keep picker integration tests within compiler boundaries

* fix: revalidate completed picker defaults on reopen

* test: give exported launch fixture mocks portable signatures

* fix: keep fallback launch carriers out of action mode controls

* Preserve Fast argument badges outside dialog mode controls

* Project existing Fast carriers independently of model capabilities

* Keep setup focus during launch row pointer transitions

* Allow declared tier choices without an inherited selection

* fix: place agent setup beside the launch menu

* Commit edited action arguments before planning and launch

Reconcile deliberate raw edits once into the submitted action recipe so replacement model and effort flags reach Save and Start together. Preserve captured sources and untouched load conflicts.

* Name portable Source Control dialog fixture results

* Keep agent setup contained and preserve known argument policy

* Use checked style properties in popup geometry fixture

* Keep setup scrolling inside a plain content wrapper

* fix(agent-picker): match the setup panel to the approved layout

Flush model search and list, one settings section with label-left rows
(Effort, compact Permissions menu, Fast mode), a fixed Arguments
disclosure row with its hint, and a summary footer with Launch chat /
Launch terminal. Settled defaults with nothing chosen keep the model
list and Effort pickable. Hovering another menu row no longer closes
the open panel.

* fix(agent-picker): use primitive-owned spacing and update launch labels in tests

* fix(agent-picker): add panel labels to localization catalogs

* Keep one launch setup open and align picker spacing

* Tighten launch model rows and clarify terminal hint

* Keep keyboard focus in replacement launch setup

* fix(tab-bar): keep a long agent setup result's chevron inside the menu

* test(agent-picker): wait for outgoing focus cleanup event

* Show empty model search feedback and name setup dialog

* test: register selection catalog in launch guard fixture

* fix(agent-picker): retain setup drafts and contain Arguments

* fix(agent-picker): retain authored setup route after alternate launch

* style(agent-picker): use a ghost setup chevron with divider

* style(agent-picker): apply muted color to setup glyph

* test(agent-picker): declare retained catalog default
2026-10-29 20:17:26 -07:00
Brennan Benson 9a7f76ef28 fix(native-chat): agent message cards no longer reserve a row for the copy button (#36189)
* fix(native-chat): agent message cards no longer reserve a row for the copy button

* test(native-chat): cover compact agent message card layout
2026-10-29 20:10:26 -07:00
Brennan Benson 5cf3a8256e Let sidebar card properties hide agent model badges (#36026)
* feat(sidebar): let card properties hide agent model badges

* Disable model visibility control until preferences load

* Register model label and separate WSL test projects

* test: complete serialized WSL routing fixture

* test: align legacy row snapshots with model badge token

* refactor(sidebar): colocate compact card reveal helper
2026-10-29 20:09:57 -07:00
Neil 3bae99a2bb Warn macOS 12 users about upcoming support changes (#36182)
* feat: warn macOS 12 users about upcoming support changes

* fix: use explicit border tokens in macOS support notice

* fix: route compatibility guides through the app link setting

* fix: balance support notice columns in narrow windows

* test: include macOS notice in suppressed feature-tip history

* Simplify macOS 12 notice and isolate compatibility checks

* Clarify Apple compatibility wording in macOS notice
2026-10-29 20:08:48 -07:00
Brennan Benson ca2148a30d Settings: choose Chat or CLI in each agent's row; remove Chat → Providers (#36185)
* feat(settings): choose chat or CLI per agent in the Agents list

Each agent's open-as-chat choice lived in two places: Settings > Chat >
Providers and a Chat | CLI control under Default Agent. The choice now
lives only in each chat agent's row of Settings > Agents > Installed,
writing the same per-agent setting. Agents whose chat runs without their
CLI (a downloaded chat runtime) are listed as installed with CLI
unavailable, and the downloaded runtime and chat sign-in move into the
agent's row. Search and the install card's hint point at Agents. Shown
only while Chat UI is on, as before.

* Preserve agent choices and setup across inventory changes

* Fix settings regression test type conformity
2026-10-29 20:07:00 -07:00