Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1712 commits
Select commit Hold shift + click to select a range
d170b5a
fix(opencode): accept OpenCode release ranges for launch-time model s…
nwparker Oct 24, 2026
c580d7f
fix(terminal): stop "104;255" leaking onto agent prompts after a tab …
ivermin1123 Oct 24, 2026
759e536
Preserve concurrent edits during remote Hermes reinstall (#20631)
Shy7777 Oct 25, 2026
ba43f85
fix(runtime): a cold-restored terminal keeps its agent session withou…
nwparker Oct 25, 2026
44f97fa
fix(agent-status): keep a running Codex turn on paired and mobile vie…
nwparker Oct 25, 2026
ca3b0fd
test: remove redundant cases and strengthen state-transition assertio…
OrcaWin Oct 25, 2026
5a60ac7
fix(hermes): attribute shared-gateway events to each session's own pa…
nwparker Oct 25, 2026
c4c41ac
fix(pi): paint the rest title at session_start so branded Pi forks re…
thefrikidude Oct 25, 2026
c75c059
fix(runtime): keep a fresh agent's chat identity under an older shell…
nwparker Oct 25, 2026
a8d0bd0
fix(codex): ask before running MCP tools that require approval (#33310)
nwparker Oct 25, 2026
95ec9e1
fix(agent-status): mark a Pi answer unread before the compaction afte…
mmarabel Oct 25, 2026
4995568
fix(runtime): a workspace sleep no longer fails when another workspac…
nwparker Oct 25, 2026
bdae681
fix: deliver follow-ups to running Codex goals on the choices the goa…
nwparker Oct 25, 2026
9c5d789
refactor: group cookie import orchestration and cleanup (#33314)
nwparker Oct 25, 2026
aadd6fb
perf(test): cache local Vitest dependencies and add changed targeting…
nwparker Oct 25, 2026
584f271
fix(terminal): keep Mac trackpad flicks continuous in fullscreen TUIs…
nwparker Oct 25, 2026
7ffcb7c
fix(relay): re-place hosts off a roll-isolated cell while its replace…
Jinwoo-H Oct 25, 2026
e8a18a0
test: remove redundant cases and strengthen persistence, terminal and…
OrcaWin Oct 25, 2026
6017bc9
fix(rate-limits): cool down usage reads that open agy's browser sign-…
nwparker Oct 25, 2026
b5f9e06
fix(editor): highlight Zig source and diffs (#32705)
nwparker Oct 25, 2026
fafb056
test(agent-hooks): warm the encoded PowerShell launcher before timing…
nwparker Oct 25, 2026
537f561
Revert "fix(terminal): a file link opens in the workspace it was clic…
nwparker Oct 25, 2026
870038c
Test title-only fallback for unavailable AI Vault search (#33234)
AmethystLiang Oct 25, 2026
874a251
test(e2e): click a terminal link only after the terminal refits to it…
nwparker Oct 25, 2026
8eea0c0
test: remove redundant cases and repair audit assertions (#33334)
OrcaWin Oct 25, 2026
82e1e4e
test(runtime): a deadline-free PTY read stops at its cap while newer …
nwparker Oct 25, 2026
10ef68f
fix(terminal): keep keys typed before a pane's terminal exists (#33281)
nwparker Oct 25, 2026
e199f9d
fix(native-chat): commit Claude AskUserQuestion preview answers with …
nwparker Oct 25, 2026
414bf02
test(file-watch): wait for the coalesced refresh instead of a 250ms c…
nwparker Oct 25, 2026
475362c
test: run every suite that opens profile-state SQLite under Node (#33…
nwparker Oct 25, 2026
4b752de
test: delete the PTY pane-copy census (#33338)
nwparker Oct 25, 2026
db8fc6d
refactor: group agent-session conversation and message identity (#33324)
nwparker Oct 25, 2026
471b13a
test(terminal): load the alt-screen chain's host graph at collection …
nwparker Oct 25, 2026
c415f0c
fix(native-chat): fold Claude thinking-only transcript records into r…
nwparker Oct 25, 2026
f92d828
fix(native-chat): drop an ANTHROPIC_API_KEY the user rejected in Clau…
nwparker Oct 25, 2026
ec559c2
fix(pi): close each finished text/thinking block so long replies stay…
nwparker Oct 25, 2026
a289c98
fix(terminal): preserve OpenCode Ctrl+Enter on Windows (#33149)
Pr1p Oct 25, 2026
dbde821
test(browser): route input into the baseline sandboxed frame before c…
nwparker Oct 25, 2026
456c7bf
fix(runtime): deliver Devin launch prompts via argv instead of stdin-…
nwparker Oct 25, 2026
3c80fb1
fix(claude): keep an idle chat idle on background progress ticks (#22…
innocarpe Oct 25, 2026
672ee2c
fix(wsl): forward scrub-safe pane identity into WSL (#31205)
Oct 25, 2026
886ac45
test: remove duplicate checks and repair weak fixtures (#33353)
OrcaWin Oct 25, 2026
d58849a
test(mobile-web): click the drawer chip once it is actionable, and ho…
nwparker Oct 25, 2026
07026d5
fix(keybindings): zoom in with the + key on layouts where it needs no…
AmoabaKelvin Oct 25, 2026
219ad61
fix(terminal): keep keys typed into a starting agent pane as an unsub…
nwparker Oct 25, 2026
fdcf887
chore(lint): fix suppressed lint violations instead of ignoring them …
OrcaWin Oct 25, 2026
695fc00
feat(browser): bigger new tab tiles and roomier workspace card (#33178)
AmoabaKelvin Oct 25, 2026
b7476f5
test: remove redundant cases and strengthen regression assertions (#3…
OrcaWin Oct 25, 2026
76f0f35
feat(browser): speaker icon on tabs playing sound, with tab mute (#32…
AmoabaKelvin Oct 25, 2026
f076731
fix(omp): replace the ACP child when OMP drops the chat's session (#3…
nwparker Oct 25, 2026
0fa161b
fix(agents): skip Codex's startup update prompt on Orca-driven launch…
nwparker Oct 25, 2026
25b9ce5
feat(browser): show a hovered or focused link's URL in a bubble at th…
AmoabaKelvin Oct 25, 2026
fd24040
fix(pty): let agents run exit hooks before an immediate local-provide…
nwparker Oct 25, 2026
9f040bc
test(mobile-web): act on the HTML preview frame only once input reach…
nwparker Oct 25, 2026
ad1b81d
refactor: group PTY delivery and drain ownership (#33358)
nwparker Oct 25, 2026
f392c6b
test: remove redundant checks and strengthen runtime regression cover…
OrcaWin Oct 25, 2026
4e1acc9
fix(codex): write folder trust into the managed-account CODEX_HOME th…
nwparker Oct 25, 2026
407e9eb
feat(relay): log the director's zone and round-trip speed on each run…
Jinwoo-H Oct 25, 2026
7d0103e
fix(jira): keep the Tasks Board view selected after you leave the pag…
kazuki-hanai Oct 25, 2026
b94ad98
fix(terminal): don't resume an agent whose spawned PTY is still live …
nwparker Oct 25, 2026
aa32d9b
fix(terminal): keep fish's startup XTVERSION reply out of the launche…
nwparker Oct 25, 2026
fc508bd
test(windows): read the grandchild pid from accumulated pane output (…
nwparker Oct 25, 2026
75ecad4
test(git-bash): give ssh-agent a load-tolerant bound in the Windows p…
nwparker Oct 25, 2026
4099784
test(windows): warm WMI before timing the NSIS capability probe (#33340)
nwparker Oct 25, 2026
5efcbf4
test: remove redundant checks and strengthen runtime regression cover…
OrcaWin Oct 25, 2026
1b54aba
fix(orchestration): hold mailbox pointers while the agent shows an op…
nwparker Oct 25, 2026
c25fad7
fix(agent-teams): run the tmux shim through the headless host's CLI, …
nwparker Oct 25, 2026
0a664b0
refactor: group mobile chat composer ownership (#33390)
nwparker Oct 25, 2026
f3104c8
fix(daemon): a Windows terminal's output-relay write error no longer …
nwparker Oct 25, 2026
4fa91ac
fix(repos): drop a paired server's old workspace rows when it relists…
nwparker Oct 25, 2026
1d2b536
test: remove duplicate assertions and repair misleading fixtures (#33…
OrcaWin Oct 25, 2026
9017194
fix(mobile): explain why a file outside the workspace can't be shown …
nwparker Oct 25, 2026
95df4c7
refactor: group Parcel watcher process ownership (#33401)
nwparker Oct 25, 2026
62d9706
fix(agents): start a Claude worker on its composer when its terminal …
nwparker Oct 25, 2026
e7a567b
fix(worktrees): explain the shallow-clone local base warning and let …
OrcaWin Oct 25, 2026
0ae42fe
feat(relay): cap how many reserve cells a director outage trips to th…
Jinwoo-H Oct 25, 2026
1592ef1
fix(terminal): a slept WSL pane on Windows wakes in the folder its sh…
nwparker Oct 25, 2026
8e9f86b
feat(managed-server): Update and Update anyway for a managed SSH serv…
nwparker Oct 25, 2026
3d24e61
test: remove self-validating checks and exercise intended boundaries …
OrcaWin Oct 25, 2026
4ff84bb
fix(mobile): stop phones losing terminal output sent as output spans …
nwparker Oct 25, 2026
062ebba
fix(agents): pre-trust the folder for Kimi Code so its trust menu doe…
nwparker Oct 25, 2026
10005e5
fix(hermes): use the Windows %LOCALAPPDATA%\hermes home for hooks and…
nwparker Oct 25, 2026
e106697
fix(worktrees): never leave the create-worktree dialog stuck on a sta…
OrcaWin Oct 25, 2026
4633fa9
fix(sidebar): keep the workspace hover card open behind link actions …
OrcaWin Oct 25, 2026
4b34768
feat(mobile): skip dev-client rebuilds when the Expo native fingerpri…
nwparker Oct 25, 2026
fef00e4
feat(dev): give each worktree its own pnpm dev profile and ports (#33…
nwparker Oct 25, 2026
cc2b6fe
build(mobile): move to TypeScript 7 and Vitest 5, typecheck through t…
nwparker Oct 25, 2026
ee38c30
fix(hermes): keep a finished Hermes pane done when its background mem…
nwparker Oct 25, 2026
e4bbbe0
perf(test): faster local test loop and cold-worktree changed runs (#3…
nwparker Oct 25, 2026
b1e18d8
ci(mobile): skip the native fingerprint report on draft PRs (#33438)
nwparker Oct 25, 2026
13464ed
feat(agents): TypeScript 7 code intelligence for coding agents, load-…
nwparker Oct 25, 2026
f66c4c0
build(dev): add opt-in ORCA_DEV_BUNDLED=1 for Vite bundled renderer d…
nwparker Oct 25, 2026
e39330e
docs: slim STYLEGUIDE.md into a core guide plus topic deep dives (#33…
nwparker Oct 25, 2026
d08774d
feat(devex): pnpm check:changed as the single pre-handoff gate (#33432)
nwparker Oct 25, 2026
b961e5c
test: remove inventory mirrors and repair behavioral assertions (#33437)
OrcaWin Oct 25, 2026
d058e8f
fix(claude): run the native Windows hook exe for spaced profile paths…
nwparker Oct 25, 2026
e575cc1
fix(opencode): refuse model launches on OpenCode 2.x releases that dr…
nwparker Oct 25, 2026
75855c7
fix(agent-prompt): press Enter again while a Windows Codex composer s…
nwparker Oct 25, 2026
ae6062b
fix(runtime): a paired runtime's frame no longer drops another runtim…
nwparker Oct 25, 2026
a6d4a4f
fix(windows): respawn a ConPTY pane that started without keyboard inp…
nwparker Oct 25, 2026
f27d871
perf(typecheck): drop the load-based tsrs checker cap (#33444)
nwparker Oct 25, 2026
e13e5e8
fix(orchestration): submit mail pointers to Cursor CLI instead of lea…
nwparker Oct 25, 2026
dc13e74
fix(terminal): keep Windows Codex multiline Ctrl+V and Edit > Paste a…
nwparker Oct 25, 2026
d81958f
refactor: group local and WSL filesystem watchers (#33407)
nwparker Oct 25, 2026
cae5e98
fix(terminal): send ESC d for Option+Forward-Delete on macOS (#21491)…
nwparker Oct 25, 2026
a30d4f4
feat(devex): component fixtures with headless screenshots for fast UI…
nwparker Oct 25, 2026
5447a26
perf(lint): keep JS plugins out of default oxlint and adopt ast-grep …
nwparker Oct 25, 2026
e1ee51d
fix(ssh): saved port forwards come back after a restart that reconnec…
nwparker Oct 25, 2026
23c5eec
fix(agent-launch): re-press Enter while dsh's launchpad still holds t…
nwparker Oct 25, 2026
30c606e
fix(terminal): a pane a relaunched app has not reopened keeps its his…
nwparker Oct 25, 2026
9bed1b4
perf(dev): serve the renderer with bundled dev mode by default (#33449)
nwparker Oct 25, 2026
a067284
fix(accounts): leave a user's node or python program alone after a Cl…
adifsgaid Oct 25, 2026
245e5d8
Reduce tab preview tooltip delay to 500 ms (#33447)
AmethystLiang Oct 25, 2026
e237469
refactor: group filesystem IPC registration and suites (#33458)
nwparker Oct 25, 2026
f9df692
test: remove seven low-value cases and repair behavioral assertions (…
OrcaWin Oct 25, 2026
9b23bd6
fix(daemon): sweep descendants on graceful close of shells without la…
nwparker Oct 25, 2026
1e221ce
fix(runtime): flagged `--command` agent launches wait for the agent's…
nwparker Oct 25, 2026
7d493ea
fix(runtime): keep tui-idle blocked on Codex's plan menu painted afte…
nwparker Oct 25, 2026
f01cecd
fix(terminal): send Ctrl+Enter as CSI-u to Claude Code on local Windo…
nwparker Oct 25, 2026
e804a02
fix(hooks): exit Windows vendor-replay hook skips without draining st…
nwparker Oct 25, 2026
86a177c
test: remove schema inventory and strengthen boundary coverage (#33476)
OrcaWin Oct 25, 2026
64cdbcd
fix(codex-accounts): read the sign-in link codex prints on stderr (#2…
nwparker Oct 25, 2026
74d7d2b
fix(ai-vault): keep Codex automation and agent-created threads in his…
nwparker Oct 25, 2026
aec646f
fix(orchestration): hold the mailbox pointer while the composer has a…
nwparker Oct 25, 2026
8e601e3
fix(codex-usage): count fork-copied Codex token events once (#33478)
nwparker Oct 25, 2026
47d9eeb
fix(claude): share folders Claude made in an account folder before it…
nwparker Oct 25, 2026
4dcd6af
test: run released-phone compatibility checks under Node (#33480)
nwparker Oct 25, 2026
fca374c
test: exercise boundary assertions and repair audit fixtures (#33483)
OrcaWin Oct 25, 2026
49bde1c
fix(agent): recognize node-launched Qwen Code on Windows (#33461)
nwparker Oct 25, 2026
0b28553
feat(ssh): show saved port forwards that couldn't start, with why, an…
nwparker Oct 25, 2026
3e950ca
refactor(native-chat): group tool attribution modules (#33482)
nwparker Oct 25, 2026
3ff1f00
test: verify retry identities and complete boundary outputs (#33491)
OrcaWin Oct 25, 2026
0571e45
fix(kimi): keep a resumed Kimi pane resumable across the next Orca re…
nwparker Oct 25, 2026
a4e9000
fix(daemon): release the shell-ready barrier through Kiro's kiro-cli-…
nwparker Oct 25, 2026
3e6aa82
fix(codex): apply global ~/.codex/rules in Orca-managed Codex homes (…
nwparker Oct 25, 2026
069d85f
fix(terminal): a woken pane's new prompt starts on its own line when …
nwparker Oct 25, 2026
08019f4
fix(terminal): a WSL pane a relaunched window reattached keeps its fo…
nwparker Oct 25, 2026
048bc0f
refactor: group native chat edit and patch modules (#33497)
nwparker Oct 25, 2026
ca3bad5
test: remove redundant checks and strengthen runtime assertions (#33498)
OrcaWin Oct 25, 2026
346e2ac
fix(terminal): preserve answered snapshots across fit deadlines (#33474)
nwparker Oct 25, 2026
af99a03
fix(orchestration): re-press Enter when dsh's launchpad refuses a wor…
nwparker Oct 25, 2026
751591f
fix(runtime): let a settled screen clear a blocked agent prompt the l…
nwparker Oct 25, 2026
a5e948d
test: remove duplicate diff cases and repair audit fixtures (#33503)
OrcaWin Oct 25, 2026
48d8b35
fix(daemon): admit history shutdowns before connection preparation (#…
nwparker Oct 25, 2026
aa08c84
fix(ai-vault): list Claude sessions under a CLAUDE_CONFIG_DIR exporte…
nwparker Oct 25, 2026
7d6603a
[comment audit] Complete repository-wide comment cleanup (#33249)
OrcaWin Oct 25, 2026
2a28fc7
[comment audit] Finish launcher and configuration comment review (#33…
OrcaWin Oct 25, 2026
4b05f13
fix(agents): resume Hermes panes after a restart, on the pane's own s…
nwparker Oct 25, 2026
ced9a3d
test: remove mock-only cases and repair audit fixtures (#33509)
OrcaWin Oct 25, 2026
51dcef8
test: repair CLI and mobile fixtures and remove duplicate checks (#33…
OrcaWin Oct 25, 2026
526ffe3
fix(orchestration): start Antigravity workers in a terminal when its …
nwparker Oct 25, 2026
0044d2c
fix(agent-status): keep launch flags on a woken agent's record so a r…
nwparker Oct 25, 2026
7d18e19
test: strengthen CLI and mobile behavior checks (#33526)
OrcaWin Oct 25, 2026
5ac6834
test: strengthen CLI errors and mobile lifecycle checks (#33529)
OrcaWin Oct 25, 2026
a886dcd
fix: run topology SQLite fixture tests in Node (#33533)
nwparker Oct 25, 2026
309f819
fix(terminal): keep desktop history when a hidden pane is revealed (#…
nwparker Oct 25, 2026
0b8f519
fix(claude): show Needs You while an MCP elicitation dialog is open (…
nwparker Oct 25, 2026
e03786f
fix(worktrees): keep each same-path copy on its own host branch (#33428)
nwparker Oct 25, 2026
4af4bc1
fix(agents): resume an agent from the folder it ran in, not the pane'…
nwparker Oct 25, 2026
6b25598
test(runtime): compare existing-folder imports against the resolved t…
nwparker Oct 25, 2026
1661c3c
test: strengthen transport lifecycle and benchmark checks (#33538)
OrcaWin Oct 25, 2026
1bd308b
fix(usage): an idle Claude account whose access token lapsed reads as…
nwparker Oct 25, 2026
8b8d343
fix(terminal): keep desktop history in main's copy after a phone subs…
nwparker Oct 25, 2026
8c394bd
fix(orchestration): fail a Codex worker's dispatch when its session c…
nwparker Oct 25, 2026
d1590a7
test: honor startup paste timer delays and cancellation (#33550)
nwparker Oct 25, 2026
e13c47b
test: strengthen transport recovery and benchmark assertions (#33547)
OrcaWin Oct 25, 2026
6458c08
fix(orchestration): re-read an unrecognized foreground before refusin…
nwparker Oct 25, 2026
33c76d8
fix(agent-hooks): let the WSL hook relay run on orcad's pinned Node (…
nwparker Oct 25, 2026
cc0e35e
test: tighten transport, recovery, and diagnostic checks (#33559)
OrcaWin Oct 25, 2026
4e3014a
refactor: group native chat tool presentation modules (#33515)
nwparker Oct 25, 2026
a4e6e1f
fix(codex): migrate resumed Windows Codex sessions whose transcript h…
nwparker Oct 25, 2026
6c9c7b0
fix(worktree): start the agent when a workspace is opened during crea…
nwparker Oct 25, 2026
09873c1
test: strengthen relay, persistence, and benchmark checks (#33563)
OrcaWin Oct 25, 2026
c074ec5
fix(codex-accounts): keep the old login until re-auth finishes, and r…
nwparker Oct 25, 2026
7bbdc47
test: tighten relay assertions and repair benchmark checks (#33573)
OrcaWin Oct 25, 2026
dd797fc
fix(codex): a resting chat's skills probe no longer pins its worktree…
nwparker Oct 25, 2026
7423928
Open browser links beside their source (#32907)
AmethystLiang Oct 25, 2026
838134f
refactor: group PTY bindings and lifecycle suites (#33566)
nwparker Oct 25, 2026
95384a6
fix(terminal): frame CLI prompts for every recognized agent, not just…
nwparker Oct 25, 2026
9485e73
feat(browser): dock DevTools in the browser pane, with dock side, res…
AmoabaKelvin Oct 25, 2026
a944e37
fix(agent-status): let a pane's owner reclaim it from a nested agent'…
nwparker Oct 25, 2026
6808f4b
test: remove redundant checks and tighten runtime query coverage (#33…
OrcaWin Oct 25, 2026
55d12e1
fix(terminal): keep restored history when ConPTY repaints after a res…
nwparker Oct 25, 2026
038805f
feat(browser): ask before sites use the local network (#33399)
AmoabaKelvin Oct 25, 2026
f37c1f6
fix(pi): keep in-process subagent sessions from taking over the lead …
nwparker Oct 25, 2026
82a3214
fix(sleep): reopen a slept agent whose tab is gone in a fresh tab ins…
nwparker Oct 25, 2026
52c7f59
fix(native-chat): read WSL transcripts through guest directory symlin…
Kooooojun Oct 25, 2026
b1751c0
fix(terminal): show the stalled-daemon banner when the daemon is actu…
Jinwoo-H Oct 25, 2026
76029bf
fix(agent-status): status follows a terminal re-homed into a new tab …
nwparker Oct 25, 2026
cb82f94
OpenCode and Grok chats show the turns made outside them (#31616)
brennanb2025 Oct 25, 2026
f3364b8
fix(terminal): confirm a live agent's exit before resetting its mouse…
nwparker Oct 25, 2026
2f25699
fix(orchestration): let a new check --wait start while an old one is …
Jinwoo-H Oct 25, 2026
2990d27
fix(agent-hooks): follow Claude sessions continued into a daemon job …
nwparker Oct 25, 2026
9654684
fix(runtime): recognize Hermes readiness and its installed launcher (…
nwparker Oct 25, 2026
c6ce72d
refactor: group renderer session launch lifecycle (#33586)
nwparker Oct 25, 2026
e04f4dc
fix(mobile): keep a hook status that postdates the shell title on the…
nwparker Oct 25, 2026
bfa874a
fix(terminal): defer idle cursor resets until escape sequences finish…
nwparker Oct 25, 2026
7dfae5e
test: remove redundant metadata checks and strengthen runtime coverag…
OrcaWin Oct 25, 2026
06a3f88
fix(windows): capture Git Bash agent env with native Windows paths (#…
nwparker Oct 25, 2026
92fd257
fix(projects): refuse project setup on a paired server's SSH host wit…
nwparker Oct 25, 2026
843e502
fix(orchestration): point idle headless terminals at their mail (#33258)
nwparker Oct 25, 2026
d4cab5c
refactor: group local filesystem guards and search owners (#33624)
nwparker Oct 25, 2026
d1bbb8e
test: remove redundant renderer and shared checks and strengthen asse…
OrcaWin Oct 25, 2026
220d56f
fix(codex): index a new WSL account home before bridging history into…
nwparker Oct 25, 2026
25262fc
fix(daemon): let macOS terminal shells download cloud-only files (STA…
Jinwoo-H Oct 25, 2026
e26e418
Preserve uncertain goal text and accept distinct controls (#33022)
brennanb2025 Oct 25, 2026
a6c4507
fix(native-chat): a remembered effort a saved Pi listing lacks no lon…
nwparker Oct 25, 2026
9ac968f
test: strengthen Git and Linear assertions and remove redundant check…
OrcaWin Oct 25, 2026
65e513b
fix(daemon): recover lost macOS worker wake-ups in the packaged termi…
nwparker Oct 25, 2026
27e7f8f
Keep the permission pill inside Arguments and share the Permissions m…
brennanb2025 Oct 25, 2026
883b768
A chat never starts writing a conversation a terminal is still writin…
brennanb2025 Oct 25, 2026
3fbf89b
test: strengthen watcher and mobile async assertions (#33641)
OrcaWin Oct 25, 2026
47d1b31
refactor(mobile): group native chat send and stream state (#33640)
nwparker Oct 25, 2026
28de913
test(connectors): drive a connector conversation end to end on a head…
Jinwoo-H Oct 25, 2026
3b8e872
fix(codex): show HTTP usage while Codex's session index is stuck rebu…
nwparker Oct 25, 2026
eb49947
feat(browser): show agent browsing live, with a jump to the page from…
AmoabaKelvin Oct 25, 2026
395270f
Retry failed agent starts before rejecting your message (#33045)
brennanb2025 Oct 25, 2026
c77c3fe
Stabilize sidebar activity toggle placement (#33648)
AmethystLiang Oct 25, 2026
f53e7b0
test: strengthen filesystem and settings coverage; remove redundant c…
OrcaWin Oct 25, 2026
c6769fc
chore: post-merge cleanup for agent integration fixes (#33644)
nwparker Oct 25, 2026
7e8bf3d
fix(acp): OMP models other than the running one keep a remembered eff…
nwparker Oct 25, 2026
9639426
fix(agent-status): an Antigravity subagent finishing no longer ends i…
nwparker Oct 25, 2026
47ed6e1
fix(orchestration): wake an agent for new mail even while it still ho…
Jinwoo-H Oct 25, 2026
b7a6570
fix(accounts): an account-switch restart resumes Claude in the folder…
nwparker Oct 25, 2026
1b0e56e
feat(browser): make Orca shortcuts, split focus and mouse back/forwar…
AmoabaKelvin Oct 25, 2026
23798ef
Let chats follow the agent permission setting (#32334)
brennanb2025 Oct 25, 2026
f94b15e
fix(cli): a sandbox that denies chmod no longer breaks reading Orca's…
nwparker Oct 25, 2026
d9a7aa8
ci(wsl): rerun a WSL2 lane job once when its hosted runner freezes (#…
nwparker Oct 25, 2026
12cc6c5
fix(kiro): report status on Kiro's V3 engine, including the built-in …
nwparker Oct 25, 2026
553cbff
fix(antigravity): keep the selected account after agy refreshes its t…
nwparker Oct 25, 2026
cffb527
fix(usage): show a Claude Enterprise seat's monthly spend cap when it…
nwparker Oct 25, 2026
3aec926
Chat renames are saved as the chat's name, so Session History shows t…
brennanb2025 Oct 25, 2026
ddd55a4
Bound cwd permission probes during terminal session creation (#33643)
AmethystLiang Oct 25, 2026
d37c04c
Fix notification bell layout (#33683)
AmethystLiang Oct 25, 2026
5a4dd30
fix(ci): repair main's line limits and a stale test import (#33675)
brennanb2025 Oct 25, 2026
a5f7da4
revert(daemon): ship official Node in the macOS terminal host again, …
Jinwoo-H Oct 26, 2026
2209d55
fix(terminal): give the window and main's copy the daemon's ConPTY re…
nwparker Oct 26, 2026
3ffe2af
fix(terminal): preserve intact replay escape tails across fit deadlin…
nwparker Oct 26, 2026
bfc633a
Offer to resume chats after managed server updates (#28978)
brennanb2025 Oct 26, 2026
1b58be9
fix(ssh): retry over system ssh when ssh2 shares no algorithm with th…
nwparker Oct 26, 2026
5cf4805
fix(link-actions): dismiss the link chooser when an outside click sto…
nwparker Oct 26, 2026
478ad91
Add custom font family setting for native chat (#33687)
AmethystLiang Oct 26, 2026
c0a51bc
fix(ssh): don't refuse a host's move over a pane that saved no termin…
nwparker Oct 26, 2026
79a63f3
fix(orcad): bundle jsonc-parser's ESM build into the shipped CLI (#33…
nwparker Oct 26, 2026
8ee2f09
fix(orcad): drive Android emulators from headless orca serve hosts (#…
nwparker Oct 26, 2026
405ce9b
Stabilize notification dispatch tests with fixed timestamps (#33698)
AmethystLiang Oct 26, 2026
bd2f463
fix(daemon): roll the daemon-side terminal fixes since v1.4.240 into …
Jinwoo-H Oct 26, 2026
95a8eb4
Merge upstream/main at v1.4.241's cut point (bd2f46359d)
damianjarosz-erli Oct 26, 2026
28a45d5
release: v1.4.241
github-actions[bot] Oct 26, 2026
39e82d6
test(build): pin yolo-default against upstream's stored agent permiss…
damianjarosz-erli Oct 26, 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
114 changes: 112 additions & 2 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,29 @@ 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
converts back the same way. CI always uses the normal layout. On Windows, pnpm links with
junctions when you lack the symlink privilege, so no administrator rights or Developer Mode are
needed. Things to know:

- Keep `~/node_modules` (and any other `node_modules` above the store) out of your home
directory. Node resolves upward from the store slot, so a stray one there supplies
dependencies the package never declared and hides missing-dependency bugs; `pnpm install` warns
when it finds one.
- Native addons are never rebuilt in place in a shared slot: each CPU gets its own build
beside it (see [`native-build-entry.cjs`](../config/scripts/native-build-entry.cjs)), so
cross-arch packaging is safe for other worktrees.
- `ORCA_PNPM_GLOBAL_VIRTUAL_STORE=0` opts out. Keep it set
in your shell: `pnpm run` re-checks the install and relinks a worktree whose layout no longer
matches.

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 @@ -72,8 +176,14 @@ pnpm build
```

For repeated local typechecks, use `pnpm tc` (or `pnpm tc:node`, `pnpm tc:web`,
and `pnpm tc:cli`). These keep TypeScript's incremental cache. CI uses
`pnpm typecheck:ci` with Bun for full checks. Shared tests are checked by the
and `pnpm tc:cli`). On Apple Silicon macOS and x64/arm64 Linux, these use the pinned
`tsrs` compiler with incremental caches. Keep `.cache/typecheck/` between checks;
delete it to force a fresh check. Caches are separate for each project, compiler
version, and worktree. At most two projects run together, subject to the memory budget.
Windows, Intel macOS, and other unsupported platforms use pinned Bun automatically.
Pass `--compiler=bun` to explicitly use Bun, or `--compiler=native` to use TypeScript.
CI uses `pnpm typecheck:ci`, which explicitly selects Bun and its CI 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.

Expand Down
2 changes: 1 addition & 1 deletion .github/actions/cloud-sql-rollout-lease/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ runners; only the compare-and-swap algorithm is shared with the fence broker.
## Duplication

This directory is copied verbatim into `stablyai/orca`. It has no `package.json`, no
`node_modules`, and imports nothing outside itself — `action-contract.test.mjs` enforces all three.
`node_modules`, and imports nothing outside itself. Keep it self-contained when updating the action.
Cross-repo consumption via `uses: stablyai/orca/.github/actions/...@<sha>` was rejected: it would
put public-repo code inside private app deploys that hold a production credential, and neither
repository protects `main` today.
Expand Down
31 changes: 1 addition & 30 deletions .github/actions/cloud-sql-rollout-lease/action-contract.test.mjs
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
import assert from 'node:assert/strict'
import { readFileSync, readdirSync } from 'node:fs'
import { readFileSync } from 'node:fs'
import { test } from 'node:test'

const here = new URL('./', import.meta.url)
const action = readFileSync(new URL('action.yml', here), 'utf8')
const modules = readdirSync(here).filter((name) => name.endsWith('.mjs'))
const shipped = modules.filter((name) => !name.endsWith('.test.mjs'))

test('is a node24 JavaScript action with an always-run post step', () => {
// A composite action has no `post:`, so the lease could never be released on cancel or failure.
Expand All @@ -23,30 +21,3 @@ test('declares the inputs the wave-chain callers depend on', () => {
assert.match(action, /default: \$\{\{ github\.repository \}\}\/\$\{\{ github\.run_id \}\}/)
assert.match(action, /default: 'true'/)
})

test('stays self-contained so it can be duplicated into the public repo', () => {
assert.deepEqual(
readdirSync(here).filter((name) => name === 'package.json' || name === 'node_modules'),
[],
'the action must run with zero installed dependencies'
)
for (const name of modules) {
const source = readFileSync(new URL(name, here), 'utf8')
for (const match of source.matchAll(/^import\b[\s\S]*?from '([^']+)'/gm)) {
const specifier = match[1]
const local = specifier.startsWith('.')
assert.ok(
specifier.startsWith('node:') || (local && !specifier.includes('..')),
`${name} imports ${specifier}; only node: builtins and same-directory modules are allowed`
)
}
}
})

test('never reaches for the GCE metadata server', () => {
// Runners have no metadata.google.internal; the fence broker's token path must not be copied.
for (const name of shipped) {
const source = readFileSync(new URL(name, here), 'utf8')
assert.doesNotMatch(source, /metadata\.google\.internal/, name)
}
})
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
Loading