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.
* 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
* 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
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.
* 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
* 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
#36256 made one branch return the retry promise while the others fell
through, which trips noImplicitReturns (TS7030) and turns the e2e
typecheck ratchet red on main.
* 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.
* 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
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.
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
* 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.
* test(e2e): retry a WSL terminate that never took, once, when Orca launched nothing
* test(e2e): log PTY spawns for the E9 guard and refuse the terminate retry after one
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.
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
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.
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.
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.
* test(computer): verify task event payloads
* fix(computer): verify Linux window restoration
* fix(computer): restore managed Linux windows
Exclude unmanaged helper windows from PID fallback without
losing minimized windows.
#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.
* feat(mobile): give every text input the chat composer's look
Adds shared MessageBox, TextField and ComposerSendButton built from the
composer's own styles, and moves chat, form, search, Tasks, PR, review and
commit inputs onto them. The commit message becomes multi-line, every input
is 16pt (no page zoom on focus), and focus rings are gone. The terminal and
browser typing docks are unchanged.
* feat(mobile): rebuild the terminal dock around Keys and Message modes
Agent tabs open in Message mode, where you write in the chat composer and
Send types it into the terminal. Shell tabs open in Keys mode, where each
letter goes straight to the terminal through the live field. A pick made on
an agent tab lasts until the agent quits. The shell/agent rule is the one
keyboard dismissal already used, now shared.
The key row carries sticky ctrl, alt and shift (tap for the next key,
double tap to lock) and one arrow pad (tap a side, or hold and drag to
repeat through the existing held-key repeat). Paste, attachments, the
display width, the remaining keys and custom keys move to a ⋯ sheet. Return
in the composer adds a line; Send sends.
* fix(mobile): read arrow-pad taps from the pad and keep every key reachable from ⋯
A touch on a chevron made the icon the touch target, so the side was
measured against the icon's box and most taps read as left. The ⋯ sheet
now leaves out only the keys the current row shows, so agent tabs get Tab
and shell tabs get Shift+Tab and Enter back.
* fix(mobile): keep the last changed files clear of a growing commit box
The file list's bottom inset was a fixed 196 pt, so a commit message several lines long hid the last rows behind the commit bar. The inset now follows the bar's measured height.
* test(mobile): give the file list test its bottom inset
* 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.
* Keep zoomed PDF detail text at device resolution
* Test PDF detail update dimension-read bounds
* Account for browser layout units in PDF geometry test
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.
- 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)
* test(computer): measure independently verified tasks
* ci(computer): fit benchmark to repository guards
* fix(computer): stabilize benchmark fixtures and CI
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.