Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
207 commits
Select commit Hold shift + click to select a range
2fc0dcd
test(daemon): run the stalled-reader backpressure test over a Unix so…
brennanb2025 Oct 21, 2026
9af1ac8
A screenshot dragged into a chat lives as long as the chat (#30419)
brennanb2025 Oct 21, 2026
c93514d
refactor(protocol): each area owns its published runtime capability l…
brennanb2025 Oct 21, 2026
d1aeba9
Native chat: remove unused journalCheckpoint and setConversationComma…
brennanb2025 Oct 21, 2026
1a0e1e9
PR conflict previews fetch the base branch through the shared fetch c…
brennanb2025 Oct 21, 2026
583805f
Update AGENTS.md (#31288)
nwparker Oct 21, 2026
29e5504
build(cli): typecheck the CLI by following its imports, not a hand li…
brennanb2025 Oct 21, 2026
3098f66
docs: format AGENTS.md so the formatting check passes on main (#31294)
nwparker Oct 21, 2026
d6bc6cb
fix(process-host): let a slow Windows taskkill finish instead of orph…
nwparker Oct 21, 2026
9e04a98
refactor(wsl-hosts): add flow in wsl-host-registration; liveness spli…
nwparker Oct 21, 2026
ceb2a6c
docs: add test anti-pattern reference (#31277)
nwparker Oct 21, 2026
ecee346
Add the rules that decide which editor tabs are the same file (phase …
nwparker Oct 21, 2026
c35ff35
perf(ci): accelerate adhoc release builds and runner scheduling (#31297)
nwparker Oct 21, 2026
aec7a42
Layout-owner build: a CLI send, wait or read starts a saved pane that…
Jinwoo-H Oct 21, 2026
70b2197
The window shows tab, title, move and divider changes only from main'…
Jinwoo-H Oct 21, 2026
e2fe034
Close prompt, Discard, save flush and restart save each decided in on…
nwparker Oct 21, 2026
6948113
fix(github): an issue-source change on a twin saves to the row you ch…
nwparker Oct 21, 2026
496bbaa
fix(ci): resolve one Zod version in the E2E typecheck (#31320)
nwparker Oct 21, 2026
5c666d2
fix(native-chat): retry a failed chat name, show the failure on the t…
brennanb2025 Oct 21, 2026
4e483ae
perf(serve): clone the supervisor's code copy in one step on macOS (#…
Jinwoo-H Oct 21, 2026
be0961e
Overlap adhoc release gates and cache qualified server templates (#31…
nwparker Oct 21, 2026
1c76c71
fix(mobile): list session tabs in the desktop tab bar order (#31269)
AmoabaKelvin Oct 21, 2026
60b8eb4
fix(browser): keep in-app browser logins when a WSL or managed SSH ho…
nwparker Oct 21, 2026
d7ef774
fix(serve): restart the macOS serve supervisor from the updated app (…
Jinwoo-H Oct 21, 2026
8e59926
A terminal pane that loses its reconnect to another connection attach…
brennanb2025 Oct 21, 2026
6e589bb
Layout-owner build: phones see main's terminal and editor rows (A2, d…
Jinwoo-H Oct 21, 2026
0c2b013
fix(github): GitHub routing takes the caller's host for a twin; the t…
nwparker Oct 21, 2026
a308277
fix(deps): root and mobile resolve one zod, and CI fails if they drif…
nwparker Oct 21, 2026
a1f2094
fix(github): work-item cache keys a twin by the row at the request pa…
nwparker Oct 21, 2026
065e687
A paired desktop shows the held-terminal banner and Reopen for a serv…
Jinwoo-H Oct 21, 2026
018c6e0
fix(mobile): create and edit notes on headless hosts (#31291)
nwparker Oct 21, 2026
4f70d6c
fix(mobile): refresh staged files when returning from review (#31295)
nwparker Oct 21, 2026
c6becfa
fix(github): main finds a twin project's registered row by id and pat…
nwparker Oct 21, 2026
513c24b
fix(mobile): preserve unsent terminal commands across workspace navig…
nwparker Oct 21, 2026
a237b03
fix(mobile): open relative Markdown file links (#31298)
nwparker Oct 21, 2026
379ad0c
test(terminal-surfaces): pin why main's pane republish is deferred to…
Jinwoo-H Oct 21, 2026
356bda1
fix(github): repo cache eviction clears every host's entries, keeping…
nwparker Oct 21, 2026
ecc4a6c
fix(mobile): show embedded images in Markdown previews (#31304)
nwparker Oct 21, 2026
5999642
fix(settings): prioritize sharing in Remote Orca Servers (#31335)
nwparker Oct 21, 2026
d98b8ed
fix(chat): keep resumed Claude messages deliverable after settings re…
brennanb2025 Oct 21, 2026
fece03b
fix(orcad): voice dictation on headless orca serve hosts (#31217)
nwparker Oct 21, 2026
71cf31b
Overlap native qualification setup with the mobile bundle build (#31336)
nwparker Oct 21, 2026
dda855e
test(layout): pin the layout-owner save format for downgrade, and kee…
Jinwoo-H Oct 21, 2026
b99552c
fix(runtime): a phone reads and saves Markdown tabs on a headless ser…
Jinwoo-H Oct 21, 2026
411b5c0
Batch macOS signing calls for adhoc releases (#31340)
nwparker Oct 21, 2026
8a2ec06
Start an agent's terminal at its first real size instead of after a 1…
brennanb2025 Oct 21, 2026
f7c0740
docs(orca-cli): teach agents cross-project parents and re-parenting (…
brennanb2025 Oct 21, 2026
03f4ce3
fix(mobile): show the session title beside the tabs on a landscape ph…
brennanb2025 Oct 21, 2026
a763c1d
style: format pty-connection-split-spawn.spec.ts (main fails oxfmt --…
Jinwoo-H Oct 21, 2026
cd007d4
fix(session-history): scoped history no longer fails on a very large …
brennanb2025 Oct 21, 2026
046f29b
fix(runtime): a phone's Markdown save keeps the route it started on (…
Jinwoo-H Oct 21, 2026
ce71535
Layout groundwork (switched off): main starts every split and new pan…
Jinwoo-H Oct 21, 2026
b3e6705
fix(orcad-migration): a sidebar view setting never blocks moving an S…
nwparker Oct 21, 2026
d1ed73b
fix(orcad): refuse new terminals while an update stops the server (R3…
nwparker Oct 21, 2026
b0d873d
test(claude): isolate real CLI fixtures and cover chat option request…
brennanb2025 Oct 21, 2026
6537842
fix(mobile): blend workspace header into status-bar safe area (#31353)
nwparker Oct 21, 2026
3ed0bb4
fix(mobile): match home-indicator inset to terminal input panel (#31354)
nwparker Oct 21, 2026
3fd90e9
fix(mobile): preserve live palettes on identical themes (#31355)
nwparker Oct 21, 2026
8bec732
fix(mobile): preserve Claude chat after renaming its pane (#31358)
nwparker Oct 21, 2026
f19ce36
fix(mobile): show the bundled whale on DeepSeek Build tabs (#31359)
nwparker Oct 21, 2026
fa35698
fix(mobile): keep keyboard accessory row height stable (#31363)
nwparker Oct 21, 2026
87fe842
fix(runtime): a server with no window answers its first terminal crea…
Jinwoo-H Oct 21, 2026
d8508da
fix(ui): clarify continuing conversations between chat and terminal a…
AmethystLiang Oct 21, 2026
e219640
fix(terminal): realign mobile snapshot residual metadata after query …
nwparker Oct 21, 2026
12e0b37
fix(mobile): keep dictation controls in sync with host settings (#31349)
nwparker Oct 21, 2026
01562f8
fix(ssh): window the SSH Hosts list and search past the Remote Hosts …
nwparker Oct 21, 2026
6964f81
Reuse qualified templates and batched signing for production releases…
nwparker Oct 21, 2026
818a25d
test(vitest): derive the Node SQLite test list from imports (#30647)
brennanb2025 Oct 21, 2026
0a9980b
fix(terminal): a saved terminal folder on a dead network drive no lon…
Jinwoo-H Oct 21, 2026
b2370f1
fix(terminal): hidden tabs reconnect to sessions that survived a rest…
brennanb2025 Oct 21, 2026
2187f0b
ci: one list for Windows boundary tests and one step for ratchets (#3…
brennanb2025 Oct 21, 2026
546304f
Discard pauses autosave of the file in every workspace; read-only Mar…
nwparker Oct 21, 2026
309d71c
Build adhoc Mac architectures in parallel (#31415)
nwparker Oct 21, 2026
c9d34bb
Open new Markdown changes in the rich editor (#31399)
AmethystLiang Oct 21, 2026
ae9bc8d
A slept native-chat workspace reads asleep and hides (#28457)
brennanb2025 Oct 21, 2026
6de974c
Mobile chat: remove the Tools toggle and its open-everything mode (#3…
brennanb2025 Oct 21, 2026
fc8439e
fix(notifications): a pane with hooks gets its finished banner from i…
brennanb2025 Oct 21, 2026
786a40e
Custom tab shortcuts work right after a keyboard worktree switch (#30…
brennanb2025 Oct 21, 2026
7dfcfbf
fix(codex): resume native chats by conversation ID (#31041)
brennanb2025 Oct 21, 2026
505d671
Refuse a workspace parent that would close a loop, even when the work…
brennanb2025 Oct 21, 2026
2bf77e6
fix(ssh): draw every host list through one bounded, searchable host p…
nwparker Oct 21, 2026
cfdc347
Layout-owner build: main shows live terminals that lost their tab, at…
Jinwoo-H Oct 21, 2026
92732bb
fix(native-chat): bring back Working-only-while-held (#30134) without…
brennanb2025 Oct 21, 2026
a04b2eb
fix(release): avoid API rate limits waiting for the mobile bundle (#3…
nwparker Oct 21, 2026
45ee56e
fix(mobile): preserve native iOS dictation placeholders (#31356)
nwparker Oct 21, 2026
5fc6cb4
fix(plugins): a development plugin reloads an edit saved while its wa…
nwparker Oct 21, 2026
73930be
Prepare server template assembly alongside qualification (#31422)
nwparker Oct 21, 2026
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
2d80023
Merge upstream/main (4ed095d328) into main
HyperBlaze456 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
  •  
  •  
  •  
398 changes: 287 additions & 111 deletions .github/workflows/adhoc-mac-build.yml

Large diffs are not rendered by default.

4 changes: 4 additions & 0 deletions .github/workflows/daily-mac-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ jobs:
needs: resolve-main
permissions:
contents: read
actions: read
uses: ./.github/workflows/node-server-tests.yml
with:
ref: ${{ needs.resolve-main.outputs.head_sha }}
Expand Down Expand Up @@ -601,6 +602,9 @@ jobs:
# Only once the mac release is actually live: there is no release to upload
# into otherwise, and the Windows workflow refuses to create one.
if: needs.build-daily-mac.outputs.published == 'true'
permissions:
contents: read
actions: read
uses: ./.github/workflows/dev-channel-win-build.yml
secrets: inherit
with:
Expand Down
70 changes: 65 additions & 5 deletions .github/workflows/dev-channel-win-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,14 @@ on:
required: false
type: boolean
default: false
fast_release:
description: Use the faster unsigned-build runner outside signing provenance
type: boolean
default: false
javascript_source_sha:
description: Restore this run's shared dev JavaScript instead of rebuilding it
type: string
default: ''
orcad_template:
description: Ship the orcad-template artifact the calling run built
required: false
Expand Down Expand Up @@ -104,12 +112,15 @@ jobs:
# that can write to the dev-channel repos, and it should be reachable from
# exactly the same place those secrets already live.
environment: adhoc-mac-build
# Why windows-2022 and not windows-latest: windows-latest moved to the
# Windows 2025 / VS 2026 image before node-gyp could detect VS 18, breaking
# native dependency install. release-cut pins the same image.
runs-on: windows-2022
# The fast image has VS Build Tools 2022; signed release provenance stays separate.
runs-on: ${{ inputs.fast_release && 'blacksmith-8vcpu-windows-2025' || 'windows-2022' }}
permissions:
contents: read
actions: read
timeout-minutes: 90
env:
ORCA_BACKGROUND_LAUNCH: '1'
JOBS: ${{ inputs.fast_release && 'max' || '' }}
NODE_OPTIONS: --max-old-space-size=4096
CHANNEL: ${{ inputs.channel }}
TAG: ${{ inputs.tag }}
Expand Down Expand Up @@ -172,6 +183,14 @@ jobs:
fi
echo "Vetted $CHANNEL $TAG at $REQUESTED_SHA"

- name: Enable parallel checkout
if: inputs.fast_release
shell: bash
run: |
git config --global checkout.workers 0
# These fresh native builds do not need MSBuild's incremental file tracking.
echo 'TrackFileAccess=false' >> "$GITHUB_ENV"

- name: Checkout the built commit
uses: actions/checkout@v6
with:
Expand Down Expand Up @@ -250,22 +269,63 @@ jobs:
# Why here: electron-builder's beforePack requires out/mobile-web, and the bundle
# build resolves React Native and Expo from mobile/node_modules.
- uses: ./.github/actions/install-mobile-dependencies
if: inputs.javascript_source_sha == ''

# Why the packaging check runs before the 20-minute build: it only needs
# node_modules, and a stale config should cost seconds rather than a build.
- name: Verify dev-channel packaging identity
shell: bash
run: node config/scripts/verify-dev-channel-packaging.mjs --channel="$CHANNEL" --platform=win32

- name: Download shared JavaScript
if: inputs.javascript_source_sha != ''
uses: actions/download-artifact@v8
with:
name: release-javascript
path: .build/release-javascript

- name: Build app
shell: bash
run: pnpm build:release
run: |
if [[ "$ORCA_RELEASE_JAVASCRIPT_SOURCE_SHA" != '' ]]; then
node config/scripts/release-javascript-artifact.mjs restore
pnpm run build:release:host
else
pnpm build:release
fi
env:
ORCA_RELEASE_JAVASCRIPT_SOURCE_SHA: ${{ inputs.javascript_source_sha }}
ORCA_RELEASE_JAVASCRIPT_BUILD_IDENTITY: dev
# Why unset ORCA_BUILD_IDENTITY: telemetry's transport gate accepts only
# 'stable' or 'rc', so leaving it unset keeps dev builds silent — which
# is correct for unvetted artifacts. Same as the mac dev channels.
ORCA_DIAGNOSTICS_TOKEN_URL: https://www.onorca.dev/diagnostics/token

# Inline so refs predating the wait can still use the trusted dispatch workflow.
- name: Wait for the qualified orcad template
if: inputs.fast_release && inputs.stage_only && inputs.orcad_template
uses: actions/github-script@v8
with:
script: |
const deadline = Date.now() + 30 * 60_000
while (Date.now() < deadline) {
const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRun, {
...context.repo, run_id: context.runId, filter: 'latest', per_page: 100
})
const lanes = jobs.filter(job => job.name.startsWith('orcad-template / '))
const failed = lanes.find(job => job.status === 'completed' &&
['failure', 'cancelled', 'timed_out', 'action_required', 'startup_failure'].includes(job.conclusion))
if (failed) throw new Error(`Template qualification failed: ${failed.name}`)
const artifacts = await github.paginate(github.rest.actions.listWorkflowRunArtifacts, {
...context.repo, run_id: context.runId, per_page: 100
})
const ready = artifacts.some(artifact => artifact.name === 'orcad-template' && !artifact.expired)
const completed = lanes.length > 0 && lanes.every(job => job.status === 'completed')
if (ready && (process.env.WAIT_FOR_TEMPLATE_COMPLETION !== '1' || completed)) return
await new Promise(resolve => setTimeout(resolve, 15_000))
}
throw new Error('Timed out waiting for the qualified orcad template')

# After the app build so nothing that cleans out/ can drop it; electron-builder ships it.
- name: Download the orcad deployment template
if: inputs.orcad_template
Expand Down
29 changes: 27 additions & 2 deletions .github/workflows/dev-channel-win-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@ name: Dev Channel Windows Publish
on:
workflow_call:
inputs:
wait_for_mac_job:
description: Prefetch artifacts, then wait for this run's macOS job to succeed
type: string
default: ''
channel:
description: Dev channel whose live release receives the staged artifacts
required: true
Expand All @@ -24,8 +28,8 @@ jobs:
publish-win:
if: github.repository == 'stablyai/orca'
environment: adhoc-mac-build
runs-on: ubuntu-latest
timeout-minutes: 15
runs-on: blacksmith-2vcpu-ubuntu-2404
timeout-minutes: 165
env:
CHANNEL: ${{ inputs.channel }}
TAG: ${{ inputs.tag }}
Expand Down Expand Up @@ -61,6 +65,27 @@ jobs:
fi
done

- name: Wait for successful macOS publication
if: inputs.wait_for_mac_job != ''
uses: actions/github-script@v8
env:
MAC_JOB: ${{ inputs.wait_for_mac_job }}
with:
script: |
const deadline = Date.now() + 150 * 60_000
while (Date.now() < deadline) {
const jobs = await github.paginate(github.rest.actions.listJobsForWorkflowRun, {
...context.repo, run_id: context.runId, filter: 'latest', per_page: 100
})
const mac = jobs.find(job => job.name === process.env.MAC_JOB)
if (mac?.status === 'completed') {
if (mac.conclusion !== 'success') throw new Error('macOS publication did not succeed')
return
}
await new Promise(resolve => setTimeout(resolve, 15_000))
}
throw new Error('Timed out waiting for macOS publication')

- name: Mint dev channel repo token
id: app_token
uses: actions/create-github-app-token@v2
Expand Down
9 changes: 9 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -490,6 +490,15 @@ jobs:
ORCA_E2E_ORCAD_SERVE: '1'
ORCA_E2E_FORWARD_APP_LOGS: '1'
run: xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/orcad-serve-mode-switch.spec.ts --project=electron-headless --workers=1
# Only this job builds out/orcad, so the spec's orcad case runs here; the e2e shards run its Electron case.
- name: Phone Markdown on headless orcad serve
if: >-
!cancelled() &&
(inputs.test_files == '' || contains(inputs.test_files, 'tests/e2e/headless-serve-mobile-markdown.spec.ts'))
env:
SKIP_BUILD: '1'
ORCA_E2E_FORWARD_APP_LOGS: '1'
run: xvfb-run --auto-servernum bash .github/scripts/e2e-with-window-manager.sh pnpm exec playwright test --config tests/playwright.config.ts tests/e2e/headless-serve-mobile-markdown.spec.ts --grep "headless orcad server" --project=electron-headless --workers=1
# The layout oracle's headless scenarios run on both serve hosts, so they need this job's orcad.
- name: Layout oracle on headless serve (orcad and Electron)
if: >-
Expand Down
4 changes: 4 additions & 0 deletions .github/workflows/hourly-mac-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ jobs:
if: needs.preflight.outputs.should_build == 'true'
permissions:
contents: read
actions: read
uses: ./.github/workflows/node-server-tests.yml
with:
ref: ${{ needs.preflight.outputs.head_sha }}
Expand Down Expand Up @@ -518,6 +519,9 @@ jobs:
# Only once the mac release is actually live: there is no release to upload
# into otherwise, and the Windows workflow refuses to create one.
if: needs.build-hourly-mac.outputs.published == 'true'
permissions:
contents: read
actions: read
uses: ./.github/workflows/dev-channel-win-build.yml
secrets: inherit
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/layout-owner-e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
uses: ./.github/workflows/e2e.yml
with:
ref: ${{ inputs.ref || github.sha }}
test_files: '["tests/e2e/workspace-layout-oracle-headless.spec.ts","tests/e2e/workspace-layout-oracle.spec.ts","tests/e2e/cli-file-open-position.spec.ts","tests/e2e/relaunch-first-terminal.spec.ts","tests/e2e/relaunch-sleeping-agents-resume-on-view.spec.ts","tests/e2e/terminal-cold-activation-deferral.spec.ts","tests/e2e/cli-first-worktree-single-terminal.spec.ts","tests/e2e/unopened-workspace-agent-single-resume.spec.ts","tests/e2e/terminal-pane-close-layout-consistency.spec.ts","tests/e2e/golden-file-open-edit-save.spec.ts","tests/e2e/golden-source-control-open-diff.spec.ts","tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts","tests/e2e/floating-workspace-pane-height.spec.ts","tests/e2e/editor-model-host-isolation.spec.ts","tests/e2e/editor-tab-selection-restore.spec.ts","tests/e2e/finished-agent-ghost-resume.spec.ts","tests/e2e/live-background-terminal-mount-authority.spec.ts","tests/e2e/workspace-back-forward-navigation.spec.ts","tests/e2e/worktree-lineage-toggle-shortcut.spec.ts","tests/e2e/local-cli-terminal-retention.spec.ts","tests/e2e/default-tabs-mark-crash-relaunch.spec.ts","tests/e2e/terminal-cli-split-closed-before-mount.spec.ts","tests/e2e/layout-stream-loss-reopen.spec.ts","tests/e2e/terminal-tab-close-restart-persistence.spec.ts","tests/e2e/artificial-opencode-terminal-load.spec.ts","tests/e2e/headless-paired-remote-terminal-retention-memory.spec.ts","tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts","tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts","tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts","tests/e2e/headless-serve-browser-tab-restart.spec.ts","tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts","tests/e2e/headless-serve-desktop-activation.spec.ts","tests/e2e/headless-serve-focused-terminal-create.spec.ts","tests/e2e/headless-serve-mobile-chat-tab-order.spec.ts","tests/e2e/headless-serve-mobile-native-chat-identity.spec.ts","tests/e2e/headless-serve-session-history-naming-requests.spec.ts","tests/e2e/layout-compat-old-phone-on-new-server.spec.ts","tests/e2e/layout-compat-serve-restart-keeps-at-at-terminals.spec.ts","tests/e2e/paired-mobile-serve-restart-terminal-tabs.spec.ts","tests/e2e/paired-mobile-desktop-tab-composition.spec.ts","tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts","tests/e2e/paired-desktop-server-layout-frames.spec.ts","tests/e2e/paired-desktop-server-file-open-group.spec.ts","tests/e2e/ssh-orcad-"]'
test_files: '["tests/e2e/workspace-layout-oracle-headless.spec.ts","tests/e2e/workspace-layout-oracle.spec.ts","tests/e2e/cli-file-open-position.spec.ts","tests/e2e/relaunch-first-terminal.spec.ts","tests/e2e/relaunch-sleeping-agents-resume-on-view.spec.ts","tests/e2e/terminal-cold-activation-deferral.spec.ts","tests/e2e/cli-first-worktree-single-terminal.spec.ts","tests/e2e/unopened-workspace-agent-single-resume.spec.ts","tests/e2e/terminal-pane-close-layout-consistency.spec.ts","tests/e2e/golden-file-open-edit-save.spec.ts","tests/e2e/golden-source-control-open-diff.spec.ts","tests/e2e/paired-cli-terminal-graph-sync-tab-retention.spec.ts","tests/e2e/floating-workspace-pane-height.spec.ts","tests/e2e/editor-model-host-isolation.spec.ts","tests/e2e/editor-tab-selection-restore.spec.ts","tests/e2e/finished-agent-ghost-resume.spec.ts","tests/e2e/live-background-terminal-mount-authority.spec.ts","tests/e2e/workspace-back-forward-navigation.spec.ts","tests/e2e/worktree-lineage-toggle-shortcut.spec.ts","tests/e2e/local-cli-terminal-retention.spec.ts","tests/e2e/default-tabs-mark-crash-relaunch.spec.ts","tests/e2e/terminal-cli-split-closed-before-mount.spec.ts","tests/e2e/layout-stream-loss-reopen.spec.ts","tests/e2e/terminal-tab-close-restart-persistence.spec.ts","tests/e2e/artificial-opencode-terminal-load.spec.ts","tests/e2e/headless-paired-remote-terminal-retention-memory.spec.ts","tests/e2e/headless-paired-remote-terminal-reveal-grid.spec.ts","tests/e2e/headless-paired-remote-terminal-stall-recovery.spec.ts","tests/e2e/headless-paired-remote-terminal-viewer-size.spec.ts","tests/e2e/headless-serve-browser-tab-restart.spec.ts","tests/e2e/headless-serve-cli-terminal-retention-parity.spec.ts","tests/e2e/headless-serve-desktop-activation.spec.ts","tests/e2e/headless-serve-focused-terminal-create.spec.ts","tests/e2e/headless-serve-mobile-chat-tab-order.spec.ts","tests/e2e/headless-serve-mobile-native-chat-identity.spec.ts","tests/e2e/headless-serve-session-history-naming-requests.spec.ts","tests/e2e/layout-compat-old-phone-on-new-server.spec.ts","tests/e2e/layout-compat-serve-restart-keeps-at-at-terminals.spec.ts","tests/e2e/paired-mobile-serve-restart-terminal-tabs.spec.ts","tests/e2e/paired-mobile-desktop-tab-composition.spec.ts","tests/e2e/paired-remote-terminal-serve-restart-binding.spec.ts","tests/e2e/paired-desktop-server-layout-frames.spec.ts","tests/e2e/paired-desktop-server-held-pane-reopen.spec.ts","tests/e2e/paired-desktop-server-file-open-group.spec.ts","tests/e2e/ssh-orcad-"]'
run_changed_e2e: true
needs_build: true
artifact_suffix: -layout-owner-switch-on
Expand Down
Loading