Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
552 commits
Select commit Hold shift + click to select a range
04ba0ae
refactor: colocate task page composition hooks (#33808)
nwparker Oct 26, 2026
df4d482
perf(lint): skip JS plugin rules on files that cannot match (#33813)
OrcaWin Oct 26, 2026
5fea289
fix(computer-use): send correct named keys and hotkey letters on Linu…
AlgoraAndrew Oct 26, 2026
407069b
Unify terminal starts under one host operation (#32076)
brennanb2025 Oct 26, 2026
0efc989
fix(worktrees): an unqualified id two hosts share resolves to nothing…
nwparker Oct 26, 2026
761cddf
fix(native-chat): stop retrying final startup answers (#33685)
brennanb2025 Oct 26, 2026
fcf5e7b
fix(native): pin node-pty cfset*speed with legacy baud codes for glib…
OrcaWin Oct 26, 2026
56025f2
Give native chats a fresh automatic name after /clear (#32287)
brennanb2025 Oct 26, 2026
83ca5b6
fix(agents): re-list a host's terminal agents when contact returns (#…
nwparker Oct 26, 2026
a25a5f1
perf(devex): parallel pnpm lint (169s → 50s), capped typecheck thread…
OrcaWin Oct 26, 2026
9149d77
fix(chat-rename): skip invisible legacy tab names during rename migra…
brennanb2025 Oct 26, 2026
e4b1e4d
Revert "fix(native-chat): preserve Claude approval choices across mod…
AmethystLiang Oct 26, 2026
f711205
Stop workers from taking over the Run they work for (#29008)
brennanb2025 Oct 26, 2026
25d331a
perf(mobile): a streaming reply re-renders only the rows that changed…
brennanb2025 Oct 26, 2026
b252aef
perf(build): cap Rolldown threads on large hosts; build pairing web c…
OrcaWin Oct 26, 2026
d249c21
fix(native-chat): remove misleading usage-limit Continue action (#33392)
AmethystLiang Oct 26, 2026
c0714b9
Fix Codex goal Stop and selected model settings (#33631)
brennanb2025 Oct 26, 2026
db6ab4b
test(vitest): give each run its own temp dir and remove it on exit (#…
OrcaWin Oct 26, 2026
adb1f59
fix(terminal): repaint local TUIs over the hidden-output loss banner …
nwparker Oct 26, 2026
8cdd07c
fix(daemon): give each macOS resolver health probe a unique clientId …
nwparker Oct 26, 2026
5d3ed61
perf(wsl): relay orcad sockets through bash instead of a Node bridge …
nwparker Oct 26, 2026
bf496c6
perf(orcad): retire an idle session scanner after a minute on host se…
nwparker Oct 26, 2026
7324dad
perf(dev): −1.2 GB idle RSS per pnpm dev instance (Rolldown threads +…
OrcaWin Oct 26, 2026
351705b
test(vitest): node-runtime worker exits when Vitest's IPC channel clo…
OrcaWin Oct 26, 2026
963e8cc
fix(preflight): detect Grok installed in ~/.grok/bin (#25324)
brynnclaw Oct 26, 2026
e6da9ca
fix(terminal): answer queries in output a paused paired view discards…
nwparker Oct 26, 2026
d1f04e6
fix(terminal): a pane moved to a new tab stays moved on paired server…
nwparker Oct 26, 2026
196ca64
fix(wsl-host): tie each WSL host record to its pairing key (R31) (#29…
nwparker Oct 26, 2026
7dbf397
test: remove low-value renderer suites and redundant shared test case…
OrcaWin Oct 26, 2026
1d90fd5
fix(terminal): typing held for a starting agent still arms recovery w…
nwparker Oct 26, 2026
ad73494
fix(agent-awake): warn once and back off when the sleep assertion kee…
nwparker Oct 26, 2026
c6f5419
perf(daemon): cap the terminal daemon's young generation (−51 MB idle…
OrcaWin Oct 26, 2026
10cc84f
perf(terminal): relax idle process inspection for local POSIX panes t…
OrcaWin Oct 26, 2026
4d9c32a
perf(build): keep bundled scripts one-byte in V8 to cut idle memory (…
OrcaWin Oct 26, 2026
8767456
perf(editor): stop Monaco's TS/JS worker when no TS/JS model is open …
OrcaWin Oct 26, 2026
80d1038
fix(runtime): stop a crash-zeroed server list from blocking every ser…
nwparker Oct 26, 2026
1e63a0b
fix(terminal): don't rewrite live bytes a renderer hydration seed alr…
nwparker Oct 26, 2026
23c25ab
test: remove low-value renderer helper and presentation tests (#33876)
OrcaWin Oct 26, 2026
33ddab7
feat(serve): keep macOS serve out of the Dock and opt in to the GPU o…
nwparker Oct 26, 2026
41c7167
refactor: colocate task page list presentation rules (#33830)
nwparker Oct 26, 2026
8d18f31
fix(build): pin the native SwiftPM build system for the computer-use …
eatmoreduck Oct 26, 2026
15a1ff7
fix(ssh): refuse a second Orca server from a host cloned with the sam…
nwparker Oct 26, 2026
a26006a
perf(ci): overlap preflight's serial tail; parallel ratchets; allow 2…
OrcaWin Oct 26, 2026
6ad0a42
fix(github): send issue bodies to gh over stdin instead of argv (#25215)
innocarpe Oct 26, 2026
bd3a6c8
fix(open-in): strip the AppImage runtime env from editors launched on…
SamuelAdigos Oct 26, 2026
39d4c73
fix(automations): step schedule scans by calendar day so DST changes …
ImcLiuQian Oct 26, 2026
03653ea
fix(orchestration): keep the transcript handle open when a forward pa…
kaznowski Oct 26, 2026
007dfff
fix(browser): accept an empty --value in fill and select commands (#1…
2sumtech Oct 26, 2026
faf1732
fix(telemetry): send an errno code, not the raw message, in agent_hoo…
brynnclaw Oct 26, 2026
7cd63e1
fix(notifications): use the real macOS default sound for the System n…
Ethereal49 Oct 26, 2026
7e57333
fix(shell): resolve VS Code CLI from standard app installs when `code…
bbingz Oct 26, 2026
c36378c
fix(build): keep index.js source map aligned with the bootstrap banne…
nwparker Oct 26, 2026
2c0c6ac
docs: stop promising cross-worktree split panes and Shift-Enter split…
nwparker Oct 26, 2026
dab0cd1
refactor: colocate task page PR presentation rules (#33890)
nwparker Oct 26, 2026
5ee6e42
fix(drops): keep remote drops out of git and say why drops or file op…
nwparker Oct 26, 2026
819d273
perf(lint): one ast-grep scan feeds both the lint gate and the flaky-…
OrcaWin Oct 26, 2026
ab62ae7
fix(diff): keep the collapsed section header in view (#24466)
innocarpe Oct 26, 2026
ac5c5ae
fix(process-table): pin macOS ps to en_US.UTF-8 so lstart and argv pa…
nwparker Oct 26, 2026
17621d5
fix(editor): match external file changes across Windows path spelling…
VXNCXNX Oct 26, 2026
bb51379
fix(memory): show Activity Monitor's footprint in the resource panel …
OrcaWin Oct 26, 2026
c5299b1
fix(wsl-host): keep the bridge port across app restarts so the host i…
nwparker Oct 26, 2026
5a973e2
fix(cli): show orphaned state in human-readable terminal list/show ou…
nwparker Oct 26, 2026
2fc9ad5
test(wsl): cover the bash bridge's argv, backpressure, fallbacks and …
nwparker Oct 26, 2026
67af384
fix(terminal): keep find-bar highlights when navigating with Cmd+G / …
AntonioKL Oct 26, 2026
e50fe1e
fix(ai-vault): delete a server-hosted session on the server that owns…
nwparker Oct 26, 2026
15fc7a6
docs(settings): describe the GitHub integration as the local gh CLI l…
eatmoreduck Oct 26, 2026
34f55ca
refactor(task-page): colocate cross-provider composition owners (#33913)
nwparker Oct 26, 2026
1ac1d40
fix(automations): advance schedules past a DST fall-back hour (#20179)
eatmoreduck Oct 26, 2026
5652de8
test(layout): load the runtime and RPC registry once instead of per t…
nwparker Oct 26, 2026
f5b2cc5
fix(native-chat): say why Claude refused to start a chat, including F…
nwparker Oct 26, 2026
015996d
fix(persistence): clear canonical active workspace key on worktree ow…
audichuang Oct 26, 2026
fd25eb0
fix(settings): open the deep-linked project setup, not the host's fir…
AnddyAgudelo Oct 26, 2026
f3059dd
test(layout): load the runtime graph once before the layout capabilit…
nwparker Oct 26, 2026
cd1fcc5
refactor(mobile): colocate native chat composer and drafts (#33922)
nwparker Oct 26, 2026
90493a9
perf(orcad): keep SSH hosts on the 10-minute scanner idle, give WSL h…
nwparker Oct 26, 2026
1187abd
fix(windows): mark PowerShell startup command boundaries with OSC 133…
hwantage Oct 26, 2026
1a77543
test(layout): drop the warm-up that calls a helper #33919 removed (#3…
nwparker Oct 26, 2026
4a37a6b
test(startup): transform the ready graph at collection, not inside th…
nwparker Oct 26, 2026
94f562e
fix(repos): prune each restored folder owner once its own host answer…
nwparker Oct 26, 2026
9963199
fix(ssh): move through the remote folder browser with the arrow keys …
nwparker Oct 26, 2026
ae8e3e1
fix(computer-use): send the plain chord for uppercase hotkey letters …
jespo2021 Oct 26, 2026
c9eee6b
fix(runtime-environments): every window sees a server saved from the …
nwparker Oct 26, 2026
639d529
feat(ssh): per-host Reconnect on launch toggle (#33935)
nwparker Oct 26, 2026
9f02111
fix(persistence): a paired server's workspaces keep their saved tabs …
nwparker Oct 26, 2026
0cf40b1
fix(session): show a toast when Force Reload is vetoed by a failed sh…
nwparker Oct 26, 2026
4fda57b
feat(open-in): open SSH workspaces in Cursor and Zed (#33877)
nwparker Oct 26, 2026
d290035
fix(cli): reject empty --terminal/--from handles instead of falling b…
Cunninger Oct 26, 2026
0ea1ac6
fix(terminal): release replay guards when a pane's xterm is disposed …
dansolombrino Oct 26, 2026
a93f73c
fix(terminal): skip an escape tail an abandoned hidden-output restore…
nwparker Oct 26, 2026
67e42c9
fix(terminal): return chat tab to terminal when a confirmed shell for…
zhangxaochen Oct 26, 2026
5b1e387
docs: use the full stablyai/orca/orca cask name and warn that bare or…
innocarpe Oct 26, 2026
8b1f86d
fix(windows): keep spaced batch launcher paths intact when spawning (…
thsvkd Oct 26, 2026
899d2aa
fix(ssh): say why SSH failed when Connect never reaches the host (#33…
nwparker Oct 26, 2026
8851890
fix(i18n): reject duplicate keys in localization catalogs (#33950)
nwparker Oct 26, 2026
2bcf5b2
fix(codex): skip the Codex hook under a Claude background job (#24641)
stakost Oct 26, 2026
b51d904
fix(agent-status): show Claude/Codex panes waiting on the folder-trus…
nwparker Oct 26, 2026
6c815e8
fix(runtime): recognize hand-typed native Claude at its startup dialo…
nwparker Oct 26, 2026
20f7bb6
fix(session-tabs): retire terminal rows the host closed, and offer Cl…
nwparker Oct 26, 2026
a1c6e12
Continue remote CLI conversations in Chat UI on paired servers (#33954)
nwparker Oct 26, 2026
8cfbfa5
fix(daemon): warn when terminals inherit a zero RLIMIT_RTTIME (#29762)
JacobHonore Oct 26, 2026
0a92d71
test(daemon): stop assuming POSIX endpoints and cwds (#18289)
innocarpe Oct 26, 2026
625d284
fix(terminal): send a composing cursor chord once, not twice (#17624)
ethznn Oct 26, 2026
c3bbd6f
fix(session): clear an emptied field on a runtime partition this wind…
nwparker Oct 26, 2026
c1d3031
test(e2e): wait for the catalog failure past a slow conversion (#33960)
nwparker Oct 26, 2026
dad5c7d
fix(orchestration): teach workers to acknowledge and drain mail batch…
1aifanatic Oct 26, 2026
396e3f1
fix(terminal): adopt another client's terminal under its own tab inst…
nwparker Oct 26, 2026
67cdead
fix(windows): skip watcher-process reauthorization during removal cle…
1aifanatic Oct 26, 2026
2f93f7b
fix(terminal): keep a pinned reading position anchored through scroll…
Meapri Oct 26, 2026
88fc2eb
fix(window): stop "Object has been destroyed" crash from stale render…
cis2042 Oct 26, 2026
5985bbf
fix(watcher): treat FSEvents rescan-required errors as overflow so fo…
jun-planfit Oct 26, 2026
ee325f8
fix(renderer): move side effects out of React state updaters (#33989)
nwparker Oct 26, 2026
d47ffbe
fix(ssh): say why an SSH host failed in the Add project host picker (…
nwparker Oct 26, 2026
d7cf9d2
fix(ai-vault): resume a server session whose workspace was deleted; s…
nwparker Oct 26, 2026
232ca39
fix(terminal): split link-routing dialog context out of the component…
a-rookie-of-C-language Oct 26, 2026
8a42aa8
fix(orchestration): keep a settled worker report when startup fails l…
1aifanatic Oct 26, 2026
6b83118
fix(dashboard): close the agent terminal dialog on Cmd/Ctrl+W (#19758)
tvrmsmith Oct 26, 2026
1d0d3f5
fix(ssh): expand %d, ${NAME} and other tokens in ssh -G IdentityFile …
nwparker Oct 26, 2026
7989497
fix(i18n): localize Commit & Sync, Rebase, and Create PR hints in the…
smwbev Oct 26, 2026
0afedab
fix(lifecycle): keep UI listener failures from vetoing the shutdown c…
denis-sj Oct 26, 2026
6fdffe8
docs(orca-cli): correct terminal split --direction semantics (#9038)
kaynansc Oct 26, 2026
e682ee6
fix(sidebar): stop the workspace details scroll area from clipping fi…
OriginalByteMe Oct 26, 2026
5129275
Remove obsolete reference documentation (#34008)
AmethystLiang Oct 26, 2026
a3ba93c
fix(i18n): localize PR merge/close confirmations and merge method lab…
abruption Oct 26, 2026
6877b55
fix(tab-group): resolve tab drag targets from the real cursor positio…
grboy6770 Oct 26, 2026
fd26aef
fix(terminal): treat macOS '??' tty as no terminal in spawn-file and …
aashish254 Oct 26, 2026
d4500b4
fix(pty): feed the runtime once for in-process panes behind a degrade…
Muriano Oct 26, 2026
8fbee43
fix(appearance): make match-terminal sidebar text inherit the termina…
SavenkoSy Oct 26, 2026
ce4e057
fix(shortcuts): cycle floating workspace tabs on Ctrl+Tab when the fl…
nikolas-sapa Oct 26, 2026
e3ece05
docs(cli): document terminal read --screen and realign terminal help …
webdevtodayjason Oct 26, 2026
2a15a50
fix(relay): retire a pooled Postgres connection that turned slow or l…
Jinwoo-H Oct 26, 2026
dff068f
Show chat-only workspaces as active before the first message (#33815)
brennanb2025 Oct 26, 2026
c20971d
fix(native-chat): send launch prompts and worker tasks through the re…
brennanb2025 Oct 26, 2026
bde231b
feat(connector): Slack edge: signed ingress, owner-only routing, thre…
Jinwoo-H Oct 26, 2026
532f6a0
Ask before Codex workspace edits and apply permissions to fresh turns…
brennanb2025 Oct 26, 2026
9aec987
feat(connector): cloud-assigned hello revisions; stale requests refus…
Jinwoo-H Oct 26, 2026
dc2f6fb
fix(session-history): list a chat once under its writer when pi and o…
AmoabaKelvin Oct 26, 2026
66fbd81
feat(relay): log the director instance's TCP counters on each runtime…
Jinwoo-H Oct 26, 2026
cb6aa82
fix(usage): write usage cache snapshots and sidecars owner-only (0600…
ka2umaz Oct 26, 2026
8f754d4
fix(mobile): an unreachable host shows why instead of an endless spin…
AmoabaKelvin Oct 26, 2026
1308661
fix(github-project): order number-field groups by numeric value, not …
pucedoteth Oct 26, 2026
ef23c46
fix(terminal): let focus-follows-mouse move focus between the floatin…
oha-4 Oct 26, 2026
bc48268
fix(pi): keep the chat open when pi sends an event over 8 MiB (#33651)
AmoabaKelvin Oct 26, 2026
916c6a0
fix(claude-accounts): restart System default sessions on the outgoing…
Jinwoo-H Oct 26, 2026
f05da69
fix(terminal): strip inherited CLAUDECODE, EXECPATH, and ENTRYPOINT m…
Baek-Seunghyun Oct 26, 2026
8a12139
fix(terminal): answer terminal queries while a phone watches at deskt…
AmoabaKelvin Oct 26, 2026
bc4e66c
fix(workspace): keep the active workspace key in sync with the active…
PannenetsF Oct 26, 2026
f195099
fix(mobile): unmount history rows once the web chat returns to its li…
AmoabaKelvin Oct 26, 2026
e334008
feat(connector): Slack answer buttons: the owner answers the agent's …
Jinwoo-H Oct 26, 2026
5ad7df4
fix(project): name the folder's project id when setup-existing-folder…
shahidbeig-a11y Oct 26, 2026
c979079
fix(linux): declare ALSA and GBM runtime dependencies in deb/rpm pack…
nwparker Oct 26, 2026
caa49c8
fix(agent-dashboard): keep the drawer's dismissal Escape out of the f…
nwparker Oct 26, 2026
7b1bb97
fix(board): truncate workspace status labels without splitting emoji …
nwparker Oct 26, 2026
22fd6f5
feat(connector-contract): conversations from Slack, Discord or Linear…
Jinwoo-H Oct 26, 2026
ae55694
fix(ssh): show Move anyway on a host card whose move saved state refu…
nwparker Oct 26, 2026
98690db
feat(connector): the desktop holds the Orca Cloud connector poll (#33…
Jinwoo-H Oct 26, 2026
b67429c
fix(ssh): lead an SSH connect failure with what to do about it (#33990)
nwparker Oct 26, 2026
8f4b64c
fix(i18n): correct native-chat subagent and tool-run summary strings …
beduldul Oct 26, 2026
5e90778
fix(linear): make new-project dialog popovers wheel-scrollable (#16413)
GagaKor Oct 26, 2026
fa3bd28
Let Resource Manager End stop orphaned terminals that main is attache…
Jinwoo-H Oct 26, 2026
2451037
fix(mobile): send terminal controls in key order with live typing (#3…
AmoabaKelvin Oct 26, 2026
f34c13c
test: remove low-value main-process suites and browser probes (#33889)
OrcaWin Oct 26, 2026
f551e0a
fix(forge): skip PR refreshes for a WSL host that is off, and say so …
nwparker Oct 26, 2026
0283880
fix(native-chat): pass session-reported slash commands through to the…
nwparker Oct 26, 2026
2dd8207
fix(wsl-host): boot only the focused WSL host, and keep a stopped one…
nwparker Oct 26, 2026
c4f8fe5
feat(mobile): copy button on each code block in chat (#34039)
AmoabaKelvin Oct 26, 2026
faaa590
fix(perf): preserve TS worker idle deadlines and boot guard diagnosti…
OrcaWin Oct 26, 2026
ec42b43
fix(ssh): make Move anyway the next step when saved items refuse a ho…
nwparker Oct 26, 2026
4509092
fix(packaging): ship agent-browser skill catalog with desktop builds …
zerone0x Oct 26, 2026
44d2fcb
fix(i18n): correct wrong-sense Simplified Chinese UI strings (#29321)
shichen35 Oct 26, 2026
33a86f3
fix(mobile): open page sheets above an already-open keyboard (#33760)
AmoabaKelvin Oct 26, 2026
5381113
fix(native-chat): render math and center standalone equations (#31546)
xinzhoulvxinda Oct 26, 2026
67851c0
fix(cli): resolve folder workspace terminals to their own workspace (…
AmoabaKelvin Oct 26, 2026
0266b5f
fix(opencode): allow model picks when discovery is unavailable (#31985)
brennanb2025 Oct 26, 2026
9665316
Prevent macOS port scans from accumulating stuck processes (#32045)
brennanb2025 Oct 26, 2026
161927f
fix(native-chat): make the Chat UI ⇄ terminal shortcut a remappable k…
SamuelAdigos Oct 26, 2026
fdcf193
fix(worktree): track explicit remote-only branch (#31645)
Pr1p Oct 26, 2026
9608420
Keep workspace labels independent of automatic branch names (#32919)
brennanb2025 Oct 26, 2026
d656786
fix(mobile): ask before closing other tabs, sharing desktop's confirm…
AmoabaKelvin Oct 26, 2026
9ae33a9
fix(native-chat): keep damaged chats readable without granting agent …
brennanb2025 Oct 26, 2026
b7ad8be
refactor(agent-hooks): launch the WSL hook relay through the process …
nwparker Oct 26, 2026
f0cc235
fix(orchestration): let a sleeping chat's background commands send as…
Jinwoo-H Oct 26, 2026
9185d10
fix(runtime): share one lazy load of the session-tabs apply modules a…
nwparker Oct 26, 2026
f8a0b0f
refactor(store): colocate agent-status action composition (#34045)
nwparker Oct 26, 2026
b590977
fix(notifications): workspace mark as read clears the chat alert on t…
AmoabaKelvin Oct 26, 2026
cf6c70b
fix(mobile): keep chat-agent create when the capability check spans a…
AmoabaKelvin Oct 26, 2026
e63b8f4
fix(wsl-host): a runtime-call reconnect never boots a distro that sto…
nwparker Oct 26, 2026
5681310
fix(i18n): translate crash report, notification settings and tour cop…
nwparker Oct 26, 2026
d58ab97
perf(memory): read macOS footprints with a bundled proc_pid_rusage he…
OrcaWin Oct 26, 2026
1df8501
fix(claude): keep a user-set async flag on Orca-managed hooks (#26736)
1aifanatic Oct 26, 2026
5709037
Continue a chat after the terminal agent exits (#33759)
brennanb2025 Oct 26, 2026
c2ceb52
fix(windows): stop recursive deletes from retry-storming when a file …
OrcaWin Oct 26, 2026
ffc2b3f
fix(orchestration): preserve task reset lineage per Run (#28823)
brennanb2025 Oct 26, 2026
82ab53b
fix(updater): pin stable fallback before downloading (#34076)
OrcaWin Oct 26, 2026
b7fb07c
fix(ci): unblock main: split over-long files and pin scanner test fil…
Jinwoo-H Oct 26, 2026
2e67ba5
perf(wsl-host): start booting only the focused WSL host early at laun…
nwparker Oct 26, 2026
a93e31a
perf(renderer): keep modal blur with independent source regions (#33799)
OrcaWin Oct 26, 2026
6423536
test(daemon): import the fresh daemon-init modules one at a time (#34…
nwparker Oct 26, 2026
aeb73cd
fix(skills): classify cloud request failures as transport, not filesy…
L4XB Oct 26, 2026
a96171d
fix(sidebar): let repository labels use available sidebar width (#28342)
aran159 Oct 26, 2026
b2270cd
fix(usage): include GPT-6.1 Sol in Codex cost estimates (#29707)
tianlrz Oct 26, 2026
7a5df40
perf(wsl-host): focus connects without first probing WSL when no brid…
nwparker Oct 26, 2026
9bfabff
fix(runtime-environments): drop a recipe VM's rows and session partit…
nwparker Oct 26, 2026
7423c8c
fix(automations): settle a run on the agent's own done when its scree…
nwparker Oct 26, 2026
ad2156c
test: remove 140 low-value cases and 49 suites (#34062)
OrcaWin Oct 26, 2026
d2f9617
fix(omp): stop finished subagents holding the pane on working and nam…
kiendle Oct 26, 2026
39b3905
fix(terminal): save a woken terminal's first history as a full snapsh…
nwparker Oct 26, 2026
ba85f1a
fix(main): share one window listener across overlapping requests to s…
nwparker Oct 26, 2026
26b158d
fix(browser): delete a removed server's browser folder on the next st…
nwparker Oct 26, 2026
ad5f787
chore(process-host): drop the WSL hook relay launcher from the direct…
nwparker Oct 26, 2026
268f3d3
fix(wsl-host): a clean watch or holder exit is settled like a failed …
nwparker Oct 26, 2026
c2c545f
fix(wsl-host): no-boot connects stay quiet, and liveness recovery nev…
nwparker Oct 26, 2026
b58513a
test: import mocked-module graphs one at a time after vi.mock (#34103)
nwparker Oct 26, 2026
86f2f24
feat(mobile): open PDFs from the file browser in Quick Look or the sy…
AmoabaKelvin Oct 26, 2026
1a72319
chore(native-chat): delete the orphaned duplicate structured chat pan…
Jinwoo-H Oct 26, 2026
4a8cb6f
fix(terminal): keep legacy bash prompt dispatch out of OSC 133 comman…
mkjung Oct 26, 2026
86a75e9
perf(bench): measure startup memory and cold SSH latency (#33912)
OrcaWin Oct 26, 2026
8a001a9
fix(runtime): a restored host pane resumes its agent from the hook st…
nwparker Oct 26, 2026
8291297
fix(mobile): recover terminal input lease on attach and preserve pick…
zhangxaochen Oct 26, 2026
037cf27
fix(codex): show live usage on the active account row, including Syst…
moonrailgun Oct 26, 2026
d4a5609
refactor(connector): provider-neutral connector core with Slack as it…
Jinwoo-H Oct 26, 2026
ffb7561
Stop hidden chats re-rendering on every tab change (#34020)
brennanb2025 Oct 26, 2026
d7a8bb9
fix(mobile): show the diff when tapping a changed file from a session…
AmoabaKelvin Oct 26, 2026
b8c596e
test: remove 68 low-value cases and 18 suites (#34112)
OrcaWin Oct 26, 2026
a97c7ab
fix(terminal): a WSL bridge pane whose distro went away keeps its tab…
nwparker Oct 26, 2026
3f256ad
fix(browser): keep annotate session alive across iframe loads (#24032)
Brant-lzh Oct 26, 2026
73ede0f
fix(terminal): keep a brand-new remote pane's typing for the terminal…
nwparker Oct 26, 2026
d4544c8
test(relay): wait for the relay's own close before confirming a resum…
Jinwoo-H Oct 26, 2026
067c614
fix(orcad): use the app's bundled agent-browser driver for orca serve…
nwparker Oct 26, 2026
01fea97
refactor(mobile): group native chat options and queued editing (#34074)
nwparker Oct 26, 2026
ccfe30a
feat(connector): Slack-started agents can reply in their thread (orca…
Jinwoo-H Oct 26, 2026
1d1c6da
fix(terminal): a parked local tab whose process exits closes as a pty…
nwparker Oct 26, 2026
aec426c
feat(connector): Discord adapter on the shared connector core (#34100)
Jinwoo-H Oct 26, 2026
f06f737
Unify Source Control action permissions and card layout (#30449)
brennanb2025 Oct 26, 2026
0fef4a8
feat(wsl-host): start a WSL host's distro when one of its automations…
nwparker Oct 26, 2026
2218581
test(connector): freeze the shipped connector schema behind an upgrad…
Jinwoo-H Oct 26, 2026
ebeb677
test: remove 30 low-value cases and seven suites (#34120)
OrcaWin Oct 26, 2026
e630f27
test(terminal): a pinned parked tab's process exit asks first, then c…
nwparker Oct 26, 2026
ccedfe3
fix(ssh): move enabled SSH automations to the host's Orca server (#34…
nwparker Oct 26, 2026
d5ac6eb
fix(connector): one turn id from the host's stamp everywhere (#33909)
Jinwoo-H Oct 26, 2026
ca8eb29
feat(orchestration): add a Settings switch to turn worker heartbeats …
brennanb2025 Oct 26, 2026
95ffa4f
fix(wsl-host): a cold wake that loses orcad recovers by itself instea…
nwparker Oct 26, 2026
923bea9
fix(files): open host files outside workspaces for any client with te…
nwparker Oct 26, 2026
d1f6f6a
fix(mobile): resume history sessions with desktop's resume and host r…
AmoabaKelvin Oct 26, 2026
0b30b28
fix(terminal): keep ConPTY's viewport top through a width change (#34…
nwparker Oct 26, 2026
c1198d2
refactor(connector): the desktop takes Discord and Linear conversatio…
Jinwoo-H Oct 26, 2026
823ca68
fix(settings): show cookie import as available before skill setup (#3…
brennanb2025 Oct 26, 2026
1b64adb
Linux cookie import says when secret-tool is missing instead of blami…
brennanb2025 Oct 26, 2026
7782fd5
test: extract WSL host connector fixture to restore lint (#34132)
OrcaWin Oct 26, 2026
316b188
Size tabs to titles and preserve floating panel drag space (#34025)
AmethystLiang Oct 26, 2026
12aa1ca
Merge upstream/main (316b1887fd) into main
HyperBlaze456 Oct 27, 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.
11 changes: 11 additions & 0 deletions .claude/settings.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extraKnownMarketplaces": {
"orca-agent-plugins": {
"source": { "source": "directory", "path": "./config/agent-plugins" }
}
},
"enabledPlugins": {
"orca-typescript@orca-agent-plugins": true,
"typescript-lsp@claude-plugins-official": false
}
}
48 changes: 12 additions & 36 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
# A shebang plus CRLF makes vite's SSR transform emit a literal `#!` mid-module,
# so any suite importing the script dies at load with a SyntaxError. Pin the whole
# directory rather than the scripts that happen to have a test today.
# CRLF shebangs break Vite's SSR transform.
/config/scripts/**/*.mjs text eol=lf
/skill-guides/*.md text eol=lf
/skill-stubs/*.md text eol=lf
Expand All @@ -15,55 +13,33 @@
*.html text eol=lf
# Bundled plugin trees are byte-hashed; CRLF checkout would break the pinned hash.
/resources/plugins/** text eol=lf
# Relay assets are copied verbatim into the bundle and hashed byte-for-byte into
# .version, which names the immutable remote install dir. A CRLF checkout makes a
# Windows-built client disagree with a mac/Linux-built one on the same release,
# so one host ends up with two relay trees (#17886 review).
# Pin the bytes so a patch reads and diffs identically on every host. It is NOT
# what makes the hash right: pnpm hashes a patch LF-normalized, so a CRLF checkout
# cannot change it. Believing otherwise put a hand-computed raw digest in the
# lockfile twice and broke every install (#17886).
# These files are stored LF, which is not always the encoding they were written
# against -- @vscode/windows-process-tree ships CRLF sources -- so any code that
# runs `git apply` on one must force `-c core.autocrlf=input` rather than trust
# the host's setting. See config/scripts/windows-process-tree-gyp-rebuild.mjs.
# Keep patch diffs stable; pnpm hashes them with LF normalization.
# CRLF upstream sources still need git -c core.autocrlf=input apply (windows-process-tree-gyp-rebuild.mjs).
/config/patches/*.patch -text
# Same reason, and pnpm parses these too: a CRLF checkout makes the mobile
# patches unparseable, so Windows packaging dies on ERR_PNPM_INVALID_PATCH.
# CRLF patches fail pnpm parsing on Windows.
/mobile/patches/*.patch -text
# The xterm bundle hunks also make a diff nobody can read; review the hand-written
# source patch under xterm-src/ instead. The sibling patches stay diffable.
# Review xterm-src/ instead of generated bundle hunks.
/config/patches/@xterm__xterm@*.patch -diff
/config/patches/xterm-src/*.patch text eol=lf
# pnpm parses these unified diffs during Windows installs; keep checkout bytes stable.
/mobile/patches/*.patch -text
# Generated wrapper fixtures: collapse them in the PR diff so they stop drowning
# the reviewable change, and pin LF because they are compared byte-for-byte.
# Not -diff: the shell diff is the review surface when a wrapper does change.
# Collapse generated wrappers but keep diffs available; tests compare LF bytes.
/src/main/__fixtures__/shell-wrapper-snapshots/*.txt linguist-generated=true text eol=lf
# Captured agent PTY transcripts. -text, not `text eol=lf` like the wrapper snapshots above:
# these carry real CR and CRLF bytes as the terminal emitted them, and line-ending
# normalisation on a Windows checkout would rewrite the evidence the fixture exists to be.
# PTY transcripts must retain captured CR and CRLF bytes.
/src/main/runtime/__fixtures__/*.txt -text
/src/main/daemon/__fixtures__/pty-transcripts/*.txt -text
/src/renderer/src/components/terminal-pane/terminal-link-transcripts/*.txt -text whitespace=cr-at-eol
# Generated runtime English subset: compared byte-for-byte by
# verify:localization-runtime-catalog, so a CRLF checkout would fail the gate.
# verify:localization-runtime-catalog compares LF bytes.
/src/renderer/src/i18n/en-runtime-required.json linguist-generated=true text eol=lf
# Generated method->params catalog: compared byte-for-byte by
# verify:rpc-params-catalog, so a CRLF checkout would fail the gate.
# verify:rpc-params-catalog compares LF bytes.
/src/shared/rpc-contract/rpc-params-catalog.generated.ts linguist-generated=true text eol=lf
# Mobile RPC recording goldens: replay requires the file text to equal what rpc:record writes
# (LF), so a CRLF checkout would fail every golden.
# RPC recording goldens must match rpc:record's LF output.
/mobile/rpc-foundation/goldens/*.json text eol=lf
# Mobile web page source. Every text byte here is hashed into an asset digest and from
# there into buildId, so a CRLF Windows checkout would ship a different bundle id for
# identical source (91af2897 vs 9d78435e, measured on the bundle this replaced).
# Mobile build IDs hash source bytes; checkout line endings must match across hosts.
/mobile/src/** text eol=lf
/mobile/app/** text eol=lf
/mobile/web-entry/** text eol=lf
# The blanket pin above would mark a future binary as text; exempt the asset types an
# RN page actually carries.
# Preserve binary assets under the text-pinned mobile directories.
/mobile/src/**/*.png -text
/mobile/src/**/*.jpg -text
/mobile/src/**/*.jpeg -text
Expand Down
2 changes: 0 additions & 2 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -1,10 +1,8 @@
# Product source remains owned by its normal reviewers; localization inputs need focused review.
/src/renderer/src/i18n/locales/ @brennanb2025
/config/scripts/*localization*.mjs @brennanb2025
/config/scripts/*locale*.mjs @brennanb2025
/config/i18next.config.ts @brennanb2025

# The relay's deploy and operate surface: workspace, workflows, and the rollout lease action.
/cloud/ @Jinwoo-H
/.github/workflows/cloud-*.yml @Jinwoo-H
/.github/actions/cloud-sql-rollout-lease/ @Jinwoo-H
86 changes: 86 additions & 0 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,87 @@ pnpm install
pnpm dev
```

### Dev Profiles and Parallel Instances

`pnpm dev` in a linked Git worktree uses its own userData profile, renderer port, and remote
debugging (CDP) port, so dev instances in different worktrees run side by side. The main checkout
keeps the shared `orca-dev` profile. Ports are derived from the worktree path and move to the next
free port when taken: renderer ports start at 15200 and CDP ports at 9333.

On startup the runner prints one stdout line and writes the same JSON to `out/dev-instance.json`:

```text
ORCA_DEV_INSTANCE {"userData":".../orca-dev-wt/1d3830d4d3","profile":"worktree","rendererPort":15339,"rendererUrl":"http://localhost:15339","cdpPort":9513,"cdpUrl":"http://127.0.0.1:9513","repoRoot":"...","runnerPid":4242}
```

| Option | Effect |
| ----------------------------------------------------------------------- | ---------------------------------------------------------- |
| `pnpm dev --shared-profile` or `ORCA_DEV_PROFILE=shared` | Use the shared `orca-dev` profile |
| `pnpm dev --worktree-profile` or `ORCA_DEV_PROFILE=worktree` | Use a per-worktree profile, including in the main checkout |
| `ORCA_DEV_USER_DATA_PATH=<dir>` | Use an explicit profile directory |
| `REMOTE_DEBUGGING_PORT=<port>`, `ORCA_DEV_RENDERER_PORT=<port>` | Pin a port |
| `pnpm dev --seed-profile[=<dir>]` or `ORCA_DEV_SEED_PROFILE=<dir or 1>` | Seed an empty profile on first launch |

Per-worktree profiles live in `orca-dev-wt/<hash>` next to `orca-dev` (`~/Library/Application
Support` on macOS, `%APPDATA%` on Windows, `$XDG_CONFIG_HOME` or `~/.config` on Linux). The
automatic storage cleanup removes them once their worktree is gone and nothing still runs from
them. `config/scripts/orca-dev.mjs` and the `orca-dev` terminal wrapper target the profile this
checkout's `pnpm dev` used.

Seeding copies a slim set of state from another profile: projects, workspaces, settings, SSH
targets, and the Orca account session. Terminal sessions, PTY leases, automations, caches, logs,
and lock files are not copied, and the source profile is only read. The default source is
`orca-dev`, or the installed app's profile when `orca-dev` is empty. Seed from `orca-dev` when you
need the signed-in account session: dev builds cannot decrypt secrets the installed app encrypted.

```bash
pnpm dev:seed-profile [--from=<profile dir>] [--to=<profile dir>] [--reset]
pnpm dev:fresh [--keep] [--seed-from[=<profile dir>]] # temporary profile, removed on exit
```

### Targeting Local Tests

Use a test file or directory when you know the relevant suites. For dependency-based
feedback, Vitest can select tests affected by your edits:

```bash
pnpm test:changed src/main/runtime --maxWorkers=2
pnpm test --changed=origin/main --maxWorkers=2
pnpm test src/shared/app-version.test.ts --maxWorkers=2
```

`test:changed` considers staged, unstaged, and untracked files. `--changed=origin/main`
also includes committed changes since the branch's merge base. Update that ref when
you need a newer baseline. Both accept the same path filters and options as `pnpm test`.
When Git reports no changed files at all, the launcher exits before starting Vitest.

Local runs enable Vitest's [dependency recording](https://vitest.dev/config/experimental#experimental-recorddependencies).
Ordinary test runs populate the cache; later changed-file runs read it instead of
transforming every test's import graph. Records are separate for the Bun and Node
projects and live in each checkout's `node_modules/.vite`. A test without a record
runs when at most 100 such tests are in scope, which records them. Beyond that, as in
a new worktree, unrecorded tests are selected with Vitest's static import graph
instead of running all of them. Keep Vite's local test cache between runs. Use
`--experimental.recordDependencies=false` to use the static import graph for every test.

This is local feedback, not a complete regression check. Vitest records loaded
imports, including executed dynamic imports, but cannot infer arbitrary filesystem
reads, subprocess inputs, or externalized module dependencies. Explicitly run tests
for changed fixtures, generated files, CLI entry points, and other indirect inputs.
After changing imports, run the affected suites before committing those changes so
later edits use current records. Configuration, lockfile, patch, and workspace-package
changes rerun every test within the requested scope. CI does not enable recording;
the existing CI selection policy is unchanged. The static graph has the same blind spots
and also misses dynamic imports with computed specifiers, so the first changed-file run
in a new worktree is a little less complete than later ones.

`pnpm build:packages` (which `pnpm test` runs first) skips compiling workspace packages
when their sources, build script, and compiler are unchanged and `dist` is intact.

Vitest also supports [`related --run <source-files>`](https://vitest.dev/guide/cli#vitest-related)
and dependency-aware watch mode. `pnpm test --changed` uses Git to provide the source
inputs automatically and exits after one run.

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:

Expand All @@ -37,6 +118,11 @@ 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.

`pnpm dev` serves the renderer with Vite's bundled dev mode: a few bundled chunks instead of
thousands of module requests, so the first render and full reloads are faster. While a rebuild is
pending, a newly opened pop-out, space, or web window may briefly get placeholder HTML. If the
renderer misbehaves, set `ORCA_DEV_BUNDLED=0` (PowerShell: `$env:ORCA_DEV_BUNDLED='0'`) and report it.

Local installs use pnpm's global virtual store: each package version is one slot
under `~/pnpm/store` that every worktree links to, instead of a full `node_modules` per worktree.
An existing worktree converts on its next `pnpm install`, and an older branch without the setting
Expand Down
13 changes: 1 addition & 12 deletions .github/actions/cloud-sql-rollout-lease/gcloud-access-token.mjs
Original file line number Diff line number Diff line change
@@ -1,17 +1,6 @@
import { execFileSync } from 'node:child_process'

// DESIGN CHOICE: shell out to `gcloud auth print-access-token` instead of exchanging the
// external_account credentials file that google-github-actions/auth writes.
//
// Every workflow on the Cloud SQL rollout lease already runs google-github-actions/setup-gcloud
// right after auth (verified across all 11 mutating members), so gcloud is on PATH and already
// bound to the federated identity. Doing the exchange ourselves would mean reimplementing the STS
// token swap plus the service-account impersonation leg, in an action that must stay
// zero-dependency and is duplicated by hand into a second repo. gcloud already handles every ADC
// flavour and refreshes on its own. The metadata server is not an option: it does not exist on
// GitHub or Blacksmith runners.
//
// Consequence, documented in the README: the lease step MUST come after setup-gcloud.
// Use gcloud after setup-gcloud: it handles federated STS/impersonation and ADC refresh without dependencies or repo-local code in this duplicated action. Actions/Blacksmith runners have no metadata server.

const TOKEN_REUSE_MS = 40 * 60 * 1_000 // GCP access tokens live ~60 min; re-mint well before that.

Expand Down
3 changes: 1 addition & 2 deletions .github/actions/cloud-sql-rollout-lease/holder-identity.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
// Who we claim to be on the lease object. Shared by main and the detached renewer so both agree
// on the holder key without re-deriving it from a different set of environment variables.
// Main and detached renewer must derive the same holder key from one environment contract.

export function holderIdentity(explicitHolderKey) {
const repository = process.env.GITHUB_REPOSITORY ?? 'unknown'
Expand Down
3 changes: 1 addition & 2 deletions .github/actions/cloud-sql-rollout-lease/renew.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,7 @@ import { createAccessTokenSource } from './gcloud-access-token.mjs'
import { renewerLogPath } from './runner-state.mjs'
import { CloudSqlRolloutLease, RENEW_INTERVAL_MS } from './storage-lease.mjs'

// Detached renewer. `main` spawns it, `post` kills it. It rewrites expires_at on the same
// generation-matched path as acquisition, and stops the moment the object stops being ours.
// Detached renewer shares acquisition’s generation-matched writes; stop when ownership changes. Main starts it and post kills it.

const MAX_LIFETIME_MS = 6 * 60 * 60 * 1_000 // Backstop if post never runs (runner killed).

Expand Down
3 changes: 1 addition & 2 deletions .github/actions/cloud-sql-rollout-lease/runner-state.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import { appendFileSync } from 'node:fs'

// Action-state and output plumbing via the runner's file protocol, so the action needs no
// @actions/core dependency. Values are single-line by construction; anything else is rejected.
// Use runner files without @actions/core; reject multiline values rather than corrupting their protocol.

/** The detached renewer's stdio is ignored, so it appends here instead and `post` echoes it. */
export function renewerLogPath() {
Expand Down
8 changes: 1 addition & 7 deletions .github/actions/cloud-sql-rollout-lease/storage-lease.mjs
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
// Compare-and-swap lease over a single Cloud Storage object.
//
// Ported from apps/relay-fence-broker/src/mutation-lease.ts rather than imported: this action is
// duplicated verbatim into stablyai/orca, so it must carry no repo-local imports. Only the
// algorithm is shared (read metadata -> write with ifGenerationMatch -> 412 is a conflict ->
// generation-matched delete -> an expired record is free). The broker's token path is NOT shared;
// it reads the GCE metadata server, which does not exist on Actions runners.
// Ported CAS algorithm from relay-fence-broker/mutation-lease.ts: keep repo-local imports out of this duplicated action. Broker metadata-server tokens cannot work on Actions runners; use generation-matched writes/deletes, 412 conflicts and expiry.

export const LEASE_TTL_MS = 35 * 60 * 1_000
export const RENEW_INTERVAL_MS = 5 * 60 * 1_000
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,7 @@ const BUCKET = 'onorca-cloud-terraform-state'
const OBJECT = 'terraform/state/cloud-sql-rollout/production.lock'
const NOW = 1_756_000_000_000

/**
* Enough of the Cloud Storage JSON API to exercise real compare-and-swap semantics: generations
* increment, ifGenerationMatch is enforced, and a mismatch is a 412. `faults` injects failures.
*/
/** Model real GCS generation increments, ifGenerationMatch and 412 conflicts; faults inject failures. */
function fakeStorage({ object = null, faults = [] } = {}) {
const state = { object, requests: [] }
const fetcher = async (rawUrl, init = {}) => {
Expand Down
7 changes: 1 addition & 6 deletions .github/actions/install-mobile-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,7 @@ description: Frozen pnpm install for the mobile/ project, whose node_modules the
runs:
using: composite
steps:
# Why a separate install: mobile is its own pnpm project, so the root install leaves
# mobile/node_modules empty and every mobile import resolves to nothing.
# Why no --ignore-scripts, unlike the root install: mobile's postinstall generates the
# gitignored terminal/mermaid webview engine modules that tracked source imports.
# The drift guard mirrors the root install so a stale mobile lockfile fails by name --
# mobile's lockfile carries patchedDependencies that a silent rewrite would drop.
# Install the separate mobile project: root install leaves its imports unresolved. Keep lifecycle scripts for generated terminal/mermaid engines; reject lockfile drift that could drop patchedDependencies.
- name: Install mobile dependencies
shell: bash
working-directory: mobile
Expand Down
5 changes: 1 addition & 4 deletions .github/actions/install-node-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,7 @@ runs:
rm -rf node_modules
fi

# Why --frozen-lockfile: re-resolving pulls ~62 MB of registry packuments per job
# (measured) to recompute what the lockfile already pins, and the `git diff` guard
# below fails the run whenever that recomputation would have changed anything. The
# guard stays so a stale lockfile still fails by name rather than by resolver error.
# Frozen install avoids ~62MB/job of redundant resolution; retain diff guard to name stale lockfiles explicitly.
- name: Install dependencies
shell: bash
run: |
Expand Down
Loading