* 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>
Revert the live-history compaction and incremental vacuum added by #36053 to remove their serving-thread stall risk for the release. Preserve retired-history cleanup, saved formats/readers/writers and already-compacted sparse histories; add sparse reopen/write/reopen coverage.
Temporary: redundant live history can grow until the separate repair tracked in #37802 is ready. Older synchronous saves remain.
Tracked in STA-13374 and STA-13375. Six focused suites / 40 tests, independent correctness/architecture/final comparison and final-head CI passed.
* fix(sidebar): stop the resize handle from covering the workspace list scrollbar
The sidebar's overflow-hidden clipped the outer half of the straddling
resize handle, so the remaining half sat on top of the 10px list
scrollbar and left only 3px of it clickable. Render the handle outside
the clipped box and bias it toward the terminal side.
* fix(sidebar): keep resize grab room under drawers and keep thumb visible on handle hover
---------
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>