2020 Commits
Author SHA1 Message Date
OrcaWinandOrcaWin e2e69135f9 test: remove low-value runtime and bridge cases (#42234)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 17:45:56 -08:00
Kelvin Amoaba f86697bdef fix(files): opening a file from the phone no longer switches the desktop's view (#42212)
* fix(files): phone file opens no longer switch the desktop's view

files.open and files.openDiff passed an absent navigation target straight
to the window, which treats absence as a host switch. Phones send none,
so every phone file or diff open moved the desktop to that workspace and
the editor. Resolve an absent target to caller at the RPC; host/all from
the CLI's --focus still move the window.

* fix(mobile): Open in session selects the diff on the phone itself

The review screen relied on the desktop switching to the opened diff,
which only reached phones still following the host. Select the opened
diff for this phone before going to the session.

* fix(mobile): select only the working-tree diff and stop when the review screen closes

* test: drop type casts the changed-code gate flags
2026-11-14 01:07:57 +00:00
Brennan Benson 8c306365dd perf: refresh agent models when CLI inputs change (#41976)
* perf: refresh agent model catalogs when launch inputs change

* test: cover model catalog launch input changes

* test: require explicit refresh intent for floating agents

* fix: combine model catalog ownership imports

* Observe direct agent scripts after interpreter options

* Expose refresh intent in preflight API types

* Keep slow model discovery alive beyond picker waits

* Explain the real transport regression test budget

* Use typed catalog test requests and locate cast rationale

* Assert discovered ACP effort choices directly

* Fix catalog regression fixture types
2026-11-13 16:34:06 -08:00
OrcaWinandOrcaWin 4ce1f9e9ab test: remove marginal lifecycle and protocol cases (#42191)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 15:50:13 -08:00
Neil dcf2515ac4 fix(mobile-relay): bounded resolve on persistent 4404, widen a timed-out resolve, rate-limit deferral logs (#41994)
* fix(mobile-relay): resolve on persistent 4404 and make deferral logs readable

* fix(mobile-relay): bound 4404 director resolves for a desktop that stays offline

Review follow-up:
- Resolve on the 2nd consecutive 4404 of an episode, then the 4th, 8th, 16th,
  and never twice within 5 minutes per host. A sleeping laptop with a
  foregrounded phone now costs 6 resolves in 30 minutes, not ~1 per 2 dials.
- If the director names the same cell and epoch, keep the normal 4404 wait:
  no re-route and no immediate redial.
- The streak ends on any other outcome (including aborts), when the phone has
  connected since the last 4404 (a direct-path win), or after a 2-minute gap.
- Clear the gate reprobe due time with its timer so the deferral log never
  reports a stale remainingMs.

* fix(mobile-relay): double the gap between 4404 resolves while the desktop stays offline

The 5-minute floor alone set the pace (12 resolves/hour, forever). After each
resolve the minimum gap now doubles, 5 -> 10 -> 20 -> 40 -> 60 min, and
returns to 5 min after a successful relay dial or any connection. A laptop
asleep for two hours with the phone in the foreground costs 5 resolves.

* refactor(mobile-relay): namespace the supervisor's diagnostic log import to stay within max-lines
2026-11-13 15:25:31 -08:00
Neil b81f0dde51 fix(pairing): never advertise or dial link-local direct endpoints (#41982)
Desktop: drop IPv4 169.254.0.0/16 (and, as before, IPv6 fe80::/10)
addresses from the pairing interface list, so an APIPA or idle adapter is
never the QR's direct endpoint. When nothing else is usable the offer
already omits the direct address (Relay carries the invite; LAN-only
refuses). Among non-Tailscale candidates, an adapter known to hold the
default route now wins ties.

Mobile: a relay-paired host whose stored endpoint is link-local seeds its
logical client with a never-dialing 'reconnecting' stand-in and disables
the direct return probe, so already-paired phones go straight to Relay
instead of redialing the dead address. Relay-less hosts still dial.
2026-11-13 15:09:53 -08:00
OrcaWinandOrcaWin 21c946621c test: remove low-value task recordings and assignment checks (#42135)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 13:09:32 -08:00
OrcaWinandOrcaWin 3cfdf07402 test: remove low-value recording families and PR snapshots (#42125)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 12:43:50 -08:00
OrcaWinandOrcaWin 644a4a8bd4 test: remove low-value RPC recording scenarios and goldens (#42120)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 12:25:26 -08:00
Neil 587562e862 refactor: organize shared sidebar list modules by domain (#42107) 2026-11-13 12:12:51 -08:00
OrcaWinandOrcaWin 13ed693f46 test: remove low-value mobile suites and redundant cases (#42118)
* test: remove low-value mobile chat and lint cases

* test: remove redundant mobile task and terminal suites

* test: remove terminal inventories and recording harness smoke suites

* test: remove redundant mobile transport and worktree cases

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 12:08:57 -08:00
OrcaWinandOrcaWin 44689147f8 test: remove low-value mobile and lint suites (#42108)
* test: remove low-value mobile and lint suites

* fix: keep Git runner within lint budget

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 11:58:36 -08:00
OrcaWinandOrcaWin a36d1ddafd test: remove low-value bridge and native checks (#42105)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 11:15:10 -08:00
Kelvin Amoaba 39ccf4fb56 feat(native-chat): show each subagent's model, current tool and result in the chat (#41766)
* feat(native-chat): show each subagent's model, current tool and result in the roster

Subagent roster rows now carry the child's role, model, reasoning effort,
the tool it is running and the last thing it said, so a row says what the
subagent is doing and, once done, what it found. Codex children take model
and effort from the spawn call; Claude children take the model from their
own messages. A hover card shows the longer text.

* feat(native-chat): name subagent models and roles the way people say them

Show Opus 5.5 · High instead of claude-opus-5-5 · high, reusing the
model-id label and effort picker copy, and General purpose instead of
general-purpose.

* fix(native-chat): read Codex subagent model and effort from its started activity

Current Codex announces a spawn only through subAgentActivity, which carries
the model and reasoning effort the child resolved to.

* fix(native-chat): use the hover card's own spacing variant for the subagent preview

* fix(native-chat): show a subagent's reply as plain text in its roster row and preview

Its last message is markdown; the row now drops backticks, emphasis, list
and heading marks and joins lines into one readable line.
2026-11-13 19:01:39 +00:00
Neil 17a1dc373b refactor: group shared worktree modules by feature (#42093)
* refactor: group shared worktree modules by feature

* refactor: retarget new worktree admission test to moved owner
2026-11-13 10:59:36 -08:00
OrcaWinandOrcaWin 65055509d6 test: remove low-value mobile suites and redundant native input coverage (#42098)
* test: remove low-value mobile and native input cases

* test: prune redundant mobile suites and verify native receiver contents

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 10:48:53 -08:00
OrcaWinandOrcaWin 8e604e2f57 test: trim duplicate mobile and internal fixture assertions (#42094)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 10:27:01 -08:00
OrcaWinandOrcaWin b1fefd9fcd test: remove low-value mobile Markdown editor coverage (#42090)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 10:06:48 -08:00
OrcaWinandOrcaWin 048eefd3bf test: remove low-value mobile and example coverage (#42087)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 09:55:11 -08:00
Neil dc67a6435f refactor(mobile): organize source control by feature owner (#42073) 2026-11-13 08:49:09 -08:00
Neil 075d6b3b50 refactor(rpc): group request contracts by feature owner (#42063) 2026-11-13 08:21:31 -08:00
Kelvin Amoaba c725692258 fix(native-chat): /compact runs while a Claude chat's background subagent works (#41945) 2026-11-13 15:33:32 +00:00
Neil 1af96e86ff refactor(mobile): organize terminal session feature owners (#42046) 2026-11-13 06:59:38 -08:00
Neil e956498414 refactor(mobile): organize terminal modules by responsibility (#42040) 2026-11-13 06:37:45 -08:00
OrcaWinandOrcaWin 41c301bb6a test: remove low-value cloud tests and unused support (#42029)
* test: remove low-value push and relay coverage

* test: delete orphaned fixture and closure support

* test: trim runner and mobile recording matrices

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 05:57:41 -08:00
Neil c2deee70df refactor(mobile): organize platform adapters by capability (#42030) 2026-11-13 05:54:19 -08:00
OrcaWinandOrcaWin e9d5b35d64 test: remove low-value mobile and CLI runtime tests (#42022)
* test: remove low-value mobile suites and repeated vectors

* test: trim low-value CLI runtime cases and obsolete allowance

* test: satisfy changed-line template lint in click case

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 05:25:55 -08:00
Neil 8dd3b71090 refactor: organize mobile files and host-screen domain owners (#42019) 2026-11-13 05:10:41 -08:00
OrcaWinandOrcaWin 35e0f9a9f2 test: remove route forwarding and internal mobile marker cases (#41900)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 00:26:28 -08:00
OrcaWinandOrcaWin fd8c3da20a Simplify delete dialogs and make button states visible (#41870)
* fix: simplify delete dialogs and clarify control interaction states

* fix: preserve bulk delete context and update dialog e2e flows

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 00:12:38 -08:00
Jinjing 5bca0bf342 perf(mobile): build all-tabs sheet rows only while the sheet is shown (STA-15103) (#41819)
The tab bar built every tab's sheet row, including the agent preview over
each terminal's last message, on every tab snapshot and 60 s tick, and the
always-mounted closed sheet ran its own clock and row elements. The bar now
builds only the title/dot/group summary it draws; the sheet's clock, frozen
groups and detail rows live in content mounted only while the drawer is
shown.
2026-11-12 23:46:31 -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