Commit Graph
16002 Commits
Author SHA1 Message Date
Neil 8fad95829a fix(agents): direct work-item and checks-fix launches quote for the execution host (#29716)
* fix(agents): direct work-item and checks-fix launches quote for the execution host

GitHub Project Start, PR checks Fix and the source-control/checks preflights
resolved their launch platform from the client OS whenever the repo had no SSH
connection, so a Windows client starting work on a paired Linux Orca server sent
a PowerShell-quoted --prefill to bash. They now read the execution-host facts
#27259 introduced (server-reported OS, SSH-reported OS, WSL), and the
path-shape resolver is removed so one helper decides.

* fix(agents): resolve direct-launch and preflight platforms from the repo owner

Review follow-up: a WSL worktree on a paired Windows server quotes for Linux,
the owner-row fixture reports its server OS, and the source-control preflights
read the repo owner rather than the focus-defaulted worktree route.

* fix(agents): preflight platform honours a worktree's own host

Review follow-up: a per-worktree host outranks the repo owner, the host-platform
test's mutable client platform is typed, and the source-control panel fixture
carries the host slices.

* fix(agents): a server-projected SSH worktree reads its server's SSH state

Review follow-up: the preflight resolver keeps the runtime owner for nested SSH
worktrees instead of reading this client's own SSH connections.

* fix(agents): cmd.exe pastes a multi-line draft instead of prefilling it

Review follow-up: now that direct launches pass the local Windows shell, a
multi-line --prefill under cmd.exe would submit at its first newline.

* fix(agents): direct launches quote for the shell their tab spawns

A project's Windows runtime can override the terminal setting (WSL setting,
Windows runtime spawns PowerShell), so resolve the tab's effective shell before
quoting. The cmd.exe parity row now expects cmd quoting.
2026-10-16 08:46:22 -07:00
OrcaWinandOrcaWin 7fc7f3d142 test(codex): overlap isolated backfill process shutdown proofs (#29732)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:37:13 -07:00
OrcaWinandOrcaWin fbca4a32dc test(updater): remove duplicate expired preflight launch proof (#29731)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:32:34 -07:00
OrcaWinandOrcaWin 5bfed726d1 test: drive keyboard filter proof through terminal input (#29726)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:24:57 -07:00
Jinwoo Hong c353ef4a34 One write path for main's split panes, late-shown splits reported again (dark, build switch off by default) (#29723)
* One pane-commit path for main's splits, a late-mounted split recorded again, and one fresh-pane exit rule (dark, build switch off by default)

* Runtime panes write only touched records in the layout-owner build; main keeps a split the window already recorded

* Admission patch that finds no change writes nothing, as layout.apply
2026-10-16 08:19:05 -07:00
Neil 572bde869e test: avoid full runtime imports in RPC boundary tests (#29721) 2026-10-16 08:15:05 -07:00
OrcaWinandOrcaWin 41beb2d0a3 test: require cursor reset before same-turn repaint negative (#29722)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:13:49 -07:00
OrcaWinandOrcaWin fc26e27591 test: exercise interrupt admission and exit preconditions (#29719)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:09:48 -07:00
OrcaWinandOrcaWin ce3a18a128 test: detect quarantined input forwarded with provenance (#29715)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 08:03:37 -07:00
OrcaWinandOrcaWin d5e5815dc6 test: reuse local catalog recovery app fixture (#29712)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:52:46 -07:00
OrcaWinandOrcaWin 40f56eb7bb test: consolidate duplicate terminal redraw scenarios (#29709)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:44:40 -07:00
OrcaWinandOrcaWin eada95e960 test: consolidate duplicate terminal theme subscription cleanup (#29708)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:40:38 -07:00
Neil 86aa232876 test: advance mocked terminal clocks and share status setup (#29704)
* test: advance mocked terminal restore observation windows

* test: share setup across agent status entry contracts
2026-10-16 07:38:00 -07:00
Jinwoo Hong 44a86bb188 test(orcad): make the retiring-daemon teardown test independent of exit timing (#29702)
The test let a child exit on a 1 s timer and then required kill(pid, 0) to
report ESRCH. On Linux the teardown wait rightly accepts an unreaped zombie,
which kill(pid, 0) still reports as present, so the assertion raced Node's reap.
The child now exits only when told, and the test asserts teardown is still
pending while it lives and resolves once it exits.
2026-10-16 07:24:18 -07:00
Jinwoo Hong 90addf474e Number layout stream updates so a layout command's answer names the update holding it (dark, build switch off by default) (#29696)
* Number layout frames so a layout command's reply names the frame holding its effect (dark, build switch off by default)

* Report every frame's position, test the reply's frame end to end

* Rewrap sendLayoutApply's doc comment
2026-10-16 07:22:01 -07:00
OrcaWinandOrcaWin 5851ecd96d test: exercise plugin startup completing after cancellation (#29699)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:17:22 -07:00
Neil 54dc2d609d test: share repository store setup and advance mocked mail clocks (#29698) 2026-10-16 07:16:30 -07:00
OrcaWinandOrcaWin adf26f9ec5 test: share browser catalog startup across allowlist and CDP checks (#29693)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:13:34 -07:00
OrcaWinandOrcaWin a3dfb05258 test: share mobile presence and subscription runtime startup (#29694)
* test: share mobile presence and subscription runtime startup

* test: route mobile reliability gate through retained suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:10:40 -07:00
OrcaWinandOrcaWin e141e13384 test: keep disconnected plugin fixture alive until supervised stop (#29695)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 07:08:22 -07:00
Jinwoo Hong dbc1e18b07 Route the remaining window pane-layout changes through main (dark, build switch off by default) (#29689)
* Route the remaining window pane-tree writers through main (dark, build switch off by default)

* E1b review fixes: valid pane ids, keep a mounted split, automatic closes skip the user mark, sole-pane exit guard
2026-10-16 07:04:34 -07:00
Neil e40f8ec115 test: remove real waits and repeated catalog setup (#29690) 2026-10-16 06:53:02 -07:00
OrcaWinandOrcaWin 7cbbc9585e test: share Linear access suite runtime startup (#29688)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 06:46:04 -07:00
OrcaWinandOrcaWin 1b3d4086e4 test: trim redundant mailbox backlog and check delayed input (#29686)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 06:35:20 -07:00
OrcaWinandOrcaWin bd32573780 test: establish surviving child before checking mutation lock (#29683)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 06:28:52 -07:00
Neil 52a8b87a03 test(accounts): hand over the Claude sign-in link the way the BROWSER stand-in does (#29682)
The fake Claude wrote .orca-sign-in-browser.link directly, so the link
poller could read it between create and write, see an empty link, and end
the sign-in. Write a temp file and rename it into place, as the real
stand-in script does. Flake introduced with the tests in #29566.
2026-10-16 06:26:21 -07:00
Jinwoo Hong 4a123f300c test(orcad): wait for an idle-retiring daemon before deleting the serve-parity profile (#29669)
* test(orcad): wait for an idle-retiring daemon before deleting the serve-parity profile

A terminal daemon that loses its last client deletes its pid record before it
exits, so teardown that found daemons only through pid records skipped it and
raced its open files (EBUSY on Windows ARM). Record the pid before stopping
orcad and require that process's exit.

* test(orcad): record profile daemons before stopping orcad in launcher and stop-request tests

* test(orcad): wait for the daemon's child processes before deleting its profile on Windows

The terminal daemon runs with the profile as its cwd and its children inherit it,
so a child that outlives the daemon keeps the profile directory busy (EBUSY on
rmdir). Record the daemon's process tree before shutdown and require each
recorded child's exit, naming any survivor at the deadline.

* test(orcad): keep the real Windows process table out of the teardown unit tests
2026-10-16 06:16:27 -07:00
Neil 068cdda282 fix(terminal): a paired pane is created at its real box and fits the same grid from any grid (#29668)
The web client positions a retained pane host from a measured tab-group body,
but the pane mounted (and fit xterm) a render before that measurement, at the
32px placeholder box, then refit when the measurement landed. Mount the pane
only after the first read.

FitAddon also divides by xterm's css cell, which is the rounded canvas width
over the current cols, so the same box proposed 51 cols from a 75-col replay
and 52 from a 52-col pane: a revealed pane resized twice. Fit with the
grid-independent device cell instead.
2026-10-16 06:13:11 -07:00
OrcaWinandOrcaWin 5bad9cbb0e test(terminal): consolidate reattach reset proof and advance its clock (#29673)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 06:09:51 -07:00
Jinwoo HongandClaude 7b7148d0a9 Open into a new split in one layout command (dark, build switch off by default) (#29655)
* Open into a new split in one layout command (dark, build switch off by default)

Main makes the window's new split group and its first tab (terminal, editor
or browser) in one apply, so main never refuses the open for a group it lacks
and never stores an empty group. The window derives the split from its own
group tree in the three existing switch-point recorders.

Co-Authored-By: Claude <noreply@anthropic.com>

* Open beside an emptied root split, and into a group main already holds

Co-Authored-By: Claude <noreply@anthropic.com>

* Describe both openInNewGroup fallbacks in its doc comment

Co-Authored-By: Claude <noreply@anthropic.com>

* Test: no split is read back beside a sibling that is itself split

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-16 06:09:24 -07:00
Neil 222ede7f5b fix(ssh): reopening a workspace-slept agent tab on a managed host resumes it, without widening its permissions (#29672)
* fix(ssh): reopening a tab slept from a paired desktop resumes its agent on the managed host

A paired client's worktree sleep stops the host's PTYs, but the resume
record its renderer writes never reaches the host, and the host is what
answers the tab open. Capture the record on the host from its own hook
store before the stop, applying the shared holder rule (an agent the
hook store proved exited leaves no record).

* fix(ssh): keep the launch recipe and record acknowledged stops when inventory fails

* fix(ssh): only a proven agent exit retires a pane's earlier sleep record

* fix(ssh): stamp the captured record's SSH host and keep a saved launch recipe

* fix(ssh): read the session id after the presence probe that may outlast it

* fix(agents): a resume reuses only its launch's recorded args, never permission-widening defaults

Resuming a session started as a hand-typed `claude` filled the missing
launch recipe from settings defaults, which carry the permission bypass.
Host tab-open resume, window cold restore and worktree wake now share
one rule: the recorded recipe, or none.

* fix(ssh): a WSL relay tag on a captured record is local, not another host

* fix(ssh): a capture retires when the hook store names another agent in the pane
2026-10-16 06:05:08 -07:00
OrcaWinandOrcaWin 3798302197 test(terminal): consolidate visibility proof and repair focus refusals (#29670)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:59:18 -07:00
OrcaWinandOrcaWin 183d1426fa test: advance hidden replay settling with a virtual clock (#29667)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:45:00 -07:00
OrcaWinandOrcaWin 49721b0595 test: avoid repeated RPC catalog loads for layout schemas (#29663)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:42:51 -07:00
Jinwoo Hong 18df97a7bc Refuse a chat create whose close came first (dark, build switch off by default) (#29659)
* Refuse a chat create whose close came first, behind the layout-owner switch

With ORCA_LAYOUT_OWNER=main, main remembers a close that reaches it before
the chat's create and refuses that create, or closes the chat as it lands.
The window then tells this machine's host about a cancel instead of
keeping a cancel tombstone; a host it cannot tell still gets the
tombstone. Paired hosts keep the tombstones, whose fence module moves to
lib/launch-cancel-tombstones-compat/.

* Close a chat whose create a cancel beat, on any create outcome

The local cancel now retires the chat on main (close and host-tab close),
so a create that landed first leaves no tab behind; a tab_not_found answer
means the create had not landed. Main closes the chat for any create
answer once a close was noted, including a refusal or a throw past commit,
and publishes no tab for it. The tombstone fallback notifies listeners.

* Keep the switched-off create path byte-identical

* Log, not throw, a failed close of a chat closed before create

* Run the close-before-create test in the Node SQLite project
2026-10-16 05:41:33 -07:00
Neil 469ae09c97 fix(agents): a resumed agent's chat is readable on the phone before its first new turn (#29664)
* fix(agents): a resumed agent's chat is readable on the phone before its first new turn (#10923)

* fix(agents): skip a dropped Codex resume and keep the seeded identity across restart

* fix(agents): seed resume identity before the spawn's first await and keep it through terminal evidence

* fix(agents): seed after the spawn commits, and name the session on host-built resumes
2026-10-16 05:39:25 -07:00
Neil 6622b8298c fix(terminal): tell panes their daemon died at once and say when typed input was lost (#29660)
* fix(terminal): tell panes their daemon died at once and say when typed input was lost

* fix(terminal): use the info toast the terminal suites already stub
2026-10-16 05:39:07 -07:00
Neil 78f2e9b174 test(terminal): load the host runtime in setup so the alt-screen chain fits its test limit (#29661) 2026-10-16 05:33:31 -07:00
OrcaWinandOrcaWin a93fe5e955 test: advance tour visibility delays with a controlled clock (#29657)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:23:28 -07:00
Neil 2252240d42 fix(terminal): preserve paste order across remote recovery (#29635) 2026-10-16 05:22:32 -07:00
NeilandGideon c8ad8ea313 fix(projects): list symlinked folders as folders in the remote Add Project browser (#29658)
A symlink to a directory was listed as a file on SSH and managed hosts, so
projects behind a linked path could not be reached. Follow links when
classifying entries; broken links and loops stay files.

Co-authored-by: Gideon <jjin6573@naver.com>
2026-10-16 05:21:44 -07:00
OrcaWinandOrcaWin bf22760392 test: exercise real gate authorization refusals (#29332)
* test: batch lint fixtures and remove repeated runtime scan

* test(cli): consolidate owner coverage and remove false decoding proof

* test(renderer): retain IPC lifecycle behavior without copied inventories

* test: share floating panel behavior suite startup

* test: retire synthetic runtime constructor probes

* test: share saved terminal title runtime setup

* test: share native chat render cost setup

* test: share terminal close continuity runtime setup

* test(runtime): prove mobile geometry through desktop restores

* test(runtime): skip unused RPC catalog in bind-host coverage

* test: share transcript scroll suite startup

* test: share SSH lease candidacy suite startup

* test: exercise real gate authorization refusals

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:19:54 -07:00
Jinwoo Hong ebb9e3243a Record a restored editor tab's move to its owning workspace through main (dark, build switch off by default) (#29653)
* Record a restored editor tab's move to its owning workspace through main (dark, build switch off by default)

* Refuse non-editor and duplicate moves; route the move by workspace

* Type the move routing test's command
2026-10-16 05:17:45 -07:00
Neil 93ca977ca9 fix(runtime): republish session tabs when an adopted terminal's restored title lands (#29654) 2026-10-16 05:16:43 -07:00
Neil 199027d40b fix(notifications): notify for a managed-server task that finished during an SSH disconnect (#29636)
* fix(notifications): notify for a managed-server task that finished during an SSH disconnect

* test: type the reconnect completion dispatch mock
2026-10-16 05:15:58 -07:00
Neil 62bf1d68c3 fix(projects): adding a project through a symlink alias reuses the existing project (#29651)
* fix(projects): adding a project through a symlink alias reuses the existing project

On a managed host, adding repo-link (-> repo) created a second project for the
same checkout while re-adding repo was deduped. Compare the real path, resolved
on the host that owns the files, so an alias finds the tracked project; distinct
checkouts keep distinct real paths and stay separate. Local folder workspaces
get the same check.

* test: run fixture git through process-host
2026-10-16 05:15:32 -07:00
Kelvin Amoaba 942ffe2f9e fix(terminal): right-click pastes once into Codex (#29647) 2026-10-16 12:11:06 +00:00
OrcaWinandOrcaWin 5db05e8ed4 test: share SSH lease candidacy suite startup (#29329)
* test: batch lint fixtures and remove repeated runtime scan

* test(cli): consolidate owner coverage and remove false decoding proof

* test(renderer): retain IPC lifecycle behavior without copied inventories

* test: share floating panel behavior suite startup

* test: retire synthetic runtime constructor probes

* test: share saved terminal title runtime setup

* test: share native chat render cost setup

* test: share terminal close continuity runtime setup

* test(runtime): prove mobile geometry through desktop restores

* test(runtime): skip unused RPC catalog in bind-host coverage

* test: share transcript scroll suite startup

* test: share SSH lease candidacy suite startup

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:03:12 -07:00
OrcaWinandOrcaWin 9c03c68957 test: reduce RPC authorization suite startup (#29645)
* fix: classify integration credential moves on their owner host

* test: install renderer API fixtures for terminal close paths

* test: restore IPC harness API and listener ownership contracts

* test: avoid unused RPC catalog setup in authorization suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-16 05:01:21 -07:00
NeilandClaude e522986211 fix(ssh): load the bridge panes module lazily so importing the SSH state effects has no side effect (#29646)
#29625 statically imported legacy-relay-bridge-panes, which subscribes to the
bridge (and calls listPanes) at load, so every useIpcEvents test whose
window.api mock lacks it threw at import.

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-16 04:53:10 -07:00