Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
8630 commits
Select commit Hold shift + click to select a range
5b861bf
perf(ci): reuse verified Windows builds and trim release history tran…
Oct 20, 2026
07e6bb8
fix(sidebar): show machine labels only for same-named projects (#31233)
Oct 20, 2026
695ac88
fix(editor): a file from a server no longer reloads once after each r…
Oct 20, 2026
e02e8f5
fix(chat): preserve Claude rewind context after rollback (#31231)
Oct 20, 2026
706ea95
ci(wsl): run the WSL orcad lane on Debian 12 and Fedora 41 too (#29821)
Oct 20, 2026
c335070
Layout-owner build: main answers terminal questions from its own layo…
Oct 20, 2026
d563f8e
feat(speech): set the OpenAI dictation key on a headless host (#31230)
Oct 20, 2026
64a4d5b
Refactor AGENTS.md for clarity and conciseness (#31238)
Oct 20, 2026
32343cc
test(skills): synchronize Windows rename contention (#31237)
Oct 20, 2026
fb81ee5
chore: remove CLAUDE.md (#31242)
Oct 20, 2026
bc6b2dd
docs: load Git guidance on demand [skip ci]
Oct 20, 2026
8f56a59
docs: slim test agent instructions (#31246)
Oct 20, 2026
9823949
fix(orcad): replace a stale terminal daemon once it drains on Linux a…
Oct 20, 2026
1a11050
docs: remove redundant max-lines agent instructions [skip ci]
Oct 20, 2026
34f0951
fix(automations): a legacy automation on a twin project refuses inste…
Oct 20, 2026
49e6107
ci: stop running WSL host tests for UI-only changes (#31243)
Oct 20, 2026
f320af9
Update AGENTS.md with Useful Commands section (#31248)
Oct 20, 2026
f812c67
feat(native-chat): Codex chats list and run the skills Codex loaded (…
Oct 20, 2026
ebc8b06
Editor tab state is written to its buffer record, not copied into it …
Oct 20, 2026
9693204
fix(github): a twin project's PR cards, rows and dialogs act on the h…
Oct 20, 2026
026c45e
fix(ai-vault): give Orca servers reached over SSH the 15 s all-hosts …
Oct 20, 2026
be29644
fix(mobile): open a worktree on the tab the desktop is showing (#31215)
Oct 20, 2026
ef95040
fix(native-chat): show prompts sent mid-turn and `!` commands where C…
Oct 20, 2026
b5f97ca
Restored-tab disk re-check can't loop or raise a false conflict; drop…
Oct 20, 2026
8e8698a
Worktree list safety sweep skips unchanged worktrees instead of re-re…
Oct 20, 2026
ab8e12c
fix(ai-vault): keep sessions recorded under a symlinked workspace's r…
Oct 20, 2026
6d7e542
feat(ai-vault): name the host each search hit came from when hits spa…
Oct 20, 2026
6e973fa
A launch can name chat or terminal: agent.launch gets a surface pick …
Oct 20, 2026
ec44a50
docs: clarify first-class platform, remote, and mobile priorities (#3…
Oct 20, 2026
ae58ca0
fix(tasks): GitLab items and project-view dialogs act on the twin hos…
Oct 20, 2026
a931098
A CLI or phone file on a layout-owner server opens in the tab group a…
Oct 20, 2026
2fc0dcd
test(daemon): run the stalled-reader backpressure test over a Unix so…
Oct 21, 2026
9af1ac8
A screenshot dragged into a chat lives as long as the chat (#30419)
Oct 21, 2026
c93514d
refactor(protocol): each area owns its published runtime capability l…
Oct 21, 2026
d1aeba9
Native chat: remove unused journalCheckpoint and setConversationComma…
Oct 21, 2026
1a0e1e9
PR conflict previews fetch the base branch through the shared fetch c…
Oct 21, 2026
583805f
Update AGENTS.md (#31288)
Oct 21, 2026
29e5504
build(cli): typecheck the CLI by following its imports, not a hand li…
Oct 21, 2026
3098f66
docs: format AGENTS.md so the formatting check passes on main (#31294)
Oct 21, 2026
d6bc6cb
fix(process-host): let a slow Windows taskkill finish instead of orph…
Oct 21, 2026
9e04a98
refactor(wsl-hosts): add flow in wsl-host-registration; liveness spli…
Oct 21, 2026
ceb2a6c
docs: add test anti-pattern reference (#31277)
Oct 21, 2026
ecee346
Add the rules that decide which editor tabs are the same file (phase …
Oct 21, 2026
c35ff35
perf(ci): accelerate adhoc release builds and runner scheduling (#31297)
Oct 21, 2026
aec7a42
Layout-owner build: a CLI send, wait or read starts a saved pane that…
Oct 21, 2026
70b2197
The window shows tab, title, move and divider changes only from main'…
Oct 21, 2026
e2fe034
Close prompt, Discard, save flush and restart save each decided in on…
Oct 21, 2026
6948113
fix(github): an issue-source change on a twin saves to the row you ch…
Oct 21, 2026
496bbaa
fix(ci): resolve one Zod version in the E2E typecheck (#31320)
Oct 21, 2026
5c666d2
fix(native-chat): retry a failed chat name, show the failure on the t…
Oct 21, 2026
4e483ae
perf(serve): clone the supervisor's code copy in one step on macOS (#…
Oct 21, 2026
be0961e
Overlap adhoc release gates and cache qualified server templates (#31…
Oct 21, 2026
1c76c71
fix(mobile): list session tabs in the desktop tab bar order (#31269)
Oct 21, 2026
60b8eb4
fix(browser): keep in-app browser logins when a WSL or managed SSH ho…
Oct 21, 2026
d7ef774
fix(serve): restart the macOS serve supervisor from the updated app (…
Oct 21, 2026
8e59926
A terminal pane that loses its reconnect to another connection attach…
Oct 21, 2026
6e589bb
Layout-owner build: phones see main's terminal and editor rows (A2, d…
Oct 21, 2026
0c2b013
fix(github): GitHub routing takes the caller's host for a twin; the t…
Oct 21, 2026
a308277
fix(deps): root and mobile resolve one zod, and CI fails if they drif…
Oct 21, 2026
a1f2094
fix(github): work-item cache keys a twin by the row at the request pa…
Oct 21, 2026
065e687
A paired desktop shows the held-terminal banner and Reopen for a serv…
Oct 21, 2026
018c6e0
fix(mobile): create and edit notes on headless hosts (#31291)
Oct 21, 2026
4f70d6c
fix(mobile): refresh staged files when returning from review (#31295)
Oct 21, 2026
c6becfa
fix(github): main finds a twin project's registered row by id and pat…
Oct 21, 2026
513c24b
fix(mobile): preserve unsent terminal commands across workspace navig…
Oct 21, 2026
a237b03
fix(mobile): open relative Markdown file links (#31298)
Oct 21, 2026
379ad0c
test(terminal-surfaces): pin why main's pane republish is deferred to…
Oct 21, 2026
356bda1
fix(github): repo cache eviction clears every host's entries, keeping…
Oct 21, 2026
ecc4a6c
fix(mobile): show embedded images in Markdown previews (#31304)
Oct 21, 2026
5999642
fix(settings): prioritize sharing in Remote Orca Servers (#31335)
Oct 21, 2026
d98b8ed
fix(chat): keep resumed Claude messages deliverable after settings re…
Oct 21, 2026
fece03b
fix(orcad): voice dictation on headless orca serve hosts (#31217)
Oct 21, 2026
71cf31b
Overlap native qualification setup with the mobile bundle build (#31336)
Oct 21, 2026
dda855e
test(layout): pin the layout-owner save format for downgrade, and kee…
Oct 21, 2026
b99552c
fix(runtime): a phone reads and saves Markdown tabs on a headless ser…
Oct 21, 2026
411b5c0
Batch macOS signing calls for adhoc releases (#31340)
Oct 21, 2026
8a2ec06
Start an agent's terminal at its first real size instead of after a 1…
Oct 21, 2026
f7c0740
docs(orca-cli): teach agents cross-project parents and re-parenting (…
Oct 21, 2026
03f4ce3
fix(mobile): show the session title beside the tabs on a landscape ph…
Oct 21, 2026
a763c1d
style: format pty-connection-split-spawn.spec.ts (main fails oxfmt --…
Oct 21, 2026
cd007d4
fix(session-history): scoped history no longer fails on a very large …
Oct 21, 2026
046f29b
fix(runtime): a phone's Markdown save keeps the route it started on (…
Oct 21, 2026
ce71535
Layout groundwork (switched off): main starts every split and new pan…
Oct 21, 2026
b3e6705
fix(orcad-migration): a sidebar view setting never blocks moving an S…
Oct 21, 2026
d1ed73b
fix(orcad): refuse new terminals while an update stops the server (R3…
Oct 21, 2026
b0d873d
test(claude): isolate real CLI fixtures and cover chat option request…
Oct 21, 2026
6537842
fix(mobile): blend workspace header into status-bar safe area (#31353)
Oct 21, 2026
3ed0bb4
fix(mobile): match home-indicator inset to terminal input panel (#31354)
Oct 21, 2026
3fd90e9
fix(mobile): preserve live palettes on identical themes (#31355)
Oct 21, 2026
8bec732
fix(mobile): preserve Claude chat after renaming its pane (#31358)
Oct 21, 2026
f19ce36
fix(mobile): show the bundled whale on DeepSeek Build tabs (#31359)
Oct 21, 2026
fa35698
fix(mobile): keep keyboard accessory row height stable (#31363)
Oct 21, 2026
87fe842
fix(runtime): a server with no window answers its first terminal crea…
Oct 21, 2026
d8508da
fix(ui): clarify continuing conversations between chat and terminal a…
Oct 21, 2026
e219640
fix(terminal): realign mobile snapshot residual metadata after query …
Oct 21, 2026
12e0b37
fix(mobile): keep dictation controls in sync with host settings (#31349)
Oct 21, 2026
01562f8
fix(ssh): window the SSH Hosts list and search past the Remote Hosts …
Oct 21, 2026
6964f81
Reuse qualified templates and batched signing for production releases…
Oct 21, 2026
818a25d
test(vitest): derive the Node SQLite test list from imports (#30647)
Oct 21, 2026
0a9980b
fix(terminal): a saved terminal folder on a dead network drive no lon…
Oct 21, 2026
b2370f1
fix(terminal): hidden tabs reconnect to sessions that survived a rest…
Oct 21, 2026
2187f0b
ci: one list for Windows boundary tests and one step for ratchets (#3…
Oct 21, 2026
546304f
Discard pauses autosave of the file in every workspace; read-only Mar…
Oct 21, 2026
309d71c
Build adhoc Mac architectures in parallel (#31415)
Oct 21, 2026
c9d34bb
Open new Markdown changes in the rich editor (#31399)
Oct 21, 2026
ae9bc8d
A slept native-chat workspace reads asleep and hides (#28457)
Oct 21, 2026
6de974c
Mobile chat: remove the Tools toggle and its open-everything mode (#3…
Oct 21, 2026
fc8439e
fix(notifications): a pane with hooks gets its finished banner from i…
Oct 21, 2026
786a40e
Custom tab shortcuts work right after a keyboard worktree switch (#30…
Oct 21, 2026
7dfcfbf
fix(codex): resume native chats by conversation ID (#31041)
Oct 21, 2026
505d671
Refuse a workspace parent that would close a loop, even when the work…
Oct 21, 2026
2bf77e6
fix(ssh): draw every host list through one bounded, searchable host p…
Oct 21, 2026
cfdc347
Layout-owner build: main shows live terminals that lost their tab, at…
Oct 21, 2026
92732bb
fix(native-chat): bring back Working-only-while-held (#30134) without…
Oct 21, 2026
a04b2eb
fix(release): avoid API rate limits waiting for the mobile bundle (#3…
Oct 21, 2026
45ee56e
fix(mobile): preserve native iOS dictation placeholders (#31356)
Oct 21, 2026
5fc6cb4
fix(plugins): a development plugin reloads an edit saved while its wa…
Oct 21, 2026
73930be
Prepare server template assembly alongside qualification (#31422)
Oct 21, 2026
c7f722b
fix(pairing): offer only addresses the runtime listener answers (#31447)
Oct 21, 2026
9577c53
fix(ssh): a managed host's 'no desktop is sharing its browser' error …
Oct 21, 2026
46b83a9
fix(mobile): drag terminal selection with the long-press finger (#31433)
Oct 21, 2026
8b9ba72
fix(mobile): retire stale terminal stream fits and callbacks (#31432)
Oct 21, 2026
920a033
fix(native-chat): typing fast after focus moves keeps keys in order (…
Oct 21, 2026
7f21cc9
fix(codex): Codex copy from a remote pane reaches the viewer clipboar…
Oct 21, 2026
e2bcd6e
Reuse Windows server native prebuilds across app version bumps (#31450)
Oct 21, 2026
0dbc6aa
fix(mobile): select Unicode words at rendered cell boundaries (#31434)
Oct 21, 2026
ea401d7
fix(mobile): restore dictation after iOS audio interruptions (#31435)
Oct 21, 2026
21322a5
fix(mobile): cancel stale shortcut list drags (#31436)
Oct 21, 2026
7a2057e
fix(mobile): retire old touch gestures before snapshot replay (#31437)
Oct 21, 2026
11a1cc4
fix(mobile): load folder workspace agent presets on the correct host …
Oct 21, 2026
251bbf7
fix(mobile): mount sessions with saved preferences (#31443)
Oct 21, 2026
efcf8f0
fix(mobile): keep terminal scroll gestures from becoming taps (#31445)
Oct 21, 2026
0cba9f2
fix(mobile): render offline Nerd Font symbols on first terminal displ…
Oct 21, 2026
26bf128
fix(terminal): repaint desktop after phone fit ends (#31451)
Oct 21, 2026
a58789d
fix(mobile): keep a Codex chat addressable under Codex's own idle tit…
Oct 21, 2026
84af8ef
fix(mobile): apply desktop WebGL atlas fixes to current engine (#31441)
Oct 21, 2026
582efa7
fix(i18n): correct Korean sleep with descendants wording (#31456)
Oct 21, 2026
29a1446
fix(i18n): clarify Japanese phone control and connection wording (#31…
Oct 21, 2026
bbc8303
A running agent's resume note is not a sleep, so switch-on builds rep…
Oct 21, 2026
c149395
fix(remote-terminal): repaint an idle full-screen program when a reco…
Oct 21, 2026
abce679
feat(accounts): add Claude and Codex accounts on a remote server from…
Oct 21, 2026
2eae220
refactor(renderer): read workspace records through typed selectors (#…
Oct 21, 2026
e208c47
perf(wsl-host): open the stdio bridge without re-probing the distro's…
Oct 21, 2026
5dd5294
perf(orcad): keep the server bundle ASCII so V8 stores it at half the…
Oct 21, 2026
ad269f4
A paired desktop shows a server's browser tab without opening a secon…
Oct 21, 2026
fd8b2dc
fix(splits): dim terminals and chats on the unfocused side like edito…
Oct 21, 2026
6970cad
feat(browser): ask before sites use camera, mic or location (#31158)
Oct 21, 2026
de7a2d2
Phones get main's tab order, groups and names after every layout chan…
Oct 21, 2026
50b07c0
fix(relay-ops): keep one stalled director instance from tripping the …
Oct 21, 2026
92bbb38
Sidebar: land the switch-on fixes from the flip branch on main, switc…
Oct 21, 2026
cfd9e9c
Editor tabs main-first: the window asks main for every editor tab cha…
Oct 21, 2026
84a9f99
Sidebar P2: main publishes without waiting on git, and every source a…
Oct 21, 2026
0eb2403
Main closes, renames, sleeps and starts new tabs' terminals itself, w…
Oct 21, 2026
3086fe2
test(daemon): keep socket backpressure accounting pending through ass…
Oct 21, 2026
8174208
fix(terminal): every start in a deleted folder opens at the workspace…
Oct 21, 2026
899ed41
Create worktree, Create folder and continuation pickers offer each ag…
Oct 21, 2026
0985d6f
fix(sidebar): a worktree card fetches its Linear issue again only whe…
Oct 21, 2026
d4a7494
A Codex chat shows the turns made outside it (#30883)
Oct 21, 2026
3d6a945
Mobile chat composer uses desktop's placeholder (#31425)
Oct 21, 2026
dde7bf8
fix(runtime): renaming a terminal no longer hides its running agent (…
Oct 21, 2026
ba8f237
fix(mobile): phone terminal and chat tab names match the desktop (#31…
Oct 21, 2026
e3ae41b
fix(session-history): Pi and OMP keep their own agent on a transcript…
Oct 21, 2026
8f8c0ab
fix(mobile): show the saved restore delay in Terminal settings (#31361)
Oct 21, 2026
cdb032e
fix(mobile): New Tab drawer reopens with its agents and refreshes the…
Oct 21, 2026
22154de
feat(mobile): tab strip shows terminal and chat agent state, reveals …
Oct 21, 2026
52f6960
fix(mobile): closing the tab a phone shows returns it to the tab it v…
Oct 21, 2026
3b02945
fix(native-chat): floating-panel chats started from a phone show on t…
Oct 21, 2026
2b1da76
fix(mobile): a windowless server warns about unwakeable agents only w…
Oct 21, 2026
5d713eb
fix(session-search): Project search works for projects with hundreds …
Oct 21, 2026
dafed6b
fix(orcad): hold terminal admission through a server stop; fence roll…
Oct 21, 2026
b3f1607
Remove directional tab-close actions and tracking (#31599)
Oct 21, 2026
47bb876
docs(mobile): clarify buffered terminal autocomplete scope (#31347)
Oct 21, 2026
78bc1e5
Clarify locked mobile settings and preserve selected option visibilit…
Oct 21, 2026
2e4af3f
chore(ratchet): drop the stale owner-adapter focus seed and prune the…
Oct 21, 2026
7a06b65
Remote .tsx files parse as TSX and imports no longer resolve to local…
Oct 21, 2026
1db95e3
fix(terminal): stamp ORCA_WORKSPACE_ID on every terminal main creates…
Oct 21, 2026
6788612
refactor(ssh): delete SSH and orcad helpers nothing calls (#31629)
Oct 21, 2026
b128cbb
fix(chat): route OMP question cards to terminal (#31440)
Oct 21, 2026
ae64a21
Add Brazilian Portuguese UI localization (#31627)
Oct 21, 2026
7d43ed9
refactor(orcad): share one unverifiable terminal census (#31633)
Oct 21, 2026
cd8b289
chore(runtime): delete exports nothing reads (#31639)
Oct 21, 2026
f9aeb34
refactor(ssh): import SSH and orcad names from the modules that defin…
Oct 21, 2026
553a704
refactor(execution-host): one resolver for the SSH target a repo row …
Oct 21, 2026
8e89202
fix(runtime): resolve a repo's SSH host instead of reading raw connec…
Oct 21, 2026
7511300
fix(ssh): name what blocks an SSH host's move, and offer Move anyway …
Oct 21, 2026
87ca5da
refactor(repo-host): one helper for the hosts registering a repo id (…
Oct 21, 2026
524fa00
Preview HTML files by default (#31575)
Oct 21, 2026
65035bc
fix(mobile): extend the final terminal row background into its remain…
Oct 21, 2026
0b82f88
fix(mobile): dispatch leading terminal scroll without a timer (#31472)
Oct 21, 2026
e7d77e8
refactor(orcad): name the remote install helpers for what they instal…
Oct 21, 2026
fba3af0
docs(ssh): describe the orcad connect path without the removed relay …
Oct 21, 2026
554862d
refactor(orcad): use the shared error and liveness helpers instead of…
Oct 21, 2026
c054e94
refactor(renderer): name the owner adapters for what they do (resolve…
Oct 21, 2026
83f163e
The default agent can be set to open as a chat or a CLI (#31590)
Oct 21, 2026
afcb385
ci: install verified fish 4 directly for shell contracts (#31581)
Oct 21, 2026
50f72bd
fix(editor): list unsaved editor files before a workspace removal clo…
Oct 21, 2026
d6c9396
Saves are never cancelled, and Don't Save always keeps discarded text…
Oct 21, 2026
75b1460
fix(agents): preserve Cursor identity across imported Claude hooks
Oct 21, 2026
4a671db
fix(native-chat): retire ghost queued continuation bubbles
Oct 21, 2026
2d9da84
fix(runtime): keep desktop take-back from stale phone input
Oct 21, 2026
a33d596
fix(mobile): open Create Workspace after source drawer closes
Oct 21, 2026
e728d2c
refactor(terminal): no catalog-less fail-open to the focused runtime …
Oct 21, 2026
92ef7be
fix(mobile): retain terminal reading position after resume (#31661)
Oct 21, 2026
f63e56a
Trim unused rules from the editor's same-file check (keep WSL folding…
Oct 21, 2026
88aa3f2
docs: track sequential module organization cleanup (#31670)
Oct 21, 2026
1b42c4c
fix(relay-ops): make each reserve-watch sample one Cloud Logging read…
Oct 21, 2026
7b1d753
fix(relay): release a drained host before telling it to leave (#31572)
Oct 21, 2026
2b716f6
fix(mobile): attach Codex images when agent identity is missing (#31370)
Oct 21, 2026
15246eb
refactor(ssh): the SSH host finder draws its overflow through the hos…
Oct 21, 2026
80b9dca
fix(mobile): keep terminal wait feedback visible with a draft (#31658)
Oct 21, 2026
15b2cd5
refactor(ipc): group Linear handlers with direct owner imports (#31673)
Oct 21, 2026
e29c353
feat(settings): add local search to the release build picker (#31678)
Oct 21, 2026
90b8640
fix(mobile): recover workspace capabilities after transient probe fai…
Oct 21, 2026
7df3ff7
fix(sidebar): keep each host's activity, PR lane and retention apart …
Oct 21, 2026
d22fb0d
refactor(ipc): group Jira handlers with concrete owner imports (#31680)
Oct 21, 2026
fcac5cf
refactor(native-chat): one shared parser for the approval envelope (#…
Oct 21, 2026
926decd
refactor(jira): group attachment modules with concrete owner imports …
Oct 21, 2026
10d4104
Repair only the damaged parts of a profile instead of rolling back th…
Oct 21, 2026
a57e027
fix(orcad): one update decision for SSH and WSL, with connect, Update…
Oct 21, 2026
bc7c154
docs(readme): update star history chart to 2026-10-21 (#31701)
Oct 21, 2026
5f50b95
fix: remediate dependency security advisories across workspaces (#31681)
Oct 21, 2026
f6fc6d0
fix(mobile): use port 443 for explicit WSS host edits (#31659)
Oct 21, 2026
98007cb
refactor(sidebar): one shared feed client for the desktop window and …
Oct 21, 2026
bd0f326
feat(sidebar): one lifecycle line per workspace in main, with in-prog…
Oct 21, 2026
82512a4
fix(pairing): normalize base64 consistently across clients (#31465)
Oct 21, 2026
1543074
fix(mobile): isolate file review composers by document (#31698)
Oct 21, 2026
74d11d9
fix(mobile): preserve notification changes across delayed focus reads…
Oct 21, 2026
41fb3c7
fix(mobile): retire host edit navigation after leaving the route (#31…
Oct 21, 2026
d085427
Keep model choices coherent across Claude updates (#30107)
Oct 21, 2026
06861d9
feat(browser): Chrome-style new tab and address bar suggestions (#31604)
Oct 21, 2026
7e795b6
feat(browser): show every page load, link clicks included, as a line …
Oct 21, 2026
c5e07bc
feat(browser): per-site appearance and zoom, from the page menu and C…
Oct 21, 2026
106716c
fix(mobile): say why a terminal paste sent nothing (#31640)
Oct 21, 2026
54ef452
feat(mobile): load earlier chat messages on scroll-up, keeping the re…
Oct 21, 2026
e34b370
feat(browser): new tab page with a workspace card and suggested sites…
Oct 21, 2026
d15677e
fix(native-chat): Codex async questions show an answer card on deskto…
Oct 21, 2026
4ed095d
refactor(linear): group issue-context reads under concrete owners (#3…
Oct 21, 2026
79c4b46
fix(browser): bring the address bar back under the 400-line limit (#3…
Oct 22, 2026
f47f632
feat(mobile): Home's New Workspace opens the desktop's create drawer …
Oct 22, 2026
eb9d2f9
fix(security): update Node runtimes for October security releases (#3…
Oct 22, 2026
b174776
fix(agent-status): questions over 16 KB show their card with every op…
Oct 22, 2026
b0fcdb4
fix(omp): show OMP's plan review as a plan card and answer it from ch…
Oct 22, 2026
aad1fe0
fix(mobile): invalidate chat file search on authority migration (#31702)
Oct 22, 2026
a3c9958
fix(mobile): show commit comparison failures with retry (#31706)
Oct 22, 2026
718fb9f
Extract shared image clipboard copy utility (#31600)
Oct 22, 2026
50da78a
fix(mobile): detect New Workspace agents in the selected repo runtime
Oct 22, 2026
250f81a
fix(mobile): own commit generation by workspace and admit once (#31709)
Oct 22, 2026
7a8974b
fix(mobile): reconcile concurrent legacy terminal closes with current…
Oct 22, 2026
1262402
fix(wsl): run the CLI bridge through the \\wsl$\ script path
Oct 1, 2026
1b36590
fix(wsl): leave an already-\\wsl$ or drive-letter bridge path unchanged
Oct 1, 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.
107 changes: 99 additions & 8 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,12 +1,103 @@
/config/scripts/create-draft-release.mjs text eol=lf
/config/scripts/orca-dev.mjs text eol=lf
/config/scripts/latest-stable-release.mjs text eol=lf
/config/scripts/publish-complete-draft-releases.mjs text eol=lf
/config/scripts/release-rc-history.mjs text eol=lf
/config/scripts/run-internal-dev-setup.mjs text eol=lf
/config/scripts/verify-cli-bin.mjs text eol=lf
/config/scripts/verify-release-required-assets.mjs text eol=lf
# 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.
/config/scripts/**/*.mjs text eol=lf
/skill-guides/*.md text eol=lf
/skill-stubs/*.md text eol=lf
/skill-stubs/_shared/*.md text eol=lf
/skills/*/SKILL.md text eol=lf
/src/cli/bundled-skill-guides.ts text eol=lf
# SVG bytes feed embedded data URLs and asset hashes on every build host.
*.svg text eol=lf
# Compiler input line breaks must not depend on the checkout OS.
*.ts text eol=lf
*.tsx text eol=lf
*.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.
/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.
/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.
/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.
/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.
/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.
/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.
/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.
/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/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.
/mobile/src/**/*.png -text
/mobile/src/**/*.jpg -text
/mobile/src/**/*.jpeg -text
/mobile/src/**/*.gif -text
/mobile/src/**/*.ico -text
/mobile/src/**/*.webp -text
/mobile/src/**/*.ttf -text
/mobile/src/**/*.otf -text
/mobile/src/**/*.woff -text
/mobile/src/**/*.woff2 -text
/mobile/app/**/*.png -text
/mobile/app/**/*.jpg -text
/mobile/app/**/*.jpeg -text
/mobile/app/**/*.gif -text
/mobile/app/**/*.ico -text
/mobile/app/**/*.webp -text
/mobile/app/**/*.ttf -text
/mobile/app/**/*.otf -text
/mobile/app/**/*.woff -text
/mobile/app/**/*.woff2 -text
/mobile/web-entry/**/*.png -text
/mobile/web-entry/**/*.jpg -text
/mobile/web-entry/**/*.jpeg -text
/mobile/web-entry/**/*.gif -text
/mobile/web-entry/**/*.ico -text
/mobile/web-entry/**/*.webp -text
/mobile/web-entry/**/*.ttf -text
/mobile/web-entry/**/*.otf -text
/mobile/web-entry/**/*.woff -text
/mobile/web-entry/**/*.woff2 -text

# Generated ACP schemas are checked byte-for-byte against formatted output.
/src/main/acp/generated/*.generated.ts linguist-generated=true text eol=lf
# Generated skill bundle artifacts are verified byte-for-byte against fresh output.
/resources/skills/*.json linguist-generated=true text eol=lf
# Vitest writes snapshots with LF, so checkout bytes must match on every host.
**/__snapshots__/*.snap text eol=lf
10 changes: 10 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# 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
72 changes: 62 additions & 10 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,56 @@ Thanks for contributing to Orca.

## Local Setup

Install Node 24, pnpm, and the Bun version in [`config/.bun-version`](../config/.bun-version).
`pnpm test` runs Vitest on Bun, with Node workers for runtime contracts such as SQLite,
native PTYs, socket liveness, and V8 memory behavior. `pnpm test:node` runs the same suites
entirely on Node. Builds and dependency installation still use Node and pnpm.

```bash
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.

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.

Linux `pnpm build`, `pnpm build:native`, and Linux packaging require a running Docker
daemon to build the clipboard helper against Ubuntu 20.04 rather than the host's
newer libraries. A verified cached helper can be reused without Docker. For native
Wayland development, run `pnpm build:native` before `pnpm dev` to make text copying
available. See the [clipboard build guide](../native/wayland-clipboard/README.md#building-and-testing).
macOS and Windows builds do not use this helper or require Docker for it.

## Branch Naming

Use a clear, descriptive branch name that reflects the change.
Expand All @@ -44,6 +89,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 All @@ -52,21 +106,20 @@ If your change affects UI or interaction behavior, verify it on the platforms it

Project-owned type declarations belong in `.ts` files. `.d.ts` is reserved for ambient shims (e.g., `env.d.ts`, `vite/client.d.ts`). TypeScript's `skipLibCheck: true` setting applies globally, including to our own `.d.ts` files, which means any unresolved type reference in a `.d.ts` silently becomes `any` at its call sites. Write your types in `.ts` files so the compiler actually checks them.

CI enforces this for `src/preload/` and `src/shared/` — see `docs/preload-typecheck-hole.md`.
CI enforces this for `src/preload/` and `src/shared/`.

## Pull Requests

Each pull request should:
Each pull request should follow [`.github/pull_request_template.md`](./pull_request_template.md). In particular:

- explain the user-visible change
- stay focused on a single topic when possible
- include screenshots or screen recordings for new UI or behavior changes
- if you are an outside contributor, link the issue your PR addresses
- open with an ELI5 of the change (plain language paragraph; the PR title is the one-liner)
- explain what changed and why, and stay focused on a single topic when possible
- for any UI or interaction change, attach **before and after** screenshots (or short videos); if there is no visual or interaction change, write `N/A` and briefly explain why
- include high-quality tests when behavior changes or bug fixes warrant them
- include a brief code review summary from your AI coding agent that explicitly checks cross-platform compatibility, SSH/remote/local compatibility, supported agent and integration compatibility, performance risk, UI quality when applicable, and basic security risk
- mention any platform-specific, remote/SSH-specific, agent-specific, integration-specific, or git-provider-specific behavior and testing notes
- **Include your X (Twitter) handle!** We love giving shoutouts to our contributors when we merge features on [@orca_build](https://x.com/orca_build).

If there is no visual change, say that explicitly in the PR description.
- **Include your X (Twitter) handle** in the PR template Author section — we shout out contributors when we merge features on [@orca_build](https://x.com/orca_build).

## Release Process

Expand Down Expand Up @@ -103,7 +156,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 All @@ -114,7 +167,6 @@ All stable kinds (`patch`, `minor`, `major`) are computed off the latest _stable

The scheduled 2x/day RC cron in [`release-rc.yml`](../../actions/workflows/release-rc.yml) is independent and continues to run automatically from `main`.


## Release Channels

The public Homebrew cask tracks stable desktop releases:
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ body:
value: |
Use this form for Orca bugs. Include enough detail for someone else to reproduce the issue.

Please write your issue in English.

- type: dropdown
id: os
attributes:
Expand Down
2 changes: 2 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ body:
value: |
Use this form for new features or workflow improvements.

Please write your issue in English.

- type: textarea
id: problem
attributes:
Expand Down
5 changes: 5 additions & 0 deletions .github/ISSUE_TEMPLATE/other.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ name: Other
description: Report another Orca issue type
title: '[Other]: '
body:
- type: markdown
attributes:
value: |
Please write your issue in English.

- type: textarea
id: details
attributes:
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
Loading