* 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.
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.
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
* 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
* 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
* 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
* 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
* 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
* 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
* fix(source-control): resolve delete/modify conflicts and complete merges from the panel
* fix(source-control): address review findings on conflict resolution
* fix(source-control): save every view of the file before marking a conflict resolved
* fix(source-control): match unsaved conflict views by physical file only
* test(source-control): prove completeMerge refuses with a commit template set
* refactor(source-control): reuse autosave view matching and refresh only after a completed merge
* fix(source-control): drop the untranslated Complete merge fallback text
* fix(source-control): refuse Keep file when the file is gone and re-read unsaved views on retry
* fix(source-control): let Keep file stage conflicted symlinks with missing targets
* fix(source-control): run one conflict resolution per file at a time
* fix(explorer): open folder links that lead outside the project again
#24489 replaced in-memory path grants with declared file access, and the
explorer started refusing folder links out of the project with a toast.
fs:readDir now accepts user-named access; the explorer retries a contained
listing that main refuses only as outside the project, and files listed
that way open by absolute path so their tabs keep access after restart.
* fix(explorer): let main verify outside folder links, and list them only on a gesture
Review follow-ups:
- New project-folder-link access kind, accepted only for fs:readDir: main
lists a folder only when the nearest project folder above it holds a
symlink on the path, so an unregistered root's child or an arbitrary
folder stays refused. user-file no longer lists folders.
- The explorer follows a link only on a user act or under a folder already
listed as outside; refreshes never upgrade a contained listing.
- A link target that fails to list (EPERM, ENOENT) shows its own error.
- Open Markdown Preview opens outside rows by absolute path too.
- New/Duplicate/Rename/Delete are disabled on rows listed through an
outside link, since writes stay inside projects.
* fix(explorer): keep keyboard edits off outside-link rows, and follow listed link rows on reveal
- Enter-to-rename and the delete binding skip rows listed through an outside
folder link, matching the disabled context-menu items.
- A folder the parent listing shows as a symlink may follow the link without
a click, so reveal and re-expansion after a workspace switch list it; a
folder that only became a link stays refused until clicked.
- Pass followProjectFolderLink only when set, so existing read-call
expectations hold.
* fix(explorer): limit folder-link listings to project roots; no rename on outside-row double-click
- Orca's floating folder is not a project, so a link there no longer
authorizes an outside listing (direct IPC callers included).
- Double-clicking an outside-link row's name pins the preview instead of
starting a rename main would refuse.
* fix(mobile): retain editor styling when switching color schemes
* test(mobile): fit theme-switch harness hooks under the file line cap
---------
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* fix(pi): the thinking menu before the first message matches the chat's
Pi's pre-session catalog now asks Pi for its models over RPC and builds each
menu with the same projection a running chat uses, falling back to the text
listing only when Pi cannot answer over RPC.
* fix(pi): preserve remembered off effort on precise model lists
* test(pi): focus effort regression and stop fallback contracts
* test(pi): allow metadata reads between ordered option writes
* fix(pi): derive supported effort without replacing accepted intent
* test: cover host effort projection and refreshed frozen queues
* test: consolidate session option imports
* test: normalize absent catalog fixture records
* test: isolate host fixture types from client projects
* Preserve legacy effort capture for other agents
* fix(windows): start the WSL holder outside Orca's jobs so a crash doesn't take it down
* test(windows): prove the job closed with a non-breakaway control before checking the holder
Task checkboxes take their own text (excluding the checkbox label, nested lists and code blocks) as an aria-label, refreshed on every change, with 'Task' as the fallback for an empty item.
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
* fix(mobile): keep table-cell and list-item line breaks on their own source line
Table cells and list items save line breaks as <br /> (and sibling P/DIV
blocks inside an item as breaks), and reopen attribute-free <br> tokens
as breaks, so Shift+Enter or Enter no longer splits a row or ends a list.
Typed '<br>' text gets only its '<' entity-escaped, raw text newlines
become spaces, and browser caret placeholder breaks are dropped (a cell
that holds only a placeholder saves empty; a cleared item keeps a <br />
so its marker still parses).
* fix(mobile): keep fenced code blocks inside Markdown list items
Indented fences under a list item (README steps such as
'1. Install:' followed by an indented bash fence) now read as a code
block inside the item and save back under the item's continuation
indent. Only items whose continuation holds a fence change; headings,
quotes, rules and tables after the fence end the item and read as
before. Top-level and list code blocks share one PRE writer, blank
separator lines are not indented, and a fence needs no blank line
beside it so tight items stay tight.
* fix(mobile): keep caret code blocks out of the paragraph they follow
Code block with a collapsed caret after text in its block ran native
insertHTML, which merged the PRE into that paragraph as prose. Prepend
a <br> only when content precedes the caret, so block-start, empty-line
and empty-document insertions stay as they were.
* fix(mobile): keep authored runs of trailing table-cell breaks
* fix(mobile): use template literal for list code-fence probe
---------
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
A host-native hook path proves the agent ran on the host, so the 5s
session-ID fallback no longer walks every running distro's roots over 9P
while the transcript is unflushed. Mirrors the existing guest-hook-path rule.
The Asia drain and departing-redial runs asserted a 20ms-sampled mean of lock-waiting director
backends under 0.5; it flaked at 0.56 and 0.57 on loaded runners. A focused test now holds the
source cell row and proves a reconnect placement still lands on a target (and that holding the
target rows does block one); the load runs keep their outcome assertions and report the mean.