Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
5666 commits
Select commit Hold shift + click to select a range
1f8570e
Advance full shutdown deadlines in mocked Codex connection tests (#24…
nwparker Oct 2, 2026
d88d28a
fix(plugins): restore development watchers after folder replacement (…
nwparker Oct 2, 2026
13ce9a7
fix(watchers): preserve directory identities when checking replacemen…
nwparker Oct 2, 2026
a1da632
fix(opencode-go): don't fall back to OPENCODE_API_KEY when the creden…
Jinwoo-H Oct 2, 2026
a8ee94d
fix(codex): skip the hook trust RPC when Codex's session index is unr…
Jinwoo-H Oct 2, 2026
f8a31ed
refactor(cursor): move the desktop-login read onto the shared foreign…
Jinwoo-H Oct 2, 2026
58cf72d
Skip slower root package-store restores in Linux PR jobs (#24896)
nwparker Oct 2, 2026
58d0e99
test: advance mocked Claude child exit deadlines (#24897)
nwparker Oct 2, 2026
3fba195
perf(tab-bar): a change to one tab no longer re-renders every tab (#2…
AmoabaKelvin Oct 2, 2026
a824fb7
Reuse the headless detector compiler without installing full dependen…
nwparker Oct 2, 2026
533446d
Stop mocked renderer imports from qualifying headless CI (#24902)
nwparker Oct 2, 2026
b06f40f
fix(opencode): read the binder's session store off the main thread; s…
Jinwoo-H Oct 2, 2026
40e60b7
refactor(ai-vault): delete the unused session-scanner worker thread (…
Jinwoo-H Oct 2, 2026
1241ce1
Skip slower root package-store restores in macOS PR jobs (#24908)
nwparker Oct 3, 2026
75f8f34
Overlap independent Linux headless runtime builds (#24910)
nwparker Oct 3, 2026
65deb4b
test(persistence): wait for real worker readiness before timeout (#24…
nwparker Oct 3, 2026
f97ca2a
Add Qoder session history and search (#24614)
nwparker Oct 3, 2026
00da8e1
fix(cursor): show the primary model pool in compact usage (#24830)
nwparker Oct 3, 2026
56427f1
fix(native-chat): one ordered journal writer (#24127)
brennanb2025 Oct 3, 2026
de77c4b
fix(worktrees): list a folder once when git reports it twice (#24357)
AmoabaKelvin Oct 3, 2026
94b4116
Bound AI Vault cache loading and keep atomic saves responsive (#24789)
nwparker Oct 3, 2026
1d5d02e
Resolve explicitly configured command aliases for workers (#24648)
nwparker Oct 3, 2026
e80b550
Cancel the journal import test sampler before database teardown (#24767)
nwparker Oct 3, 2026
bdaeb6c
fix(antigravity): bound Windows hook stdin on the owning runtime (#24…
nwparker Oct 3, 2026
9e27050
Add verified native Antigravity Accounts on the owning runtime (#24691)
nwparker Oct 3, 2026
b5869ee
fix(worktrees): a worktree delete git fails partway stays listed and …
brennanb2025 Oct 3, 2026
2c2dfd0
test: run committed OpenCode redraw capture replay (#24811)
nwparker Oct 3, 2026
328caa2
fix(git): reduce queries and preserve data across execution hosts (#2…
nwparker Oct 3, 2026
c99b202
Use released table parser fix and remove redundant preview work (#24919)
nwparker Oct 3, 2026
3793c58
fix(mobile): release notification and account streams from the transp…
brennanb2025 Oct 3, 2026
603af90
fix(browser): avoid a redundant copy of document preview bytes (#24861)
OrcaWin Oct 3, 2026
613944b
fix(browser): release upload buffers after native staging (#24869)
OrcaWin Oct 3, 2026
501ad0e
fix(editor): release Markdown selection listeners after close (#24875)
OrcaWin Oct 3, 2026
a3524c5
fix(browser): release obsolete state during close replay (#24892)
OrcaWin Oct 3, 2026
aeba62a
fix(journal): encode only the retained tool-output preview (#24696)
OrcaWin Oct 3, 2026
f690319
fix(ssh): release response chunks after the sink accepts them (#24719)
OrcaWin Oct 3, 2026
e1c5232
fix(codex): release full messages behind completed child previews (#2…
OrcaWin Oct 3, 2026
7f388b7
fix(mobile): avoid backtick match arrays when editing Markdown (#24778)
OrcaWin Oct 3, 2026
233f049
fix(editor): avoid newline match arrays when saving LF Markdown (#24795)
OrcaWin Oct 3, 2026
2e9ab41
fix(terminal): cancel viewport retries when panes close (#24745)
OrcaWin Oct 3, 2026
7f12b29
fix(chat): encode only the retained prefix when streamed output overf…
OrcaWin Oct 3, 2026
467ed33
fix(reconnect): release obsolete app state held by handle-gap watcher…
OrcaWin Oct 3, 2026
e0f4adb
fix(activity): release unrelated editor state during the Undo window …
OrcaWin Oct 3, 2026
192fb8f
fix(chat): let idle session readers release retired journal folds (#2…
OrcaWin Oct 3, 2026
b805b77
fix(automations): release unused run output from dashboard rows (#24847)
OrcaWin Oct 3, 2026
709d9bf
fix(notebook): cancel kernel starts when the notebook closes (#24858)
OrcaWin Oct 3, 2026
5e5a992
fix(markdown): reduce Find memory for ordinary text (#24635)
OrcaWin Oct 3, 2026
7e0db0e
fix(clipboard): decode uploaded images without joining all chunks (#2…
OrcaWin Oct 3, 2026
5c52dce
fix(mobile): release file previews after their tabs close (#24655)
OrcaWin Oct 3, 2026
d9a3d3c
fix(editor): expire saved-file snapshots while the editor is idle (#2…
OrcaWin Oct 3, 2026
74609c6
fix(ai-vault): bound transcript text before joining message blocks (#…
OrcaWin Oct 3, 2026
b457583
fix(terminal): release retired status sources from the agent type cac…
OrcaWin Oct 3, 2026
97ab687
fix(jira): expire cached attachment images while idle (#24678)
OrcaWin Oct 3, 2026
1061ded
fix(mobile): merge terminal backlogs without rescanning growing strin…
OrcaWin Oct 3, 2026
7c6a37e
fix(terminal): release retired scrollback layouts from status routing…
OrcaWin Oct 3, 2026
0b0152a
fix(files): release expired mobile path inventories while idle (#24694)
OrcaWin Oct 3, 2026
eb44511
fix(jira): discard detail replies after closing an issue (#24835)
OrcaWin Oct 3, 2026
84a4e8a
fix(browser): avoid a redundant copy of live screencast images (#24851)
OrcaWin Oct 3, 2026
a25f730
fix(terminal): release closed layouts while reveal frames are paused …
OrcaWin Oct 3, 2026
9592159
fix(quick-open): release expired legacy file inventories while idle (…
OrcaWin Oct 3, 2026
87a2c3c
fix(ssh): keep terminal buffers out of failed workspace sync status (…
OrcaWin Oct 3, 2026
2165558
fix(native-chat): the desktop declares structured chat support to pai…
brennanb2025 Oct 3, 2026
18b99ac
fix(ai-vault): release expired host results while idle (#24766)
OrcaWin Oct 3, 2026
ac6c27e
fix(orchestration): avoid loading task descriptions during promotion …
OrcaWin Oct 3, 2026
bd6d7b9
feat(codex): run Windows Codex on the real ~/.codex (#24356)
Jinwoo-H Oct 3, 2026
3c9c2ab
fix(mobile): release callbacks retained by canceled streams (#24625)
OrcaWin Oct 3, 2026
3ad2648
fix(mobile): reduce base64 allocations for encrypted text frames (#24…
OrcaWin Oct 3, 2026
9a1bef4
fix(cursor): resume exact conversation after startup status replay (#…
nwparker Oct 3, 2026
610c048
fix(claude): inspect child tool IDs without rebuilding their output (…
OrcaWin Oct 3, 2026
5c62cb5
fix(native-chat): remove the "still starting" notice that flashed on …
brennanb2025 Oct 3, 2026
a5915b2
fix(native-chat): no loading flash on open, one report for a failed s…
brennanb2025 Oct 3, 2026
ac46d9e
fix(native-chat): plain wording for chat errors and status rows (#24594)
brennanb2025 Oct 3, 2026
6e6f651
Avoid repeated pnpm archive downloads in cache producers (#24927)
nwparker Oct 3, 2026
f146368
fix(usage): include OpenCode cached input in totals
nwparker Oct 3, 2026
fee8143
fix(opencode): atomically install status plugin entrypoints
nwparker Oct 3, 2026
f7b1f9d
fix(opencode): select tmux status on the execution host
nwparker Oct 3, 2026
b032867
feat(accounts): link standalone GLM Coding Plans (#24618)
nwparker Oct 3, 2026
77ad467
fix(ci): prevent concurrent pnpm refresh during mobile typechecks (#2…
nwparker Oct 3, 2026
54ddebf
test(terminal): restore the live fish fixture prerequisites (#24947)
nwparker Oct 3, 2026
08ee7ba
fix(shortcuts): defer TUI editing chords in terminal-first mode (#24640)
nwparker Oct 3, 2026
843607b
Register supervised Qoder China and Qwen Code (#24616)
nwparker Oct 3, 2026
8f26bfa
Use the measured pnpm lookup policy automatically in hosted root CI (…
nwparker Oct 3, 2026
055871a
Continue Antigravity IDE and 2.0 history in new CLI conversations (#2…
nwparker Oct 3, 2026
e8402b4
fix(opencode): retry timed-out SSH plugin updates (#24666)
nwparker Oct 3, 2026
53f9ea7
fix(opencode): keep Go credentials private and resolve backend keys (…
nwparker Oct 3, 2026
0b15a20
Skip store notifications when refreshed work items are unchanged (#24…
nwparker Oct 3, 2026
7a3ce0b
Read project activity once while sorting the sidebar (#24549)
nwparker Oct 3, 2026
7539d19
Skip impossible link and tag matches in docs search results (#24646)
nwparker Oct 3, 2026
29e7adf
Decode complete transcript lines without copying their bytes (#24546)
nwparker Oct 3, 2026
37b1f47
Clear unused speech worker timers after errors and exit (#24924)
nwparker Oct 3, 2026
87f5a98
Reuse documentation search excerpts during result navigation (#24574)
nwparker Oct 3, 2026
abd2b49
Append subagent handoffs without recopying their message list (#24672)
nwparker Oct 3, 2026
072f25e
Cancel plugin retry timers when their fetch is replaced (#24700)
nwparker Oct 3, 2026
c0a673b
Avoid rebuilding visible file paths for single-row selection (#24743)
nwparker Oct 3, 2026
76adcce
Reuse prepared reads while searching saved agent conversations (#24535)
nwparker Oct 3, 2026
c71753b
Reuse discovered mobile chunks during static traversal (#24774)
nwparker Oct 3, 2026
14ab734
Skip unused image-size calculations in mobile web browser requests (#…
nwparker Oct 3, 2026
b109544
Skip diff analysis after a result has been discarded (#24711)
nwparker Oct 3, 2026
7bbe421
Skip late browser grab toasts after their surface closes (#24727)
nwparker Oct 3, 2026
9142169
Classify native chat waiting messages once (#24771)
nwparker Oct 3, 2026
9d68ae3
Skip discarded Kanban pruning for an empty selection (#24782)
nwparker Oct 3, 2026
cf73a97
Index discovered test files once during shard selection validation (#…
nwparker Oct 3, 2026
1198d06
Clear the watchdog benchmark heartbeat when CPU sampling fails (#24802)
nwparker Oct 3, 2026
3b13282
Reuse the parsed notification when leasing a push delivery (#24645)
nwparker Oct 3, 2026
36d0086
Update README downloads badge
github-actions[bot] Oct 3, 2026
30e0cca
Let retired-cache GC observations settle across the existing six-turn…
nwparker Oct 3, 2026
f93808d
Collect test-selection evidence when full unit tests fail (#24955)
nwparker Oct 3, 2026
ebe7702
Check each project repository once while filtering mobile cards (#24540)
nwparker Oct 3, 2026
d2c9636
Skip renderer callbacks after their request has ended (#24631)
nwparker Oct 3, 2026
9e11375
Decode single-piece saved-session tails without copying them (#24632)
nwparker Oct 3, 2026
832caea
Avoid irrelevant scroll-action searches in Mac snapshots (#24731)
nwparker Oct 3, 2026
1c8d281
Stop copying every retained browser page before attachment (#24553)
nwparker Oct 3, 2026
0afc7b1
Reuse event byte sizes when relay watchers notify several clients (#2…
nwparker Oct 3, 2026
cca14bd
Stop building unused import candidates in the test planner (#24611)
nwparker Oct 3, 2026
c792386
docs(terminal): explain local macOS/Linux shell startup files
brynnclaw Oct 3, 2026
97fd7ed
fix(editor): recognize Ruby task and configuration files
ggbdpq Oct 3, 2026
b332742
Speed up large Markdown Find and render oversized tables (#24948)
nwparker Oct 3, 2026
fa2d50f
fix(source-control): generate clean OpenCode messages locally and ove…
nwparker Oct 3, 2026
81e69f3
fix(persistence): preserve projectGroupOrder on restart for flat fold…
lurunzi Oct 3, 2026
6565a3f
fix(runtime): reclaim temp files orphaned by interrupted mobile store…
LDH1103 Oct 3, 2026
8c4d63e
fix(terminal): show actionable copy for missing folder workspace paths
Waynting Oct 3, 2026
6486624
docs: reference local orca.yaml and .worktreeinclude
nwparker Oct 3, 2026
4f46f5b
fix(orchestration): allow model selection for OMP workers
nwparker Oct 3, 2026
c39f5f2
fix(cli): preserve primitive success results in JSON output
nwparker Oct 3, 2026
f255574
Show loaded file changes before deleting a workspace
nwparker Oct 3, 2026
0f1bbce
fix(keybindings): record and match Option+digit shortcuts on macOS
marcuslannister Oct 3, 2026
9f5c520
fix(editor): don't throw closing a stale active file
OrcaWin Oct 3, 2026
5f5c266
Fix Project Settings targeting for multiple local checkouts
fsmeier Oct 3, 2026
130b2ef
feat(documents): open CSV and TSV files from the OS
nwparker Oct 3, 2026
c1d403a
feat(cli): link GitHub and GitLab items on worktree create and set
SongMarco Oct 3, 2026
7b8498b
feat(sidebar): include folder workspaces in keyboard navigation
nwparker Oct 3, 2026
126f709
fix(build): turn off MSBuild file tracking for Windows native rebuilds
b1nhm1nh Oct 3, 2026
f113d35
Fix Ctrl+M in Linux and Windows terminals
yuzhichang Oct 3, 2026
98a6d20
fix(startup): read a nushell login PATH from $env.PATH
Kh05ifr4nD Oct 3, 2026
8919f3d
fix(cursor): run local hooks through sh for non-POSIX login shells
Kh05ifr4nD Oct 3, 2026
a5f28f2
Fix word wrap for both panes in side-by-side diffs
innocarpe Oct 3, 2026
df9acd8
fix(monaco): highlight Svelte block closers inside markup
innocarpe Oct 3, 2026
752dbc9
fix(repos): keep active clone dialog open on outside clicks
nwparker Oct 3, 2026
8ccc336
fix(editor): keep chat visible after closing Markdown tabs
nwparker Oct 3, 2026
44c584e
Honor typed starting numbers in chat ordered lists
nwparker Oct 3, 2026
4a5f00f
Normalize base source once while checking changed-code diagnostics (#…
nwparker Oct 3, 2026
a2896f5
Support real OpenCode sessions in native Chat (#24647)
nwparker Oct 3, 2026
ec47f0c
Drain removal fixture jobs before resetting and deleting their record…
nwparker Oct 3, 2026
668d6d4
Reuse measured Electron preparation for current Terminal Perf refs (#…
nwparker Oct 3, 2026
4049e63
feat(jcode): add Jcode as a supported TUI agent with managed hooks
czzczz Sep 23, 2026
2ca85d2
feat(jcode): evidence-backed status pipeline (turn_start, live pre_to…
nwparker Sep 23, 2026
6164d3f
fix(jcode): register vault fixture, dynamic model discovery, script r…
nwparker Sep 23, 2026
5b43e20
fix(jcode): keep finished-turn detail so completion notifications fire
nwparker Sep 23, 2026
5ab36cc
fix(jcode): show the prompt in agent rows instead of jcode's repainti…
nwparker Sep 23, 2026
33cab24
fix(jcode): pre-warm the per-pane daemon so a cold runtime dir cannot…
nwparker Sep 23, 2026
7fb201f
fix(jcode): stop the OSC color skip from crashing every pane connect
nwparker Sep 23, 2026
0a45ad5
refactor(jcode): fold three reverse-scan copies into one, reuse the s…
nwparker Sep 23, 2026
4f2007a
fix(jcode): narrow dynamic reads with predicates, pin the Windows hoo…
nwparker Sep 23, 2026
2c04f79
test(jcode): measure the gate against the synchronous path, not the c…
nwparker Sep 24, 2026
888e3c4
test(jcode): drop the wall-clock gate assertion
nwparker Sep 24, 2026
a7b9358
fix(jcode): address CodeRabbit review on #22539
nwparker Sep 24, 2026
fe76440
fix(jcode): read the journal once per turn, key prompts by byte offset
nwparker Sep 24, 2026
4c2cb3c
fix(jcode): quote the managed hook path, drop tools from patch prompts
nwparker Sep 24, 2026
07d8aff
test(jcode): pin the tool-profile flag in the generation plan too
nwparker Sep 24, 2026
154b2fd
fix(text-generation): refuse an oversized argv prompt on Linux too
nwparker Sep 24, 2026
84d246b
fix(jcode): register in main's remote-installer guard, drop our dupli…
nwparker Oct 3, 2026
af4c3e2
fix(jcode): decompose the four files jcode pushed over max-lines
nwparker Oct 3, 2026
8dc16a7
feat(native-chat): open structured chats on the paired Orca server th…
brennanb2025 Oct 3, 2026
2fc517c
feat(cli): add --unread/--read to orca worktree set
razshlomo Oct 3, 2026
bde1c09
feat(cli): configure external worktree visibility per repo
nwparker Oct 3, 2026
a40e501
perf(git): reuse queries and stop canceled catalog scans (#24923)
nwparker Oct 3, 2026
1001118
test(e2e): require exact Linux package tokens (#24995)
nwparker Oct 3, 2026
0e36159
Allow cold node-pty setup on Windows ARM CI (#24997)
nwparker Oct 3, 2026
aca2d51
fix(jcode): harden Windows hooks and negotiate remote history (#24998)
nwparker Oct 3, 2026
6245192
fix(git): preserve SSH review context and worktree ownership (#24945)
nwparker Oct 3, 2026
5e65871
fix(opencode): keep shared-session TUI activity with its owning pane …
nwparker Oct 3, 2026
b601b98
fix(ci): wait for the fragment navigation policy report (#25017)
nwparker Oct 3, 2026
c2dba12
Add host-owned OpenCode and Devin managed account profiles (#24636)
nwparker Oct 3, 2026
786a040
Read OpenCode Go usage from the selected account (#24770)
nwparker Oct 3, 2026
1d010ce
fix(source-control): default Codex to GPT-5.6 Terra low (#24495)
BeamNawapat Oct 3, 2026
ee84608
fix(jira): search plain text when task search input isn't JQL (#22900)
AmoabaKelvin Oct 3, 2026
88e9517
Wait for OpenCode worker input before the first dispatch (#24601)
nwparker Oct 3, 2026
bbafca4
fix(source-control): generate PR details before Create PR on a ready …
AmoabaKelvin Oct 3, 2026
995715b
test(windows): record native PTY stress lifecycle milestones (#25042)
nwparker Oct 3, 2026
c5d298a
fix(cli): orca file open opens PDFs and other binaries like the File …
AmethystLiang Oct 3, 2026
fd030c4
Update README downloads badge
github-actions[bot] Oct 3, 2026
0c4e26e
refactor(orchestration): one function for six agent-to-agent sends (#…
brennanb2025 Oct 3, 2026
2bd656c
feat(native-chat): a Claude subagent waiting on a permission prompt r…
brennanb2025 Oct 3, 2026
752871b
Turn desktop notifications on or off per machine (#24518)
brennanb2025 Oct 3, 2026
9eb73a6
Replace agentArgsOverride with unified removeAgentArgs approach (#25091)
AmethystLiang Oct 3, 2026
4fdf6df
Reuse the ancestor path while building mobile agent rows (#24539)
nwparker Oct 3, 2026
8b1dc63
Release waiting terminal output when a mobile subscription fails to s…
nwparker Oct 3, 2026
558c10f
Avoid cloning terminal agent owners twice in relay listings (#24713)
nwparker Oct 3, 2026
caf8078
Reuse prepared statements for internal worker checks (#24573)
nwparker Oct 3, 2026
f1e6aea
Prepare the Activity search query once per filtered list (#24701)
nwparker Oct 3, 2026
b5814d0
Avoid rescanning shared chunks in the plain Node build guard (#24717)
nwparker Oct 3, 2026
b5db0ad
Select the latest stable release tag in one pass (#24786)
nwparker Oct 3, 2026
a436aab
Avoid Resource Manager renders when terminal removal leaves its inven…
nwparker Oct 3, 2026
cf43dd1
Cancel pending cursor updates when a terminal closes (#24566)
nwparker Oct 3, 2026
eee19ac
Cancel terminal preview fit frames when the preview closes (#24712)
nwparker Oct 3, 2026
1de8396
Skip new mobile toast work after feedback owner cleanup (#24759)
nwparker Oct 3, 2026
86b2dd6
Release terminal side effects after they have been delivered (#24548)
nwparker Oct 3, 2026
24580c7
Release relay handshake timers when a host connection leaves (#24554)
nwparker Oct 3, 2026
4498e09
Avoid restarting error timers on closed mobile relay links (#24567)
nwparker Oct 3, 2026
831710c
Avoid restarting error timers after mobile relay pairing closes (#24568)
nwparker Oct 3, 2026
0619462
Delete unreturned clipboard cache files after a failed write (#24599)
nwparker Oct 3, 2026
e1b046a
Skip new legacy file inventories after mobile search cleanup (#24792)
nwparker Oct 3, 2026
759c48c
Discard completed AI Vault cancellation IDs in the relay worker (#24820)
nwparker Oct 3, 2026
73904fc
Release completed updater setup timers and callbacks (#24920)
nwparker Oct 3, 2026
60b1664
Check daemon idle state without building discarded terminal inventori…
nwparker Oct 3, 2026
8cd9751
fix(updater): keep macOS Orca open when background instances block up…
OrcaWin Oct 3, 2026
92965f3
Cancel review animations and timers when the Markdown preview closes …
nwparker Oct 3, 2026
44b955b
docs: update Android APK links to 0.0.52 (#25107)
AmethystLiang Oct 4, 2026
5df67ef
Preserve saved account credentials after enrollment errors (#25059)
nwparker Oct 4, 2026
3575895
Fix admission of later Claude question rows and real CLI verification…
nwparker Oct 4, 2026
2b1acd0
fix: remove managed profiles through canonical UUID paths (#25126)
nwparker Oct 4, 2026
af13da5
Recognize Build terminals and preserve Windows confirmation key routing
nwparker Oct 4, 2026
4ea021f
fix(opencode): finish status installation with invalid TUI settings (…
nwparker Oct 4, 2026
94f5669
fix(packaging): ship serve-sim only in macOS builds (#25128)
Jinwoo-H Oct 4, 2026
e5ba597
Recover working local forge CLIs behind broken PATH launchers
aashish254 Oct 4, 2026
3284b4c
Retain browser feedback notes across navigation and reload
E-BlackTV Oct 4, 2026
136b990
fix(search): negotiate supported agents across mixed host versions (#…
nwparker Oct 4, 2026
f199a20
Preserve OpenCode reasoning and recorded patches in native history (#…
nwparker Oct 4, 2026
1dc6157
ci: run the cross-version tests when the chat send builders or the RP…
brennanb2025 Oct 4, 2026
3cc5e1d
Avoid duplicate ripgrep scans for full file inventories (#23490)
nwparker Oct 4, 2026
5a2aa87
Select OpenCode plugin exports from the execution host version (#24662)
nwparker Oct 4, 2026
d5bb69d
Cut CI time in store, Git contention and readiness tests (#25147)
nwparker Oct 4, 2026
9207aef
Add an optional shortcut to toggle child workspaces (#24165)
mmarabel Oct 4, 2026
f8081c5
Filter Markdown filenames before sending the listing to the app (#25148)
nwparker Oct 4, 2026
8267b57
Fix Markdown Find editing without moving the caret or viewport (#25144)
nwparker Oct 4, 2026
ce07786
Keep opened issue details and edits in the selected repository (#24729)
nwparker Oct 4, 2026
b1b78b4
Update README downloads badge
github-actions[bot] Oct 4, 2026
ffd23fe
Avoid repeated runtime imports and recovery fixture seeding (#25155)
nwparker Oct 4, 2026
2576783
fix(agents): keep ~/.copilot/config.json owner-only when Orca trusts …
brennanb2025 Oct 4, 2026
2b3b692
Reduce terminal test overhead while preserving full parity checks (#2…
nwparker Oct 4, 2026
58bd15f
Fix ripgrep result completeness, filename handling, and search errors…
nwparker Oct 4, 2026
e8310d5
fix(opencode): submit admitted native startup briefs without overwrit…
nwparker Oct 4, 2026
f62bd7d
feat(csv-viewer): detect semicolon-separated CSVs (#19894)
kbsali Oct 4, 2026
b407d06
Reuse buffer cells during terminal cursor context scans (#25161)
nwparker Oct 4, 2026
c4e8735
Share PR preflight setup to reduce runner demand (#25150)
nwparker Oct 4, 2026
d9173ff
Keep Orca CLI first after shell startup (#25130)
nwparker Oct 4, 2026
8c61730
fix(opencode): keep overlay manifest cleanup inside owned directories…
nwparker Oct 4, 2026
87bc51d
Reduce test deadline waits and exact byte comparison costs (#25187)
nwparker Oct 4, 2026
70cf912
Clean up retired OpenCode configuration copies safely (#25222)
nwparker Oct 4, 2026
5389925
Preserve Windows SSH upload failures unless pwsh is missing (#25185)
nwparker Oct 4, 2026
d77c570
Verify shared preflight selection and record full unit timings (#25239)
nwparker Oct 4, 2026
ea6a6d6
Pass wrapped OpenCode run prompts as positional messages (#25001)
nwparker Oct 4, 2026
9502875
fix(terminal): encode Ctrl+C when kitty keyboard mode is on
innocarpe Oct 1, 2026
8fac3b3
fix(terminal): keep kitty interrupt mode across a replaced headless m…
innocarpe Oct 1, 2026
73db700
fix(terminal): send ETX when kitty mode only reports alternate keys
innocarpe Oct 1, 2026
3c1a0f3
fix(terminal): reapply kitty flags when a renderer buffer seeds the m…
innocarpe Oct 1, 2026
c3b9dfa
fix(terminal): apply kitty flags from an empty renderer buffer
innocarpe Oct 1, 2026
2bdf198
fix(terminal): route renderer Ctrl+C through kitty-aware encoder
innocarpe Oct 4, 2026
0749f54
fix(terminal): track kitty Ctrl+C input intent
innocarpe Oct 4, 2026
17d74ca
fix(terminal): recognize Kitty Ctrl+C in downstream input
innocarpe Oct 4, 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.
94 changes: 86 additions & 8 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,12 +1,90 @@
/config/scripts/create-draft-release.mjs text eol=lf
/config/scripts/orca-dev.mjs text eol=lf
/config/scripts/latest-stable-release.mjs text eol=lf
/config/scripts/publish-complete-draft-releases.mjs text eol=lf
/config/scripts/release-rc-history.mjs text eol=lf
/config/scripts/run-internal-dev-setup.mjs text eol=lf
/config/scripts/verify-cli-bin.mjs text eol=lf
/config/scripts/verify-release-required-assets.mjs text eol=lf
# A shebang plus CRLF makes vite's SSR transform emit a literal `#!` mid-module,
# so any suite importing the script dies at load with a SyntaxError. Pin the whole
# directory rather than the scripts that happen to have a test today.
/config/scripts/**/*.mjs text eol=lf
/skill-guides/*.md text eol=lf
/skill-stubs/*.md text eol=lf
/skill-stubs/_shared/*.md text eol=lf
/skills/*/SKILL.md text eol=lf
/src/cli/bundled-skill-guides.ts text eol=lf
# 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
# lockfile twice and broke every install (#17886).
# These files are stored LF, which is not always the encoding they were written
# against -- @vscode/windows-process-tree ships CRLF sources -- so any code that
# runs `git apply` on one must force `-c core.autocrlf=input` rather than trust
# the host's setting. See config/scripts/windows-process-tree-gyp-rebuild.mjs.
/config/patches/*.patch -text
# Same reason, and pnpm parses these too: a CRLF checkout makes the mobile
# patches unparseable, so Windows packaging dies on ERR_PNPM_INVALID_PATCH.
/mobile/patches/*.patch -text
# The xterm bundle hunks also make a diff nobody can read; review the hand-written
# source patch under xterm-src/ instead. The sibling patches stay diffable.
/config/patches/@xterm__xterm@*.patch -diff
/config/patches/xterm-src/*.patch text eol=lf
# pnpm parses these unified diffs during Windows installs; keep checkout bytes stable.
/mobile/patches/*.patch -text
# Generated wrapper fixtures: collapse them in the PR diff so they stop drowning
# the reviewable change, and pin LF because they are compared byte-for-byte.
# Not -diff: the shell diff is the review surface when a wrapper does change.
/src/main/__fixtures__/shell-wrapper-snapshots/*.txt linguist-generated=true text eol=lf
# Captured agent PTY transcripts. -text, not `text eol=lf` like the wrapper snapshots above:
# these carry real CR and CRLF bytes as the terminal emitted them, and line-ending
# normalisation on a Windows checkout would rewrite the evidence the fixture exists to be.
/src/main/runtime/__fixtures__/*.txt -text
/src/main/daemon/__fixtures__/pty-transcripts/*.txt -text
# Generated runtime English subset: compared byte-for-byte by
# verify:localization-runtime-catalog, so a CRLF checkout would fail the gate.
/src/renderer/src/i18n/en-runtime-required.json linguist-generated=true text eol=lf
# Generated method->params catalog: compared byte-for-byte by
# verify:rpc-params-catalog, so a CRLF checkout would fail the gate.
/src/shared/rpc-contract/rpc-params-catalog.generated.ts linguist-generated=true text eol=lf
# Mobile RPC recording goldens: replay requires the file text to equal what rpc:record writes
# (LF), so a CRLF checkout would fail every golden.
/mobile/rpc-foundation/goldens/*.json text eol=lf
# Mobile web page source. Every text byte here is hashed into an asset digest and from
# there into buildId, so a CRLF Windows checkout would ship a different bundle id for
# identical source (91af2897 vs 9d78435e, measured on the bundle this replaced).
/mobile/src/** text eol=lf
/mobile/app/** text eol=lf
/mobile/web-entry/** text eol=lf
# The blanket pin above would mark a future binary as text; exempt the asset types an
# RN page actually carries.
/mobile/src/**/*.png -text
/mobile/src/**/*.jpg -text
/mobile/src/**/*.jpeg -text
/mobile/src/**/*.gif -text
/mobile/src/**/*.ico -text
/mobile/src/**/*.webp -text
/mobile/src/**/*.ttf -text
/mobile/src/**/*.otf -text
/mobile/src/**/*.woff -text
/mobile/src/**/*.woff2 -text
/mobile/app/**/*.png -text
/mobile/app/**/*.jpg -text
/mobile/app/**/*.jpeg -text
/mobile/app/**/*.gif -text
/mobile/app/**/*.ico -text
/mobile/app/**/*.webp -text
/mobile/app/**/*.ttf -text
/mobile/app/**/*.otf -text
/mobile/app/**/*.woff -text
/mobile/app/**/*.woff2 -text
/mobile/web-entry/**/*.png -text
/mobile/web-entry/**/*.jpg -text
/mobile/web-entry/**/*.jpeg -text
/mobile/web-entry/**/*.gif -text
/mobile/web-entry/**/*.ico -text
/mobile/web-entry/**/*.webp -text
/mobile/web-entry/**/*.ttf -text
/mobile/web-entry/**/*.otf -text
/mobile/web-entry/**/*.woff -text
/mobile/web-entry/**/*.woff2 -text
10 changes: 10 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# Product source remains owned by its normal reviewers; localization inputs need focused review.
/src/renderer/src/i18n/locales/ @brennanb2025
/config/scripts/*localization*.mjs @brennanb2025
/config/scripts/*locale*.mjs @brennanb2025
/config/i18next.config.ts @brennanb2025

# The relay's deploy and operate surface: workspace, workflows, and the rollout lease action.
/cloud/ @Jinwoo-H
/.github/workflows/cloud-*.yml @Jinwoo-H
/.github/actions/cloud-sql-rollout-lease/ @Jinwoo-H
20 changes: 11 additions & 9 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,11 @@ pnpm install
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

Use a clear, descriptive branch name that reflects the change.
Expand Down Expand Up @@ -52,21 +57,19 @@ If your change affects UI or interaction behavior, verify it on the platforms it

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

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

## Pull Requests

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

- explain the user-visible change
- stay focused on a single topic when possible
- include screenshots or screen recordings for new UI or behavior changes
- 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
- include high-quality tests when behavior changes or bug fixes warrant them
- include a brief code review summary from your AI coding agent that explicitly checks cross-platform compatibility, SSH/remote/local compatibility, supported agent and integration compatibility, performance risk, UI quality when applicable, and basic security risk
- mention any platform-specific, remote/SSH-specific, agent-specific, integration-specific, or git-provider-specific behavior and testing notes
- **Include your X (Twitter) handle!** We love giving shoutouts to our contributors when we merge features on [@orca_build](https://x.com/orca_build).

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

## Release Process

Expand Down Expand Up @@ -114,7 +117,6 @@ All stable kinds (`patch`, `minor`, `major`) are computed off the latest _stable

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


## Release Channels

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

Please write your issue in English.

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

Please write your issue in English.

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

- type: textarea
id: details
attributes:
Expand Down
152 changes: 152 additions & 0 deletions .github/actions/cloud-sql-rollout-lease/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,152 @@
# Cloud SQL rollout lease

A compare-and-swap lease on one Cloud Storage object, used to serialize Cloud SQL
**connection-budget** rollouts across two repositories.

`concurrency.group: production-cloud-sql-rollout` only serializes runs inside a single repository.
Once the relay workflows live in `stablyai/orca` and the app workflows stay in
`stablyai/orca-cloud`, there are two independent queues pointed at one shared Cloud SQL instance.
`relay-cloud-sql-connection-budget.mjs` computes `rolloutOverlap` as a `Math.max` over the relay
director, api, auth and relay-cell candidates, which is only sound when exactly one rollout is in
flight. This lease is what keeps that assumption true. Keep the per-repo concurrency groups **and**
the lease; they solve different halves of the problem.

## What it protects

No workflow runs a Cloud SQL schema migration. Every locked workflow either deploys a Cloud Run
revision or applies a GCE instance template against the shared instance, so the lease must cover
**all rollouts**, not just migrations.

## Usage

The lease step must run **after** `google-github-actions/setup-gcloud`, and after
`actions/checkout` — `uses: ./.github/actions/...` resolves against the checked-out workspace.
It belongs in the first job of the workflow that holds a GCP credential, which is not always the
gate job: `deploy-relay-production-same-cap`'s gate runs no `gcloud`, so its first acquire happens
in the first cell job.

```yaml
- uses: google-github-actions/auth@v2
with: { workload_identity_provider: ..., service_account: ... }
- uses: google-github-actions/setup-gcloud@v2
- uses: ./.github/actions/cloud-sql-rollout-lease
with:
bucket: onorca-cloud-terraform-state
object: terraform/state/cloud-sql-rollout/production.lock
```

Buckets and objects in use:

| Environment | Bucket | Object |
| ----------- | -------------------------------------- | --------------------------------------------------- |
| production | `onorca-cloud-terraform-state` | `terraform/state/cloud-sql-rollout/production.lock` |
| staging | `onorca-cloud-staging-terraform-state` | `terraform/state/cloud-sql-rollout/staging.lock` |

Workflows that serve both environments (`deploy-relay-asia-topology`,
`operate-relay-asia-admission`) select the pair with an `inputs.environment == 'production'`
ternary on both `bucket` and `object`. `deploy-staging` keeps its own `deploy-artifacts-staging`
concurrency group but takes the staging lease, because it rolls the staging API revision.

The object sits beside `terraform/state/relay-fence-broker/<env>.lock`. The IAM grant names both the
relay and app service accounts, so it is a **foundation-root** resource: `roles/storage.objectAdmin`
conditioned on the `terraform/state/cloud-sql-rollout/` prefix, **plus** an unconditioned
`roles/storage.legacyBucketReader`. Without the second role the generation-matched write fails in a
way that looks like a permissions flake.

## One lease per run, not per job

`deploy-relay-production-capacity` calls its reusable job six times and
`deploy-relay-production-same-cap` four times. Each call is a separate job on a separate runner, so
a naive per-job acquire/release would leave the object free between waves — for runs that have taken
up to 85 minutes.

The lease is therefore keyed to the **run**, not the job. `holder-key` defaults to
`${{ github.repository }}/${{ github.run_id }}`, and a job that finds its own holder key on a live
lease **re-enters** it: the record is refreshed, not rejected. Every job in the chain acquires; only
the last one releases.

```yaml
jobs:
gate:
steps:
- uses: ./.github/actions/cloud-sql-rollout-lease
with: { bucket: ..., object: ..., release: 'false' } # intermediate

wave-1: # ... release: 'false' on every wave job

release_lease:
needs: [gate, wave-1, wave-2, wave-3, wave-4]
if: always()
steps:
- uses: google-github-actions/auth@v2
- uses: google-github-actions/setup-gcloud@v2
- uses: ./.github/actions/cloud-sql-rollout-lease
with: { bucket: ..., object: ..., release: 'true' } # final
```

`release: 'false'` still acquires and still runs its `post` step; `post` only skips the delete. A
single-job workflow leaves `release` at its `true` default and needs no extra job. So does a
workflow whose several jobs can never hold the lease at once: `prove-relay-staging-capacity`'s two
lease-holding jobs are guarded by complementary `inputs.mode` conditions, and the contract test
checks that exclusivity rather than assuming it.

If the final job never runs (runner killed, run cancelled hard), the lease expires on its TTL.

## Timing

- **TTL 35 minutes**, matching `apps/relay-fence-broker/src/mutation-lease.ts`.
- **Renewal every 5 minutes.** `main` spawns a detached background Node process that rewrites
`expires_at` on the same generation-matched path; `post` kills it by pid read back from
`$GITHUB_STATE`. The renewer stops on its own the moment the object stops being ours, and has a
six-hour backstop in case `post` never runs. Its log is written to
`$RUNNER_TEMP/cloud-sql-rollout-lease-renewer.log` and echoed by `post`.
- Renewal is mandatory, not optional: capacity runs have taken 85 minutes, well past any sane TTL.

## Failure behaviour

| Situation | Behaviour |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
| Object absent | Acquire with `ifGenerationMatch: 0`. |
| Live lease, our own holder key | Re-enter. Refresh `expires_at`, keep `acquired_at`. Never fails. |
| Live lease, another holder | **Fail the job immediately**, printing the holder's repository, workflow and run URL. Never queues, never steals. |
| Expired lease | Take over with the observed generation and emit `::warning::` naming the stale holder. |
| `412` on write | Someone raced us. Fail as a conflict. |
| Bucket unreachable, `403`, `5xx` | **Fail closed.** |
| Record present but unparseable | **Fail closed.** A record we cannot read is never treated as free; an operator must inspect and delete it. |
| Release finds a foreign holder | Warn and leave it alone. Our lease had already expired. |
| Release fails | Warn only. `post` never fails a job over a release; the TTL bounds the damage. |

## Why `monitor-relay-production` must not use this

`monitor-relay-production` is in the `production-cloud-sql-rollout` concurrency group but is
**read-only**: its identity holds only monitoring, logging, Cloud SQL and compute _viewer_ roles,
and it runs `gcloud sql instances describe`, never a mutation. It consumes no connection budget.
Putting it on the durable lease would let a monitoring run block a real rollout, and a rollout block
monitoring exactly when an operator most needs it. Keep its same-repo concurrency group; keep it off
the lease. The lock census contract test records it in the not-a-candidate map with this reason.

## Token acquisition

`gcloud auth print-access-token`, not a hand-rolled exchange of the `external_account` credentials
file. Every consuming workflow already runs `setup-gcloud`, gcloud already handles every ADC flavour
including the service-account impersonation leg, and this action must stay zero-dependency because
it is duplicated by hand into the public repo. The GCE metadata server that
`apps/relay-fence-broker/src/google-metadata.ts` uses does **not** exist on GitHub or Blacksmith
runners; only the compare-and-swap algorithm is shared with the fence broker.

## Duplication

This directory is copied verbatim into `stablyai/orca`. It has no `package.json`, no
`node_modules`, and imports nothing outside itself — `action-contract.test.mjs` enforces all three.
Cross-repo consumption via `uses: stablyai/orca/.github/actions/...@<sha>` was rejected: it would
put public-repo code inside private app deploys that hold a production credential, and neither
repository protects `main` today.

## Tests

```
node --test .github/actions/cloud-sql-rollout-lease/
```

`storage-lease.test.mjs` drives the real compare-and-swap path against an in-memory Cloud Storage
fake that enforces generations. No network.
Loading