Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
700 commits
Select commit Hold shift + click to select a range
8631553
fix(orcad): keep an artifact slot whose serve or daemon record names …
nwparker Oct 17, 2026
7d077ee
fix(ssh): keep existing hosts' orca CLI control off after the on-by-d…
nwparker Oct 17, 2026
ad6b318
fix(mobile): re-read a server's capabilities when the server reconnec…
nwparker Oct 17, 2026
15b1217
fix(projects): removing one host's copy of a project keeps its same-p…
nwparker Oct 17, 2026
9cc8b80
fix(worktrees): a preparation another machine owns is never reclaimed…
nwparker Oct 17, 2026
6863096
fix(orcad): a client that reconnects during idle shutdown can still o…
nwparker Oct 17, 2026
432c6d0
fix(mobile): show message times, keep the long-press sheet open, and …
AmoabaKelvin Oct 17, 2026
357aa41
fix(terminal): keep Vim scrolling inside shrunken panes (#29960)
nwparker Oct 17, 2026
07d3e33
fix(tab-bar): stop guessing a launch failed while the new terminal is…
brennanb2025 Oct 17, 2026
550cc5c
fix(sidebar): order sidebar names the same on desktop, phone and serv…
Jinwoo-H Oct 17, 2026
002320c
fix(native-chat): verify the actual CLI conversation during resume (#…
brennanb2025 Oct 17, 2026
a4532fa
fix(workspace-cleanup): delete the active or a running-agent workspac…
brennanb2025 Oct 17, 2026
442491b
test(sidebar): golden for accented, mixed-case and numbered sidebar n…
Jinwoo-H Oct 17, 2026
7b6f02f
fix(native-chat): idle cleanup and commands read the helpers the agen…
brennanb2025 Oct 17, 2026
5e8d40d
fix(mobile): remove the dead space around the chat composer (#29224)
brennanb2025 Oct 17, 2026
1ed735b
feat(acp): one install row shows and drives a managed runtime install…
brennanb2025 Oct 17, 2026
dd2bd0b
fix(terminal): recovering one split pane keeps its healthy sibling in…
nwparker Oct 17, 2026
0d9beb6
fix(ssh): reconnecting a stopped managed host keeps the server's proj…
nwparker Oct 17, 2026
a82298e
fix(runtime): the host stops a removed project's shells and agents it…
nwparker Oct 17, 2026
8612588
fix(release): retry mac build run identity propagation (#29974)
nwparker Oct 17, 2026
a87aa4c
ci(mobile): merge the Android APK download bump on the site after its…
Jinwoo-H Oct 17, 2026
76fc1e5
fix(web): pair and stay paired from plain-http LAN and Tailscale page…
nwparker Oct 17, 2026
de1f6e3
fix(release): publish tags when main requires pull requests (#29985)
nwparker Oct 17, 2026
37c314b
Send a browser tab's window times to main with its open (dark, layout…
Jinwoo-H Oct 17, 2026
2d33cd9
refactor(identity): brand host-scoped worktree and repo keys for new …
nwparker Oct 17, 2026
5b69634
Agree with main on main-made terminal tabs and sleeping-agent records…
Jinwoo-H Oct 17, 2026
a349bfa
Agree with main on first-group ids, tab order and the preview flag (d…
Jinwoo-H Oct 17, 2026
7bb83b4
test(store): host-twin fixture and destructive/selection twin isolati…
nwparker Oct 17, 2026
88f2771
feat(native-chat): a chat whose host has no program to run shows Inst…
brennanb2025 Oct 17, 2026
77c511b
feat(sidebar): main produces per-workspace activity facts, checked ag…
Jinwoo-H Oct 17, 2026
05086a8
Let Cmd+J open hosting-provider domains such as github.io (#29989)
AmethystLiang Oct 17, 2026
ed3c3cc
Chat: dropped files hold Send until they're attached (#29173)
brennanb2025 Oct 17, 2026
8a4c031
fix(native-chat): a queue action still on its way greys its controls,…
brennanb2025 Oct 17, 2026
58f1f7d
fix(mobile): edit queued messages in place (#28646)
brennanb2025 Oct 17, 2026
32a53d3
feat(native-chat): image messages wait in the queue like text (#28655)
brennanb2025 Oct 17, 2026
ac34ffa
fix(toasts): stop the notice stack flickering under a resting mouse, …
brennanb2025 Oct 17, 2026
f4aa828
fix(mobile): show the same Working line in terminal-backed chats and …
brennanb2025 Oct 17, 2026
5733887
test(layout-owner): prove main and the window agree on a worktree ide…
Jinwoo-H Oct 17, 2026
035588e
test(cross-version): read isStructuredTab from the shared module the …
brennanb2025 Oct 17, 2026
29fa3cf
fix(terminal): quit no longer warns about terminals a paired Orca ser…
nwparker Oct 17, 2026
57e8c60
fix(renderer): resolveOwner refuses folder and project-group twins in…
nwparker Oct 17, 2026
95580d9
test(e2e): open and close structured chat tabs with an isolated Claud…
Jinwoo-H Oct 17, 2026
e1a7c97
fix(cli): stop suggesting --host to listings that reject it (#30012)
nwparker Oct 17, 2026
83baa08
fix(cli): explain why file open fails on a server with no app window …
nwparker Oct 17, 2026
ee56703
chore(ci): ratchet importers of the deprecated runtime-owner resolver…
nwparker Oct 17, 2026
0f9c12d
Chat: pasting a copied file attaches it, like dropping it (#29089)
brennanb2025 Oct 17, 2026
824ca95
fix(ssh): a host converted to its managed server keeps its workspaces…
nwparker Oct 17, 2026
8f2810a
fix(ssh): link a folder workspace the server kept when a re-created S…
nwparker Oct 17, 2026
251516d
feat(native-chat): choose which agents open as a chat (#29071)
brennanb2025 Oct 17, 2026
6c7ed18
feat(sidebar): main publishes desktop focus, pins, project and host o…
Jinwoo-H Oct 17, 2026
fa962dd
Record chat tab opens and closes in main (dark, layout-owner build on…
Jinwoo-H Oct 17, 2026
3813104
feat(acp): a sign-in prompt on an ACP agent's error output ends the s…
brennanb2025 Oct 17, 2026
98d8257
fix(ssh): a password SSH host waits for you at launch instead of prom…
nwparker Oct 17, 2026
03cefcb
feat(sidebar): main keeps one live set of paired-server rows, checked…
Jinwoo-H Oct 17, 2026
a5b96a1
feat(acp): an agent can run each chat's own permission mode itself (#…
brennanb2025 Oct 17, 2026
ee4fd06
fix(mobile): the chat's Working line uses desktop's spinner (#30008)
brennanb2025 Oct 17, 2026
7adcefb
fix(ai-vault): hide Orca's chat-naming requests from Session History …
nwparker Oct 17, 2026
0ba5ccc
fix(mobile): keep a headless host's chat tab through snapshot rebuild…
nwparker Oct 17, 2026
e6b7c77
feat(sidebar): main produces per-workspace PR facts, checked against …
Jinwoo-H Oct 17, 2026
92999b0
fix(mobile): prevent markdown and file tab reload and screen flicker …
zhangxaochen Oct 17, 2026
6743353
fix(remote): make the host's tab name the one source for CLI and desk…
nwparker Oct 17, 2026
c3e3b52
Record the chat pane the window picks in main (dark, layout-owner bui…
Jinwoo-H Oct 17, 2026
30e3119
fix(accounts): follow an Orca Claude account switch when the shell se…
Jinwoo-H Oct 17, 2026
b2419a5
fix(mobile): show the update screen instead of native screens when th…
Jinwoo-H Oct 17, 2026
345ef81
feat(accounts): offer to restart running Claude sessions on the new a…
Jinwoo-H Oct 17, 2026
37f23b9
refactor(mobile): every build is the OTA shell; drop the native/OTA b…
Jinwoo-H Oct 17, 2026
7ad3d49
fix(mobile): allow Markdown refresh during tab snapshots (#30040)
nwparker Oct 17, 2026
4f5d464
Open into the window's emptied pane beside a split branch in one layo…
Jinwoo-H Oct 17, 2026
86f6258
refactor(mobile): delete native screens the OTA shell no longer reach…
Jinwoo-H Oct 17, 2026
3d2e0bd
fix(native-chat): a running Claude chat keeps its model when two Clau…
brennanb2025 Oct 17, 2026
c3f5242
Write no false preview flag on a new or promoted tab (dark, layout-ow…
Jinwoo-H Oct 17, 2026
609f342
Record simulator tab opens and closes in main (dark, layout-owner bui…
Jinwoo-H Oct 17, 2026
90c1c0a
feat(mobile): draw the host Accounts screen from the desktop's page (…
Jinwoo-H Oct 17, 2026
6fcc183
feat(sidebar): put main's sidebar inputs behind the ORCA_SIDEBAR_INPU…
Jinwoo-H Oct 17, 2026
cd29f5f
feat(sidebar): main keeps a registry of workspace creations in progre…
Jinwoo-H Oct 17, 2026
2117d77
feat(acp): Antigravity in the Chat UI over its ACP server (#28595)
brennanb2025 Oct 17, 2026
4b1eabd
fix(terminal): resume a relaunched workspace's sleeping agents only w…
Jinwoo-H Oct 17, 2026
b389854
feat(sidebar): ui.setCollapsed changes one section's collapse without…
Jinwoo-H Oct 17, 2026
46984db
fix(mobile): ask which desktop to open Tasks on when several are conn…
Jinwoo-H Oct 17, 2026
1c411db
fix(native-chat): a refused steer leaves its turn as the chat's lates…
brennanb2025 Oct 17, 2026
216e3e4
fix(native-chat): a Codex chat is Working only while Codex holds the …
brennanb2025 Oct 17, 2026
21e3d76
feat(linear): edit and delete Linear comments from the CLI (#30003)
brennanb2025 Oct 17, 2026
b9fa92b
feat(acp): pause an agent's chat starts while its shared sign-in chan…
brennanb2025 Oct 17, 2026
cf6a544
Show which desktop the mobile Tasks screen is for (#30105)
Jinwoo-H Oct 17, 2026
6287ff6
One spawn step writes a terminal's pane identity for both ways Orca o…
brennanb2025 Oct 17, 2026
285f95c
fix(mobile): a compact phone queue: shorter header, a capped scrollin…
brennanb2025 Oct 17, 2026
100b6b1
fix(native-chat): the queue button you pressed shows a working spinne…
brennanb2025 Oct 17, 2026
9586a3f
feat(sidebar): main serves workspace icons as small data URLs for the…
Jinwoo-H Oct 17, 2026
09f12fa
fix(runtime): a slept remote workspace stays asleep through terminal …
nwparker Oct 17, 2026
efcbe1a
fix(browser): close a client-hosted ghost tab on a host with no brows…
nwparker Oct 17, 2026
7f4243e
Floating editor files open under the id main keeps for them (dark, la…
Jinwoo-H Oct 17, 2026
a039e90
feat(sidebar): main keeps the list's time rules on one clock, checked…
Jinwoo-H Oct 17, 2026
d9a6143
Main's layout Loader keeps one pane per terminal on restore (dark, la…
Jinwoo-H Oct 17, 2026
c2021eb
fix(layout-owner): main records a quick command tab's label on create…
Jinwoo-H Oct 17, 2026
8a3dd28
fix(project-groups): say so when a project cannot join a group on ano…
nwparker Oct 17, 2026
965f881
fix(sidebar): draw a project group once when two hosts publish it und…
nwparker Oct 17, 2026
27cfee6
fix(ssh): a Disconnect stays disconnected, and Settings and the statu…
nwparker Oct 17, 2026
299dcb8
fix(worktrees): a host-scoped purge leaves a surviving twin's tabs an…
nwparker Oct 17, 2026
532cad2
fix(renderer): destructive host callers refuse an ambiguous owner ins…
nwparker Oct 17, 2026
45f7429
Save-divergence detector: skip empty workspaces, see dropped tab-bar …
Jinwoo-H Oct 17, 2026
0904ba0
fix(layout-owner): a background agent tab keeps its live title when a…
Jinwoo-H Oct 17, 2026
d71e3e9
fix(serve): orca serve on orcad serves the browser client and answers…
nwparker Oct 17, 2026
ba9c7ea
Add Reveal in Finder to the file header menu (#30129)
nwparker Oct 17, 2026
ce2d608
test(pty): the launch race join test no longer waits on real disk I/O…
Jinwoo-H Oct 17, 2026
12f3089
feat(mobile): draw chat tool runs the way desktop does (#30135)
AmoabaKelvin Oct 18, 2026
5c4c1ed
feat(terminal): tell users once that the diff panel in a Claude pane …
AmoabaKelvin Oct 18, 2026
0c6e496
feat(native-chat): mark each attached image as [Image #N] where it si…
AmoabaKelvin Oct 18, 2026
33e6785
fix(deps): update vulnerable dependencies and prune stale overrides (…
nwparker Oct 18, 2026
1b3113d
fix(ssh): a tab closed while a managed host is disconnected stays clo…
nwparker Oct 18, 2026
3aad2b1
feat(sidebar): dark phone feed of the sidebar inputs (sidebarInputs.r…
Jinwoo-H Oct 18, 2026
2b49a48
test(e2e): hidden split-pane exit tests end the shell with exit 0 (#3…
Jinwoo-H Oct 18, 2026
3d03c33
refactor(renderer): fold getExplicitRuntimeEnvironmentIdForWorktree c…
nwparker Oct 18, 2026
bb0f229
test(e2e): wait for git status to show the seeded file before the dis…
Jinwoo-H Oct 18, 2026
bf97836
Pane titles stay layout: the window stops writing tab names as pane t…
Jinwoo-H Oct 18, 2026
98b4139
fix(sidebar): confirm before sleeping a workspace that another host's…
nwparker Oct 18, 2026
af056df
refactor(projects): shrink twin-removal teardown to the attributed cl…
nwparker Oct 18, 2026
303c7c9
fix(sidebar): main's temporal owner reads the catalog the way the win…
Jinwoo-H Oct 18, 2026
6c45958
refactor(renderer): tighten the host-identity stack (#30124)
nwparker Oct 18, 2026
68808db
chore(docs): replace ESLint with Oxlint (#30180)
nwparker Oct 18, 2026
c2188f6
fix(tasks): bound GitLab all-projects fan-out to avoid runtime queue …
maxmilian Oct 18, 2026
ed40719
Pin CocoaPods release installer in the Ruby lockfile (#30181)
nwparker Oct 18, 2026
b9b1b85
test(layout-owner): an older session's moved editor tab gets its work…
Jinwoo-H Oct 18, 2026
aff4ee7
feat(sidebar): main produces this host's workspace rows, checked agai…
Jinwoo-H Oct 18, 2026
a42049f
fix(tooling): lock routine dependency audit executables (#30183)
nwparker Oct 18, 2026
904259d
fix(runtime): keep a restored unfinished agent unverifiable for the h…
nwparker Oct 18, 2026
e0abf71
refactor(layout-owner): one placement helper for drawn tab opens (dar…
Jinwoo-H Oct 18, 2026
b8264e8
Main drops the layout of workspaces the catalog no longer validates (…
Jinwoo-H Oct 18, 2026
fa738f3
fix(notebook): run cells only when the resolved owner is this compute…
nwparker Oct 18, 2026
bbdbe72
fix(runtime): paired clients list a folder-upgraded checkout under th…
nwparker Oct 18, 2026
c359d09
chore(deps): remove unused desktop and mobile declarations (#30182)
nwparker Oct 18, 2026
b5fa888
fix(worktrees): stop CLI-created worktrees flashing into a filtered s…
nwparker Oct 18, 2026
d935683
fix(ssh): move the open workspace to the server's linked project when…
nwparker Oct 18, 2026
1e95c03
fix(native-chat): say why the chat composer is locked and offer Take …
nwparker Oct 18, 2026
dbb84f4
fix(ssh): move parked terminal history through the snapshot channel s…
nwparker Oct 18, 2026
dcfe8c9
perf(typecheck): pin Bun as a devDependency and typecheck with it (#3…
nwparker Oct 18, 2026
ffb818b
Ship the locked skills installer instead of executing npx (#30185)
nwparker Oct 18, 2026
4baacca
fix(startup): shell PATH probe falls back and retries when the shell …
nwparker Oct 18, 2026
483a17b
Reopening a file in its open tab sends the main process the changed f…
Jinwoo-H Oct 18, 2026
b8fbfce
Main repairs a terminal stored in two panes once at startup (dark, la…
Jinwoo-H Oct 18, 2026
31f7665
Main records when a workspace's default tabs were applied (dark, layo…
Jinwoo-H Oct 18, 2026
95d6018
Main keeps editor tabs under owned ids and in-place re-owns in step (…
Jinwoo-H Oct 18, 2026
553bde3
ci: simplify CocoaPods pin validation (#30208)
nwparker Oct 18, 2026
1e29bd1
ci(e2e): route remote product sources without a hand-kept route to th…
nwparker Oct 18, 2026
d4aa9dc
revert: restore pinned npx skills installer (#30207)
nwparker Oct 18, 2026
8209d30
test(runtime): record Electron vs orcad composition wiring and fail o…
nwparker Oct 18, 2026
25fb579
fix(layout): refuse a layout change on a workspace a WSL move has pau…
Jinwoo-H Oct 18, 2026
d4b3a65
fix(layout): main routes folders by the window's host rule and never …
Jinwoo-H Oct 18, 2026
2a8b4c3
Phone and old-client tab lists keep editor tabs under owned ids (dark…
Jinwoo-H Oct 18, 2026
9a86d27
chore(updater): delete the rollout-flag module nothing reads (#30211)
nwparker Oct 18, 2026
9810a5c
refactor(worktree): one comparison-only worktreeIdentityKey replaces …
nwparker Oct 18, 2026
932dc1b
chore(runtime): delete the never-served TLS branch of the LAN WebSock…
nwparker Oct 18, 2026
993fd20
test(preflight): freeze the clock in the explicit-binary timeout test…
nwparker Oct 18, 2026
6afbe49
chore: delete unimported SSH, renderer and orchestration modules (#30…
nwparker Oct 18, 2026
f0a6962
docs(agent-hooks): ORCA_FEATURE_REMOTE_AGENT_HOOKS now only gates the…
nwparker Oct 18, 2026
9085c5b
build(packaging): fail when orca serve's serve-selection entry or a c…
nwparker Oct 18, 2026
b21cda1
fix(ssh): say when a managed server may be behind this app, and retry…
nwparker Oct 18, 2026
f47337d
refactor(worktree): one worktree path equality; the ipc copy folded W…
nwparker Oct 18, 2026
7ede32e
ci: fail when CI config, workflows or e2e code name a src/ file that …
nwparker Oct 18, 2026
5c66b2e
fix(ssh): a late relay-era attach releases only its own viewer, never…
nwparker Oct 18, 2026
d3d6162
test(orcad): orca serve's argv makes orcad serve the web client and 4…
nwparker Oct 18, 2026
262a617
ci(e2e): start the managed-SSH lane for every helper only its specs i…
nwparker Oct 18, 2026
e6eaabb
test(files): the native-ignore watcher test waits on delivered events…
nwparker Oct 18, 2026
3767047
feat(telemetry): report a legacy relay host active once a day while i…
nwparker Oct 18, 2026
e1eef1f
refactor(terminal): one isRemoteExecutionHostPtyId, on prefix semanti…
nwparker Oct 18, 2026
559ece0
feat(sidebar): the host that owns a workspace stamps its Recent and S…
Jinwoo-H Oct 18, 2026
720f45c
Fix mobile Source Control rendering for large branches
nwparker Oct 18, 2026
9c726af
fix(sidebar): say a Linear task-status skip was for a multi-host work…
nwparker Oct 18, 2026
a912265
ci: start the SSH host lanes for the SSH transport, the WSL orcad lan…
nwparker Oct 18, 2026
1de30d8
test(e2e): the Windows CLI matrix convert cell calls the convert help…
nwparker Oct 18, 2026
0d74111
test(remote-runtime): pin the 12 hand-kept error-code lists to their …
nwparker Oct 18, 2026
a54fd38
Antigravity install: one clear message in the chat, with the message …
brennanb2025 Oct 18, 2026
e5e9fca
refactor(agent-status): the renderer's hydration cutoffs read main's …
nwparker Oct 18, 2026
bf56095
Session History: the scan line under the search box no longer jumps d…
brennanb2025 Oct 18, 2026
dcfbec0
refactor(execution-host): one isLocalExecutionHost in shared (#30241)
nwparker Oct 18, 2026
ed3ee7e
refactor: name the vm transcript and mobile pending-write caps for wh…
nwparker Oct 18, 2026
1e4d65e
ci: path-literal check scans live gate references; historical gate co…
nwparker Oct 18, 2026
e958614
fix(orcad): SSH host management on a server without the desktop app r…
nwparker Oct 18, 2026
fc925c3
fix(native-chat): Claude, Pi and ACP chats are Working only while the…
brennanb2025 Oct 18, 2026
06618fd
fix(ssh): a connection never redials a host the user disconnected bef…
nwparker Oct 18, 2026
29a43a7
feat(antigravity): sign Antigravity chats in with the server's own Go…
brennanb2025 Oct 18, 2026
8f86ccf
fix(ssh): refuse a migration request too large for the host's sealed …
nwparker Oct 18, 2026
a2946f0
chore(worktree): composeWorktreeId plus a ratchet on hand-built workt…
nwparker Oct 18, 2026
2d0fa93
Scope tab-group shortcuts and pane actions to the focused split (#30258)
AmethystLiang Oct 18, 2026
7121917
fix(ssh): two overlapping update checks never both try a host the fir…
nwparker Oct 18, 2026
58ce3f5
refactor(git): the common-dir check uses areWorktreePathsEqual (#30263)
nwparker Oct 18, 2026
9bd47de
feat(sidebar): after a restart, the host clears sort tiers nothing ba…
Jinwoo-H Oct 18, 2026
06fbf8f
refactor(terminal): drop remote-pty checks isRemoteExecutionHostPtyId…
nwparker Oct 18, 2026
e770ec3
test(runtime): compare macOS tmpdir paths by realpath in create-inten…
nwparker Oct 18, 2026
6fd2172
feat(runtime): remove an agent's downloaded runtime only once nothing…
brennanb2025 Oct 18, 2026
407bf03
Session History: find every agent's older sessions in Workspace and P…
brennanb2025 Oct 18, 2026
a261091
refactor: drop the runtimeWorktreeIdsEqual alias and name the WSL hoo…
nwparker Oct 18, 2026
8721b9c
refactor(orcad): import orcad helpers from their owning modules, not …
nwparker Oct 18, 2026
5229ef8
test: tighten the round-2 parity, serve and watcher tests (#30267)
nwparker Oct 18, 2026
2c12c1e
refactor(runtime): move runtime/relay to runtime/mobile-cloud-relay (…
nwparker Oct 18, 2026
ecb1d68
refactor: compatibility folders name their entry modules instead of a…
nwparker Oct 18, 2026
677d127
fix(terminal): an app's own OSC 133 zone close no longer ends the age…
nwparker Oct 18, 2026
4005884
Main routes a project registered on two machines to the same owner th…
Jinwoo-H Oct 18, 2026
acc2351
refactor(runtime): move runtime/browser-host-* into runtime/browser-h…
nwparker Oct 18, 2026
c30753c
fix(runtime): show "Re-pair required" for revoked servers and re-pair…
nwparker Oct 18, 2026
0249174
refactor(runtime): import mobile-cloud-relay and browser-host helpers…
nwparker Oct 18, 2026
ddf4e6b
fix(terminal): avoid duplicate snapshot replays after reveal (#30205)
nwparker Oct 18, 2026
3501ea9
fix(daemon): OMP's prompt-bubble markers no longer trip the dead-app …
nwparker Oct 18, 2026
383513b
SSH pane terminals and local-to-SSH tab moves reach main directly (da…
Jinwoo-H Oct 18, 2026
019417b
refactor(ssh): import the system-ssh and ssh -G modules directly, not…
nwparker Oct 18, 2026
1050569
ci: ratchet tests/ type errors so a broken spec import can't land unn…
nwparker Oct 18, 2026
fc24ac3
Window saves stop carrying tab and pane layout; main keeps its own (d…
Jinwoo-H Oct 18, 2026
85d634c
fix(settings,status-bar): show access revoked / update required for p…
nwparker Oct 18, 2026
2d1ec53
refactor(ssh): fence the legacy relay in ssh/legacy-relay/ and drop t…
nwparker Oct 18, 2026
db17b33
ci: ratchet the legacy relay fence (importers of ssh/legacy-relay/ an…
nwparker Oct 18, 2026
0627cd2
refactor(managed-server): move orcad activation into src/main/managed…
nwparker Oct 18, 2026
c82cf2b
fix(mobile): a session resumed from the phone's history shows its con…
nwparker Oct 18, 2026
aa07d58
fix(mobile): break the transport and terminal-document import cycles,…
nwparker Oct 18, 2026
50c06d5
refactor(ssh): move port forwarding into ssh/port-forwarding/ and hos…
nwparker Oct 18, 2026
d382992
refactor(managed-server): move the managed server's install and deplo…
nwparker Oct 18, 2026
506aa03
refactor(managed-server): move the managed server's lifecycle into sr…
nwparker Oct 18, 2026
d7aea6d
refactor(managed-server): move host state (state locks, Windows host …
nwparker Oct 18, 2026
658953d
refactor(ssh): group system-ssh transport, ssh config and remote exec…
nwparker Oct 18, 2026
1938bd0
refactor(ipc): group SSH and runtime-environment IPC handlers into ip…
nwparker Oct 18, 2026
e1b2d58
refactor(ipc): import ipc helpers from their owning modules, not re-e…
nwparker Oct 18, 2026
b1adb89
refactor: import renderer runtime, shared remote-runtime and orcad he…
nwparker Oct 18, 2026
9905da8
refactor(runtime): import runtime helpers from their owning modules, …
nwparker Oct 18, 2026
447c4a0
refactor(ipc): import worktree, watcher and runtime-environment helpe…
nwparker Oct 18, 2026
93ed192
The window's layout stream reconnects after a drop; a retried quit st…
Jinwoo-H Oct 18, 2026
0517087
fix(jcode): let jcode's own client start its per-pane server (#30257)
brennanb2025 Oct 18, 2026
37a9eaa
feat(settings): remove a downloaded agent runtime from its Settings r…
brennanb2025 Oct 18, 2026
ff294f0
fix(mobile): put the session tabs in the top bar on a landscape phone…
brennanb2025 Oct 18, 2026
2655423
fix(rate-limits): run the Antigravity usage probe with agy's auto-upd…
OrcaWin Oct 18, 2026
bde20af
Only the tabs the window just changed wait for main's answer; the win…
Jinwoo-H Oct 18, 2026
a8d7151
Require a full hover delay before each tab preview (#30388)
AmethystLiang Oct 18, 2026
3a2f162
feat(sidebar): sort Recent and Smart by the owning host's stamps, hol…
Jinwoo-H Oct 18, 2026
b6325ef
style: format the resume and transcript files main left unformatted (…
brennanb2025 Oct 18, 2026
e43f3e7
feat(opencode): open OpenCode 2 in the chat view and list 2.x models …
AmoabaKelvin Oct 18, 2026
d378f49
fix(mobile): show a renamed terminal tab's name on the phone (#30163)
AmoabaKelvin Oct 18, 2026
3af9c22
fix(cleanup): count visits as last activity once terminals stop stamp…
Jinwoo-H Oct 18, 2026
9189e0f
feat(native-chat): pan and zoom chat image previews like mermaid diag…
AmoabaKelvin Oct 18, 2026
df460b8
fix(native-chat): move a chat visual's Open and Share buttons above i…
AmoabaKelvin Oct 18, 2026
c794225
test(e2e): align title-strip drops with pane selection rules (#29903)
brennanb2025 Oct 18, 2026
63f0cb9
refactor(sidebar): the stamp-sorted window list runs no settle, latch…
Jinwoo-H Oct 18, 2026
91b696b
refactor(sidebar): main keeps sleeping retention only, no order of it…
Jinwoo-H Oct 18, 2026
cf7423c
feat(mobile): redesign the chat composer with file attachments and in…
AmoabaKelvin Oct 18, 2026
b0a7d2e
fix(mobile): keep typed commit messages, restore failed shortcut remo…
AmoabaKelvin Oct 18, 2026
eaa1ee1
A CLI-started terminal shows once in its workspace, and a pane close …
Jinwoo-H Oct 18, 2026
3dbb804
fix(macos): the TCC prompt watcher's log stream dies with Orca, and o…
nwparker Oct 18, 2026
d3026df
feat(sidebar): Smart Done means finished and unread (dark) (#30425)
Jinwoo-H Oct 18, 2026
4298ba9
Mark completed Codex reviews Done when Stop is absent (#28860)
brennanb2025 Oct 18, 2026
bca8721
Merge remote-tracking branch 'upstream/main' into sync/upstream-1.4.214
frbarbre Oct 18, 2026
80dde08
fix(fork): follow upstream's moved GitHub cache key and settings base
frbarbre Oct 18, 2026
3b7952b
docs(fork): log the sync of upstream 1.4.214 (695 commits)
frbarbre Oct 18, 2026
0d35845
fix(fork): pass Verify on upstream's watcher-type move and retired se…
frbarbre Oct 18, 2026
c3a7ced
docs(fork): note the 1.4.214 sync's Verify round
frbarbre Oct 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
22 changes: 21 additions & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,17 @@ pnpm install
pnpm dev
```

To reduce main-process rebuild CPU and memory when you do not need its source maps,
set `ORCA_DEV_MAIN_SOURCEMAPS=0` before `pnpm dev`. In Bash/zsh:

```bash
ORCA_DEV_MAIN_SOURCEMAPS=0 pnpm dev
```

In PowerShell, use `$env:ORCA_DEV_MAIN_SOURCEMAPS='0'` before `pnpm dev`.
Remove the variable when debugging the main process with source maps. Renderer and
preload settings are unaffected; production builds always keep their hidden main maps.

Ordinary installs include native optional dependencies for the current OS and CPU only.
Before a cross-architecture build (including `pnpm build:mac`, which produces both x64 and
arm64 artifacts by default), run `pnpm install:release` to add the other CPU's variants.
Expand Down Expand Up @@ -60,6 +71,15 @@ pnpm test
pnpm build
```

For repeated local typechecks, use `pnpm tc` (or `pnpm tc:node`, `pnpm tc:web`,
and `pnpm tc:cli`). These run `bun check` from the pinned `bun` devDependency —
about a third of tsc's CPU and an eighth of its memory, so several agents can
typecheck at once. Pass `--compiler=native` to use tsc and its incremental
cache instead. CI uses `pnpm typecheck:ci`, the same Bun check with CI's
concurrency. Shared tests are checked by the
Node project; shared production code is checked in all three environments.
Run `pnpm tc:node` after editing shared tests, or `pnpm tc` to check everything.

Add high-quality tests for behavior changes and bug fixes. Prefer tests that would actually catch a regression, not shallow coverage that only exercises the happy path.

If your change affects UI or interaction behavior, verify it on the platforms it could impact.
Expand Down Expand Up @@ -118,7 +138,7 @@ All stable kinds (`patch`, `minor`, `major`) are computed off the latest _stable
- If the latest RC tag exists but is still draft-only or missing its GitHub Release, the workflow resumes that tag only when it was built from the current release ref. Otherwise the next RC number is cut.
- RC numbering also considers release commits on `main`, so deleting a stale tag does not let a later cut reuse the same RC number.
- Off-main releases (when `ref` is not the tip of `main`) only push the tag. `main` is never mutated from a non-main ref, so you can safely release an older commit without polluting history.
- When `ref` is the tip of `main`, the version-bump commit is fast-forwarded onto `main` so local `package.json` stays in sync with what's shipped.
- When `ref` is the tip of `main`, the workflow tries to fast-forward the version-bump commit onto `main`. If main requires pull requests, it leaves main unchanged and pushes only the release tag. Other push errors still stop the cut.

**Common scenarios:**

Expand Down
11 changes: 11 additions & 0 deletions .github/actions/build-mobile-web-bundle/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
name: Build the mobile web bundle
description: Builds out/mobile-web, the page phones load, which every orcad build ships and refuses to build without.

runs:
using: composite
steps:
# Why: the bundle build resolves React Native and Expo from mobile/node_modules.
- uses: ./.github/actions/install-mobile-dependencies
- name: Build the mobile web bundle
shell: bash
run: pnpm run build:mobile-web
8 changes: 8 additions & 0 deletions .github/actions/install-node-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -209,6 +209,14 @@ runs:
git -C "$GITHUB_WORKSPACE" diff --exit-code -- package.json pnpm-lock.yaml pnpm-workspace.yaml
fi

# Why: the script-free install leaves node_modules/.bin/bun as a stub that shadows setup-bun under `pnpm run`.
- name: Link pinned Bun
shell: bash
run: |
if [ -d node_modules/bun ]; then
pnpm rebuild bun
fi

# Why --if-present: release cuts run main's workflows against older release tags that predate this script.
- name: Build internal packages
shell: bash
Expand Down
15 changes: 12 additions & 3 deletions .github/scripts/check-required-pr-context.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,19 @@ export function verifyRequiredPrContext(parseYaml) {
const workflow = parseYaml(readFileSync(join(directory, file), 'utf8'))
return Object.entries(workflow.jobs)
.filter(([id, job]) => (job.name ?? id) === 'PR checks passed')
.map(([id]) => `${file}:${id}`)
.map(([id, job]) => ({ owner: `${file}:${id}`, job }))
})
if (providers.length !== 1 || providers[0] !== 'pr.yml:verify') {
throw new Error(`Required PR context must belong only to pr.yml:verify; found ${providers}`)
const owners = providers.map((provider) => provider.owner)
if (providers.length !== 1 || owners[0] !== 'pr.yml:verify') {
throw new Error(`Required PR context must belong only to pr.yml:verify; found ${owners}`)
}
const gate = providers[0].job
const condition = gate.if?.replace(/^\$\{\{\s*|\s*\}\}$/g, '').trim()
if (condition !== '!cancelled() && github.event.pull_request.draft != true') {
throw new Error('Required PR aggregate must run unless cancelled or the PR is a draft.')
}
if (gate['continue-on-error'] || gate.steps?.some((step) => step['continue-on-error'])) {
throw new Error('Required PR aggregate must not ignore failures.')
}
}

Expand Down
13 changes: 9 additions & 4 deletions .github/workflows/ci-cache-warmup-platform-jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,16 @@ permissions:
contents: read

jobs:
warm-linux-arm:
warm-linux-runtime:
if: github.event_name != 'pull_request'
concurrency:
group: ci-cache-warmup-linux-arm-${{ github.event.pull_request.number || github.ref }}
group: ci-cache-warmup-linux-runtime-${{ matrix.runner }}-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name != 'schedule' }}
runs-on: ubuntu-24.04-arm
strategy:
fail-fast: false
matrix:
runner: [ubuntu-24.04-arm, blacksmith-4vcpu-ubuntu-2404]
runs-on: ${{ matrix.runner }}
timeout-minutes: 10
env:
ORCA_BACKGROUND_LAUNCH: '1'
Expand Down Expand Up @@ -50,7 +54,8 @@ jobs:
- uses: ./.github/actions/install-node-dependencies
with:
native-runtime: node
cache-pnpm-store-lookup-only: 'true'
# Windows PR consumers download packages directly; retain only the build caches.
cache-pnpm-store: 'false'
- name: Verify native cache is usable
run: node config/scripts/ensure-native-runtime.mjs --check-only

Expand Down
7 changes: 7 additions & 0 deletions .github/workflows/ci-cache-warmup-platforms.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,20 +37,27 @@ on:
- 'config/scripts/space-sharing-copy.mjs'
- 'config/patches/**'
- 'native/windows-registry/**'
- 'native/windows-security/**'
- 'native/windows-cli-launcher/**'
- 'native/windows-agent-hook/**'
- 'config/scripts/build-windows-cli-launcher.mjs'
- 'config/scripts/build-windows-agent-hook.mjs'
- 'config/scripts/windows-rust-executable-build.mjs'
- 'resources/build/icon.ico'
pull_request:
types: [opened, synchronize, reopened, ready_for_review, converted_to_draft]
paths:
- '.github/workflows/ci-cache-warmup-platforms.yml'
- '.github/workflows/ci-cache-warmup-platform-jobs.yml'

permissions:
contents: read

concurrency:
group: ci-cache-warmup-platforms-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
warm-platforms:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
uses: ./.github/workflows/ci-cache-warmup-platform-jobs.yml
6 changes: 6 additions & 0 deletions .github/workflows/ci-cache-warmup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ on:
- 'native/windows-registry/**'
- 'native/windows-security/**'
pull_request:
types: [opened, synchronize, reopened, ready_for_review, converted_to_draft]
paths:
- '.github/workflows/ci-cache-warmup.yml'
- '.github/actions/prepare-headless-compiler/**'
Expand All @@ -57,8 +58,13 @@ on:
permissions:
contents: read

concurrency:
group: ci-cache-warmup-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
warm:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
concurrency:
group: ci-cache-warmup-linux-x64-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: ${{ github.event_name != 'schedule' }}
Expand Down
70 changes: 50 additions & 20 deletions .github/workflows/ci-closed-pr-caches.yml
Original file line number Diff line number Diff line change
@@ -1,46 +1,74 @@
name: Clean closed PR work
name: Clean obsolete PR work

on:
pull_request_target:
types: [closed]
types: [closed, synchronize]

permissions:
actions: write
pull-requests: read

jobs:
clean:
runs-on: ubuntu-latest
runs-on: blacksmith-2vcpu-ubuntu-2204
timeout-minutes: 5
steps:
- name: Cancel checks for an unmerged closed PR
if: github.event.pull_request.merged == false
- name: Cancel obsolete PR checks
if: github.event.action == 'synchronize' || github.event.pull_request.merged == false
uses: actions/github-script@v8
with:
script: |
const closed = context.payload.pull_request
const pr = context.payload.pull_request
const superseded = context.payload.action === 'synchronize'
const targets = [
['pr-checks', 'pr.yml'],
['node-server', 'node-server-tests.yml'],
['ssh-windows-hosts', 'ssh-windows-hosts.yml'],
['ssh-hostile-hosts', 'ssh-hostile-hosts.yml'],
['mobile', 'mobile.yml'],
['computer-e2e', 'computer-e2e.yml']
['computer-e2e', 'computer-e2e.yml'],
['wsl-orcad-e2e', 'wsl-orcad-e2e.yml'],
['performance-contracts', 'performance-contracts.yml'],
['pr-test-loc', 'pr-test-loc.yml'],
['preflight-critical-path', 'preflight-critical-path-benchmark.yml'],
['preflight-cli', 'preflight-cli-platforms.yml'],
['macos-updater', 'macos-updater-tests.yml'],
['preflight-comparison', 'preflight-benchmark.yml'],
['windows-typecheck-parity', 'windows-typecheck-parity.yml'],
['zcode-transcript-contract', 'zcode-transcript-contract.yml'],
['release-ref-validation', 'release-ref-validation.yml'],
['docs-pr', 'docs.yml'],
['cloud-verify-refs/pull', 'cloud-verify.yml', '/merge'],
['pnpm-verification-pilot', 'ci-pnpm-verification-pilot.yml'],
['win-orcad-serve-switch-e2e', 'win-orcad-serve-switch-e2e.yml'],
['pi-provider-runtime', 'pi-provider-runtime.yml'],
['coding-plan-contract', 'zcode-credential-contract.yml', '-credentials'],
['release-javascript-comparison', 'release-javascript-benchmark.yml'],
['ci-cache-warmup-platforms', 'ci-cache-warmup-platforms.yml'],
['pi-owner-runtime', 'pi-owner-runtime.yml'],
['git-command-termination', 'git-command-termination-runtime.yml'],
['skill-roundtrip-pull_request', 'skill-update-roundtrip.yml'],
['ci-cache-warmup', 'ci-cache-warmup.yml']
]
const stillClosed = async () => {
const stillCurrent = async () => {
const { data: current } = await github.rest.pulls.get({
...context.repo, pull_number: closed.number
...context.repo, pull_number: pr.number
})
if (superseded) {
return current.state === 'open' && current.head.sha === pr.head.sha
}
return current.state === 'closed' && current.merged_at === null &&
current.closed_at === closed.closed_at
current.closed_at === pr.closed_at
}
if (!Number.isSafeInteger(closed.number) || closed.number <= 0 ||
!Number.isFinite(Date.parse(closed.closed_at))) {
throw new Error('Missing closed PR identity')
if (!Number.isSafeInteger(pr.number) || pr.number <= 0 ||
(superseded ? !/^[a-f0-9]{40}$/.test(pr.head?.sha ?? '') :
!Number.isFinite(Date.parse(pr.closed_at)))) {
throw new Error('Missing PR identity')
}
if (!await stillClosed()) return
for (const [prefix, workflow] of targets) {
const group = `${prefix}-${closed.number}`
if (!await stillCurrent()) return
for (const [prefix, workflow, suffix = ''] of targets) {
const group = prefix === 'cloud-verify-refs/pull'
? `${prefix}/${pr.number}${suffix}` : `${prefix}-${pr.number}${suffix}`
let data
try {
const response = await github.request(
Expand All @@ -65,9 +93,11 @@ jobs:
})
if (run.event !== 'pull_request' || run.path !== `.github/workflows/${workflow}` ||
run.status === 'completed' ||
!Number.isFinite(Date.parse(run.created_at)) ||
Date.parse(run.created_at) > Date.parse(closed.closed_at)) continue
if (!await stillClosed()) return
(superseded ? !/^[a-f0-9]{40}$/.test(run.head_sha ?? '') ||
run.head_sha === pr.head.sha :
!Number.isFinite(Date.parse(run.created_at)) ||
Date.parse(run.created_at) > Date.parse(pr.closed_at))) continue
if (!await stillCurrent()) return
try {
await github.rest.actions.cancelWorkflowRun({
...context.repo, run_id: member.run_id
Expand All @@ -80,7 +110,7 @@ jobs:
}
# No checkout: this runs trusted default-branch code, including for fork PRs.
- uses: actions/github-script@v8
if: '!cancelled()'
if: ${{ !cancelled() && github.event.action == 'closed' }}
with:
script: |
const ref = `refs/pull/${context.payload.pull_request.number}/merge`
Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/ci-pnpm-verification-pilot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: pnpm verification cache pilot

on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review, converted_to_draft]
paths: ['.github/workflows/ci-pnpm-verification-pilot.yml']
workflow_dispatch:

Expand All @@ -17,6 +18,7 @@ env:

jobs:
seed:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
strategy:
matrix:
runner: [ubuntu-latest, ubuntu-24.04-arm]
Expand Down
23 changes: 18 additions & 5 deletions .github/workflows/cloud-monitor-relay-clock-skew.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,13 @@ jobs:
if: ${{ vars.ORCA_CLOUD_OPERATIONS_ENABLED == 'true' }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
sparse-checkout: cloud/infra/terraform/environments/production.tfvars
sparse-checkout-cone-mode: false
persist-credentials: false

- name: Measure Date-header skew for every relay cell
working-directory: .
run: |
set -u
# Date headers carry whole seconds; compare floored seconds on both
Expand All @@ -36,10 +41,18 @@ jobs:
failures=0
reachable=0
unserved=0
# Keep this upper bound at or above the highest provisioned cell in
# environments/production.tfvars; unlisted cells are silently unmonitored.
for n in $(seq 1 22); do
cell="c${n}"
# Every relay_gce_cells hostname (the block relayOpsCellsFromTerraform reads), fenced
# cells included, so a newly declared cell is probed from its first run.
cells="$(awk '
/^relay_gce_cells[ \t]*=[ \t]*\{/ { inside = 1; next }
inside && /^\}/ { exit }
inside && /^[ \t]*hostname[ \t]*=/ { split($0, quoted, "\""); print quoted[2] }
' infra/terraform/environments/production.tfvars || true)"
if [ -z "${cells}" ]; then
echo "::error::read no relay cells from production.tfvars; monitor blind"
exit 1
fi
for cell in ${cells}; do
url="https://${cell}.relay.onorca.dev/health"
# Why: *.relay.onorca.dev is a wildcard, so the load balancer answers with its own
# accurate Date for a fenced, dead, or never-provisioned cell. Timing that reads as
Expand Down
5 changes: 5 additions & 0 deletions .github/workflows/cloud-verify.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: Cloud Verify

on:
pull_request:
types: [opened, synchronize, reopened, ready_for_review, converted_to_draft]
paths:
- cloud/**
- src/packages/process-host/**
Expand Down Expand Up @@ -29,6 +30,7 @@ defaults:
jobs:
# Public-repository hosted runners preserve Blacksmith allowance for macOS.
security:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
name: Secret scan
runs-on: ubuntu-22.04
steps:
Expand Down Expand Up @@ -79,6 +81,7 @@ jobs:
# Compiles the workspace. No Postgres service: nothing here reaches a
# database, and the service container costs ~13s of startup.
build:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
Expand All @@ -99,6 +102,7 @@ jobs:
# packages it needs through pretest hooks, so it does not depend on
# `pnpm build` having run.
test:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
runs-on: ubuntu-22.04
services:
postgres:
Expand Down Expand Up @@ -135,6 +139,7 @@ jobs:
# Fork pull requests reach this job, so it never configures a backend, never plans, and never
# holds a credential. Only the relay root ships here; foundation and apps stay private.
terraform:
if: github.event_name != 'pull_request' || github.event.pull_request.draft != true
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
Expand Down
Loading
Loading