Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
3486 commits
Select commit Hold shift + click to select a range
c7f722b
fix(pairing): offer only addresses the runtime listener answers (#31447)
nwparker Oct 21, 2026
9577c53
fix(ssh): a managed host's 'no desktop is sharing its browser' error …
nwparker Oct 21, 2026
46b83a9
fix(mobile): drag terminal selection with the long-press finger (#31433)
nwparker Oct 21, 2026
8b9ba72
fix(mobile): retire stale terminal stream fits and callbacks (#31432)
nwparker Oct 21, 2026
920a033
fix(native-chat): typing fast after focus moves keeps keys in order (…
brennanb2025 Oct 21, 2026
7f21cc9
fix(codex): Codex copy from a remote pane reaches the viewer clipboar…
nwparker Oct 21, 2026
e2bcd6e
Reuse Windows server native prebuilds across app version bumps (#31450)
nwparker Oct 21, 2026
0dbc6aa
fix(mobile): select Unicode words at rendered cell boundaries (#31434)
nwparker Oct 21, 2026
ea401d7
fix(mobile): restore dictation after iOS audio interruptions (#31435)
nwparker Oct 21, 2026
21322a5
fix(mobile): cancel stale shortcut list drags (#31436)
nwparker Oct 21, 2026
7a2057e
fix(mobile): retire old touch gestures before snapshot replay (#31437)
nwparker Oct 21, 2026
11a1cc4
fix(mobile): load folder workspace agent presets on the correct host …
nwparker Oct 21, 2026
251bbf7
fix(mobile): mount sessions with saved preferences (#31443)
nwparker Oct 21, 2026
efcf8f0
fix(mobile): keep terminal scroll gestures from becoming taps (#31445)
nwparker Oct 21, 2026
0cba9f2
fix(mobile): render offline Nerd Font symbols on first terminal displ…
nwparker Oct 21, 2026
26bf128
fix(terminal): repaint desktop after phone fit ends (#31451)
nwparker Oct 21, 2026
a58789d
fix(mobile): keep a Codex chat addressable under Codex's own idle tit…
nwparker Oct 21, 2026
84af8ef
fix(mobile): apply desktop WebGL atlas fixes to current engine (#31441)
nwparker Oct 21, 2026
582efa7
fix(i18n): correct Korean sleep with descendants wording (#31456)
leo-yt-upstage Oct 21, 2026
29a1446
fix(i18n): clarify Japanese phone control and connection wording (#31…
nwparker Oct 21, 2026
bbc8303
A running agent's resume note is not a sleep, so switch-on builds rep…
Jinwoo-H Oct 21, 2026
c149395
fix(remote-terminal): repaint an idle full-screen program when a reco…
nwparker Oct 21, 2026
abce679
feat(accounts): add Claude and Codex accounts on a remote server from…
nwparker Oct 21, 2026
2eae220
refactor(renderer): read workspace records through typed selectors (#…
Jinwoo-H Oct 21, 2026
e208c47
perf(wsl-host): open the stdio bridge without re-probing the distro's…
nwparker Oct 21, 2026
5dd5294
perf(orcad): keep the server bundle ASCII so V8 stores it at half the…
nwparker Oct 21, 2026
ad269f4
A paired desktop shows a server's browser tab without opening a secon…
Jinwoo-H Oct 21, 2026
fd8b2dc
fix(splits): dim terminals and chats on the unfocused side like edito…
brennanb2025 Oct 21, 2026
6970cad
feat(browser): ask before sites use camera, mic or location (#31158)
AmoabaKelvin Oct 21, 2026
de7a2d2
Phones get main's tab order, groups and names after every layout chan…
Jinwoo-H Oct 21, 2026
50b07c0
fix(relay-ops): keep one stalled director instance from tripping the …
Jinwoo-H Oct 21, 2026
92bbb38
Sidebar: land the switch-on fixes from the flip branch on main, switc…
Jinwoo-H Oct 21, 2026
cfd9e9c
Editor tabs main-first: the window asks main for every editor tab cha…
Jinwoo-H Oct 21, 2026
84a9f99
Sidebar P2: main publishes without waiting on git, and every source a…
Jinwoo-H Oct 21, 2026
0eb2403
Main closes, renames, sleeps and starts new tabs' terminals itself, w…
Jinwoo-H Oct 21, 2026
3086fe2
test(daemon): keep socket backpressure accounting pending through ass…
brennanb2025 Oct 21, 2026
8174208
fix(terminal): every start in a deleted folder opens at the workspace…
brennanb2025 Oct 21, 2026
899ed41
Create worktree, Create folder and continuation pickers offer each ag…
brennanb2025 Oct 21, 2026
0985d6f
fix(sidebar): a worktree card fetches its Linear issue again only whe…
brennanb2025 Oct 21, 2026
d4a7494
A Codex chat shows the turns made outside it (#30883)
brennanb2025 Oct 21, 2026
3d6a945
Mobile chat composer uses desktop's placeholder (#31425)
brennanb2025 Oct 21, 2026
dde7bf8
fix(runtime): renaming a terminal no longer hides its running agent (…
AmoabaKelvin Oct 21, 2026
ba8f237
fix(mobile): phone terminal and chat tab names match the desktop (#31…
AmoabaKelvin Oct 21, 2026
e3ae41b
fix(session-history): Pi and OMP keep their own agent on a transcript…
AmoabaKelvin Oct 21, 2026
8f8c0ab
fix(mobile): show the saved restore delay in Terminal settings (#31361)
AmoabaKelvin Oct 21, 2026
cdb032e
fix(mobile): New Tab drawer reopens with its agents and refreshes the…
AmoabaKelvin Oct 21, 2026
22154de
feat(mobile): tab strip shows terminal and chat agent state, reveals …
AmoabaKelvin Oct 21, 2026
52f6960
fix(mobile): closing the tab a phone shows returns it to the tab it v…
AmoabaKelvin Oct 21, 2026
3b02945
fix(native-chat): floating-panel chats started from a phone show on t…
AmoabaKelvin Oct 21, 2026
2b1da76
fix(mobile): a windowless server warns about unwakeable agents only w…
Jinwoo-H Oct 21, 2026
5d713eb
fix(session-search): Project search works for projects with hundreds …
Jinwoo-H Oct 21, 2026
dafed6b
fix(orcad): hold terminal admission through a server stop; fence roll…
nwparker Oct 21, 2026
b3f1607
Remove directional tab-close actions and tracking (#31599)
AmethystLiang Oct 21, 2026
47bb876
docs(mobile): clarify buffered terminal autocomplete scope (#31347)
nwparker Oct 21, 2026
78bc1e5
Clarify locked mobile settings and preserve selected option visibilit…
AmethystLiang Oct 21, 2026
2e4af3f
chore(ratchet): drop the stale owner-adapter focus seed and prune the…
nwparker Oct 21, 2026
7a06b65
Remote .tsx files parse as TSX and imports no longer resolve to local…
nwparker Oct 21, 2026
1db95e3
fix(terminal): stamp ORCA_WORKSPACE_ID on every terminal main creates…
Jinwoo-H Oct 21, 2026
6788612
refactor(ssh): delete SSH and orcad helpers nothing calls (#31629)
nwparker Oct 21, 2026
b128cbb
fix(chat): route OMP question cards to terminal (#31440)
nwparker Oct 21, 2026
ae64a21
Add Brazilian Portuguese UI localization (#31627)
AmethystLiang Oct 21, 2026
7d43ed9
refactor(orcad): share one unverifiable terminal census (#31633)
nwparker Oct 21, 2026
cd8b289
chore(runtime): delete exports nothing reads (#31639)
nwparker Oct 21, 2026
f9aeb34
refactor(ssh): import SSH and orcad names from the modules that defin…
nwparker Oct 21, 2026
553a704
refactor(execution-host): one resolver for the SSH target a repo row …
nwparker Oct 21, 2026
8e89202
fix(runtime): resolve a repo's SSH host instead of reading raw connec…
nwparker Oct 21, 2026
7511300
fix(ssh): name what blocks an SSH host's move, and offer Move anyway …
nwparker Oct 21, 2026
87ca5da
refactor(repo-host): one helper for the hosts registering a repo id (…
nwparker Oct 21, 2026
524fa00
Preview HTML files by default (#31575)
AmethystLiang Oct 21, 2026
65035bc
fix(mobile): extend the final terminal row background into its remain…
nwparker Oct 21, 2026
0b82f88
fix(mobile): dispatch leading terminal scroll without a timer (#31472)
nwparker Oct 21, 2026
e7d77e8
refactor(orcad): name the remote install helpers for what they instal…
nwparker Oct 21, 2026
fba3af0
docs(ssh): describe the orcad connect path without the removed relay …
nwparker Oct 21, 2026
554862d
refactor(orcad): use the shared error and liveness helpers instead of…
nwparker Oct 21, 2026
c054e94
refactor(renderer): name the owner adapters for what they do (resolve…
nwparker Oct 21, 2026
83f163e
The default agent can be set to open as a chat or a CLI (#31590)
brennanb2025 Oct 21, 2026
afcb385
ci: install verified fish 4 directly for shell contracts (#31581)
brennanb2025 Oct 21, 2026
50f72bd
fix(editor): list unsaved editor files before a workspace removal clo…
nwparker Oct 21, 2026
d6c9396
Saves are never cancelled, and Don't Save always keeps discarded text…
nwparker Oct 21, 2026
75b1460
fix(agents): preserve Cursor identity across imported Claude hooks
nwparker Oct 21, 2026
4a671db
fix(native-chat): retire ghost queued continuation bubbles
nwparker Oct 21, 2026
2d9da84
fix(runtime): keep desktop take-back from stale phone input
nwparker Oct 21, 2026
a33d596
fix(mobile): open Create Workspace after source drawer closes
nwparker Oct 21, 2026
e728d2c
refactor(terminal): no catalog-less fail-open to the focused runtime …
nwparker Oct 21, 2026
92ef7be
fix(mobile): retain terminal reading position after resume (#31661)
nwparker Oct 21, 2026
f63e56a
Trim unused rules from the editor's same-file check (keep WSL folding…
nwparker Oct 21, 2026
88aa3f2
docs: track sequential module organization cleanup (#31670)
nwparker Oct 21, 2026
1b42c4c
fix(relay-ops): make each reserve-watch sample one Cloud Logging read…
Jinwoo-H Oct 21, 2026
7b1d753
fix(relay): release a drained host before telling it to leave (#31572)
Jinwoo-H Oct 21, 2026
2b716f6
fix(mobile): attach Codex images when agent identity is missing (#31370)
nwparker Oct 21, 2026
15246eb
refactor(ssh): the SSH host finder draws its overflow through the hos…
nwparker Oct 21, 2026
80b9dca
fix(mobile): keep terminal wait feedback visible with a draft (#31658)
nwparker Oct 21, 2026
15b2cd5
refactor(ipc): group Linear handlers with direct owner imports (#31673)
nwparker Oct 21, 2026
e29c353
feat(settings): add local search to the release build picker (#31678)
AmethystLiang Oct 21, 2026
90b8640
fix(mobile): recover workspace capabilities after transient probe fai…
nwparker Oct 21, 2026
7df3ff7
fix(sidebar): keep each host's activity, PR lane and retention apart …
Jinwoo-H Oct 21, 2026
d22fb0d
refactor(ipc): group Jira handlers with concrete owner imports (#31680)
nwparker Oct 21, 2026
fcac5cf
refactor(native-chat): one shared parser for the approval envelope (#…
Jinwoo-H Oct 21, 2026
926decd
refactor(jira): group attachment modules with concrete owner imports …
nwparker Oct 21, 2026
10d4104
Repair only the damaged parts of a profile instead of rolling back th…
brennanb2025 Oct 21, 2026
a57e027
fix(orcad): one update decision for SSH and WSL, with connect, Update…
nwparker Oct 21, 2026
bc7c154
docs(readme): update star history chart to 2026-10-21 (#31701)
Jinwoo-H Oct 21, 2026
5f50b95
fix: remediate dependency security advisories across workspaces (#31681)
nwparker Oct 21, 2026
f6fc6d0
fix(mobile): use port 443 for explicit WSS host edits (#31659)
nwparker Oct 21, 2026
98007cb
refactor(sidebar): one shared feed client for the desktop window and …
Jinwoo-H Oct 21, 2026
bd0f326
feat(sidebar): one lifecycle line per workspace in main, with in-prog…
Jinwoo-H Oct 21, 2026
82512a4
fix(pairing): normalize base64 consistently across clients (#31465)
nwparker Oct 21, 2026
1543074
fix(mobile): isolate file review composers by document (#31698)
nwparker Oct 21, 2026
74d11d9
fix(mobile): preserve notification changes across delayed focus reads…
nwparker Oct 21, 2026
41fb3c7
fix(mobile): retire host edit navigation after leaving the route (#31…
nwparker Oct 21, 2026
d085427
Keep model choices coherent across Claude updates (#30107)
brennanb2025 Oct 21, 2026
06861d9
feat(browser): Chrome-style new tab and address bar suggestions (#31604)
AmoabaKelvin Oct 21, 2026
7e795b6
feat(browser): show every page load, link clicks included, as a line …
AmoabaKelvin Oct 21, 2026
c5e07bc
feat(browser): per-site appearance and zoom, from the page menu and C…
AmoabaKelvin Oct 21, 2026
106716c
fix(mobile): say why a terminal paste sent nothing (#31640)
AmoabaKelvin Oct 21, 2026
54ef452
feat(mobile): load earlier chat messages on scroll-up, keeping the re…
AmoabaKelvin Oct 21, 2026
e34b370
feat(browser): new tab page with a workspace card and suggested sites…
AmoabaKelvin Oct 21, 2026
d15677e
fix(native-chat): Codex async questions show an answer card on deskto…
AmoabaKelvin Oct 21, 2026
4ed095d
refactor(linear): group issue-context reads under concrete owners (#3…
nwparker Oct 21, 2026
79c4b46
fix(browser): bring the address bar back under the 400-line limit (#3…
Jinwoo-H Oct 22, 2026
f47f632
feat(mobile): Home's New Workspace opens the desktop's create drawer …
Jinwoo-H Oct 22, 2026
eb9d2f9
fix(security): update Node runtimes for October security releases (#3…
nwparker Oct 22, 2026
b174776
fix(agent-status): questions over 16 KB show their card with every op…
AmoabaKelvin Oct 22, 2026
b0fcdb4
fix(omp): show OMP's plan review as a plan card and answer it from ch…
AmoabaKelvin Oct 22, 2026
aad1fe0
fix(mobile): invalidate chat file search on authority migration (#31702)
nwparker Oct 22, 2026
a3c9958
fix(mobile): show commit comparison failures with retry (#31706)
nwparker Oct 22, 2026
718fb9f
Extract shared image clipboard copy utility (#31600)
AmethystLiang Oct 22, 2026
50da78a
fix(mobile): detect New Workspace agents in the selected repo runtime
nwparker Oct 22, 2026
250f81a
fix(mobile): own commit generation by workspace and admit once (#31709)
nwparker Oct 22, 2026
7a8974b
fix(mobile): reconcile concurrent legacy terminal closes with current…
nwparker Oct 22, 2026
ad0bf9a
fix(native-chat): open inline images directly in preview dialog (#31620)
AmethystLiang Oct 22, 2026
0367273
Fix terminal URLs split across padded output rows (#31713)
nwparker Oct 22, 2026
0834610
fix(mobile): reset agent history when switching desktops (#31695)
nwparker Oct 22, 2026
349e3d1
Agents need only a minimum version for chat; newer releases and prere…
brennanb2025 Oct 22, 2026
2a45fdc
fix(mobile): capture Android terminal keyboard controls (#31666)
nwparker Oct 22, 2026
9738dc6
Bring main back under the line limits (main lint is red) (#31729)
brennanb2025 Oct 22, 2026
ec546de
fix(sidebar): remove redundant host badges in every grouping (#31744)
nwparker Oct 22, 2026
ea42a20
fix(mobile): distinguish delayed dial deadlines from unreachable hosts
nwparker Oct 22, 2026
9249708
Offer back unsaved edits when a workspace is removed without a prompt…
nwparker Oct 22, 2026
bc60f69
ci: fix protected-main downloads badge updates (#31747)
nwparker Oct 22, 2026
01456c1
refactor(browser): group Chromium cookie import stages (#31730)
nwparker Oct 22, 2026
a8dff64
chore: remove unused shadcn generator dependency (#31737)
nwparker Oct 22, 2026
84cafff
Stale delayed edits in notebook and rich Markdown views no longer ove…
nwparker Oct 22, 2026
bf0f7f5
feat(connectors): add an off-by-default experimentalConnectors settin…
Jinwoo-H Oct 22, 2026
ea10994
fix(terminal): link a framed multi-row URL when an overlay shows thro…
mmarabel Oct 22, 2026
ed13ca1
Layout groundwork (switched off): main starts and restores every pane…
Jinwoo-H Oct 22, 2026
75e1f1c
fix(wsl-host): prove an unrecorded orcad by kernel identity before ad…
nwparker Oct 22, 2026
7a912a3
Autosave relies on the guarded save instead of pause flags; identical…
nwparker Oct 22, 2026
5793b05
fix(ssh): keep the enrolled pairing across a managed server's update,…
nwparker Oct 22, 2026
99d18f7
Browser, chat and simulator tabs main-first: the window asks main for…
Jinwoo-H Oct 22, 2026
56143a9
feat(ssh): open a plain SSH terminal to a host whose move to its Orca…
nwparker Oct 22, 2026
95d9682
fix(ci): prepare historical VM rollback snapshots (#31775)
nwparker Oct 22, 2026
a53c2a2
Add onboarding language selection (#31784)
AmethystLiang Oct 22, 2026
5c5f9a2
Update cloud relay runtimes, providers and security checks (#31753)
nwparker Oct 22, 2026
8ba1c9b
fix(ci): restore cloud and main checks during pnpm registry outages (…
nwparker Oct 22, 2026
0947c49
fix(wsl): forward ORCA_WORKSPACE_ID into WSL shells like the other pa…
Jinwoo-H Oct 22, 2026
4c949cd
fix(session-tabs): a confirmed close of a pinned tab in a server work…
Jinwoo-H Oct 22, 2026
307f0cd
Move Relay deployment configuration into private cloud operations (#3…
nwparker Oct 22, 2026
301059f
fix(onboarding): preserve system language in both experiment cohorts …
AmethystLiang Oct 22, 2026
d44ee0e
fix(session-tabs): a phone keeps a desktop's untitled markdown tab re…
Jinwoo-H Oct 22, 2026
fc9f826
chore: remove redundant Tiptap extension wrappers (#31748)
nwparker Oct 22, 2026
f719ec0
fix(mobile): persist browser destination in user selection order (#31…
nwparker Oct 22, 2026
f49cddc
fix(mobile): retain setup choices across repository refreshes (#31694)
nwparker Oct 22, 2026
aec02a7
fix(mobile): refresh nested file caches and keep deep names reachable…
nwparker Oct 22, 2026
d8e997c
fix(mobile): keep newer quick-command edits when an earlier save fini…
nwparker Oct 22, 2026
3cca64b
fix(mobile): keep a closed branch preview from reopening when loading…
nwparker Oct 22, 2026
60f5cd7
fix(mobile): announce locked picker notice on iOS (#31674)
AmethystLiang Oct 22, 2026
0a7d6bb
refactor(main): group ephemeral VM lifecycle modules (#31771)
nwparker Oct 22, 2026
dfa8788
fix(i18n): restore localized editor safety copy (#31259)
AmethystLiang Oct 22, 2026
b077808
fix(i18n): recover language selection after rejected catalog loads (#…
AmethystLiang Oct 22, 2026
35596d1
chore: replace electron-toolkit utilities with Electron APIs (#31824)
nwparker Oct 22, 2026
eba0124
[mem] Backpressure worker subprocess output without dropping bytes (#…
OrcaWin Oct 22, 2026
70ab09c
refactor(settings): group repository identity modules (#31830)
nwparker Oct 22, 2026
aa5594d
fix(native-chat): handle inline image preview edge cases (#31742)
AmethystLiang Oct 22, 2026
f9c9ced
ci: declare read-only workflow token permissions (#31836)
nwparker Oct 22, 2026
b342d29
test: drop obsolete streamparser dependency (#31835)
nwparker Oct 22, 2026
019ff40
ci: deny cache writes from benchmark candidate code (#31838)
nwparker Oct 22, 2026
6c6ad75
ci: vet adhoc source before build preparation (#31839)
nwparker Oct 22, 2026
8aa7f9c
Combine untracked files into Changes (#31831)
AmethystLiang Oct 22, 2026
8b6f31c
Stabilize pending admission refusal option retry test (#31840)
AmethystLiang Oct 22, 2026
6698df3
Polish explorer search layout and collapsible filters (#31825)
nwparker Oct 22, 2026
8b5c732
ci: skip relay integration for renderer-only PRs (#31842)
nwparker Oct 22, 2026
ad4952e
ci: retire completed relocation and pnpm cache experiments (#31843)
nwparker Oct 22, 2026
9b060eb
fix(i18n): preserve runtime entries after removing untracked settings…
nwparker Oct 22, 2026
051221c
fix(mobile): preserve prompt taps after terminal scrolling (#31471)
nwparker Oct 22, 2026
57ecdc2
fix(ssh): say what plain SSH is for beside its button, and polish the…
nwparker Oct 22, 2026
42da9f4
refactor(mobile): group platform-seam analysis tools (#31845)
nwparker Oct 22, 2026
8e1ee11
ci: avoid global fan-out for routing test changes (#31856)
nwparker Oct 22, 2026
1769476
fix(wsl-host): pair again from the distro when a WSL host refuses the…
nwparker Oct 22, 2026
01db1b8
Main titles agent tabs and applies phone tab moves itself, and tab mo…
Jinwoo-H Oct 22, 2026
70e997f
refactor(runtime): resolve a watched repo's host through the canonica…
nwparker Oct 22, 2026
57f1fce
refactor(runtime): type worktree query stores with checked guards ins…
nwparker Oct 22, 2026
73841a0
fix(worktrees): pick a repo's catalog watcher transport from its reso…
nwparker Oct 22, 2026
95f8f73
ci: include retry attempts in runner demand reports (#31865)
nwparker Oct 22, 2026
9e1ffb2
fix(plugins): validate example panel reply dispatch (#31877)
nwparker Oct 22, 2026
7ff3a07
fix(docs): avoid backtracking in excerpt link destinations (#31884)
nwparker Oct 22, 2026
3d1b8e3
fix(ci): restrict manual candidate test workflows to read-only caches…
nwparker Oct 22, 2026
005060a
refactor(relay): group assignment cleanup and diagnostics (#31871)
nwparker Oct 22, 2026
7e967c8
refactor(ssh): split host key verification, the ssh2 handshake, the s…
nwparker Oct 22, 2026
0964562
refactor(orcad): drop the toolchain probe's unread toolchainMissing v…
nwparker Oct 22, 2026
66e50e2
fix(images): avoid backtracking in data URI parameter parsing (#31882)
nwparker Oct 22, 2026
213bc46
ci: distinguish indirect unit inputs from comments and data (#31876)
nwparker Oct 22, 2026
2078db9
ci: check dependency vulnerabilities on PRs and stable releases (#31858)
nwparker Oct 22, 2026
43c3258
refactor(orcad): stop exporting declarations used only inside their o…
nwparker Oct 22, 2026
7c34a48
fix(native-chat): show a prompt hook's block as its own row for every…
brennanb2025 Oct 22, 2026
e6ce82f
test: isolate Windows tree-kill load fixture startup and cleanup (#31…
nwparker Oct 22, 2026
e4959a6
ci: canary a smaller WSL distro matrix for runtime changes (#31873)
nwparker Oct 22, 2026
d5d9170
refactor(managed-server): stop exporting declarations used only insid…
nwparker Oct 22, 2026
4778133
ci: share the mobile bundle across SSH Windows host cells (#31883)
nwparker Oct 22, 2026
33ec2ba
fix(claude): close a cancelled approval card when the journal drains …
brennanb2025 Oct 22, 2026
f6585a3
Keep Session History checking totals fixed throughout a scan (#30949)
brennanb2025 Oct 22, 2026
6cd2550
refactor(native-chat): share the catch-up open runner across agents (…
brennanb2025 Oct 22, 2026
8d6ad5f
Keep push busy-device lookup correlated to its existing index (#31899)
nwparker Oct 22, 2026
f3f12a8
refactor(ssh): stop exporting declarations used only inside their own…
nwparker Oct 22, 2026
8e7b08c
refactor(ssh): delete the unused SFTP session late-error latch (#31909)
nwparker Oct 22, 2026
4165c95
Layout groundwork (switched off): main tells the window whether its s…
Jinwoo-H Oct 22, 2026
a164f42
fix(ci): exclude inherited job results from runner demand (#31919)
nwparker Oct 22, 2026
e5f2123
refactor(shared): delete exports nothing reads (#31917)
nwparker Oct 22, 2026
dcf2795
refactor(ssh): keep the connection step host types private and justif…
nwparker Oct 22, 2026
dc315a4
refactor(ssh): remove the dead SSH filesystem provider and desktop SS…
nwparker Oct 22, 2026
4c80dac
refactor(tasks): colocate GitLab task-page loading (#31907)
nwparker Oct 22, 2026
8967b10
chore: remove verified dead code and calibrate Knip entries (#31903)
nwparker Oct 22, 2026
d33b170
refactor(ssh): move the reconnect ladder and session channel opening …
nwparker Oct 22, 2026
041183a
Use retention indexes before limiting push expiry batches (#31921)
nwparker Oct 22, 2026
ea60ec5
Layout-owner builds: a phone's tab move is always the server's own; n…
Jinwoo-H Oct 22, 2026
ca9abc6
refactor(jira): colocate JQL predicate composition (#31933)
nwparker Oct 22, 2026
c8d0f99
fix(orcad): name a missing shared library when the pinned Node runtim…
nwparker Oct 22, 2026
d8aeb1f
fix(claude-accounts): restart WSL Claude panes after an account switc…
nwparker Oct 22, 2026
aeb96c5
fix(session-tabs): mark re-sent held closes as replays for hosts that…
nwparker Oct 22, 2026
0b4f2d9
fix(ssh): editing project groups no longer marks a moved host as chan…
nwparker Oct 22, 2026
8e96904
fix(orcad): ship computer use with the server and say when it is unav…
nwparker Oct 22, 2026
6a9a80a
feat(telemetry): daily aggregate WSL usage snapshot on Windows (#31406)
nwparker Oct 22, 2026
54b5dbe
refactor(renderer): colocate Linear issue empty-state policy (#31960)
nwparker Oct 22, 2026
abc0c74
fix(push): bound claim transactions before background admission (#31955)
nwparker Oct 22, 2026
a3fa44a
fix(push): honor "only when desktop is away" on headless orca serve (…
nwparker Oct 22, 2026
2c93754
A paired desktop keeps the tabs it created in a server workspace draw…
Jinwoo-H Oct 22, 2026
92c8f3c
fix(ssh): stop floating terminal metadata from blocking SSH access li…
nwparker Oct 22, 2026
54acda1
Editor buffers ready for sharing: autosave per record, separate model…
nwparker Oct 22, 2026
48660ae
fix(packaging): keep ssh2's Windows-only Pageant files out of macOS a…
nwparker Oct 22, 2026
15d663f
Test runner uses the repo's pinned Bun, and refuses an older one inst…
Jinwoo-H Oct 22, 2026
885cd6f
Tabs of the same file share one record of unsaved edits (#31974)
nwparker Oct 22, 2026
2583e46
A browser tab opened in a server workspace drawn from the server's la…
Jinwoo-H Oct 22, 2026
8556d11
Conflict review shows the file's live unsaved text from any workspace…
nwparker Oct 22, 2026
32370a5
fix(terminal): settle a restored remote pane whose host session alrea…
nwparker Oct 22, 2026
c30fa62
refactor(tooling): group mobile web preview and evidence tools (#31976)
nwparker Oct 22, 2026
4dd97f0
A paired desktop's tab moves, splits, resizes, props and renames in a…
Jinwoo-H Oct 22, 2026
d053ff9
refactor: colocate mobile web route and bundle tooling (#32008)
nwparker Oct 22, 2026
ec5eaf9
refactor: colocate provider retry transcript rules (#32024)
nwparker Oct 22, 2026
1a247d1
Merge upstream main (ec5eaf96c1) into swaplabs/main
kiwidream Oct 22, 2026
69e3ed0
LOCAL: sync review: format swaplabs-fork-builds.md for upstream's oxf…
kiwidream Oct 22, 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.
15 changes: 14 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -7,13 +7,18 @@
/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).
/config/relay-assets/** text eol=lf
# 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
Expand Down Expand Up @@ -41,6 +46,7 @@
# 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
Expand Down Expand Up @@ -88,3 +94,10 @@
/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
56 changes: 53 additions & 3 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,55 @@ 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.
See [the install policy](../docs/reference/pnpm-install-policy.md).

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

Expand All @@ -49,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 @@ -63,9 +112,10 @@ CI enforces this for `src/preload/` and `src/shared/`.

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

- 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 change, say `No visual change` and why
- 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
Expand Down Expand Up @@ -106,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 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
42 changes: 42 additions & 0 deletions .github/actions/download-pinned-orca-release/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Download pinned Orca release
description: Downloads a released Linux .deb, checks its SHA-512, extracts it and points ORCA_CROSS_VERSION_PACKAGED_EXECUTABLE at its executable.

inputs:
version:
description: Release version without the leading v (e.g. 1.4.224).
required: true
sha512:
description: Base64 SHA-512 of orca-ide_<version>_amd64.deb.
required: true
github-token:
description: Token for gh release download.
required: true

runs:
using: composite
steps:
- name: Download and verify
shell: bash
env:
GH_TOKEN: ${{ inputs.github-token }}
ORCA_PINNED_VERSION: ${{ inputs.version }}
ORCA_PINNED_SHA512: ${{ inputs.sha512 }}
run: |
gh release download "v$ORCA_PINNED_VERSION" --repo stablyai/orca --pattern "orca-ide_${ORCA_PINNED_VERSION}_amd64.deb" --dir "$RUNNER_TEMP/old-orca"
python3 - <<'PYVERIFY'
import base64,hashlib,os,pathlib,subprocess
version=os.environ['ORCA_PINNED_VERSION']
root=pathlib.Path(os.environ['RUNNER_TEMP'])/'old-orca'
package=root/f'orca-ide_{version}_amd64.deb'
digest=hashlib.sha512()
with package.open('rb') as archive:
for block in iter(lambda: archive.read(1024*1024), b''):
digest.update(block)
assert base64.b64encode(digest.digest()).decode()==os.environ['ORCA_PINNED_SHA512']
extracted=root/'extracted'
subprocess.run(['dpkg-deb','-x',str(package),str(extracted)],check=True)
executable=extracted/'opt'/'Orca'/'orca-ide'
assert executable.is_file() and os.access(executable,os.X_OK)
with open(os.environ['GITHUB_ENV'],'a') as env: env.write('ORCA_CROSS_VERSION_PACKAGED_EXECUTABLE='+str(executable)+'\n')
print('Verified old package:',executable)
PYVERIFY
Loading