* fix(automations): accept Pi model and thinking extra arguments
* fix(automations): keep Pi provider pins and refuse unpinned inline keys
* fix(automations): match Pi value options to its argument parser
* fix(automations): refuse Pi model overrides beside unscoped inline keys
* test(automations): cover Pi's last-provider-wins key pin
* fix(automations): refuse any Pi custom Command text with --api-key
* fix(automations): drop the Pi inline-key pin guard
Pi already sends an unpinned inline key to the chosen model's provider and warns;
the user typed both the key and the model, so Orca does not refuse it.
* Keep local folder creation on the current workspace surface
* Prepare folder workspace tabs before selecting the destination
* Provide inventory boundary in folder creation regression
* Use the composer empty-link contract in re-entry coverage
* Complete the composer re-entry test input
* Preserve sidebar key comparison through creation progress
* fix(automations): say the run's worktree was deleted; document plain run-use recovery
* revert(automations): drop the deleted-worktree wording change (not reproducible)
* docs(orchestration): list Tasks on recovery and note run-use drops other Runs
* docs(orchestration): delete the legacy takeover guide; keep orchestration docs to the normal flow
* feat(onboarding): studio theme picker with plugin themes and Match Terminal palettes
Replace the three System/Light/Dark tiles with a live look picker: big
preview, bundled GitHub/VS Code app themes, curated terminal palettes that
recolor Orca via Match Terminal, and per-slot dark/light looks under System.
Picks repaint the app live and never change the mode; skip restores the full
arrival look.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(onboarding): simple theme tiles with optional look carousel
Restore the original System/Dark/Light tiles and move theme looks into an
optional carousel beneath them. Add a theme-plugin directory link that opens
the system browser at onorca.dev/plugins?kind=themes.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* feat(onboarding): label color mode and theme sections on theme step
Add Color mode / Theme section headings and replace the step subtitle with
guidance on what to pick.
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* fix(onboarding): preserve arrival look across Ghostty import
* fix(onboarding): follow moved terminal theme modules
---------
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
* Add Ultracode to Claude chat effort
* Correct Ultracode test type annotations
* Keep Claude workflow effort observations consistent
* Make effort picker test follow async option contract
* Keep effort coverage at its owning behavior layer
* Exercise workflow readback with recorded native settings
* Preserve configured workflow during effort reapplication
A remote worker-start created its worktree without the caller's identity, so the server stamped itself as the creator and the client that asked hid it under "Hide other-client workspaces". Stamp the authenticated paired device, as worktree.create does.
* fix: respect manual workspace order around primary checkouts
* test: consolidate manual primary-order coverage
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* test: name twin-reorder cases after the dragged linked worktree
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
* test: read worktree ID from mobile workspace row
* test: exercise primary checkout drops in reorder cases
---------
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
* fix(browser): a split tab create joins a browser pane already beside the caller
* fix(browser): the joined page is the pane's visible tab
* fix(browser): a split with an unknown caller still splits beside the active pane
* fix(browser): size the pane to an agent-set viewport so wider pages scroll instead of being cut off
* fix(browser): an agent's viewport survives a pane remount and pans with the wheel
* test(browser): drive the wheel without casts
Show cancelled PR checks as Cancelled with separate counts on desktop and mobile, preserving genuine failures, pending checks, existing action permissions and older-client fallback. Carry complete provider summaries through caches and presentation; preserve Azure source completeness, folder attention priority and muted cancellation details.
Tracked in #15847 and STA-5102.
* Make links in chat questions clickable
* Keep question link wiring within component lint limits
* Reuse the question link handler across chat surfaces
* Keep paste routing tests compatible with shared question Markdown
* Keep question links available in expanded chat history
* Use standard chat code rendering and verify question disclosures
* Align short-question history test with expandable links
Keep orchestration start, handoff and mail notices in one-line bordered cards on desktop and phone. Expand each card to read the original message and attachments, while Copy and sender navigation remain independent.
Credit to Vyacheslav Scherbinin (@gentslava) for the community contribution in #33403.
Co-authored-by: Vyacheslav Scherbinin <gentslava@mail.ru>
* refactor(mobile): keep phone list facts beside the desktop's worktree row
The phone wrote its own list facts (lineage depth, host labels, list keys
and so on) onto the worktree.ps row object it got from the desktop, so a
desktop field with one of those names would be read as the phone's own.
List items are now { row, view }: the row is the desktop's, typed from the
shared RuntimeWorktreePsSummary contract, and view holds what the phone
works out. Host labels are a lookup beside the rows instead of fields on
them. A type test fails if the desktop row gains a view field's name or a
type the phone row would not accept, and a contract test feeds rows from
the desktop's own worktree.ps builder through the phone list.
* fix(mobile): type desktop replies from shared contracts and reject unchecked rows (#37923)
* wip: contract guards
* fix(mobile): type desktop replies from the shared contracts and ban unchecked z.custom
Session tabs, the createSupport reply and native-chat frames were typed by
hand on the phone, so a desktop change could leave the phone compiling
against a stale shape. They are now Pick/Partial of shared types; the
createSupport reply and native-chat transcript frames gain shared types the
desktop uses too, which also gives the phone the 'chat-program' reason it
was missing. Type tests fail when a desktop tab gains a phone-only name or
a field type the phone would not accept.
Catalog rows were admitted with z.custom<Worktree>() and no check. They now
need a string worktreeId, and an ast-grep rule rejects a z.custom with no
check anywhere in mobile/src.
* test(mobile): the desktop contract check also catches a null the phone would not accept
* Keep async question answers stable until delivery
* Cover pending answers with recorded question input
* Cancel delayed answers when question controls disable
* Scope pending question answers to their form and journal order
* Verify revised questions and handover ordering through production sources
* Use typed phone answer fixtures
* Reuse answer delivery evidence and skip unquoted queue matching
* Supply derived journal scope in the translator regression
* Use named type imports for mobile question contracts
* Exercise canonical pending rows and buffered phone read coverage
* Align phone controller assertions with optional send intent
* Supply transcript metadata for phone question test fixtures
* Fix question prompt test literal typing
* fix(claude): reflect model fallback in chat and composer
* test(claude): reproduce fallback display before and after
* fix(i18n): ship the model fallback notice in the runtime catalog
* fix(mobile): ship the model fallback notice in the runtime catalog
* fix(claude): accept unnamed init models in response observations
* fix(claude): keep fallback observations display-only
Response model metadata must not satisfy delayed input evidence or
change saved launch preferences.
* test(claude): type fallback regression fixtures
* test(claude): expect init model display reports
---------
Co-authored-by: Vyacheslav Scherbinin <gentslava@mail.ru>
* fix(terminal): a local file link opens in the workspace it was clicked in
Clicking a terminal link to a file inside another local workspace switched to
that workspace: the editor loader moved the absolute-path tab to the workspace
containing the path (#11369), and link routing jumped to a sibling tab already
showing the file (#16544). This computer reads absolute paths directly, so
local tabs now stay where they were opened, editable. SSH and server hosts,
which read only workspace-relative paths, keep moving to the owner.
Refs #32158, #25838
* fix: merge duplicate editor store import
Capture Antigravity process ownership before managed hook shells and preserve it through HTTP, startup replay and host relays. Reuse host admission for desktop and mobile, including foreground recovery.
Fixes#37505
Co-authored-by: zhangxaochen <3416677+zhangxaochen@users.noreply.github.com>