Commit Graph
16002 Commits
Author SHA1 Message Date
Brennan Benson ed79f1d1a6 test(terminal): give the fish color-scheme test's store fixture unifiedTabsByWorktree (#36586)
#31617 made terminal pane owner resolution read state.unifiedTabsByWorktree, but this test's mocked store never had the field, so shell contracts fail on main with "Cannot read properties of undefined (reading 'wt-1')".
2026-10-30 22:22:49 -07:00
OrcaWin 20cd8131e4 test: remove low-value mocked forwarding suites (#36592) 2026-10-30 22:14:41 -07:00
Kelvin Amoaba 0ef88c1eee feat(worktree): open the native chat while its worktree is still being created (#36556)
* feat(worktree): open the native chat while its worktree is still being created

When native chat is the default, creating a worktree now shows the chat
pane straight away instead of a spinner panel. Its composer works while
git runs. A message sent before the worktree exists shows as the first
user message with a step card under it (prepare, fetch base branch,
create worktree with checkout %, start the agent), and the chat launch
sends it as its first message once the worktree is ready. Text left
unsent moves into the real chat's composer. Failures mark the step that
failed and keep Retry and Dismiss.

The renderer holds the message and hands it to the existing launch
prompt path, so hosts need no protocol change. The terminal route,
folder workspaces, SSH and VM recipes keep the old panel.

* fix(worktree): keep a held chat message when the host declines the chat

A background create whose host declines native chat opens the agent
terminal from the submit-time plan, which never saw a message sent
while the worktree was being created. That message now lands unsent in
the agent's input. The pending composer draft is also only deleted
once it has been copied into the new chat.
2026-10-31 04:42:54 +00:00
Brennan Benson 2504ea9f75 fix(tasks): remove IPC wrappers from GitLab list errors (#36506)
* fix(tasks): unwrap GitLab list transport errors

* fix(tasks): retain GitLab list recovery instructions

* test(tasks): align GitLab banner harness input types
2026-10-30 21:42:49 -07:00
OrcaWin cb5482ae1c test: remove low-value forwarding and presentation suites (#36584) 2026-10-30 21:39:26 -07:00
Kelvin Amoaba 4cb86e7023 perf(worktree): check out new worktrees with all cores (#36559)
Git checks out with one sequential worker by default, so creating a worktree in a large repo spends most of its time writing files on one core. Every create-path command that writes the working tree (worktree add, the prepared-checkout and tip-refresh resets, and the sparse checkout) now passes -c checkout.workers=0, which gives one worker per core. On a 41,924-file clone on a 14-core Mac, git worktree add dropped from 3.8-8.3s to 2.4-3.0s. If checkout.workers is set at any scope, read with git config --get on the same host and repo as the checkout, Orca leaves it alone. Git before 2.32 does not know the key and ignores it.
2026-10-31 04:28:58 +00:00
Brennan Benson a1f658cc32 Keep settled permission notices compact on desktop and phone (#36304)
* fix(chat): collapse settled permission notices

* Keep notice scroll addresses unique per rendered row

* test(native-chat): cover notice scroll bounds and shared classification

* fix(mobile): preserve notice summary long-press actions

* Preserve mobile notice selection and caret rendering

* Use type imports in mobile notice web tests

* Resolve real SVG test host from mobile dependencies
2026-10-30 21:24:27 -07:00
Brennan Benson 1f504e9537 Stabilize the Git watcher upgrade fanout test (#36517)
* test(worktrees): isolate upgrade absence from fallback polling

* test(worktrees): await upgrade baseline without advancing fallback
2026-10-30 21:08:07 -07:00
OrcaWinandOrcaWin beaa519d52 test: remove 16 low-value forwarding and identity suites (#36566)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-30 21:01:18 -07:00
Brennan Benson e9a376267c Stop attributing recovered ACP replies to outside activity (#36302)
* fix(acp): separate recovered history from outside activity

* Fix repeated recovered history divider corrections

* Compose ACP replay targets before checked settlement

* Explain ACP scaling fixture timeout

* Complete ACP fixture types and runtime English catalog

* Type exported ACP fixture warning mock

* Restore ACP history without an extra notice
2026-10-30 20:56:50 -07:00
3d051c0adc fix(dashboard): open OSC 8 hyperlinks from Agent Dashboard terminal previews (#36483)
Agent Dashboard terminal previews had no xterm linkHandler, so OSC 8
hyperlinks fell back to xterm's confirm() + window.open() default, which
Electron blocks. Route OSC 8 links through the same Mod+click activation
as plain-text URLs (opening via shell.openUrl) and show the destination
as a native title on hover, since previews have no pane tooltip.

Co-authored-by: alpenshtokk <wawesandways@gmail.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-10-30 20:52:08 -07:00
Sandeep SinghandNeil d4a14acad3 fix(updater): skip apt's _apt sandbox notice in the Linux .deb install command (#35643)
The copied .deb install command now passes
-o Binary::file::APT::Sandbox::User=root to apt. The _apt sandbox user
can't read the package in the user's private ~/.cache, so apt already
fell back to root and printed an "unsandboxed as root" notice; presetting
that fallback for the file: method removes the notice without changing
effective privilege, and network methods stay sandboxed.

Fixes #35641

Co-authored-by: Neil <neil@stably.ai>
2026-10-30 20:46:53 -07:00
Brennan Benson ae09815770 Support automations in Orca Mobile (#31617)
* Add host-owned automations flow to mobile

* fix: resolve initial mobile automation CI failures

* Preserve automation target identity and mobile action state

* Preserve selected automation targets through discovery and terminal launch

* Cover draft reversion after uncertain automation creation

* Preserve automation target and submitted action authority

* Preserve selected hosts and editor operations across restored state

* Refresh mobile web bundle measurements for merged routes

* Fix automation history observation and catalog scaling

* Fix automation mobile presentation and merged launch bindings

* Refresh measured mobile bundle sweep and correct automation test inputs

* Move real-module test loads to collection and consolidate imports

* Use typed row access to count worktree ownership reads

* Refresh selected automation history on matching host events

* Fix automation contract types and merged test imports

* Fix automation theme updates and committed history ownership

* Update folder terminal contract fixtures for canonical host catalogs

* Consolidate historical session activation fixture imports

* Repair automation contract project boundaries and owner type ports

* Preserve acquired automation folder owners and fix integration lint

* Retain terminal pane owners captured at connect

* Use checked pane manager context in owner retention test

* fix: adapt merged editor and terminal test contracts

* fix: preserve captured automation targets and terminal owners

* fix: honor explicit automation source clears and refusal contracts

* test: construct terminal transport mocks with checked types

* test: supply retained-owner context in terminal fixtures

* test: align terminal fixtures with callable mocks and store ports

* fix(mobile): localize automation screens and run details

* fix(mobile): use automation translations in context

* fix: preserve editor owner checks and automation repair guidance

* fix: reconcile captured workspace contracts after main sync

* Repair automation integration tests and retained target diagnostics

* Keep test support owned by registered unit roots

* Expose full blocked automation run reasons in menus

* Anchor mobile bundle envelope to measured route sweep

* fix(mobile): localize coded automation run failures

* fix: preserve automation decisions and captured resource ownership

* fix: qualify remaining automation workspace owner consumers

* fix: preserve resolved watch and child editor owners

* fix(editor): share qualified worktree watch ownership

* fix(editor): reuse immutable repo ownership lookup

* fix: preserve host ownership without duplicate catalog scans

* fix: align automation destination host types and ratchets

* fix: align mobile bundle envelope with measured sweep

* fix(mobile): resolve automation setup policy before save

* test(mobile): qualify reconciled automation target inspection

* fix(mobile): keep server setup consent within its authority

* fix: accept narrow qualified workspace owner snapshots

* fix: reuse qualified owner state for workspace directories

* fix(mobile): localize known automation orphan reasons

* Correct automation controller and Chat harness types

* Refresh editor requests after paired host restart

* Refresh measured mobile web bundle envelope
2026-10-30 20:40:04 -07:00
Neil 85d96f008a test(wsl): track reopening Orca after orcad's idle exit in the lane receipt (#36523)
Five more runs stop only orcad in the guest, as its idle exit does, then
reconnect with the distro still up. startupGate.orcadCold reports them
against the warm bar, marked not gated, with orcad's startup medians.
2026-10-30 20:28:13 -07:00
OrcaWinandOrcaWin c608be9e6d test: remove 17 low-value mock and forwarding suites (#36549)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-30 20:21:43 -07:00
Jinwoo Hong 8138232c4f Print concise orchestration CLI output for agents, with --full for the full record (#36498)
Orchestration commands print small flat fields in text and --json by default; --full prints the previous output. Failures exit non-zero with error: <code>: <message> on stderr.
2026-10-30 23:11:56 -04:00
Kevin Langley Jr. 5e1689c835 feat: add Slatewave terminal theme (#9059)
Adds Slatewave to the popular dark extended catalog. Slatewave is a calm slate-and-teal palette with an existing theme family across Alacritty, Kitty, Ghostty, WezTerm, iTerm2, VS Code, Neovim, and Obsidian (https://getslatewave.com).

The ANSI mappings mirror the upstream Slatewave palette exactly, so terminal output stays visually aligned with the editor themes in the same family.
2026-10-30 20:11:15 -07:00
Neil 85edf1bba6 feat(plugins): show public install counts in the plugin catalog (#36537)
* feat(plugins): show public install counts in the plugin catalog

* fix(plugins): tolerate the empty stats placeholder; count bundled official plugins

* test(plugins): pin install-stats test clock
2026-10-30 19:57:26 -07:00
Kelvin Amoaba 97582248e7 feat(mobile): rebuild Home around what needs you, with actions pinned at the bottom (#36520) 2026-10-31 02:47:49 +00:00
Neil c378e78d5a perf(notifications): scope card layout vars to their readers instead of :root (#36531)
Writes the stack height and composer clearance vars only on the card stack and
toaster wrapper, skipping unchanged values, so a composer resize no longer
restyles the whole document.

Fixes STA-13053
2026-10-30 19:26:42 -07:00
Neil fdc03848a5 fix(plugins): protect every security and destructive string from language packs (#36219)
* fix(plugins): protect every security and destructive string from language packs

Language packs could rewrite trust copy outside a hand-kept list of app
areas (catalog-link dialog, browser-extension Allow/Deny, Node mirror).
Protected keys are now generated from structure: every key in a file that
renders a security surface, a destructive confirmation, or a native message
box, or that carries a // @protected-copy pragma, plus same-directory copy
modules. verify:localization-catalogs fails when the list is stale.

Pack strings are also capped at max(64, 4x English) characters and may not
contain control or bidi characters. Validation stays strict; loading drops
only the offending entries.

* chore(plugins): resync protected copy keys with main

* fix(plugins): cap pack strings in shared strict checks and pin new trust copy

* fix(plugins): keep the packaged CLI off the English catalog

* chore(plugins): resync protected copy keys with main

* chore(plugins): resync protected copy keys with main
2026-10-31 02:22:49 +00:00
OrcaWinandOrcaWin a15989e7d5 test: remove 30 low-value test suites (#36528)
* test: remove 30 low-value test suites

* test: preserve cold restore evidence command history

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-30 19:21:44 -07:00
Neil 0c0893d5b4 fix(process-host): never kill an isolated child whose exit it cannot watch (#36521)
When the native exit watch fails to register, the child never reports an
exit, so a later kill() could signal a pid Windows has since reused. Mark
such a child untracked: kill() refuses it and the warning says so. No exit
is faked; the WSL holder already releases through its own pid and
creation-time check.
2026-10-30 19:16:29 -07:00
Kelvin AmoabaandVyacheslav Scherbinin 71a93114a5 fix(native-chat): keep chat image thumbnails square while scrolled away or loading (#36488)
Co-authored-by: Vyacheslav Scherbinin <14369958+gentslava@users.noreply.github.com>
2026-10-31 02:12:25 +00:00
Neil 584e672df8 fix(plugins): accept plain repo, release and tag page URLs in Git install (#36525)
* fix(plugins): accept plain repo, release and tag page URLs in Git install

The Git URL install dialog refused anything without a #ref suffix, so pasting a
repository or GitHub release link failed with "Add a #tag or #commit". It now
reads owner/repo, repository URLs with or without .git, SSH URLs and GitHub /
GitLab release, tag, tree and commit pages, pins the newest version tag (or the
default branch's commit when there is none) with git ls-remote, shows that
version and commit, and installs only that exact commit.

* fix(plugins): let the Git install dialog close while a version check runs
2026-10-30 19:10:28 -07:00
Kelvin Amoaba 01e03f9920 fix(browser): present Electron's own user agent on Google sign-in pages (#36519) 2026-10-31 02:03:50 +00:00
Neil eff549111c feat(plugins): link plugin pages to the README at the pinned release commit (#36527) 2026-10-30 18:57:53 -07:00
Kelvin Amoaba 2048245a26 fix(browser): let grab and annotate pick elements in modal dialogs and popovers (#36518)
Top-layer content (showModal dialogs, popovers, fullscreen elements)
paints above the overlay's max z-index and a modal dialog makes it inert,
so hover and clicks reached the page instead of the picker. The outline
now lives in the top layer and is raised again when new top-layer content
opens; the overlay reads hover and blocks trusted presses at window
capture and hands real pointer picks to awaitClick.

Fixes #28657
2026-10-31 01:30:53 +00:00
Brennan Benson a62f1e4955 Keep declared default effort visible for every chat agent (#36455)
* Show declared default effort consistently across chat agents

* Leave unmappable reported effort defaults unknown

* Separate default effort context from launch policy

* Cover configured effort declarations without changing current input

* Fix declared effort context through live options readers

* Load declared effort fixtures outside test callbacks

* Combine host catalog test imports
2026-10-30 18:28:43 -07:00
Kelvin Amoaba c282cb92dd fix(codex): keep a hook-blocked prompt's Worked for line after reopen (#36515)
Codex never echoes a prompt its UserPromptSubmit hook refused, so the
turn record kept Codex's own echo key as its opener. Live, the pending
send anchored the turn; once the chat closed or the host restarted, the
send settled to unknown and the reopened chat lost the turn's Worked for
line.

Record the turn a turn/start reply names when the reply is received, and
have the journal translator name that send as the turn's opener at
turn/started, or at turn end when the reply was read after turn/started.
2026-10-31 01:18:52 +00:00
OrcaWinandOrcaWin 9cdb7ae295 test: remove 31 low-value suites from audit batch 850 (#36512)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-30 18:13:32 -07:00
Neil f0a6da5739 fix(wsl): re-check WSL hosts before the delayed Node prefetch runs (#36514)
Turning WSL hosts off within the 60 s delay still downloaded the archive.
Re-check the gate and the setting when the timer fires; a later turn-on
schedules again. Also correct the build-architecture comment: an x64
build emulated on Arm fetches the x64 archive, which goes unused.
2026-10-30 18:12:06 -07:00
Brennan Benson 5cf236730f Add Chat UI upgrade tip and Chat/Terminal default tiles (#36171)
* Chat UI leaves Experimental: each agent's Chat | CLI choice decides launches

Remove the experimentalNativeChat switch and every gate on it. The Chat
settings page, Default Agent Chat | CLI choice, + menu Chat/CLI rows,
source-control surface choice, Antigravity chat section and orchestration
chat-error switch are always present. What a new launch opens comes only
from the per-agent choice (no saved choice opens a chat) plus the existing
support checks.

- One lookup, nativeChatPreferenceFor, keyed by agent id so host-registered
  agents read the same way; unreadable settings still open a terminal.
- A relayed desktop stamp (nativeChatDefault) maps onto the launched agent;
  an explicit surface still wins. Old phones' createSupport keeps admitting
  by the host's per-agent choice.
- settings.get stops publishing the retired switch keys; nothing in the
  repo reads them from a host.
- Startup chat sync and hydration run when some agent can open as a chat
  or the machine already holds chats.
- The retired key is stripped on load. The one-time upgrade tip from the
  chat upgrade is retired with its audience record; a new record, captured
  once from the raw profile, marks which existing profiles had Chat UI off.
- The window-side AI-button tab path, which only ran with the switch off,
  is deleted.

* Keep profiles that had Chat UI off on the terminal

Existing users who never turned Chat UI on would otherwise see new agent
launches open as chats, since an agent without a saved choice now opens as
a chat. The one-time load step that records the new audience also sets
every known agent to CLI for those profiles, in the same save and only
when the record was absent, overwriting saved chat choices the old switch
masked. Profiles that had Chat UI on and new profiles are untouched.

Browser profiles keep their own settings, so the web client does the same
once: a stored switch that is not on seeds CLI choices, and dropping the
key marks the step done.

Agents first seen after this step open as chats.

* Agents without a saved Chat | CLI choice open as their CLI

An agent with no saved choice now opens in the terminal for everyone,
including fresh installs and agents first seen later. The one-time load
step carries what launches opened while Chat UI was experimental: with
the switch on, every known agent without a saved choice is saved as
chat; with it off, chat choices the switch masked are saved as CLI.
Existing profiles join the launch tip audience whether the switch was on
or off. Browser profiles get the same carry from their saved key.

The startup chat restore and host agent list now run only when some
agent is saved as chat or the runtime holds chats.

* Chat UI is here: a one-time tip for profiles that upgraded

Profiles saved before Chat UI left Experimental see a "Chat UI is here"
tip once, on the first launch after updating. Fresh installs, unreadable
audience records and the web client never see it.

- Had Chat UI off: says agents can now open as a chat and that the
  terminal stays fully supported. "Use Chat UI" saves Chat for every
  agent Orca knows (the roster the load step carries), then closes;
  "Stay in terminal", close and Escape change nothing.
- Had Chat UI on: says Chat UI is now part of Orca and the terminal
  stays supported; one "Got it" closes without changes.
- Both link to Settings -> Agents. The visual is an animated miniature
  chat that sends a question, reads a file and draws a flow diagram,
  then fades as one and repeats; reduced motion shows the finished
  frame.
- The variant comes from main's once-decided audience record over a
  new onboarding IPC read; the startup gate waits for it.
- FeatureTipActions takes a secondary label; the frame takes a copy
  column class, used here so the buttons line up with the card's
  composer. Other tips are unchanged.
- Telemetry: chat_ui_feature_tip_shown and chat_ui_feature_tip_action.

* Preserve owned terminal launches and local chat choices

* Chat UI tip: translate the miniature, honor reduced motion mid-loop

- The miniature's conversation (tab title, prompt, reply, diagram and
  arrow labels) is translated in every locale; the composer, permission
  chip, working row and Read verb reuse the chat's own strings. File
  names, the /login route and the model name stay as written.
- The reply is one paragraph that wraps naturally; words (segmented per
  locale, so scripts without spaces still stream) reveal in turn.
  Diagram boxes size to their labels and arrow labels never widen the
  row.
- Turning reduced motion on mid-loop jumps to the finished still with
  no transitions.
- Telemetry records use_chat_ui only after the save succeeds and has a
  distinct stay_in_terminal action.
- The dialog renders its own title, so the duplicate catalog copy is
  gone; Use Chat UI writes the full roster without re-spreading saved
  choices.
- Buttons: the primary's focus ring meets the card's bottom edge.

* Clarify chat and terminal support

* Explain worker CLI integration timeout budget

* Use checked annotations for chat graduation test fixtures

* Store agent surface default separately from per-agent overrides

* Preserve explicit Chat intent across default changes

* Preserve current browser settings during host replies

* Correct browser settings factory and regression types

* Name exported launch fixture mock types and clarify agent defaults

* Preserve settings fallbacks and complete launch test lifecycles

* Check allocated tab identity before launch fixture interpolation

* Drop file links from the Chat UI tip copy

* Register combined integration project for compiler parity probes

* Use checked settings in the launch test fixture

* Settings → Agents: "Open agents as" Chat or Terminal tiles

A new top section in Settings → Agents sets this computer's default for
how agents open: two tiles, Chat ("Rich messages, visuals and images.")
and Terminal ("Each agent's own CLI."), each with a still preview. The
chat preview reuses the tip's copy and flow diagram; the terminal preview
draws Claude Code's interface in the user's terminal theme and font.

- Picking a tile writes only agentDefaultSurface, through the same queue
  as the per-agent Chat | CLI rows. The tiles show the saved default; an
  agent set on its own row keeps its choice and is not reflected up top.
- If any agent's own choice differs from the new default, one toast names
  them ("Claude and Codex stay in the terminal, as you set.") with "Set
  all to Chat" / "Set all to Terminal", which drops those choices so they
  follow the default. Only agents whose row offers Chat | CLI count. No
  toast when nothing differs, and never from the tip.
- "Choose per agent" scrolls to and focuses the Installed list.
- Shown for this computer only (not on a paired host's page); the web
  client gets it too. Searchable as "Open agents as".
- Copy in all locales; the tip's intro copy in other locales also drops
  "file links", matching English.

* Fix Chat UI settings navigation and acknowledged preference actions

* Keep the agent default surface controls in full Settings

* Keep the per-agent navigation button free of link underlining

* Use checked types and existing presentation primitives for Chat UI tips

* Preserve retired Chat preference data privately

* Align chat E2E fixtures and capture pane lifecycle evidence

* Use typed raw settings in retention contracts

* Fix Chat UI settings search types and localization catalogs

* Consolidate transcript diagnostic imports

* Keep setup-only dependency changes out of the branch

* Update dev education history expectation for Chat UI tip

* test: align chat fixtures with live pane and native menu contracts

* test: capture relay tab selection loss diagnostics

* test: wait for owned shells before synthetic chat fixtures

* test: preserve all-host visibility in SSH observer

* test: bind synthetic transcript fixtures before provider seeding

* test: assert selected chat owner after narrow image preview

* ci: allow fifth compiler project to complete comparison

* Drop 'keeps getting better' from the Chat UI tip's terminal line

* Trim the empty space above the Chat UI tip's visual

* Tighten the space above the Chat UI tip's flow diagram; undo the card resize

* Tighten the Chat UI tip's reply and diagram spacing

* Give the tip's flow diagram a little more room and shorten its tab bar

* Type the web-terminal fixture's chat map without an assertion

* Right-click the selection itself in the chat copy spec
2026-10-30 17:46:12 -07:00
Brennan Benson 76cf164cf9 Chat UI leaves Experimental: each agent's Chat or CLI choice decides what opens (#36110)
* Chat UI leaves Experimental: each agent's Chat | CLI choice decides launches

Remove the experimentalNativeChat switch and every gate on it. The Chat
settings page, Default Agent Chat | CLI choice, + menu Chat/CLI rows,
source-control surface choice, Antigravity chat section and orchestration
chat-error switch are always present. What a new launch opens comes only
from the per-agent choice (no saved choice opens a chat) plus the existing
support checks.

- One lookup, nativeChatPreferenceFor, keyed by agent id so host-registered
  agents read the same way; unreadable settings still open a terminal.
- A relayed desktop stamp (nativeChatDefault) maps onto the launched agent;
  an explicit surface still wins. Old phones' createSupport keeps admitting
  by the host's per-agent choice.
- settings.get stops publishing the retired switch keys; nothing in the
  repo reads them from a host.
- Startup chat sync and hydration run when some agent can open as a chat
  or the machine already holds chats.
- The retired key is stripped on load. The one-time upgrade tip from the
  chat upgrade is retired with its audience record; a new record, captured
  once from the raw profile, marks which existing profiles had Chat UI off.
- The window-side AI-button tab path, which only ran with the switch off,
  is deleted.

* Keep profiles that had Chat UI off on the terminal

Existing users who never turned Chat UI on would otherwise see new agent
launches open as chats, since an agent without a saved choice now opens as
a chat. The one-time load step that records the new audience also sets
every known agent to CLI for those profiles, in the same save and only
when the record was absent, overwriting saved chat choices the old switch
masked. Profiles that had Chat UI on and new profiles are untouched.

Browser profiles keep their own settings, so the web client does the same
once: a stored switch that is not on seeds CLI choices, and dropping the
key marks the step done.

Agents first seen after this step open as chats.

* Agents without a saved Chat | CLI choice open as their CLI

An agent with no saved choice now opens in the terminal for everyone,
including fresh installs and agents first seen later. The one-time load
step carries what launches opened while Chat UI was experimental: with
the switch on, every known agent without a saved choice is saved as
chat; with it off, chat choices the switch masked are saved as CLI.
Existing profiles join the launch tip audience whether the switch was on
or off. Browser profiles get the same carry from their saved key.

The startup chat restore and host agent list now run only when some
agent is saved as chat or the runtime holds chats.

* Preserve owned terminal launches and local chat choices

* Clarify chat and terminal support

* Explain worker CLI integration timeout budget

* Use checked annotations for chat graduation test fixtures

* Store agent surface default separately from per-agent overrides

* Preserve explicit Chat intent across default changes

* Preserve current browser settings during host replies

* Correct browser settings factory and regression types

* Name exported launch fixture mock types and clarify agent defaults

* Preserve settings fallbacks and complete launch test lifecycles

* Check allocated tab identity before launch fixture interpolation

* Register combined integration project for compiler parity probes

* Use checked settings in the launch test fixture

* Preserve retired Chat preference data privately

* Align chat E2E fixtures and capture pane lifecycle evidence

* Use typed raw settings in retention contracts

* Consolidate transcript diagnostic imports

* test: align chat fixtures with live pane and native menu contracts

* test: capture relay tab selection loss diagnostics

* test: wait for owned shells before synthetic chat fixtures

* test: preserve all-host visibility in SSH observer

* test: bind synthetic transcript fixtures before provider seeding

* test: assert selected chat owner after narrow image preview

* ci: allow fifth compiler project to complete comparison

* Type the web-terminal fixture's chat map without an assertion

* Right-click the selection itself in the chat copy spec
2026-10-30 17:43:04 -07:00
OrcaWinandOrcaWin be1fceb69d test: remove 39 low-value suites from audit batch 849 (#36491)
* test: remove 39 low-value suites from audit batch 849

* test: remove obsolete shell-contract trigger for deleted suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-30 17:20:27 -07:00
Kelvin Amoaba bc57cdbf77 fix(web): keep Unlimited session history in the browser client (#36507) 2026-10-31 00:19:22 +00:00
Kelvin Amoaba d503ff9f16 fix(terminal): hold a phone send until a new Claude tab's composer is up (#36494)
* fix(terminal): hold a phone send until a new Claude tab's composer is up

* fix(terminal): replace a reused PTY's launch-composer watch
2026-10-31 00:13:34 +00:00
Kelvin Amoaba 10ffe0c940 fix(agent-status): stop showing Claude as Working after a hook blocks the prompt (#36495)
* fix(agent-status): settle a Claude pane when a prompt hook blocks the prompt

Claude fires no Stop after a UserPromptSubmit hook blocks the prompt, so the
pane stayed Working: 2 minutes until the OSC 7501 fallback, or until the next
turn when Claude's idle landed before Orca's own prompt hook. A prompt now
claims the program's working run, and a claimed run that goes idle without a
result or user input settles the turn the way a plain Stop would, in either
order. Input during the run (Escape, Ctrl+C) leaves the verdict to interrupt
inference, and relayed panes keep the relay's adjudication.

* fix(agent-status): keep a typed prompt from claiming an earlier rested run

Any input since the run began now withdraws its rest from the blocked-prompt
settle, so the keystrokes of the next prompt stop a stale idle run from being
claimed if that prompt's hook lands before its own working report.
2026-10-31 00:09:31 +00:00
Neil 86d1623009 feat(wsl): prefetch the pinned Node archive when WSL hosts turn on (#36500)
A first WSL deploy downloads the pinned Linux Node archive (about 55 MB)
while the user waits, and fails on a network that blocks it. Once the WSL
hosts flag is open and the setting is on, fetch it in the background into
the cache the deploy reads, through the same materializer (mirror, proxy,
hash check). Once per run, deduped, never boots a distro; a failure is
logged and the deploy's download path is unchanged.
2026-10-30 17:06:45 -07:00
Brennan Benson 57bc1778dc A chat rename also renames the agent's own conversation (#34192)
* A chat rename also renames the agent's own conversation

Renaming a native chat saved the name only in Orca, so the agent's own resume list (claude --resume, Codex's resume picker) kept showing its old title for the same conversation.

After a rename is saved, the host now gives the chat's current agent conversation the same name, the way the agent's own rename does: Claude through its host rename request (or its title line when no Claude is running), Codex through thread/name/set (live, or from a short-lived app-server under the chat's account), Pi through set_session_name while it runs. A new agent conversation in the same chat (first message, /clear, rewind) takes the name when it starts; resuming one never does, so a rename typed in the agent's own CLI is kept. Names Orca chose are never pushed. Failures are logged and never affect the rename.

* Preserve provider naming across rewind, close, and configured launches

* Use a fixed timestamp in session title fixture

* Format session rename regressions and simplify setup

* Resolve idle naming without conversation launch admission

* Assert configured PATH in idle naming regression

* Fix Codex session rename lint errors

* Correct provider rename regression fixtures

* Remove redundant rename traversal test after corpus validation

* Restore filesystem rename scaling contract

* Reuse Codex close delegate for disposal

* Join accepted provider naming work before runtime shutdown

* Correct the provider naming shutdown test fixture

* Preserve explicit conversation names across Claude startup

* Settle proven retiring writers before naming follow-up

* Preserve configured Codex rename invocation and align integration fixtures

* Fix construction and fixtures exposed by CI

* fix(chat): reconcile naming owner on late Claude exit

* fix(chat): align naming fixtures with async contracts

* test: separate Claude initialization results from native fixture exits

* test: type Claude naming fixture launch options

* test: await original journal close completion

* fix: persist Claude prompt names with session titles
2026-10-30 16:57:27 -07:00
Neil 2b00c57182 fix(agents): accept launch-time --model and --effort for grok (#36480)
* fix(agents): accept launch-time --model and --effort for grok

Grok's session option catalog already maps model and reasoning effort to
-m / --reasoning-effort, but it did not opt into worker launch
preferences, so orchestration worker-start rejected --model/--effort for
grok. Opt the catalog in and list Grok in the CLI help and docs.

Fixes #36199

* test(orchestration): use an agent without launch preferences in the federation rejection test
2026-10-30 16:48:26 -07:00
Pr1pandNeil 5cb0551b68 fix(editor): apply file icon themes to editor tabs (#36345)
Editor tabs called the built-in getFileTypeIcon table directly, so an
enabled plugin file-icon theme changed the explorer but not the tabs.
Plain file tabs now render the shared theme-aware FileTypeIcon, and
PluginContributionIcon accepts a ReactElement fallback so the icon
component type stays stable across renders. Simulator tabs pick the
phone icon from their language instead of their label, so they keep it
under a theme.

Fixes #36326

Co-authored-by: Neil <neil@stably.ai>
2026-10-30 16:43:16 -07:00
Vyacheslav ScherbininandNeil a5321f30cf fix(text-generation): discover installed CLIs when naming chats (#35954)
One-shot POSIX text generators (chat naming, commit/branch/PR text)
passed a bare CLI name to the supervisor, whose PATH-only lookup missed
version-manager installs (e.g. nvm) that native chats already find when
the GUI process PATH omits them. Resolve bare commands with the existing
guest-aware installed-CLI resolver, searching relative and empty PATH
entries from the agent's launch cwd so project recipe CLIs keep
precedence, and share that PATH resolution with Codex structured launch.

Fixes #35942

Co-authored-by: Neil <neil@stably.ai>
2026-10-30 16:43:09 -07:00
Neil fba64aef1b fix(wsl): keep the orcad idle window out of user shells; require the agent for discovered effort menus (#36492) 2026-10-30 16:42:15 -07:00
Brennan BensonandMerge Sim cd481306e3 Keep concurrent title edits when marking GitLab MRs ready (#19646)
* fix gitlab ready mutation title race

* use approved GitLab SetDraft schema

* fix gitlab ready transition semantics

* report semantic ready adapter validation

* test gitlab semantic ready mutation failures

* fix gitlab semantic ready lint

* test(gitlab): reproduce readiness title race and combined edits

* test(gitlab): cover old-host readiness and rejected commands

* fix(gitlab): preserve concurrent titles with compatible ready updates

* test(gitlab): use recorded CLI error transport shape

* fix(gitlab): handle legacy schemas and report partial readiness updates

* fix(gitlab): validate readiness responses without assertions

* test(gitlab): cover ready failures and execution routing

---------

Co-authored-by: Merge Sim <sim@local>
2026-10-30 16:38:27 -07:00
berceandNeil c5e8db86eb fix(worktrees): rewrite a trailing .lock in derived branch names (#36435)
Git rejects a ref component ending in .lock, so creating a worktree from an
issue whose title ends that way (e.g. "... mise.lock") failed with
"is not a valid branch name". computeValidatedBranchName now rewrites a
trailing .lock to -lock in the branch name only, so the worktree folder
keeps the requested name.

Fixes #36404

Co-authored-by: Neil <neil@stably.ai>
2026-10-30 16:37:55 -07:00
Brennan Benson 5506c5487f Reserve the Git Bash capacity overlay for untouched Windows startup failures (#16991)
* fix(terminal): only the Windows console-limit failure keeps a dead terminal open

#16045 retained every non-zero local PTY exit and only used the Git Bash
console-capacity marker to pick the overlay's label, so an ordinary shell
exiting after a failed command left a dead pane behind on macOS and Linux too.

Claim the exit for the capacity overlay only when all of it holds: a native
local Windows ConPTY pane, a non-zero code, the same PTY whose fresh spawn was
observed, no user input on that PTY (an unsettled write counts), and the exact
MSYS marker in that PTY's own output. Every other exit falls through to the
unchanged teardown path.

Per-PTY interaction rides on the existing per-PTY process-exit record, marked at
the input-forward chokepoint so a late write acknowledgement can never label a
replacement PTY.

STA-5604

* test(terminal): pin the two unpinned arms of the Git Bash capacity gate

Gate-level ablation of the six-clause capacity condition found the six
conjuncts each individually pinned, but two neighbouring arms free:

- the `session.deps.onPaneProcessDied` presence check. The callback is
  optional on PaneConnectionDeps; without the guard a capacity exit calls
  `undefined` and throws out of the exit handler, leaving the pane neither
  retained nor torn down.
- the per-PTY keying in `noteTerminalInputForPty`. A generation installs its
  exit state when its callbacks are captured, before the transport rebinds
  its PTY id; a write in that window would be credited to the incoming PTY
  and silently suppress its capacity overlay.

Both new tests fail with their own arm reverted and pass with it restored.
No production change.

* Preserve startup input intent across terminal connection

* Keep terminal input attempts with their launch across remounts

* Load the real capacity-test transport during suite setup

* Match the paste-input test result type to its API
2026-10-30 16:33:44 -07:00
Brennan Benson 37ef6e9268 Explain Git Bash console exhaustion when terminal startup fails (#36422)
* Report Git Bash console exhaustion when terminal startup fails

* Observe initial terminal diagnostics before startup output changes

* Keep terminal startup diagnostics scoped to fresh launches

* Preserve claimed terminal failure provenance

* Finalize terminal startup failure classification at producers

* Preserve terminal creation provenance and startup warnings

* Correct startup diagnostic test type boundaries

* Use a typed startup projection test adapter

* Consolidate startup readiness diagnostic imports

* Exercise installed DLL format fixture through terminal startup failure

* Use checked startup failure test dependencies

* Preserve exact DLL fixture bytes on checkout

* Align terminal regression fixtures with exit contracts

* Complete exit verdict expectations in runtime contracts

* Drive ConPTY startup before fake-clock foreground checks

* Cover formatted capacity failures in terminal error toast

* test: preserve neutral exits after terminal wait integration
2026-10-30 16:33:00 -07:00
Neil 4b3ccc4158 fix(windows): skip the ConPTY input-reader check on WinPTY panes (#36490)
node-pty falls back to WinPTY below Windows build 18309. WinPTY never sends
ConPTY's DA1 announcement, so every plain terminal was classified as having no
input reader and the healthy shell was killed and respawned. On v1.4.244 that
discard killed the WinPTY agent twice, and winpty's native kill throws
'Pty seems to have been killed already', failing every plain terminal spawn.

Fixes #36317
2026-10-30 16:32:29 -07:00
小七 014580a12f fix(settings): keep the agent environment editor reachable when empty (#36034)
The local agent Environment editor returned null when an agent had no
default env, override, or draft, so only goose showed it while empty and
users had no UI path to add a first variable. Always render it, dropping
the showEmpty/hasDefaultEnv plumbing.

Fixes #35997
2026-10-30 16:27:03 -07:00