Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1173 commits
Select commit Hold shift + click to select a range
7abd74e
Keep the structured-session compatibility manifest within the file li…
nwparker Oct 7, 2026
a07f4b2
feat(relay): slower same-cap drain paces (15 and 20 min) for every ce…
Jinwoo-H Oct 7, 2026
a551aa5
OpenCode structured chat over the Agent Client Protocol (#25845)
brennanb2025 Oct 7, 2026
b1e09a4
fix(native-chat): show an SSH session's chat history on the phone and…
Jinwoo-H Oct 7, 2026
de4ee59
perf(renderer): import published Radix primitives directly (#26256)
nwparker Oct 7, 2026
1f79033
test: reset canonical PR stack cache in GraphQL fixtures (#26346)
nwparker Oct 7, 2026
e08ba9f
feat(native-chat): compact tool runs with a bounded call list (#26285)
AmoabaKelvin Oct 7, 2026
e9b3efa
feat(native-chat): preview each rail tick with its reply (#26056)
AmoabaKelvin Oct 7, 2026
5a1009f
test: poll successful PTY cleanup without repeated idle waits (#26360)
nwparker Oct 8, 2026
4f60f32
chore(i18n): translate 176 new keys to es/fr/ja/ko/zh (#26365)
AmethystLiang Oct 8, 2026
939288e
fix(file-drop): deliver terminal files to the pane under the cursor (…
brennanb2025 Oct 8, 2026
65a0e96
fix(serve): restore the saved active tab group on the phone after a c…
Jinwoo-H Oct 8, 2026
369b202
test: remove idle polling from compaction contracts (#26373)
nwparker Oct 8, 2026
c71601f
Add Pi structured native chat through its RPC mode (#25851)
brennanb2025 Oct 8, 2026
a0f0ae3
fix(relay): skip idle rehome for hosts that reconnected under 3 minut…
Jinwoo-H Oct 8, 2026
48a9856
fix(relay-ops): let the pre-drain auth gate tolerate an isolated auth…
Jinwoo-H Oct 8, 2026
bac9e0c
fix(relay): latch rehome off only on a sql failure breach that outlas…
Jinwoo-H Oct 8, 2026
23a25ea
fix(relay): let the same-cap roll's post-roll verify outlast one DB s…
Jinwoo-H Oct 8, 2026
0e07640
feat(native-chat): fold long sent messages behind a toggle (#25996)
AmoabaKelvin Oct 8, 2026
8cf6228
feat(relay): alert on cell disconnect bursts and database pool herds …
Jinwoo-H Oct 8, 2026
c61d0bc
Update README downloads badge
github-actions[bot] Oct 8, 2026
3062b9d
fix(relay): refuse host hellos fast when the database pool is timing …
Jinwoo-H Oct 8, 2026
d1e7d15
fix(file-drop): explorer, project sidebar, tab strip and editor own O…
brennanb2025 Oct 8, 2026
7c88ab7
feat(native-chat): number keys and auto-advance for questions (#26288)
AmoabaKelvin Oct 8, 2026
b0fbcfd
test: age relay correction controls through live heartbeats (#26389)
nwparker Oct 8, 2026
56017af
Avoid repeatedly extracting source text for the copy-context hint (#2…
nwparker Oct 8, 2026
5fb18f3
Run only the intended performance contract suites (#26121)
nwparker Oct 8, 2026
5a59710
Skip repeated ANSI parsing scans for plain notebook output (#26124)
nwparker Oct 8, 2026
846caf0
Scan Markdown inline-code spans once when highlighting links (#26126)
nwparker Oct 8, 2026
7cd92a3
Avoid rescanning accumulated notebook stream output (#26123)
nwparker Oct 8, 2026
0d246a6
Use native Base64 encoding for mobile image bytes when available (#26…
nwparker Oct 8, 2026
acd298a
feat(runtime): isolate the server behind a compatibility launcher (#2…
nwparker Oct 8, 2026
316822f
ci: skip cache warming for cache-test-only changes (#26399)
nwparker Oct 8, 2026
7c13552
Label a message stopped before the agent began on it plainly as "Stop…
brennanb2025 Oct 8, 2026
8fdad2a
fix(claude): activate account profiles and remove credential replay (…
brennanb2025 Oct 8, 2026
4f4f021
feat(native-chat): quote a selection from an agent reply into the com…
AmoabaKelvin Oct 8, 2026
d0e729c
fix(claude): drop the repeated sign-in line in the account menu and n…
Jinwoo-H Oct 8, 2026
8b20d21
Remove local branch deletion success toast (#26422)
nwparker Oct 8, 2026
265c626
Allow large markdown documents with HTML in rich mode (#26331)
AmethystLiang Oct 8, 2026
00a8250
test: speed terminal comparisons and retry policy checks (#26396)
nwparker Oct 8, 2026
61de2d8
test: load GitHub operations from their public modules (#26384)
nwparker Oct 8, 2026
e862394
Abort failed runtime downloads after cleanup (#26269)
nwparker Oct 8, 2026
586e6bc
perf: scan only new text for live agent log record boundaries (#26132)
nwparker Oct 8, 2026
7c0e76c
perf(mobile): release closed Markdown document cache entries (#26159)
nwparker Oct 8, 2026
a6c853a
perf(chat): size recovery batches without prefix serialization (#26160)
nwparker Oct 8, 2026
7279210
fix(skills): cancel unread package download responses (#26169)
nwparker Oct 8, 2026
f4c7121
Use browser crypto to speed up mobile image fingerprints (#26170)
nwparker Oct 8, 2026
7610920
Avoid rebuilding committed mobile files while typing (#26196)
nwparker Oct 8, 2026
602e7a3
Stop repeated GitLab detail requests on mobile (#26197)
nwparker Oct 8, 2026
efb071b
Release completed agent-browser helper drain timers (#26210)
nwparker Oct 8, 2026
7e60664
fix(browser): retire cookie snapshots when preparation fails (#26218)
nwparker Oct 8, 2026
c5767f0
perf(skills): index placements within each deletion plan (#26223)
nwparker Oct 8, 2026
2d1ab8b
Avoid refreshing GitHub accounts for repository name edits (#26228)
nwparker Oct 8, 2026
ad0a5ad
Abort rejected optional OpenCode billing requests (#26236)
nwparker Oct 8, 2026
4d7193c
perf: skip image prewarming parse for image-free markdown (#26240)
nwparker Oct 8, 2026
8e22ad2
Scope completed worktree removal authorization refresh to its reposit…
nwparker Oct 8, 2026
8060ca5
perf: persist completed notebook runs in one document update (#26254)
nwparker Oct 8, 2026
408aa13
fix(explorer): reject foreign watch events before deferring (#26265)
nwparker Oct 8, 2026
9f64453
Release feedback requests after response handling completes (#26274)
nwparker Oct 8, 2026
8155e2e
perf: preserve unrelated authorization roots after desktop removal (#…
nwparker Oct 8, 2026
b4e99fc
perf: group Space decision inputs by workspace (#26297)
nwparker Oct 8, 2026
d9ab505
perf: skip assembling deferred Codex text checkpoints (#26199)
nwparker Oct 8, 2026
b41e273
Persist multiple workspace references with atomic edits
nwparker Oct 8, 2026
665fbc4
Release clipboard previews when the chat composer closes (#26234)
nwparker Oct 8, 2026
10a2a6c
perf: reuse Markdown fence scans across sibling toggles (#26324)
nwparker Oct 8, 2026
4da1324
test: isolate hook fixture connections from fake timers (#26369)
brennanb2025 Oct 8, 2026
4bd4f8c
feat(native-chat): show each interrupted chat's workspace as its read…
brennanb2025 Oct 8, 2026
b1e0092
feat(opencode): open OpenCode 2.x in the structured chat too (#26395)
brennanb2025 Oct 8, 2026
2caea6c
feat(omp): open OMP in the structured chat over ACP (#26401)
brennanb2025 Oct 8, 2026
e4cd14d
Remove legacy OS file-drop routing (STA-6940 PR6/6) (#26385)
brennanb2025 Oct 8, 2026
46ef7c4
Drain queued SQLite replies before faulting after a main-loop stall (…
nwparker Oct 8, 2026
69900f0
Share provider search between workspace creation and reference editing
nwparker Oct 8, 2026
a211489
Add saved force-delete preference to workspace deletion menu (#26425)
nwparker Oct 8, 2026
f052e2f
perf: skip unused Grok login-shell probe when installing agent hooks …
nwparker Oct 8, 2026
e97d18d
Avoid repeated session copies when deleting project groups (#26230)
nwparker Oct 8, 2026
10ac420
Release completed provider write payloads (#26208)
nwparker Oct 8, 2026
a4854ac
perf: skip the OpenCode reader worker when its database is absent (#2…
nwparker Oct 8, 2026
07c2379
Encode checkpoint strings in bounded native JSON chunks (#26177)
nwparker Oct 8, 2026
67dbd2f
perf: reuse chat tab ownership across unrelated app updates (#26150)
nwparker Oct 8, 2026
0eee1ce
Remove repeated row copying from terminal redraw ingestion (#26118)
nwparker Oct 8, 2026
952898b
Add always force delete dropdown to workspace recovery dialog (#26476)
nwparker Oct 8, 2026
a53967f
Native chat: add an inline visuals switch and simplify the skill (#26…
brennanb2025 Oct 8, 2026
b1cd858
Show multiple reviews and tasks in workspace cards and details
nwparker Oct 8, 2026
a747c1c
Allow another phone send after delivery is unconfirmed (#26392)
brennanb2025 Oct 8, 2026
216ef29
fix(terminal): avoid replaying completed strings after snapshots
nwparker Oct 8, 2026
6e39b8e
fix: admit relay bulk frames once under backpressure (#26333)
nwparker Oct 8, 2026
8ae5264
Record confirmed PR observations from their terminal pane
nwparker Oct 8, 2026
5252884
Native chat: say when Codex is signed out or the agent isn't installe…
brennanb2025 Oct 8, 2026
e428179
test(native-chat): make the in-place transcript replacement test dete…
OrcaWin Oct 8, 2026
496ee9b
feat(session-history): Resume in New CLI forks a native chat's conver…
brennanb2025 Oct 8, 2026
e0a98a4
fix(hooks): speed up guarded Unicode Windows hook launches (#26382)
OrcaWin Oct 8, 2026
5125f51
Bound multi-reference lookup work and normalize by identity
nwparker Oct 8, 2026
4aa361c
Close the SDK test server before destroying its connections
nwparker Oct 8, 2026
1e76c87
Verify terminal reference deduplication after settlement
nwparker Oct 8, 2026
7c50009
test: remove duplicated cases and source-text checks (#26546)
nwparker Oct 8, 2026
47165c9
test: load session owners directly and skip mocked recovery pacing (#…
nwparker Oct 8, 2026
f5ece0f
test(e2e): retry Hangul-digit attempts the input method never deliver…
OrcaWin Oct 8, 2026
e3639ef
Phase 3.5: fix the top SSH/remote issues at the root cause (#26483)
OrcaWin Oct 8, 2026
89ba968
ci: keep shared unit fixture out of package and browser jobs (#26575)
nwparker Oct 8, 2026
124639e
Merge commit '4bb6f2072b07c1f0664b809551f77754700570e4' into zpyoung/…
zpyoung Oct 8, 2026
907cb6e
ci: restore five unit runners and prune source-only tests (#26437)
nwparker Oct 8, 2026
4941f26
sync: resolve file ownership for upstream v1.4.222
zpyoung Oct 8, 2026
66db554
fix(sync): close the spread object in the worktree startup seam
zpyoung Oct 8, 2026
795ab61
fix(heimdall): follow upstream's removal of the orchestration capabil…
zpyoung Oct 8, 2026
3e9173b
fix(launch-settings): adapt fork launches to v1.4.222's launch API
zpyoung Oct 8, 2026
ac39fb8
fix(sync): fit fork seams to v1.4.222's new callers and fixtures
zpyoung Oct 8, 2026
cead65a
chore(fork-ownership): declare gate-fix seams and re-baseline their r…
zpyoung Oct 8, 2026
17703d0
fix(native-chat): never refuse a user's write because the retry recor…
brennanb2025 Oct 8, 2026
51e2895
fix(native-chat): never refuse a queued card because 20 were waiting,…
brennanb2025 Oct 8, 2026
7bdb0b6
Native chat: inline visuals for Grok, OpenCode and OMP chats (#26530)
brennanb2025 Oct 8, 2026
884be9a
feat(native-chat): show each chat's resume as it happens, and start m…
brennanb2025 Oct 8, 2026
79a8cff
Fix Mermaid diagrams that stay on error after replies finish (#26480)
brennanb2025 Oct 8, 2026
cc291db
Keep picked skills and pending uploads when native chat composers clo…
brennanb2025 Oct 8, 2026
6b43714
feat(agent-sessions): rename "Continue in New Session" to "Hand Off t…
brennanb2025 Oct 8, 2026
3e27e62
Native chat: open files from tool rows through the terminal's file li…
brennanb2025 Oct 8, 2026
d997ef0
Warn on slow profile saves instead of failing them (#26447)
AmethystLiang Oct 8, 2026
b6b4d68
fix(omp): show exit 0 for a command that finished normally (#26494)
brennanb2025 Oct 8, 2026
4390860
Update README downloads badge
github-actions[bot] Oct 8, 2026
9ca9b4e
Revert Claude per-account folders (#24434, #26405) before release (#2…
Jinwoo-H Oct 8, 2026
22974c5
Default experimental native chat to structured chat (#22933)
brennanb2025 Oct 8, 2026
4b13ab6
fix(lint): move the macOS input-source probe out of app.ts (#26643)
brennanb2025 Oct 8, 2026
04ac6d6
Hold messages in the host until a chat's agent has finished starting …
brennanb2025 Oct 8, 2026
5de5391
fix(lint): move knownAgentIds out of the session host (#26648)
brennanb2025 Oct 8, 2026
a062abf
Stop native chat jumping when Codex starts a foreground command (#26503)
brennanb2025 Oct 8, 2026
47019ae
fix(editor): route zoom gestures and app zoom to the PDF viewer (#26652)
Jinwoo-H Oct 8, 2026
6ceb423
fix(native-chat): return focus to the composer after a pick (#26574)
AmoabaKelvin Oct 8, 2026
23fd5e6
fix(browser): keep the annotation composer off the element it annotat…
AmoabaKelvin Oct 8, 2026
d4acd11
fix(window): stop a covered window drawing after a phone stream, and …
Jinwoo-H Oct 8, 2026
4735ece
fix(native-chat): a /compact sent while the agent works waits in line…
brennanb2025 Oct 8, 2026
55eb48c
Let automations pass extra agent arguments on each run (#26659)
AmethystLiang Oct 8, 2026
ff4a51c
Show sign-in guidance for all native chat agents (#26544)
brennanb2025 Oct 8, 2026
58a58f4
Show OMP sign-in guidance when OMP reports no model selected (#26649)
brennanb2025 Oct 8, 2026
81fd59d
fix: keep workspace search filter button on one line (#26580)
genni613 Oct 8, 2026
4d1a3dd
Detect installed GitHub CLI behind hung launchers (#25183)
OrcaWin Oct 8, 2026
3c07588
feat(native-chat): make native chat replies flow in and the transcrip…
AmoabaKelvin Oct 8, 2026
bb44f74
Keep native chat /clear in the same conversation (#26579)
brennanb2025 Oct 8, 2026
59b9bde
Reduce repeated test work and fix Windows cleanup and IME confirmatio…
nwparker Oct 8, 2026
dec18a8
fix(runtime): settle DSH tui-idle on its hook-store done (#26481)
Jinwoo-H Oct 9, 2026
ad7af63
fix(relay): throttle the connection-reservations autovacuum so a run …
Jinwoo-H Oct 9, 2026
0e8e4e7
Reduce repeated test work and skip unrelated server matrices (#26711)
nwparker Oct 9, 2026
4ad8690
Resolve native chat workspaces from catalog snapshots (#26428)
AmethystLiang Oct 9, 2026
d010c83
test(terminal): check the runtime's workspace layout against structur…
Jinwoo-H Oct 9, 2026
7f0e067
test(e2e): layout oracle scenarios with window, headless serve and SS…
Jinwoo-H Oct 9, 2026
37833ce
feat(native-chat): add a chat-owned command receipt store (#26653)
brennanb2025 Oct 9, 2026
d191386
Offer Resume in New CLI / Native Chat from the tab right-click menu (…
brennanb2025 Oct 9, 2026
820277c
Show pre-upgrade Experimental Chat UI users a one-time native chat up…
brennanb2025 Oct 9, 2026
ebb192e
Native chat: Cmd/Ctrl+F finds in the chat (#26517)
brennanb2025 Oct 9, 2026
978c32b
fix(remote): group migrated folders under their execution host (#26535)
nwparker Oct 9, 2026
da6d632
[CI] Revert library patches introduced by test optimization (#26727)
nwparker Oct 9, 2026
04d2ccb
Default status-bar usage to Compact and explain the change once (#26726)
AmethystLiang Oct 9, 2026
bdf0d66
Provide Orca CLI on managed Linux and macOS servers (#26539)
nwparker Oct 9, 2026
1cda323
Report browser placement support from the installed provider (#26559)
nwparker Oct 9, 2026
56cdd67
fix(native-chat): read a queued message in full (#26004)
brennanb2025 Oct 9, 2026
13c9f1f
fix(floating-workspace): keep file links in their owning panel (#26655)
brennanb2025 Oct 9, 2026
8d3c922
refactor(tabs): reuse persistAgentLaunchTabOrder for copied tab-order…
brennanb2025 Oct 9, 2026
8167dda
Distinguish remote browser failures from server connection failures (…
nwparker Oct 9, 2026
b9a7830
Keep new browser tabs on SSH routing after managed conversion (#26570)
nwparker Oct 9, 2026
118de20
Keep open Remote Settings subscribed to the saved-server catalog (#26…
nwparker Oct 9, 2026
b71e538
Explain why stopping the selected Active Server is refused (#26584)
nwparker Oct 9, 2026
6a15cd8
Preserve editor file identity during SSH host conversion (#26593)
nwparker Oct 9, 2026
4e232f9
Preserve execution host identity throughout folder sidebar rows (#26634)
nwparker Oct 9, 2026
f3c0390
Fix Compact usage notice focus and older-host compatibility (#26747)
AmethystLiang Oct 9, 2026
45a969f
Wait for retained editor ownership before listing Markdown documents …
nwparker Oct 9, 2026
5264a7d
Retire canceled managed startup checks before reconnecting (#26645)
nwparker Oct 9, 2026
b79862d
Describe unverifiable managed servers without claiming they stopped (…
nwparker Oct 9, 2026
d2d2d39
Refresh rich Markdown links when document metadata changes (#26595)
nwparker Oct 9, 2026
496a171
fix(acp): keep OMP replies that follow its reasoning (#26658)
brennanb2025 Oct 9, 2026
6235f9a
fix(acp): show the agent's own reason when a prompt fails (#26666)
brennanb2025 Oct 9, 2026
f9d0aa2
Refresh open Markdown links when workspace files change (#26599)
nwparker Oct 9, 2026
4f126bc
Show "Pi isn't signed in" in native chat before the first send (#26743)
brennanb2025 Oct 9, 2026
d273d85
fix(native-chat): underline a file path only once its workspace confi…
brennanb2025 Oct 9, 2026
55d348d
feat(native-chat): show an agent message's sender by its current titl…
brennanb2025 Oct 9, 2026
fc5eb16
Send a headless automation's prompt to agents that read it after they…
brennanb2025 Oct 9, 2026
d7e985c
Start worktree.create's agent through the launch executor (#26709)
brennanb2025 Oct 9, 2026
46460d4
feat(runtime): require Node 24 for servers and remote hosts (#26171)
nwparker Oct 9, 2026
db53143
Update README downloads badge
github-actions[bot] Oct 9, 2026
ded0144
fix(native-chat): settle a dead agent's leftover work in one write th…
brennanb2025 Oct 9, 2026
f01bd93
Keep managed workspace paths out of desktop editor launches (#26668)
nwparker Oct 9, 2026
cf8cc09
[CI] Enable the existing Windows hang watchdog and preserve restart e…
nwparker Oct 9, 2026
cc2ad7b
fix: dispatch Muse Windows hooks directly on safe profile paths (#26755)
nwparker Oct 9, 2026
69cf557
fix(sidebar): keep project headers from overlapping the pinned host (…
AmethystLiang Oct 9, 2026
cbad641
feat(grok): show Grok's subagents as subagent rows (#26508)
brennanb2025 Oct 9, 2026
bfd9858
Retry failed catalog reads when SSH hosts move to Remote (#26531)
nwparker Oct 9, 2026
418c601
Start orchestration workers and remote workers through the launch exe…
brennanb2025 Oct 9, 2026
bcb7305
Refresh SSH host status after a verified manual managed-server update…
nwparker Oct 9, 2026
c586cce
fix(acp): start chats for agents that report no model (#26587)
brennanb2025 Oct 9, 2026
4eb6c0e
test(native-chat): fix main typecheck after the batched journal commi…
brennanb2025 Oct 9, 2026
df922d3
Keep one local project identity after concurrent registration (#26789)
nwparker Oct 9, 2026
6ef42ad
Keep Git identity probes from blocking SSH host reconversion (#26578)
nwparker Oct 9, 2026
6ba8641
Show model and effort choices for every agent before its session star…
brennanb2025 Oct 9, 2026
39a01f9
feat(agent-launch): create a folder workspace and start its agent in …
brennanb2025 Oct 9, 2026
1578716
revert(runtime): temporarily restore the previous host Node minimum (…
nwparker Oct 9, 2026
3ca1d81
fix(source-control): wait for the repo owner's editor saves before di…
nwparker Oct 9, 2026
fd6bc7e
Keep managed status warnings out of desktop gitignore writes (#26671)
nwparker Oct 9, 2026
e43997c
Roll back Windows hang watchdog activation (#26804)
nwparker Oct 9, 2026
f16212a
feat(acp): compact Grok, OpenCode and OMP chats (#26502)
brennanb2025 Oct 9, 2026
1dab0d0
Scope file deletion saves and tab closing to the file owner (#26679)
nwparker Oct 9, 2026
7b1242b
[CI] Reduce repeated test work and use pinned Bun for localization ex…
nwparker Oct 9, 2026
049bf80
test(e2e): keep two host sections in the catalog-retry reconnect test…
OrcaWin Oct 9, 2026
c12c211
Preserve retained desktop browser pages during SSH conversion (#26572)
nwparker Oct 9, 2026
3bcb312
Keep managed servers unverifiable until they answer (#26637)
nwparker Oct 9, 2026
4845ae8
Restore editor file watching when remote host contact returns (#26606)
nwparker Oct 9, 2026
9be39b6
Restore remote explorer updates after server recovery (#26612)
nwparker Oct 9, 2026
6aef5c5
Phase 3.7: fix SSH/remote failures found by adversarial real-host tes…
OrcaWin Oct 9, 2026
6c20143
Preserve the selected host in explorer watcher ownership (#26616)
nwparker Oct 9, 2026
93a6b1a
Keep managed file drags out of desktop browser paths (#26698)
nwparker Oct 9, 2026
22534fe
Show whole-tab hover cards with icons and smooth tab-to-tab slides (#…
nwparker Oct 9, 2026
5bffa93
fix(native-chat): match journal commit signature in receipt test (#26…
AmethystLiang Oct 9, 2026
941c8d8
Reset explorer tree lifetime when its execution host changes (#26627)
nwparker Oct 9, 2026
05e7040
Keep managed file Copy from selecting a desktop file (#26682)
nwparker Oct 9, 2026
05ab94b
Move shared file watches when the selected remote host changes (#26632)
nwparker Oct 9, 2026
c9c6a00
Keep usage overflow chip width stable as hidden count changes (#26873)
AmethystLiang Oct 9, 2026
3f37f7e
Keep an unplaceable row owner out of desktop Open in launches (#26797)
OrcaWin Oct 9, 2026
9d1cd1e
[CI] Consolidate related tests and advance transcript waits with the …
nwparker Oct 9, 2026
40716d7
fix(remote-terminal): keep the disconnected-input grace honest across…
OrcaWin Oct 9, 2026
bd85767
[CI] Use public threads for mobile unit tests (#26899)
nwparker Oct 9, 2026
1c773a3
refactor(ssh-relay-runtime): clean up Phase 3-3.8 code (#26889)
OrcaWin Oct 9, 2026
94ed167
refactor(mobile): let the build alone decide the OTA shell (#26825)
Jinwoo-H Oct 9, 2026
7e621d5
refactor(ssh-orcad-lifecycle): clean up Phase 3-3.8 code (#26891)
OrcaWin Oct 9, 2026
7b91405
Let in-page links switch sections inside a chat visual (#26729)
brennanb2025 Oct 9, 2026
5f62f49
refactor(orcad-daemon-startup-cli): clean up Phase 3-3.8 code (#26892)
OrcaWin Oct 9, 2026
51e7181
Keep remote terminal path links on their own host (#26696)
nwparker Oct 9, 2026
1b2d075
refactor(ssh-connect-managed): clean up Phase 3-3.8 code (#26890)
OrcaWin Oct 9, 2026
7d24509
Reject terminal file drops from a different execution host (#26830)
nwparker Oct 9, 2026
077b62d
fix: use alternate browser for rich Markdown modifier clicks (#26920)
nwparker Oct 9, 2026
65580c5
Honor OpenCode 2 launch mode when resuming sessions (#26843)
nwparker Oct 9, 2026
1fa8b8b
Keep Chat UI users with a Terminal default on the terminal, with a ch…
brennanb2025 Oct 9, 2026
6ad7ac2
ci: sync release workflows with main for the v1.4.224 cut
Jinwoo-H Oct 10, 2026
7433da3
ci(release): read the watcher child from the supervisor's slot in the…
Jinwoo-H Oct 10, 2026
0abc765
ci: sync release workflows with main for the v1.4.224 cut
Jinwoo-H Oct 10, 2026
2bb2058
release: v1.4.224
github-actions[bot] Oct 10, 2026
230ae12
Merge remote-tracking branch 'origin/main' into zpyoung/auto-sync-for…
zpyoung Oct 12, 2026
ee32ed3
Merge tag 'v1.4.224' into zpyoung/auto-sync-fork-with-upstream-stably…
zpyoung Oct 12, 2026
d697bca
sync: resolve file ownership for upstream v1.4.224
zpyoung Oct 12, 2026
c3667a1
feat(agent-composer): adopt upstream's delivery uncertainty on the qu…
zpyoung Oct 12, 2026
4785049
ci: drop process-host steps the v1.4.224 release does not ship
zpyoung Oct 12, 2026
d09596c
feat(automation-launch-settings): move automation raw args to upstrea…
zpyoung Oct 12, 2026
6a3d845
feat(native-chat): retire the fork width tiers and re-home tool color…
zpyoung Oct 12, 2026
197cd05
test(automation-launch-settings): build legacy launch overrides throu…
zpyoung Oct 12, 2026
1843e86
test(cloud): align the relay workflow inventory with what v1.4.224 ships
zpyoung Oct 12, 2026
1c7f4b8
fix(sync): CI fallout from v1.4.224 in fork-owned contracts
zpyoung Oct 12, 2026
323738f
fix(agent-composer): send image-only pastes at the answer input to th…
zpyoung Oct 12, 2026
e51897d
fix(automation-launch-settings): follow upstream's shadowed-flag rule…
zpyoung Oct 12, 2026
e2706e5
test(native-chat): fork tests follow v1.4.224's markup and the retire…
zpyoung Oct 12, 2026
270d371
test(cross-version-wire): fetch pinned upstream stable tags the fork …
zpyoung Oct 12, 2026
b4f448d
test(cross-version-wire): skip legs whose baseline predates the capab…
zpyoung Oct 12, 2026
b2e2d1e
fix(ci): restore the ACP schema check and point new CI contracts at t…
zpyoung Oct 12, 2026
d05307b
fix(agent-composer): settle ask answers group by group, over upstream…
zpyoung Oct 12, 2026
f030b52
fix(sync): composer paste phase, dock tolerance of test doubles, stal…
zpyoung Oct 12, 2026
a2cde4d
fix(agent-composer): an unreadable attachment preview leaves the thum…
zpyoung Oct 12, 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.
16 changes: 16 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
/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
Expand Down Expand Up @@ -47,6 +53,9 @@
# 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).
Expand Down Expand Up @@ -85,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
9 changes: 7 additions & 2 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@ 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
Expand All @@ -24,7 +29,6 @@ pnpm dev
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).

## Branch Naming

Expand Down Expand Up @@ -63,9 +67,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
179 changes: 92 additions & 87 deletions .github/actions/install-node-dependencies/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,16 @@ name: Install Node dependencies
description: Installs the Node toolchain and repository dependencies for CI jobs, with optional Electron archive caching.

inputs:
cache-pnpm-store:
description: Restore or save the pnpm download store; verification and native caches are independent.
required: false
default: 'true'
cache-pnpm-store-lookup-only:
description: Auto uses measured hosted Node 24 root installs; true forces lookup, false retains archive restoration.
required: false
default: auto
cache-pnpm-verification:
description: Restore pnpm's policy-checked lockfile verification record on Linux.
description: Restore pnpm's policy-checked lockfile verification record.
required: false
default: 'true'
native-runtime:
Expand All @@ -28,9 +36,12 @@ inputs:
default: 'false'

outputs:
pnpm-store-cache-hit:
description: Whether the requested download store matched an existing cache.
value: ${{ steps.pnpm-store-lookup.outputs.cache-hit || steps.pnpm-store-restore.outputs.cache-hit || steps.requested-node.outputs.cache-hit || steps.default-node.outputs.cache-hit }}
verification-cache-hit:
description: Whether pnpm's verification record was restored.
value: ${{ steps.verification-cache-restore.outputs.cache-hit }}
value: ${{ steps.verification-cache.outputs.cache-hit }}
verification-cache-path:
description: The small pnpm-owned verification record, without registry metadata.
value: ${{ steps.verification-cache.outputs.path }}
Expand All @@ -42,14 +53,44 @@ outputs:
value: ${{ steps.requested-node.outputs.node-version || steps.default-node.outputs.node-version }}
native-cache-scope:
description: Operating-system image scope used by the native module cache.
value: ${{ steps.native-cache-scope.outputs.scope }}
value: ${{ steps.native-runtime.outputs.cache-scope }}
native-cache-key:
description: Exact native cache key requested after installation.
value: ${{ steps.native-runtime.outputs.cache-key }}
native-cache-path:
description: Native build directories covered by the requested cache.
value: ${{ steps.native-runtime.outputs.cache-path }}
native-cache-hit:
description: Whether the compiled native module cache was restored.
value: ${{ steps.native-cache-restore.outputs.cache-hit || steps.native-cache-restore-only.outputs.cache-hit }}
value: ${{ steps.native-runtime.outputs.cache-hit }}

runs:
using: composite
steps:
- name: Resolve pnpm store mode
id: pnpm-store-mode
if: >-
github.event_name != 'pull_request' && inputs.cache-pnpm-store != 'false' &&
(inputs.cache-pnpm-store-lookup-only == 'true' ||
(inputs.cache-pnpm-store-lookup-only == 'auto' &&
inputs.cache-dependency-path == 'pnpm-lock.yaml' &&
runner.environment == 'github-hosted' && job.container.id == '' &&
(runner.os == 'Linux' || runner.os == 'macOS' || runner.os == 'Windows') &&
(runner.arch == 'X64' || runner.arch == 'ARM64') &&
(inputs.node-version == '' || inputs.node-version == '24')))
shell: bash
env:
LOOKUP_REQUEST: ${{ inputs.cache-pnpm-store-lookup-only }}
run: |
lookup_only=true
case "$LOOKUP_REQUEST" in
[aA][uU][tT][oO])
# Hosted runners have Node for this manifest-only check before toolchain setup.
lookup_only="$(node -p 'const p = require("./package.json"); p.engines?.node === "24" && typeof p.packageManager === "string" && p.packageManager.split("+")[0] === "pnpm@12.8.1"')"
;;
esac
printf 'lookup-only=%s\n' "$lookup_only" >> "$GITHUB_OUTPUT"

# setup-node needs pnpm on PATH to locate and restore its store.
- name: Setup pnpm
uses: pnpm/setup@v2
Expand All @@ -63,7 +104,7 @@ runs:
uses: actions/setup-node@v6
with:
node-version-file: package.json
cache: ${{ github.event_name != 'pull_request' && 'pnpm' || '' }}
cache: ${{ github.event_name != 'pull_request' && inputs.cache-pnpm-store != 'false' && steps.pnpm-store-mode.outputs.lookup-only != 'true' && 'pnpm' || '' }}
cache-dependency-path: ${{ inputs.cache-dependency-path }}
package-manager-cache: false

Expand All @@ -73,50 +114,66 @@ runs:
uses: actions/setup-node@v6
with:
node-version: ${{ inputs.node-version }}
cache: ${{ github.event_name != 'pull_request' && 'pnpm' || '' }}
cache: ${{ github.event_name != 'pull_request' && inputs.cache-pnpm-store != 'false' && steps.pnpm-store-mode.outputs.lookup-only != 'true' && 'pnpm' || '' }}
cache-dependency-path: ${{ inputs.cache-dependency-path }}
package-manager-cache: false

# PR-local stores compete with reusable build caches for the repository quota.
- name: Resolve pnpm download store
id: pnpm-store
if: github.event_name == 'pull_request'
if: >-
github.event_name == 'pull_request' && inputs.cache-pnpm-store != 'false' &&
!((runner.os == 'Linux' || runner.os == 'macOS') && (runner.arch == 'X64' || runner.arch == 'ARM64') && inputs.cache-dependency-path == 'pnpm-lock.yaml') &&
(runner.os != 'Windows' ||
!(runner.arch == 'X64' && contains(inputs.cache-dependency-path, 'mobile/pnpm-lock.yaml')) &&
!((runner.arch == 'X64' || runner.arch == 'ARM64') && inputs.cache-dependency-path == 'pnpm-lock.yaml')) ||
(github.event_name != 'pull_request' && inputs.cache-pnpm-store != 'false' &&
steps.pnpm-store-mode.outputs.lookup-only == 'true')
shell: bash
env:
LOCKFILE_HASH: ${{ hashFiles(inputs.cache-dependency-path) }}
STORE_LOOKUP_ONLY: ${{ steps.pnpm-store-mode.outputs.lookup-only == 'true' }}
run: |
test -n "$LOCKFILE_HASH"
cache_path="$(pnpm store path --silent)"
test -n "$cache_path"
printf 'path=%s\n' "$cache_path" >> "$GITHUB_OUTPUT"
printf 'arch=%s\n' "$(node -p 'require("node:os").arch()')" >> "$GITHUB_OUTPUT"
if [ "$STORE_LOOKUP_ONLY" = 'true' ]; then
printf 'ORCA_PNPM_STORE_CACHE_PATH=%s\n' "$cache_path" >> "$GITHUB_ENV"
fi

# Match setup-node's key and path so existing default-branch stores remain reusable.
# Direct downloads beat store restoration for the measured Linux, macOS and Windows installs.
- name: Restore pnpm download store without saving
if: github.event_name == 'pull_request'
id: pnpm-store-restore
if: >-
github.event_name == 'pull_request' && inputs.cache-pnpm-store != 'false' &&
!((runner.os == 'Linux' || runner.os == 'macOS') && (runner.arch == 'X64' || runner.arch == 'ARM64') && inputs.cache-dependency-path == 'pnpm-lock.yaml') &&
(runner.os != 'Windows' ||
!(runner.arch == 'X64' && contains(inputs.cache-dependency-path, 'mobile/pnpm-lock.yaml')) &&
!((runner.arch == 'X64' || runner.arch == 'ARM64') && inputs.cache-dependency-path == 'pnpm-lock.yaml'))
uses: actions/cache/restore@v5
with:
path: ${{ steps.pnpm-store.outputs.path }}
key: node-cache-${{ runner.os }}-${{ steps.pnpm-store.outputs.arch }}-pnpm-${{ hashFiles(inputs.cache-dependency-path) }}

- name: Resolve pnpm verification cache
id: verification-cache
if: runner.os == 'Linux' && inputs.cache-pnpm-verification == 'true'
shell: bash
env:
POLICY_HASH: ${{ hashFiles('pnpm-lock.yaml', 'pnpm-workspace.yaml', '.npmrc') }}
run: |
printf 'path=%s/lockfile-verified.jsonl\n' "$(pnpm cache path)" >> "$GITHUB_OUTPUT"
printf 'key=pnpm-verification-v1-%s-%s-%s-%s\n' "$RUNNER_OS" "$RUNNER_ARCH" "$(pnpm --version)" "$POLICY_HASH" >> "$GITHUB_OUTPUT"
# Producers can refresh access and publish misses without downloading existing archives.
- name: Keep pnpm download store without restoring
id: pnpm-store-lookup
if: steps.pnpm-store-mode.outputs.lookup-only == 'true'
uses: actions/cache@v5
with:
# Twice-nested composite cleanup loses internal step outputs.
path: ${{ env.ORCA_PNPM_STORE_CACHE_PATH }}
key: node-cache-${{ runner.os }}-${{ steps.pnpm-store.outputs.arch }}-pnpm-${{ hashFiles(inputs.cache-dependency-path) }}
lookup-only: true

- name: Restore pnpm verification record
id: verification-cache-restore
if: steps.verification-cache.outputs.key != ''
continue-on-error: true
uses: actions/cache/restore@v5
id: verification-cache
uses: ./.github/actions/restore-pnpm-verification
with:
path: ${{ steps.verification-cache.outputs.path }}
key: ${{ steps.verification-cache.outputs.key }}
enabled: ${{ inputs.cache-pnpm-verification }}

- name: Validate native runtime
shell: bash
Expand Down Expand Up @@ -152,9 +209,14 @@ runs:
git -C "$GITHUB_WORKSPACE" diff --exit-code -- package.json pnpm-lock.yaml pnpm-workspace.yaml
fi

# Why --if-present: release cuts run main's workflows against older release tags that predate this script.
- name: Build internal packages
shell: bash
run: pnpm run --if-present build:packages

# pnpm checks the cached record's policy and validity; never bypass verification.
- name: Save pnpm verification record on main
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && steps.verification-cache.outputs.key != '' && steps.verification-cache-restore.outputs.cache-hit != 'true'
if: github.ref == 'refs/heads/main' && github.event_name != 'pull_request' && steps.verification-cache.outputs.key != '' && steps.verification-cache.outputs.cache-hit != 'true'
continue-on-error: true
uses: actions/cache/save@v5
with:
Expand Down Expand Up @@ -194,68 +256,11 @@ runs:
path: ${{ steps.electron-package-cache.outputs.cache-root }}
key: electron-package-${{ runner.os }}-${{ runner.arch }}-${{ steps.electron-package-cache.outputs.version }}

# Why cached: `--ignore-scripts` leaves node-pty without build/Release, so
# ensure-native-runtime node-gyp-compiles it in every job that asks for a runtime.
# The artifacts are ABI-bound, so the key carries the target runtime, the resolved
# Node version, and the patch whose contents the build has to match.
# Windows extra globs are empty on Linux. No restore-keys: a partial-match key is
# an ABI-mismatched build, and ensure-native-runtime would recompile it anyway.
# Native addons built on a newer Linux image can require glibc symbols
# missing from an older runner/container. ImageOS distinguishes hosted
# Windows/macOS images; /etc/os-release also distinguishes Linux containers.
- name: Resolve native cache scope
id: native-cache-scope
if: inputs.native-runtime != 'none'
shell: bash
run: |
scope="${ImageOS:-$RUNNER_OS}"
if [ -r /etc/os-release ]; then
. /etc/os-release
scope="${ID:-linux}-${VERSION_ID:-unknown}"
fi
echo "scope=$scope" >> "$GITHUB_OUTPUT"

- name: Restore compiled native modules
id: native-cache-restore
if: inputs.native-runtime != 'none' && inputs.persist-native-cache != 'false'
uses: actions/cache@v5
with:
path: |
node_modules/.pnpm/node-pty@*/node_modules/node-pty/build
native/windows-registry/build
node_modules/.pnpm/@vscode+windows-process-tre*/node_modules/@vscode/windows-process-tree/build
key: native-modules-${{ runner.os }}-${{ steps.native-cache-scope.outputs.scope }}-${{ runner.arch }}-${{ inputs.native-runtime }}-node${{ steps.requested-node.outputs.node-version || steps.default-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml', '.github/actions/install-node-dependencies/action.yml', 'config/scripts/ensure-native-runtime.mjs', 'config/scripts/rebuild-native-deps.mjs', 'config/patches/node-pty@1.1.0.patch', 'config/patches/@vscode__windows-process-tree@0.8.0.patch', 'native/windows-registry/src/addon.cc', 'native/windows-registry/binding.gyp', 'native/windows-registry/package.json') }}

- name: Restore compiled native modules without saving
id: native-cache-restore-only
if: inputs.native-runtime != 'none' && inputs.persist-native-cache == 'false'
uses: actions/cache/restore@v5
with:
path: |
node_modules/.pnpm/node-pty@*/node_modules/node-pty/build
native/windows-registry/build
node_modules/.pnpm/@vscode+windows-process-tre*/node_modules/@vscode/windows-process-tree/build
key: native-modules-${{ runner.os }}-${{ steps.native-cache-scope.outputs.scope }}-${{ runner.arch }}-${{ inputs.native-runtime }}-node${{ steps.requested-node.outputs.node-version || steps.default-node.outputs.node-version }}-${{ hashFiles('pnpm-lock.yaml', '.github/actions/install-node-dependencies/action.yml', 'config/scripts/ensure-native-runtime.mjs', 'config/scripts/rebuild-native-deps.mjs', 'config/patches/node-pty@1.1.0.patch', 'config/patches/@vscode__windows-process-tree@0.8.0.patch', 'native/windows-registry/src/addon.cc', 'native/windows-registry/binding.gyp', 'native/windows-registry/package.json') }}

# pnpm's bundled gyp_main.py is not executable on fresh Linux runners.
- name: Use external node-gyp
if: runner.os == 'Linux' && inputs.native-runtime != 'none'
shell: bash
env:
NATIVE_RUNTIME: ${{ inputs.native-runtime }}
NATIVE_CACHE_HIT: ${{ steps.native-cache-restore.outputs.cache-hit || steps.native-cache-restore-only.outputs.cache-hit }}
run: |
# A cache hit can contain unusable addons; probe before skipping the rebuild toolchain.
if [ "$NATIVE_RUNTIME" = node ] && [ "$NATIVE_CACHE_HIT" = true ] &&
node config/scripts/ensure-native-runtime.mjs --check-only; then
exit 0
fi
npm install -g node-gyp@11.5.0
echo "npm_config_node_gyp=$(npm root -g)/node-gyp/bin/node-gyp.js" >> "$GITHUB_ENV"

- name: Prepare native runtime
id: native-runtime
if: inputs.native-runtime != 'none'
shell: bash
env:
NATIVE_RUNTIME: ${{ inputs.native-runtime }}
run: node config/scripts/ensure-native-runtime.mjs --runtime="$NATIVE_RUNTIME"
uses: ./.github/actions/prepare-native-runtime
with:
native-runtime: ${{ inputs.native-runtime }}
node-version: ${{ steps.requested-node.outputs.node-version || steps.default-node.outputs.node-version }}
persist-native-cache: ${{ inputs.persist-native-cache }}
9 changes: 6 additions & 3 deletions .github/actions/prepare-git-compatibility/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,17 @@ runs:
uses: actions/cache@v5
with:
path: ~/.cache/orca-git-compat/git-2.25.5
key: git-compat-baseline-${{ runner.os }}-${{ runner.arch }}-2.25.5
key: git-compat-baseline-${{ runner.os }}-${{ runner.arch }}-2.25.5-submodule

# Finish the CPU-heavy build before any timed compatibility lanes start.
- name: Build the baseline Git binary
shell: bash
run: |
archive="$RUNNER_TEMP/git-2.25.5.tar.gz"
source="$HOME/.cache/orca-git-compat/git-2.25.5"
if [ -x "$source/git" ]; then
if [ -x "$source/git" ] && [ -x "$source/git-submodule" ] \
&& [ -f "$source/git-sh-setup" ] && [ -f "$source/git-sh-i18n" ] \
&& [ -f "$source/git-parse-remote" ] && [ -x "$source/git-sh-i18n--envsubst" ]; then
exit 0
fi
curl -fsSL https://www.kernel.org/pub/software/scm/git/git-2.25.5.tar.gz -o "$archive"
Expand All @@ -27,6 +29,7 @@ runs:
mkdir -p "$source"
tar -xzf "$archive" -C "$source" --strip-components=1
make -C "$source" -j"$(nproc)" \
NO_GETTEXT=YesPlease NO_TCLTK=YesPlease NO_PYTHON=YesPlease git
NO_GETTEXT=YesPlease NO_TCLTK=YesPlease NO_PYTHON=YesPlease \
git git-submodule git-sh-setup git-sh-i18n git-parse-remote git-sh-i18n--envsubst
# Object files are no longer needed after linking the cached binary.
find "$source" -name '*.o' -delete
Loading
Loading