* fix(browser): stop agent clicks from opening the system file picker
An agent click on a file input opened the macOS Open panel, which brought
Orca's window forward over the app the user was in. Page actions now catch
the picker the way upload does and tell the agent to use upload.
* fix(browser): enable Page, cancel the picker, and clean up outside host scope
* fix(browser): limit picker blocking to input delivery and bound its setup
* perf(browser): skip picker blocking for actions without user activation
* fix(browser): bound picker interception cleanup on a hung page
* fix(browser): bound the picker interception setup as a whole
* fix(emulator): let iPhone Duo fold in release builds
Release signing gave serve-sim's in-simulator helpers the hardened runtime,
which drops the DYLD_ROOT_PATH that simctl spawn hands them, so the Duo HID
and accessibility helpers aborted at launch. Sign just those two with only
allow-dyld-environment-variables.
serve-sim's uncaught errors print its minified source, which contains the
"No serve-sim server running" text, so every crash was reported as no active
emulator. Report the thrown error line instead.
Fixes#40509
* fix(emulator): keep multi-line serve-sim error messages
* refactor(emulator): simplify serve-sim failure message parsing
* fix(native-chat): refuse a stale startup-dialog card choice and add a card for the multi-server MCP dialog
* fix(native-chat): drop casts from the startup-dialog guard
* fix(native-chat): refuse a startup card choice until the screen model has applied all received output
* fix(native-chat): refuse a clipped MCP server list and guard restored startup cards
* fix(native-chat): allow one startup card choice per screen so a second client's keys can't hit the next dialog
* Avoid sorting the folder catalog for a single host lookup
* Model the folder point read in remaining runtime fixtures
* Explain the partial emulator routing fixture boundary
Structured image sends replace inline composer chips with `[Image #N]` tokens
for the provider prompt, which left sent `[Image #N]` markers visible in user
message bubbles, copied text, rail/outline previews, and row height estimates.
Strip in-range `[Image #1..imageCount]` markers across user message display,
copy text, row height estimation, and rail/outline previews while preserving
literal markers past `imageCount`, in quoted file references, or inside inline
backticks and fenced code blocks.
Fixes#32727
Co-authored-by: lurunzi <lurunzi@gmail.com>
Creating a child worktree while a runtime or fleet listing was in flight could delete its fresh lineage edge if the mutation landed after the scan's overtaken check (for example during metadata pruning or removal-checkout probes). Gate pruneLineageForMissingRepoWorktrees on the scan-start generation and pass { scanGeneration } from both runtime callers.
Fixes#16654
Co-authored-by: Skyler Shaw <skyler@jump.run>
Claude and Codex chat children kept the launching pane's ORCA_* identity
(pane key, tab, worktree, workspace, terminal handle), so hooks and the
CLI attributed the chat to the host pane. Launch composition now applies
the shared STRUCTURED_CHILD_ENV_TO_DELETE list once for every agent, which
also adds ORCA_WORKSPACE_ID and ORCA_TERMINAL_HANDLE to it; the seal still
keeps a worker's own handle.
Refs #26417
Co-authored-by: petersindex <287557875+petersindex@users.noreply.github.com>
Disable commit/tag GPG signing via a cached wrapper GIT_CONFIG_GLOBAL when
the developer's global gitconfig enables signing, clear inherited GIT_CONFIG_GLOBAL
in GitBinaryTestFixture, strip inherited TERM_PROGRAM* in Vitest setup, and
run ssh-posix-command-wrapper shell checks against an empty HOME/ZDOTDIR/XDG_CONFIG_HOME.
Fixes#27210
Co-authored-by: outof-place <contact@outofplace.space>
Callers such as getRepoUpstream and the tracked-upstream branch fallback called getGitHubApiRepositoryForRemote without checking the cached remote listing, causing repos without an upstream remote to run failing git remote get-url upstream execs on cold lookups. Gate non-origin remotes on shouldProbeGitRemote at the shared entry point while keeping origin unconditional.
Refs #22684
Co-authored-by: h5k <31630310+h5kk@users.noreply.github.com>
* feat(native-chat): run GitHub Copilot in Chat over its ACP server
Copilot chats launch `copilot --acp` with Copilot's own sign-in (or gh's),
so enterprise hosts and managed policy carry over. A Copilot dialect turns
its tool results into plain output and exit codes, and withholds the
commands that would switch Copilot to approving everything behind the
chat's permission mode.
The CLI version reader now accepts a version that ends a sentence, as
Copilot prints it.
Co-authored-by: Morten Trydal <trydis@hotmail.com>
* fix(native-chat): show Auto when a session lists no models instead of hiding the model pill
* fix(native-chat): don't name Copilot chats with a Copilot run that stays in its history
---------
Co-authored-by: Morten Trydal <trydis@hotmail.com>
* perf(orchestration): an unreadable item holds back only its own conversation, and remote-owned queries use their indexes
* fix(orchestration): a held conversation stays skipped for its batch, and pulls past the hold-back cap wait locally
* Fix Codex account status for Bedrock and other built-in providers
Derive system-default authentication from the configured provider and honor the declared credential mode before reading ChatGPT identity.
Co-authored-by: Christopher Ryu <cryu17@gmail.com>
* Reuse provider classification until canonical config changes
* Bound provider config work and refresh after file removal
* Use portable module counters for provider config regression checks
* Complete the host target in the account warning fixture
* Include the account warning module in Node test typechecking
---------
Co-authored-by: Christopher Ryu <cryu17@gmail.com>
* Keep browser chrome metadata current without synchronous guest reads
* Provide the guest Escape subscription in browser pane fixtures
* Provide native navigation state in browser guest fixtures
* Preserve browser navigation and loading across asynchronous metadata reads
* Retire browser metadata when its actual guest is removed
* Explain native identity casts in browser disposal fixtures
* Preserve URL titles for untitled client browser pages
* Preserve current browser navigation and untitled page labels
* Keep merged browser failure type within lint limit
* Keep merged browser failure type within lint limit
* Bound published browser titles to the existing wire limit
* Use template literals in browser title regression
OpenCode, OpenCode 2 and Z Code keep every conversation in one shared
database, so Session History could only hand off the row's preview
messages. The session's own host now copies that one conversation into
the per-chat hand-off snapshot the chat Hand Off already uses, and the
dialog points the new agent at it. Older hosts, SSH rows and failed
reads keep the preview.
* fix(orchestration): tell the coordinator when a worker is lost
A worker that could no longer run its task sent no mail: a failed start,
a person closing its pane, tab or chat, or a terminal gone after a restart.
Each now sends one "Worker lost without reporting" alert through the
turn-stop report, with its cause, last output and any leftover workspace.
An unexpected exit and a lost Codex app-server use the same path. An exit
or loss says the Dispatch is closed as failed and gives the retry command.
Failure text in the alert is redacted like terminal output.
The coordinator's own worker-stop stays silent, locally and on a paired
server. A finished turn is not reported when that turn's worker_done was
rejected; later turns still are. worker-read and worker-show say
"never started" for a start that never got a terminal.
* fix(orchestration): a lost worker's restart command names its Task id and suits its Task's state
- The command named the Task's label, not its id.
- Restart recovery puts the Task back to ready, which --retry-of refuses:
the command is a plain worker-start then.
- worker-show does not call a paired server's failed worker "never
started": its record carries no terminal details.
* test(orchestration): import the turn-stop report after main's test cleanup
* fix(jcode): keep the agent row for Jcode panes and read its working title
On Linux the Jcode release runs jcode-linux-<arch>.bin behind a jcode wrapper, so
the foreground read never identified the pane, and Jcode's own title
(<emoji> jcode/<server> <Codename> · work ~2s) was not classified. Once Jcode
replaced its startup title, the title-derived row lost its only identity and
disappeared. Map the platform binary to jcode, accept the server-qualified
identity title, and read the work/last tail as working/idle.
* fix(jcode): read the bare title tail only in a Jcode pane
The activity tail on conversation and SSH titles is too generic to prove an
agent, so title-only readers must not treat it as one. Gate it on the pane's
agent, as Hermes markers are, keep identity titles self-describing, narrow the
server segment, and keep the title strip linear.
* fix(jcode): keep the turn tail out of title-only readers
Title-only readers (completion tracking) saw a turn from Jcode's identity title
and then idle when Jcode switched to a conversation title naming another agent.
Read the tail only through the pane-scoped reader, check it before generic
title status in the sidebar row, and stop treating a bare jcode/<dir> as Jcode.
* fix(jcode): escape the title separator so the orcad bundle stays ASCII
Usage attribution only knew live worktrees, so deleting one moved its
sessions out of the Orca scope on the next scan and Stats & Usage totals
went down. Remember every worktree Orca has had in a small usage-owned
history and attribute against live plus remembered worktrees, with live
rows claiming reused paths first. The history loads off the main thread,
scans wait for it, and an unreadable or newer file is never overwritten.
* fix(cli): chat wait checks the chat's work state instead of reading its history every second
`orca chat wait` and `orca chat send --wait` polled `agentSession.history` once a second only to
learn whether the chat was still working. Each poll made the host build a transcript page, scan
every retained item twice for the running turn, and send the newest reply's full text, all
ignored by the waiter.
The host now answers `agentSession.workState` with just the facts a wait decides from (working,
a waiting question or approval, queued ids, the next queued send, the fence), and the journal's
running turn comes from its existing per-row turn index instead of a scan. The CLI polls that
read and falls back to history pages on hosts without it. The final transcript read is unchanged.
* test(cli): type the chat wait host test without assertions
* docs(cli): say what a work-state check skips, not that it does no history work
* test(cli): pin the chat wait's exact final reply and its single history read
* docs(cli): name the scan a work-state check skips
* ci: typecheck the chat wait host test with the cross-process test project