## stablyai/orca — v1.4.217…v1.4.218

_185+ commits._

### Features
- **feat(settings): let Codex terminals opt back into Codex's shared server (#23929)** (d6aefd4)
- **feat(orchestration): deliver worker results to a structured chat coordinator (#22631)** (c1628b4)
- **feat(mobile): tell users when a newer app binary is installable (#23755)** (a134d12)
- **Add CodeBuddy as a built-in coding agent (#23740)** (ccdb324)
- **feat(orchestration): let a structured chat run orchestration as itself (#22568)** (2ca4ecb)
- **feat(native-chat): Codex sessions write their subagents into the host status store (#22553)** (153d3fd)
- **feat(terminal): add Reset Terminal that clears leftover input modes on the host and pane (#23602)** (1f6f852)
- **feat: add first-class Qoder CLI support (#23581)** (8b410b4)
- **feat(agents): add Freebuff launch and sidebar status support (#23567)** (400e4e7)
- **feat(mobile): the keyboard covers the page like a native screen, and the shell says its height (#23110)** (ba858ee)
- **ZCode CLI sessions now visible** — ZCode CLI session history is now displayed in AI Vault alongside other agents' sessions. The feature reuses the existing OpenCode database scanner and parser to avoid duplication, with the worker only varying the agent label applied to each session. (ca6c209)
- **Display ZCode Coding Plan quota** — ZCode Coding Plan usage quota is now shown in the status bar alongside Claude and Codex usage information, securely reading from the user's ZCode configuration with strict credential validation and without storing the authentication key. (076759e)
- **Add DeepSeek Harness agent support** — DeepSeek Harness (DSH) is now a fully supported first-class agent alongside Gemini and Muse, with dedicated integration for its tui profile, credential handling, session resume, and headless Source Control AI. The implementation includes fixes for environment variable scrubbing, YAML patch file handling, pane identity isolation, and readiness detection to ensure DSH appears correctly in the agent list and behaves reliably in all contexts. (45f3512)
- **Better terminal error messages** — Improved error messages when the system runs out of PTY devices or process limits by extracting shared error hints, changing formatting to use newlines for clarity, and adding multi-language support. Also prevents duplicate error messages from appearing when hints come from older host versions. (708123b)

### Fixes
- **fix(release): accept the build identity as a later declarator in the minified telemetry check** (c939891)
- **fix(i18n): drop #23744 search keys left by the #23929 backport** (3a23ade)
- **fix(browser): a crashed page no longer crashes Orca when its viewport is resized (#23852)** (0717cb5)
- **fix(runtime): stop a busy Codex 0.150-0.157 pane reading as tui-idle (#23805)** (b051e02)
- **fix(terminal): restore the mouse format with mouse tracking, so phone swipes don't type into Codex (#23946)** (359a45d)
- **fix(terminal): run Orca's cmd.exe, path-named and setup-gated Codex launches without the shared server (#23933)** (8296ef0)
- **fix(codex): turning Codex off per agent keeps its hook entry off (#23667)** (62e3a5a)
- **fix(daemon): roll Codex no-daemon shell launch into a fresh v37 daemon (#23907)** (8f4a740)
- **fix(terminal): run Codex in Orca terminals without the shared background server (#23900)** (9420d49)
- **perf(usage): persist a scan's analytics session IDs in one write (#23807)** (3c1af16)
- **fix(native-chat): Stop is there from the moment a message is sent (#23026)** (c49388c)
- **fix(native-chat): render the terminal-backed chat through the structured chat's turn status (#22090)** (4da485c)
- **fix(terminal): stop inline-image decoders exhausting the renderer's wasm memory budget (#23499)** (e1362ad)
- **fix(runtime): wait out Codex 0.157's startup screen, and stop at Codex's startup dialogs, before typing a worker brief (#23745)** (36c473e)
- **fix(codex): index a new account home before bridging history into it (#22971)** (b6c2de9)
- **fix(native-chat): group chat rows by the turn that produced them (#23671)** (357a2fe)
- **fix(browser): restore hover after leaving a mobile viewport preset (#22846)** (b7e3bbf)
- **fix(codex): guard the daemon socket in the home a resumed Codex pane launches in (#23724)** (b8a7daf)
- **fix(renderer): stop the modal toast rule from freezing large diffs (#23721)** (f4829f0)
- **fix(native-chat): an empty workspace opens the default agent as a chat when chat is the default view (#23693)** (33f661b)
- **perf(ci): spend fewer concurrency slots per pull request (#23810)** (f8f656c)
- **fix(native-chat): keep a child turn settling on an error Codex will not retry (#23808)** (25d9c57)
- **fix(i18n): prune the wait-for-setup help copy #23799 removed (#23802)** (2d358df)
- **fix(native-chat): drop the Codex error path #23682 removed (#23801)** (643f93f)
- **fix(setup): remove wait-for-setup helper text (#23799)** (ceffecf)
- **perf(ci): take advisory unit-selection evidence off the gate (#23776)** (2ea3fb1)
- **fix(terminal): only diagnose disk exhaustion from capacity errors** (7445fea)
- **fix(runtime): settle a quiet Codex composer as ready on every version (#23765)** (c8af48d)
- **fix(native-chat): a message Claude folds into its running turn no longer splits the turn (#23621)** (c30c8f9)
- **fix(native-chat): keep a turn's bar on the prompt that opened it (#23573)** (50a8ef1)
- **fix(ci): keep a squash-merged RPC recording pin reachable through its pull request (#23720)** (c5fc0c6)
- **fix(mobile): unsubscribe session tabs by request on the direct connection (#22943)** (e899809)
- **fix(opencode): keep OpenCode 2 panes Working across plugin reloads (#23700)** (2ae7c00)
- **perf(test): remove obsolete structural snapshots (#23777)** (3976ad4)
- **fix(browser): give a tab's identity one owner so viewport presets stop dropping client hints (#23718)** (b776e9a)
- **fix(claude): run structured Claude under the POSIX provider supervisor (#23476)** (b4c19f1)
- **fix(native-chat): a turn a proven crash cut short reads interrupted (#23456)** (2dc2693)
- **fix(native-chat): stop flashing "still starting" on every chat launch (#23666)** (b283a09)
- **fix(native-chat): only Codex's turn completion ends a Codex turn (#23682)** (94b5a7d)
- **fix(status-bar): re-measure collapsing levels when only the collapsed width moves (#23773)** (85ad292)
- **perf(ci): plan the unit shards before the static-analysis gate instead of behind it (#23743)** (ec9f35e)
- **fix: bound combined diff editors and scope chat style invalidation (#23725)** (da48d98)
- **fix(editor): preserve combined diff scroll on line focus (#23735)** (bd5dca4)
- **fix(runtime): reopen the quiet-foreground tui-idle lane for agents with no other rest signal (#23598)** (4b622e1)
- **fix(terminal): reveal splits while the source pane binds (#23692)** (2aed2cf)
- **fix(terminal): preserve typing while a remote pane reattaches (#23701)** (d0db35c)
- **fix(runtime): retire an exited terminal before its stream end (#23492)** (d68eee3)
- **fix(codex): the provider supervisor outlives its provider group when stopped (#23466)** (2af897d)
- **fix(ssh): don't overwrite remote agent config after a failed read (#22644)** (64569a8)
- **fix(agent-hooks): compare status rows structurally instead of serializing both (#23585)** (9b11b1d)
- **fix(tab-group): measure fallback pane geometry once per tab group, only while visible (#23592)** (e794012)
- **fix(native-chat): a subagent's words are presented as that subagent's, never the parent's (#23605)** (e8e144b)
- **fix(native-chat): stop killing processes that only inherited a chat's spawn tag (#23460)** (c5330d0)
- **fix(opencode): stop OpenCode 2 loading a stale plugin from the retired shared hooks dir (#23500)** (813aff8)
- **fix(windows): require signed release binaries and identify CLI launcher (#23680)** (8c61a5d)
- **fix(mobile): start AI-button agents through agent.launch, never a bare shell (#22762)** (29c7d5d)
- **fix(sidebar): move agent child disclosure to the right (#23577)** (dbc4e21)
- **perf(ci): use four ARM test workers and remove repeated compilation (#23685)** (0f52bb8)
- **fix(mobile): truncate oversize markdown reads instead of failing them (#23676)** (fe34acd)
- **fix(status-bar): fold agents into +N before status labels go icon-only (#23689)** (409462a)
- **fix(ci): repair terminal link handling and E2E recovery fixtures (#23677)** (55aea85)
- **fix(terminal): let unselected Cmd+C reach apps that own their selection (#23597)** (9b46c3f)
- **fix(terminal): main records every tab close, and seeding reads the records (#22955)** (6c4625d)
- **fix(native-chat): each chat failure says why in plain words, on the thing that failed (#23608)** (9d11a75)
- **fix(mobile): left-align every line of the desktop host card (#23673)** (0034ede)
- **fix(terminal): stop guessing that apps died and wiping their keyboard modes (#23584)** (3eac4d9)
- **fix(native-chat): a failed Codex turn keeps its failure and "Worked for" (#23514)** (2c92e5e)
- **fix(claude): write only the hook events and statusLine the user's Claude accepts (#23614)** (a84bd1c)
- **fix(release): stop the release policy from deleting pipeline-cut releases (#23669)** (95a16e3)
- **fix(codex): a message whose turn was stopped before Codex took it is withdrawn, not stuck (#23618)** (d691486)
- **fix(claude): withdraw a follow-up queued behind a stopped turn instead of dropping it silently (#23553)** (b1d6fdf)
- **fix(deps): take Electron 43.7.5 so detached webviews stop blanking browser tabs (#23586)** (e8d8f2f)
- **Fix status bar on smaller screen (#23587)** (0830051)
- **perf(ci): move six more jobs to the free ARM runner (#23594)** (0fe8974)
- **fix(orchestration): reland process-incarnation reap for stale worker terminal handles (#23583)** (5813cb6)
- **perf(ci): run static analysis on the free ARM runner (#23576)** (2f8f4f5)
- **perf(ci): stop duplicating shared Linux download caches (#23578)** (d050801)
- **fix(native-chat): the host writes chat failures for a person, with a typed fact beside them (#23116)** (a68d629)
- **perf(ci): cache pnpm verification records on Linux (#23568)** (e6fbbdf)
- **fix(runtime): answer terminal.subscribe at once for a pane the desktop already has mounted (#23512)** (a174a08)
- **fix(sidebar): clip worktree card content to its border (#23566)** (8db9684)
- **fix(agent-session): wait for in-flight session-store writes before teardown returns (#23545)** (1bfbc15)
- **Faster PR checks with shallow clones** — Optimized continuous integration by using shallow Git checkouts (depth 50 instead of full history) for pull request checks. Since PR checkouts already have the merge commit, the system can now diff against the first parent directly instead of computing a merge base, reducing checkout time from ~20 seconds to ~1.6 seconds across all 22 jobs while maintaining identical change detection. (080c562)
- **Mobile terminal sizing improvements** — Optimized how mobile terminals measure and size themselves on first load. Instead of creating throwaway terminals to measure dimensions, the system now measures the terminal's cell box once and reuses it, eliminating redundant instances and reducing load time by ~150ms per open. Also fixed issues where terminal reloads or view changes could cause duplicate initializations or incorrect sizing. (2077956)
- **Terminal focus restored on workspace wake** — Fixed an issue where the terminal would lose focus when using Cmd+J to wake up a workspace. The terminal now properly retains focus during workspace restoration, and the system ensures the terminal is ready before claiming focus. (0de5e4d)
- **Fixed terminal restore on mobile** — Mobile paired clients now correctly recover terminals after a cold restore by checking the saved session membership and avoiding duplicate list updates. This ensures restored terminals appear in the paired list immediately and prevents already-retired terminals from reappearing. (6835b9b)
- **Fixed chat session lifecycle issues** — Removed unused terminal handoff feature and fixed several issues where chat conversations could outlive their agent processes, including preventing snapshot holds from blocking shutdown and ensuring journal writes reach open chats. Also improved error messages to clarify whether a chat is starting or waiting for agent confirmation. (7a24d3d)
- **Fix chat message ordering in sequences** — Chat messages from the same Codex ask now maintain their original order instead of getting rearranged alphabetically. The system now uses a journal position field to keep messages in the exact sequence they were created, which is especially important when multiple questions are written at the same timestamp. (5e5f4f6)
- **Show working progress bar while responding** — The chat interface now displays a live "Working for" progress bar with elapsed time while an assistant is processing a response, instead of only showing it after completion. The bar updates in real-time on both desktop and mobile, with a spinner on the activity indicator line that shows what the assistant is doing (e.g., "Thinking", "Running tests", or just "Working…"). (56e6913)
- **Faster translation key extraction** — Updated i18next-cli to version 1.74.1, which optimizes how it identifies translation keys, reducing extraction time from ~23 seconds to ~18 seconds. The update also recovers 17 previously missed keys that were already in the English translation file, reducing the orphaned keys list. (8494b24)
- **Speed up code audits with parallel processing** — The anti-slop audit now splits files across multiple processes instead of running in a single JavaScript runtime, making it 3× faster. This change was possible because each audit rule analyzes files independently, so splitting the workload doesn't affect results. (fae0ae7)
- **Fixed terminal process lifecycle tracking** — Improved how terminal processes are tracked when they stop, restart, or hibernate. The system now maintains a single registry of intentional stops (instead of four separate markers) and records whether each process run was freshly spawned or if a user provided input to it. This ensures panes keep their tabs and keybindings even when processes exit unexpectedly. (c53ed03)
- **Faster CI pipeline and tests** — Optimized the continuous integration pipeline by eliminating unnecessary package downloads in mobile-independent pull requests (saving ~216 MB and 8.6 seconds per run) and fixed a process shutdown timer that was unnecessarily idling for 15 seconds after tests completed (reducing test time from 21.4s to 6.52s). These changes speed up CI checks without affecting their accuracy. (67581dd)
- **Fix SSH terminal input modes recovery** — SSH relay terminals now properly reset input modes left armed by crashed programs, using the same recovery mechanism as local terminals. The fix ensures the recovery marker stays within proper escape sequence boundaries so terminal snapshots don't end with incomplete escape codes. (5219b8a)
- **Fix Kitty keyboard mode tracking** — Fixed an issue where keyboard input modes would remain incorrectly encoded after a shell process ended. The terminal now properly clears the Kitty input mode tracker when returning to a confirmed shell, ensuring keyboard shortcuts like Shift+Enter work correctly on hosts using Kitty keyboard protocol. (0e871a9)
- **fix(native-chat): a request that failed reads as failed (#22944)** (8506749)
- **fix(zcode): wait for composer before first worker dispatch (#23374)** (47b8408)
- **fix(codex): a native chat's thread opens on the model the chat chose (#23532)** (934a2d4)
- **fix(mobile): show one review sheet at a time so the review screen never freezes (#22951)** (7877164)
- **fix(mobile): the page pushes its terminal frame into the document from RN layout (#23079)** (52dc32f)
- **fix(terminal-wait): unattended launches report Claude's trust dialog instead of timing out or typing into it (#22927)** (2119730)
- **fix(mobile): native desktop-mode keyboard lift stays on screen; metrics carry the row pitch (#23070)** (cdf9f6e)

### Backend
- **release: v1.4.218** (75ea502)
- **Update README downloads badge** (5560e53)
- **Agent launches carry the surface that started them (#23697)** (a5ce825)
- **Show a resting Claude chat's effort instead of a blank picker (#23106)** (504e749)
- **Update README downloads badge** (aedb930)
- **Revert "perf(ci): shard the anti-slop audit across processes instead of one JS runtime (#23543)" (#23575)** (3dd7d29)

### Tests
- **test: remove assertion-free probes, copied inventories and export-shape checks (#23816)** (31012ae)
- **test: remove junk tests that assert source text instead of behavior (#23815)** (6e1b7e7)
- **test(native-chat): main's Codex child tests expect a turn to end on its own turn/completed (#23783)** (bb91e39)
- **test(status-bar): cover re-probing a roomier level after the tightest level's fit moves (#23793)** (18bd9cb)
- **test(mobile): repin the RPC recording corpus to main after #22762 (#23757)** (28942ee)
- **test: wait for remote terminal grid convergence after reveal (#23738)** (d606be3)
- **test(browser): create probe body before starting frame requests (#23730)** (8bb78f0)
- **test(terminal): wait for decoy panes before host parking (#23729)** (64dbe87)
- **test(browser): check grab scope through responsive chrome (#23709)** (a880c88)
- **test: measure pointer gestures on the isolated visible display (#23678)** (b482b4d)
- **test: retire a dormant worker through host-owned status (#23686)** (e87772b)
- **test: finish sidebar lazy imports before teardown (#23694)** (1a0ff42)
- **test(e2e): give wheel probes a running TUI fixture (#23691)** (0ceb3fa)
- **test(claude): expect typed cancellation in queued-send settlements (#23675)** (fe7e13d)
- **test(cross-version): a released client's capabilities come from its own release (#23533)** (d5451d9)
- **test(e2e): take the sidebar measured-row baseline with reduced motion (#23588)** (84daac2)
- **Updated RPC test baselines** — Re-recorded 300 RPC golden test files to pin their baselines to the main branch after a recent merge, ensuring test references remain reachable from main. Only baseline headers were modified. (c8b3f20)
- **Fix async test method calls** — Updated three test files to properly await async history() and journalSnapshot() method calls that were being invoked synchronously, resolving typecheck failures in the native-chat and codex modules. (1b45879)
- **test(mobile): repin the RPC recording corpus to main after #22951 (#23535)** (d33541c)
- **test(e2e): keep the Kitty-arming app alive in the Option-composed spec (#23495)** (c8f9a65)

### Docs
- **docs: update GitHub star history chart (#23661)** (a9195ee)
- **docs(readme): remove the TestFlight link (#23660)** (9c1f9b5)

### Chore
- **ci: sync release workflows with main for the v1.4.218 cut** (4e93d96)
- **refactor(sidebar): one subagent row for CLI and structured children, shared with the chat strip (#22565)** (bd13305)
- **chore(ci): stop auto-filing community PRs onto the project board (#23796)** (f6324f2)
- **ci: use faster gzip for temporary Linux test packages (#23609)** (21f8e0f)
- **ci: skip unrelated installs and share xterm build dependencies (#23607)** (cf20423)
- **Optimize CI test selection and runner efficiency** — Improved CI pipeline to reduce redundant work by implementing smarter test selection based on code changes, adding runner demand tracking, and validating which tests actually need to run. The system now stages heavy checks, measures test selection accuracy, and hardens review cancellation logic to make CI faster and more efficient. (9179b93)

_Recap by [Repo Wrapped](https://repowrapped.com/gh/stablyai/orca?utm_source=github-action)._