Commit Graph
2225 Commits
Author SHA1 Message Date
Jinjing bcf8a5cef8 Improve notice details 2026-11-12 22:45:48 -08:00
OrcaWinandOrcaWin b0c0377664 test: remove subprocess and mobile navigation projections (#41842)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 21:49:42 -08:00
OrcaWinandOrcaWin fcb620d219 test: remove mock-native mobile queue and authority suites (#41826)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 21:03:24 -08:00
OrcaWinandOrcaWin aa736b6650 test: remove narrow mobile and settings navigation samples (#41818)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:49:14 -08:00
OrcaWinandOrcaWin 038793de64 test: retire narrow runtime and navigation samples (#41813)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:36:16 -08:00
OrcaWinandOrcaWin f5ab621250 test: remove low-value mobile and source control suites (#41811)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:31:27 -08:00
Jinjing 955186a43c fix(mobile): forget queued-row heights for messages that left the queue (#41802)
The queued list cached each row's height by message id for the life of the
chat, so a long conversation kept one entry per message ever queued and a
requeued id could place a failed row by the height it left with. Keep heights
only for queued ids, and drop a layout a departed row reports late.
2026-11-12 20:15:44 -08:00
Jinjing a1667c0297 Open launched agents from mobile AI actions (#35235) 2026-11-12 19:45:35 -08:00
Jinjing 571d29adf4 fix(mobile): open a linked workspace root from a chat link (#36078) 2026-11-12 19:26:30 -08:00
OrcaWinandOrcaWin b663c756cb test: retire low-value draft and CDP lifecycle examples (#41704)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 16:08:18 -08:00
OrcaWinandOrcaWin b546bd0a23 test: retire low-value mobile composer and CDP suites (#41699)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 15:52:58 -08:00
OrcaWinandOrcaWin bb21570c65 test: remove low-value composer and focus-guard cases (#41696)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 15:43:22 -08:00
OrcaWinandOrcaWin 43df511fad test: remove low-value mobile, focus, and prompt coverage (#41692)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 15:16:17 -08:00
Brennan Benson 91b3f12f03 perf(git): reuse branch snapshots across searches (#41558)
* perf(git): share branch snapshots across repository searches

* fix(git): read branch occupancy and current checkout live

* Preserve branch occupancy and unborn checkout parity

* Keep native searches for clients without qualified refs

* fix(git): preserve compiled branch option caching

* fix(git): derive selected source labels from branch identity

* test(git): resolve selected source fixture import

* fix(git): keep branch default menu translations reactive

* test(git): type mobile branch row mock parameters

* fix(git): keep branch metadata expiry bounded during streaming
2026-11-12 15:12:55 -08:00
OrcaWinandOrcaWin bb09acd71c test: remove low-value authoring, CLI, and preload suites (#41688)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 15:03:11 -08:00
Kelvin Amoaba ee99d584d9 feat(dictation): optional AI cleanup of dictated text, with a correction word (#41497)
* feat(dictation): optional AI cleanup of dictated text, with a correction word

Off by default. When on, a dictation's text goes through the user's agent
CLI (the AI text actions' runner, Haiku by default for Claude) before it
lands: the pill says "Cleaning up…" and the text is inserted once. Failure
or a 10 s timeout inserts it as heard with a warning; the pill's X skips
cleanup. A consent dialog asks before text first goes to an agent. The
correction word ("scratch that") survives filler removal for cleanup to act
on. The microphone test gets "Try cleanup", and phone dictation the computer
transcribes is cleaned on the host.

* fix(dictation): keep finals that arrive during cleanup and tighten cleanup edges
2026-11-12 22:59:25 +00:00
Kelvin Amoaba c679989e6d fix(native-chat): continue a usage-limited chat on the account you switch to (#41665)
* fix(native-chat): let a chat continue on the account you switch to after a usage limit

A usage-limit reset belongs to the account that hit it. After a switch the
host kept holding the chat until the old account's reset, and desktop and
phone hid Continue until then, so Switch Account on the card did nothing.
The host now releases the hold once the chat would start on another
account, letting only that account's own reading hold it, and publishes the
earlier continue time that both clients read.

* fix(native-chat): save the account a usage limit hit, per cut

The fallback to the chat's founding account could report a switch that
never happened for a chat that had already moved, releasing it before the
new account's reset. Save the cut's account while the child that ran it is
live, use only that, and key the switch time by the cut it belongs to.

* fix(native-chat): record the account each chat runtime launched on

record.accountHome names only the founding account, so after a switch
nothing said which account a usage limit hit. Owner proof now records the
account each runtime fence launched under, every host cut carries its
turn's fence, and the hold reads the cut's account from that pair. This
replaces the sweep's saved copy, which a fast child exit could miss.

Spending the new account showed before a switch now holds the chat until
its own reset; only a reading taken after the switch releases it.

* fix(native-chat): restart the switch time when the chat moves to yet another account

A second switch for the same cut kept the first switch's time, so a reading
of the newer account taken before it was chosen could release the chat.
2026-11-12 22:49:22 +00:00
Brennan Benson e8db36c7ce Keep the model picker tied to the selected model (follow-up to #40906) (#41512)
* Keep model picks independent of answer metadata

* Remove unused answer model extraction

* Verify model selection stays separate from answer metadata

* Keep the agent-chosen model as a display default

* Keep agent-chosen model text out of input selections
2026-11-12 12:18:05 -08:00
Jinjing d05fe32992 fix(mobile): place a failed queued row by the queue's current order (#41633)
A reorder of equal-height rows moves them by transform and lays none of
them out, so the failure scroll's settle path kept the order from the last
layout and could scroll to the wrong row. The hook now takes the queue's
current order every render.

Follow-up to #41611 (Neil post-merge C1, F41611-C1-1).
2026-11-12 12:03:46 -08:00
Jinjing d1ae177242 feat(mobile): floating answer card, queued messages above it (#41611)
* feat(mobile): floating answer card, queued messages above it

Port of stablyai/orca-private#724 (e1a794e6), plus:
- keep orca #40820's filled Steer pill on the lit head row
- let the open queue list shrink and scroll under a height limit so
  the Show less row stays whole at 320pt on a short screen

* test(mobile): pin the short-screen queue shrink at narrow width and on the box

* fix(mobile): scroll a failed queued message into view and keep the lit Steer pill's press

- A failure that opens the queue scrolls its row into view, so on a short
  screen the reason the list opened is visible above Show less.
- The pressed opacity comes after the lit fill on the Steer pill.
- Test the lit pill (orca #40820) and the failure scroll.

* fix(mobile): place a failed queued row only from its fresh height and let stale requests lapse

- The failure scroll waits for the failed row to lay out again, then settles
  on the known heights after 300ms, so a stale height or an unresolved
  request never moves the list later.
- A deferred show expires after 1s and on a queue change; the inline
  editor's reveal scrolls at once again.

* refactor(mobile): keep the failure-scroll request as the queue list's own state

React Doctor reads a hook-returned setter called during render as a prop
callback; the list now owns the request with useState and hands it to the hook.

* fix(mobile): address review threads on the queued list

- Fold again for a later prompt: an open choice made in one placement no
  longer comes back in the next.
- Scroll a message the person queues into a folded list into view through
  the same deferred show as a failure.
- Lift from the row only in the plain presentation; a settings row keeps
  its grip gesture.

* fix(mobile): let a choice made in the render a prompt arrives win over the placement reset

* fix(mobile): count an open inline editor's height when placing a later queued row

* test(mobile): note why the inline-editor test stub is cast
2026-11-12 11:11:28 -08:00
Jinwoo Hong fb5bf4450d fix(mobile): let the chat transcript scroll by touch on the phone's web pages (#41578)
* fix(mobile): let the chat transcript scroll by touch on the phone's web pages

Gesture handler 3 (Expo 58 upgrade, #37935) gives a GestureDetector's view
touch-action: none on web by default. The chat transcript's pinch-to-zoom
detector sits on its scroller, so in the phone's WebView pages the browser
refused every touch pan and no chat could scroll. Gesture handler 2 left it
at auto.

The row list now wraps its own scroller in MobileNativeChatPinchZoom, which
keeps touch-action: auto. A browser render check pins the scroller's
touch-action under the detector.

* fix(mobile): keep the transcript pinch on its text size, not page zoom

touch-action: auto let a two-finger pinch on the transcript zoom the whole
page in the phone's web pages, so the transcript's text-size pinch never ran
and a zoomed page stopped the composer lifting over the keyboard.
pan-x pan-y keeps one-finger scrolling (and sideways code blocks) with the
browser and hands the pinch to the detector.

The render check now pans the transcript with one finger and pinches it
with two, asserting it scrolls, the text scale changes and the page stays
at scale 1.
2026-11-12 14:10:05 -05:00
OrcaWinandOrcaWin 1fbd7c2356 test: retire low-value scanner, account, browser, and terminal suites (#41623)
* test: retire vault corpus and account setup suites

* test: retire synthetic browser and document host suites

* test: retire synthetic terminal motion suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 11:06:33 -08:00
Kelvin Amoaba c1f3309c1e fix(mobile): convert Android HEIC photos to JPEG when picked for chat (#41626)
At quality 1 the Android picker hands back raw HEIC, which the chat page's
WebView can't decode, so the attach failed.
2026-11-12 18:56:41 +00:00
Brennan Benson e693fe5665 Stop listing Claude short-name rows beside the model they run (#41467)
* fix(agent-picker): stop listing Claude short-name rows beside the versioned model they run

* fix(agent-picker): hide a short name only on reported proof; keep hidden rows searchable

* fix(native-chat): keep a pending hidden model pick listed
2026-11-12 10:11:21 -08:00
OrcaWinandOrcaWin d34c829237 test: retire low-value draft, crypto, and lifecycle coverage (#41614)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 10:02:35 -08:00
Neil fb8d6f950b refactor(github): organize concrete feature owners (#41601) 2026-11-12 09:17:26 -08:00
OrcaWinandOrcaWin ff9fd6634b test: remove low-value ingress, mobile, and markdown cases (#41609)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 09:10:57 -08:00
OrcaWinandOrcaWin 207ba0727a test: remove low-value hidden-project suites (#41581)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 07:28:23 -08:00
Neil d277381bb3 Hide projects from the sidebar without stopping them (#41529)
* Hide projects from the sidebar without stopping them

Adds Repo.hiddenAt, a per-host, view-only flag. A hidden project's
workspaces, empty header and project-filter entry leave the desktop
sidebar, the paired phone's list, the new-workspace picker and the
palette's project filter. Its terminals, agents and automations keep
running, and repo.list / worktree.ps still list it.

- Hide Project in the project menu (toast with Undo), a collapsed
  "N hidden projects" list under the workspace list with Show buttons,
  and a Hide from sidebar switch in Settings > Projects.
- repo.setHidden RPC ({repo, repoHostId?, hidden} -> {repo, hostId,
  hidden}) and `orca repo hide|unhide [--host]`; `repo list` marks
  hidden rows.
- Opening a hidden project's workspace (notification, CLI, deep link)
  focuses it without unhiding it, lifting sidebar filters, or leaving a
  pending sidebar reveal.
- repo.update echo check: a host that drops hiddenAt reports failure
  instead of reading as hidden.

* Address hidden-projects review: multi-host hide, picker scope, mute, stale filters, shared predicate, restore list styling

* Hidden projects re-review: keep saved filters, Agents filter, composer seed, per-toast Undo, shared default host

* Hidden projects: address review threads (pre-feed, palette search, notices, dialog default, seed remap, row keys, a11y)

* Hidden projects: no implicit dialog default when every project is hidden
2026-11-12 07:02:57 -08:00
OrcaWinandOrcaWin 2e22af9284 test: remove marginal CLI and mobile image suites (#41559)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 06:05:10 -08:00
OrcaWinandOrcaWin 97df516add test: prune shared guards and manual Swift policy checks (#41554)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 05:50:58 -08:00
OrcaWinandOrcaWin fbec96cf29 test: retire low-value runtime and native checks (#41533)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 04:35:42 -08:00
Kelvin Amoaba cff7cfece0 fix(mobile): return to Home's agent lists in one Back from an agent's session (#41522) 2026-11-12 11:51:30 +00:00
Kelvin Amoaba 20a75e4b44 fix(mobile): shrink chat photos to 2000 px before upload (#41514)
Phone photos went up at full size, and agents refuse images over 5 MiB of base64.

Fixes #40844
2026-11-12 11:22:06 +00:00
OrcaWinandOrcaWin c0d4b77a6f test: remove low-value mobile formatting and adapter suites (#41495)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:35:37 -08:00
OrcaWinandOrcaWin cdfcd41056 test: remove low-value media registry and watcher cases (#41485)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:01:53 -08:00
OrcaWinandOrcaWin 4214d3da1c test: remove low-value input, media, and browser examples (#41484)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:52:38 -08:00
OrcaWinandOrcaWin eb16a6e351 test: remove low-value input and native decoder checks (#41481)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:30:04 -08:00
Neil 8358b360d8 fix(mobile): exclude overlay permission and clear removed-host diagnostics (#41455)
* fix(mobile): exclude overlay permission and clear removed-host diagnostics

* fix(mobile): ignore late diagnostics for removed hosts

A closing client or a re-acquired open that fails with host-not-found could
append after removal and re-persist diagnostics for the removed host.
2026-11-12 01:06:07 -08:00
Kelvin Amoaba 5971e67757 fix(sidebar): keep the session name first on a monitoring agent row (#41458)
* fix(sidebar): keep the session name first on a monitoring agent row

Leading with "Monitoring background tasks" made every monitoring row in a
narrow sidebar truncate to the same text. The row's dot already draws the
monitoring glyph, so the status can trail the name like every other state.

* fix(agents): keep a monitoring child row's name first too

Sub-agent rows (desktop sidebar, chat strip and mobile) share one lead/trail
rule that also put "Monitoring background tasks" before the name.
2026-11-12 08:36:10 +00:00
OrcaWinandOrcaWin 4dcf689fb2 test: remove low-value mobile and host policy suites (#41436)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:25:07 -08:00
OrcaWinandOrcaWin 0a0f8d5a9f test: remove low-value approval and cloud push suites (#41420)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:00:12 -08:00
Brennan Benson a72bfaefe7 Fold legacy models the same way in every model picker (#41019)
* feat(agent-picker): fold legacy models the same way in every model picker

Claude aliases whose versioned model is listed, and Codex models superseded
in their family or by a newer major line, fold under Legacy models in the
agent launch picker, text-generation pickers, and native chat on desktop and
mobile. The default and current model always stay listed.

* feat(agent-picker): expand legacy models in place instead of a separate list

* feat(source-control): fold legacy models in the action model menu

* fix(agent-picker): keep model rows keyed across sections; let launch search find legacy models

* fix(agent-picker): keep rows in place while picking; classify each model catalog once

Legacy membership no longer depends on the selected model; a picker opens the
legacy section when the current model is in it. Classification is one pass and
cached per catalog, so streamed chat renders don't reclassify an unchanged list.
Typing on a closed Select no longer swallows its next close.

* fix(agent-picker): reopen menus with the current legacy model shown; PTY chats classify their discovered list

* test(agent-picker): wait on the menu instead of sleeping

* fix(agent-picker): keep the Legacy models row last, expanding older models above it

* fix(agent-picker): label the folded section More models, matching mobile
2026-11-11 22:54:21 -08:00
Kelvin Amoaba a3bbd507fd fix(mobile): tell the user when closing a session tab fails (#41404)
The close actions swallowed refusals and transport errors, so a tap on
close did nothing when the host refused (for example while the desktop
window is still loading). Show a short toast instead, with a specific
message for runtime_unavailable.
2026-11-12 06:42:25 +00:00
Neil 176943e8fe refactor(mobile-tasks): group modules by concrete feature owners (#41410)
* refactor(mobile-tasks): group modules by concrete feature owners

* refactor(mobile-tasks): consolidate concrete owner imports

* refactor(mobile-tasks): point recording loaders at concrete owners
2026-11-11 22:40:18 -08:00
Jinjing e9f06774c9 fix(i18n): refine dictation translations 2026-11-11 22:27:24 -08:00
Brennan Benson 7d9290ee8d fix(native-chat): keep Send's round size while Cmd/Ctrl previews steer (#40820)
Holding Cmd/Ctrl swapped the round Send/Stop button for a wide labeled pill,
pushing the model picker, context ring and mic left. The preview now keeps
Send's round button and only swaps its icon (CornerDownRight for steer,
ListEnd for queue); the label stays as the aria-label. With Steer queued,
the head queued card's Steer button also fills as the primary.

The phone composer had the same pill and now follows the same rule.
2026-11-11 22:00:14 -08:00
Neil 46b225e473 chore(links): point website, docs and download links at orca.dev (#41376)
The site now lives at orca.dev; the old onorca.dev and www.onorca.dev hosts
redirect there. Linking to orca.dev directly skips that redirect.

Only page links change. Service hosts, sign-in and relay endpoints stay as they are.
2026-11-11 21:50:37 -08:00
Neil b9e3912ff8 Call orca.dev for feedback, plugin lists and update notes; accept orca.dev share and download links (#41380)
* chore(endpoints): call orca.dev for feedback, plugin lists and update notes

The site moved to orca.dev. Feedback, connection diagnostics, plugin install
stats, the plugin kill list, update nudges and the changelog feed now use
orca.dev, as do the diagnostics token URL baked into builds and the release
download mirror (downloads.orca.dev). The old hosts serve the same paths,
so released builds keep working.

Skill share links on share.orca.dev are accepted, and the mobile scanner
recognizes the orca.dev Android download code. The old hosts stay accepted.

* chore(ci): leave the release JavaScript benchmark workflow unchanged

Editing it triggers the benchmark, whose parity check currently fails on
arm64 because max-quality brotli output for the mobile page differs by
architecture. The benchmark only needs some diagnostics URL, and the old
host still serves it.
2026-11-11 21:50:31 -08:00
Jinwoo Hong 4679867e13 fix(orchestration): label follow-up worker cards, gate remote-owned start cards on ready (#41377)
* fix(orchestration): label follow-up worker cards, gate remote-owned start cards on ready

A send that continues a finished or closed worker starts a follow-up Dispatch,
and the coordinator's chat showed it as "Started worker". The agent-start item
now carries the Dispatch it followed and whether the conversation reopened, and
the card reads "Reopened worker" or "Sent follow-up to worker".

worker-start --on a server that owns its workers wrote the card for any parsed
answer, with no agent kind. It now passes the started agent and writes the
card only once the server readied the worker, as local and attached starts do.

* test(native-chat): assert follow-up heading kind, not its copy
2026-11-12 00:19:04 -05:00