Commit Graph
16002 Commits
Author SHA1 Message Date
Brennan BensonandMichael Schaecher 25d677f7ad Keep app shortcuts working from the chat message editor (#38724)
* fix(shortcuts): keep app commands available from the chat composer

Resolve app shortcuts against the prompt's actual editing ownership and
preserve that ownership before native workspace-delete interception.
Keep existing custom navigation, input composition and clipboard behavior.

Co-authored-by: Michael Schaecher <276865230+big-sheq@users.noreply.github.com>

* test(shortcuts): type native input fixtures

* test(shortcuts): colocate prompt dispatcher regression

* test(shortcuts): document controlled fixture type boundaries

* test(shortcuts): use complete translation module during dispatcher setup

* test(shortcuts): commit mocked keybinding updates before dispatch

* test(shortcuts): use existing cross-process typecheck project

* fix(shortcuts): respect logical editing keys on remapped layouts

---------

Co-authored-by: Michael Schaecher <276865230+big-sheq@users.noreply.github.com>
2026-11-05 21:24:08 -08:00
AnmolandKelvin Amoaba 76d23612ba fix(cli): use the terminal's worktree when cwd is outside every worktree (#38086)
* fix(cli): use the terminal's worktree when cwd is outside every worktree

Browser, terminal and computer commands run from an unmanaged cwd fell back to the worktree focused in the window. They now use the calling terminal's ORCA_WORKTREE_ID or folder ORCA_WORKSPACE_ID before that default. Fixes #37899.

* fix(cli): resolve the terminal worktree against the catalog

Match ORCA_WORKTREE_ID on the caller's host so ids shared across hosts
go out as identity:, accept folder: ids from either terminal env var,
and keep the runtime default when worktree.list cannot be read.

* fix(cli): refuse a stale terminal worktree instead of using the focused one

When ORCA_WORKTREE_ID names a worktree the catalog no longer lists on the
caller's host, fail with a --worktree hint rather than silently targeting the
workspace focused in Orca. Clear the terminal's workspace env in the test setup
so CLI tests run the same inside an Orca terminal.

* fix(cli): keep the floating terminal on the runtime default

The floating terminal's ORCA_WORKTREE_ID is a sentinel with no catalog row, so it must not hit the stale-workspace error. Word that error as what the CLI can tell: the workspace is not listed, which also covers hidden worktrees.

* fix(cli): ignore terminal workspace ids from another Orca profile

A shell from the installed app that targets a dev build or throwaway serve carries worktree ids that runtime never issued. Reuse the runtime-source fence rule to skip them, so those commands keep the target runtime's default instead of failing.

* test(cli): drop tests that pass without the terminal-workspace fallback

Remove the list-failure and cwd-precedence cases, which pass on main, and the SSH stubs the folder case never reads.

---------

Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
2026-11-06 05:15:02 +00:00
Kelvin Amoaba 4f19002962 feat(mobile): render GitHub alerts, task boxes, inline tags and images in Markdown (#38809)
* feat(mobile): render GitHub alerts, task boxes, inline tags, images and footnotes

GitHub text on the phone now draws what desktop and github.com do:
> [!NOTE]-style alerts (desktop's marker rule, shared), read-only task
boxes, <sub>/<sup>/<kbd>/<ins> and <b>/<i>/<del>/<code> inline tags, https
<img> and Markdown images at their authored width, raised footnote numbers,
and #123 links in the PR view into the PR's own repository.

* fix(mobile): keep linked badges and commented images, read only pixel widths

An <a href> around inline content becomes a link, so a badge keeps its
target; images inside links, comments, icons by height, and percentage
widths stay as before. Footnote numbers follow the text scale.

* fix(mobile): keep images inside headings and styles in place, read link hrefs as HTML does

Only images that a p, div, picture or center places are cut out of HTML,
in one pass; an image in a heading, link or bold stays in its element.
Inline <a> hrefs use the shared attribute reader (quotes and entities),
<code> keeps only the text of tags inside it, and alert titles follow the
text scale.
2026-11-06 05:12:28 +00:00
Kelvin Amoaba a4e24a9e5a feat(mobile): show automatic continue and Switch Account on chat usage-limit notices (#38298)
* feat(mobile): usage-limit card with the host's automatic continue, Continue and Switch Account

* refactor(mobile): give the notice disclosure its own file to fit the usage-limit status

* fix(mobile): drop the cancel failure once the host shows the cut cancelled

* fix(mobile): keep the usage-limit status up while a later re-ask is pending

A re-ask at a new journal cursor no longer blanks the reset line and pills;
the cut keeps its last answer. Don't continue reports its disabled state.
2026-11-06 05:12:00 +00:00
Brennan Benson 6acdb0535c fix(github-project): use content values for built-in grouping and sorting (#38818)
* fix(github-project): derive built-in field display and ordering from content

* fix(i18n): register linked PR summary overflow fallback

* fix: satisfy project projection static checks

* test(github-project): cover normalized phone metadata and update field contracts

* fix(github-project): narrow optional grouping values explicitly

* test(github-project): place fixture safety rationale at assertion start

* test(github-project): isolate Node and native regression boundaries
2026-11-05 21:09:14 -08:00
Brennan BensonandMadhur 2c45641de2 fix: display Claude server tools in chat and history (#38811)
* fix: display Claude server tools in chat and history

Co-authored-by: Madhur <madhurbhawsar7@gmail.com>

* test: remove redundant fixed-output card cases

* fix: narrow Claude content guard types accurately

---------

Co-authored-by: Madhur <madhurbhawsar7@gmail.com>
2026-11-05 21:07:28 -08:00
OrcaWinandOrcaWin 29fe87e49f test: remove 1292 low-value IPC, SSH and workspace tests (#38828)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 21:04:34 -08:00
Neil 07f2c0d316 perf(runtime): hash granted file downloads once instead of per page (#38820)
* perf(runtime): hash granted file downloads once instead of per page

Each 384 KiB page of a digest-pinned granted file re-read and re-hashed the
whole file (~270 MiB of work for 10 MiB) on the host main process. Sequential
pages now feed a running SHA-256 checked against the pinned digest on the EOF
page; the client discards the download on failure. Out-of-order, procfs, and
concurrent pagings keep the whole-file check.

* perf(runtime): verify each granted-file page against per-block digests

Replace the cross-page running digest with 64 KiB block digests taken at grant
time from the same read as the whole-file digest. Each page now reads only the
blocks it touches and is checked on its own, so every page is verified before it
is returned (as before), with no per-grant paging state and no reliance on the
client discarding a download after a failed EOF page.
2026-11-05 21:02:50 -08:00
Kelvin Amoaba c94caf66e0 fix(browser): keep screenshots from drawing shifted by the page's scroll offset (#38827) 2026-11-06 04:59:12 +00:00
OrcaWinandOrcaWin 62eab0c434 test: remove 1148 low-value IPC and filesystem tests (#38817)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 20:45:38 -08:00
Neil a0ed7812ff perf(browser): throttle password detector whole-document walks (#38821)
On pages adding more than 200 nodes per check, the detector walked the whole
document for shadow roots every 500 ms. Whole-document walks now run at most
once per 5 s on their own timer; form-gone checks keep their cadence, and
typing or focus still discovers a field's shadow roots immediately.
2026-11-06 04:38:55 +00:00
Brennan Benson 45a468894d Show proposed files and collapsible details in Codex approvals (#37960)
Show Codex file-change proposals in approval cards and keep verbose operation details collapsed by default on desktop and phone, with reason, access and answer choices visible.

Preserve approval identity and answer behavior, keyboard focus, and scroll position when details expand or collapse.
2026-11-05 20:32:50 -08:00
Neil ac203854bf fix(cli): point positional terminal handles at --terminal (#38793)
`orca terminal read term_abc` failed with a bare "Unknown command" because the
handle landed in the command path. When a term_/structworker_ handle follows a
command that accepts a target --terminal flag, suggest the flag form instead.
Caller-identity --terminal commands are skipped. The terminal-handle prefix
check moves to a dependency-light shared leaf reused by the session-address
codec.

Fixes #38312
2026-11-05 20:20:03 -08:00
Brennan Benson b53db37643 Refuse unsafe branch switches and share one check across phone and desktop (#38744)
* fix(git): refuse unsafe branch switches in an existing workspace

The phone's Switch branch ran `git checkout` with no checks: uncommitted
files moved to the other branch, and a switch could land under a working
agent or mid-rebase. One host check now covers every client: it refuses,
with a plain reason, when files are uncommitted, a merge/rebase/
cherry-pick/revert is in progress, HEAD is detached or unborn, another
git action is running, or an agent in the checkout is working or waiting
for approval. Checks and the checkout run under a per-checkout lock.

After a switch the host clears the old branch's review links and push
target and tells every client, so a phone-only host stays correct, and
records that the user chose the branch so first-work naming never
renames it. The open Commits list follows the new branch.

* fix(git): review round 1 repairs for the guarded branch switch

- check out through the provider so the user's switch keeps the interactive git queue
- a landed switch that Windows left files behind on now tells the user instead of reporting success
- never let a Windows yes/no prompt hold the switch lock
- refuse submodule edits that submodule ignore config hides from status
- record the switch on the target host's metadata row and never fail a landed switch on bookkeeping
- read workspace paths from their ids instead of scanning the catalog on every switch
- admit agent rows like the sidebar roster (listed tab, or a live terminal by pane, tab or handle)
- move the host-side switch hooks into their own module

* test: type the new switch test fakes instead of casting them

* fix(git): second repair round for the guarded branch switch

- report files Windows left behind from git's own unlink warnings, not a status re-read, so
  ordinary branch differences and submodule commit changes are never called failures
- the phone refreshes its branch and files after a switch that landed with a warning
- refuse only edits inside a submodule its ignore config hides, never a commit mismatch alone,
  reading status without optional locks in the interactive queue
- read the agent process probe when a switch runs, not while the runtime is constructed
- check the agent's checkout path before terminal liveness and build the tab list once per switch
- the runtime wiring test no longer reaches real git

* fix(git): scope the switch's agent check to the checkout and keep landed-switch outcomes honest

- find candidate agents by checkout path first; build terminal liveness once, only from this
  checkout's terminals and its workspaces' saved tabs; probe candidates together and re-read
  the snapshot once; no work for unrelated workspaces (contract test at N and 10N)
- a checkout that fails after HEAD moved is recorded as landed; files left behind are named only
  when git reports it could not replace them, otherwise git's own error is shown
- parse git's unlink warnings for paths with apostrophes
- the phone keeps the refusal or warning visible while it reloads the branch
- cover a submodule that is only at another commit

* fix(git): name git's own error when a switch lands after a failing hook; use the shared unlink parser

* fix(git): keep the switch's agent check flat for unrelated folder workspaces

- read folder workspace directories once per switch instead of a linear search per row and terminal
- re-read each candidate's current status by pane key instead of rebuilding the whole snapshot
- skip the hidden-submodule status pass in repos without submodules
- the cost contract covers folder workspaces, many in-checkout agents and PTY passes
- a real-git test covers a switch that lands before a failing post-checkout hook

* fix(git): never quote git's progress line as a landed switch's error; fixed clock in the cost test

* fix(git): decide the hidden-submodule check from the index, not a visible .gitmodules

* perf(git): read only index modes for the submodule shortcut so large repos stay under the output cap
2026-11-05 20:16:50 -08:00
caa2f6a7c2 feat(native-chat): step between a question card's questions with Left and Right (#38335)
On a multi-question card only a click on a step tab changed question.
Left and Right now step to the previous or next question while an
option row or a step tab has focus, keep every answer, and stop at the
first and last question. Inside the answer field they still move the
caret.

Co-authored-by: Michael Schaecher <276865230+big-sheq@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
2026-11-06 04:15:58 +00:00
Rahul GavandeandKelvin Amoaba 8391d2e42f fix(browser): ask for Full Disk Access when macOS blocks a cookie import (#38497)
On macOS, privacy protection can stop Orca from copying another browser's
cookie database. The copy fails with EPERM, and Orca told the user to close
the browser, which does not help. Chromium and Firefox imports now show the
Full Disk Access hint that Safari imports already had.

Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
2026-11-06 04:15:30 +00:00
OrcaWinandOrcaWin 480842c82a test: remove 1186 low-value Git and IPC tests (#38812)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 20:00:50 -08:00
Brennan Benson 21f1626aae Release obsolete ACP tool and message bookkeeping (#38767)
* Bound completed ACP ownership by publication and turn lifetime

* Resolve ACP ownership before opening and reuse settlement observations

* Scope ACP resource contract to ownership retirement

* Annotate ACP closed ownership state without an assertion
2026-11-05 19:58:10 -08:00
Kelvin Amoaba 345c326a91 feat(cli): rename a chat with orca chat rename (#38719)
Fixes #38556
2026-11-06 03:44:40 +00:00
OrcaWinandOrcaWin 5eaedd7957 perf(renderer): reset dialog state during render instead of in effects (#38803)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 19:41:23 -08:00
Kelvin Amoaba b44e533d05 fix(tasks): skip self-hosted GitLab projects on the GitHub tab (#38802)
The GitHub tab only treated gitlab.com remotes as proven GitLab, so every
project on a self-hosted GitLab got a 'No GitHub source detected' row. Use
glab's known hosts plus the hosts a partial auth failure still proved
logged in (glab exits 1 when gitlab.com has no token).
2026-11-06 03:38:41 +00:00
OrcaWinandOrcaWin 3e9de9e8b5 test: remove 987 low-value runtime and Git tests (#38799)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 19:35:56 -08:00
OrcaWinandOrcaWin eecd4dc6d5 perf(renderer): derive state instead of syncing it in effects (surfaces) (#38797)
Replace setState-only effects with render-time adjustment (prev-value or
self-limiting guard) so prop changes no longer commit a stale render and
then re-render. Drop the now-obsolete no-derived-state-effect suppression
for use-combined-diff-view-preferences.ts.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 19:33:45 -08:00
OrcaWinandOrcaWin f4afb9cca1 test: remove 607 low-value daemon and terminal tests (#38790)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 19:00:27 -08:00
OrcaWinandOrcaWin a3c76bffda test: remove 319 low-value daemon and terminal tests (#38783)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 18:43:44 -08:00
Neil 5159aff2e2 fix(ssh): say when a managed host now serves a different Orca server, and drop the Tailscale hint on SSH tunnels (#38745)
A saved pairing refused by this host's own server (it now publishes a different key, e.g. after
the SSH User changed) now says so, names the exact recovery (Forget the server, then Connect the
host), and stops retrying, instead of blaming another Orca on the port. Servers reached through
an SSH tunnel are their own host kind, so connection failures there no longer suggest Tailscale.

Refs #37766
2026-11-05 18:29:50 -08:00
Neil 3cb4853187 Keep dropped-macOS updaters on their last compatible build and explain why (#38777)
* Keep dropped-macOS updaters on their last compatible build and explain why

Stamp minimumSystemVersion into every mac update manifest from the built
app's LSMinimumSystemVersion, and refuse to publish an ungated release.
When the updater withholds a newer release for this macOS, show a one-time
notice and say so in Settings and the update card.

* Trim the unsupported-Mac notice copy
2026-11-05 18:29:16 -08:00
OrcaWinandOrcaWin 4c49ddca3e test: remove 477 low-value agent and platform tests (#38778)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 18:21:27 -08:00
NeilandcoolwindX d938f33139 fix(browser): ask a connected desktop to host when open-url finds no browser host (#38762)
A server learns of a desktop that can host its browser pages only after that
desktop opens a browser tab, so open-url failed until one existed. Desktops now
opt in on their client-events subscription. When a server-initiated page needs
a host and no lease exists, the server asks the newest such desktop to start
hosting and places the page on the lease it names. Only an explicit decline
moves on to the next desktop, so a slow desktop can never leave two leases; a
desktop that stays silent is named in the error.

When several desktops already host, the page goes to the one showing this
workspace's pages, then the newest lease, instead of failing as ambiguous, and
no desktop without a lease is asked.

Managed SSH desktops do not opt in, so their hosts keep using the desktop
browser bridge. Leases stay lazy, so an idle desktop holds none and bridge and
tab-query routing are unchanged.

Fixes #35066

Co-authored-by: coolwindX <45729206+coolwindX@users.noreply.github.com>
2026-11-05 18:19:35 -08:00
705fd10b99 fix(editor): keep plugin new files in the floating workspace (#37878)
Plugin new-file items chosen from the floating workspace's + menu were
created under the active main workspace. Route floating targets (an
existing floating tab group, or the empty floating panel) to the
floating-notes directory with the floating workspace identity, matching
the built-in floating Markdown action.

Co-authored-by: Hunter Pittman <22402914+Hunter-Pittman@users.noreply.github.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 18:19:29 -08:00
NeilandBlue Thunder Somogyi 66695b1e9d Route federation ack and import over the shared control connection (#38735)
* fix(runtime-environments): route federation ack and import over shared control

The one-second federation sync pulls over the retained shared-control
connection but sent orchestration.federationAck and
orchestration.federationImport on a fresh one-shot socket, closed on the
main thread after every tick that carries progress. On a Mac whose
network content filter holds each TCP close for about a second, that
close froze keystroke relay for the whole app.

Allowlist the two relay mutations in shouldUseSharedControlEnvelope so
they take the same support-routed path as federationPull, including the
one-shot fallback for hosts without shared control. Both handlers are
synchronous and idempotent by request id and cursor. Long-running
mutations such as orchestration.workerStart stay one-shot, and
ORCHESTRATION_MUTATION_METHODS is unchanged.

* test(runtime-environments): pin federation relay transport to shared control

Cover the transport of one federation sync tick so a change that
reintroduces a per-tick one-shot socket fails a test:

- a pull, ack and import for one dispatch open no one-shot socket beyond
  the initial status.get when the host advertises shared control, and
  keep all three on one-shot sockets when it does not
- federationAck and federationImport fall back to one-shot with their
  envelope intact when shared control is unavailable
- shouldUseSharedControlEnvelope shares control for the relay reads and
  the two allowlisted mutations, and keeps orchestration.workerStart and
  other mutations on one-shot

* fix(orchestration): prove the worker server contract once per host incarnation

Every federation mutation without caller-proven contract first fetched
status.get to check the orchestration contract capability, then sent the
mutation as a separate call. The contract is now proven once per host
incarnation (runtime id) and each later mutation is pinned to that
incarnation through the existing expectedRuntimeId routing. A restarted host
answers runtime_environment_changed before any effect; the new incarnation is
proved and the mutation resent. A downgraded restart without the contract
receives no mutation, closing the window the old probe left between its check
and the send.

Fixes #37516

* fix(remote-runtime): honour request preparation on shared control

Federation import selects the prefix of its relay batch that fits the
host's inbound request bound through prepareRequest. That preparation was
only applied on one-shot sockets, so once import moved to shared control
its full batch was sent unprepared. Shared-control requests now serialize
through the same preparation step as one-shot requests, and every route an
import can take (shared or one-shot, pinned to a runtime or not) carries it.
The orchestration transport takes prepareRequest and expectedRuntimeId as
one send-options object.

Fixes #37516

---------

Co-authored-by: Blue Thunder Somogyi <bluethunder.somogyi@bastion.com>
2026-11-05 18:19:16 -08:00
Hyeonho Lee (Ethan)andNeil 53fbfded41 fix(shell): open native file pickers as a modal of the window that asked (#37779)
The shell picker IPC handlers (pickDirectory, pickAttachment,
pickAttachments, pickImage, pickRepoIconImage, pickAudio) opened
parentless OS dialogs, so on macOS the picker floated as a free window
that could fall behind Orca instead of attaching as a sheet. Pass the
sender's BrowserWindow to showSingleFlightOpenDialog, which already
falls back to a parentless dialog when the window is missing or
destroyed.

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 18:09:17 -08:00
dağhan tektepe 6b9af049b4 fix(github-project): group by Parent issue using the row's parent (#38212)
GitHub returns no field value for the built-in Parent issue field, so
grouping by it put every row in "No Parent issue". Group by
row.content.parentIssue (keyed by URL so multi-repo projects with the
same issue number stay separate) and order groups by issue number.

Fixes #38099
2026-11-05 18:09:08 -08:00
Guderlilian 5ac627732c fix(editor): recognize .razor files as Razor (#38442)
Monaco registers only .cshtml for the Razor language, so Blazor .razor
components opened as plaintext. Add .razor to the Razor registration in
the association generator and regenerate the shared associations JSON.

Fixes #38380
2026-11-05 18:08:59 -08:00
gsxdsmandNeil 219dca09d0 fix(cli): refuse oversized local requests before dispatch (#37734)
The CLI now measures the serialized runtime request against the shared
1 MiB local transport limit before writing any bytes. Oversized requests
fail with invalid_argument and requestSent=false instead of being cut off
by the server mid-frame, and the client skips mutation recovery for these
unsent requests so it never suggests resending the same payload.

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 18:08:51 -08:00
Neil 38040c5b80 fix(ssh): blame an SSH directory upload failure by cause, not exit order (#38772)
The upload chose between local tar's and the remote's errors partly by which
process exit Node observed first, so a missing local directory could surface
as the remote tar's truncated-stream error and be classed as host-answered.
It now waits for both, then blames the remote only when the pipe into ssh
failed, meaning the far end stopped reading before local tar's output ended
(a local tar SIGPIPE or write error always comes with that). Any other local
tar failure caused the remote EOF and is kept.

Fixes STA-13013
2026-11-05 18:05:03 -08:00
OrcaWinandOrcaWin db63e7f092 test: remove 594 low-value Codex tests (#38775)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 18:04:11 -08:00
GuderlilianandNeil 1d95ea1645 fix(sidebar): highlight the focused chat in workspace card agent rows (#38367)
The focused-agent selector returned null for any active tab that was not
a terminal, so no agent row highlighted while a chat tab was open. Resolve
the focused group's active chat tab and use its structured session pane
key, the same key chat rows and the status bridge use.

Fixes #38156

Co-authored-by: Neil <neil@stably.ai>
2026-11-05 18:03:37 -08:00
Emma HydeandNeil f2be279523 fix(terminal): retry scrollback anchor restore when xterm clamps after resize (#38228)
After a resize/reflow, xterm can silently clamp scrollToLine against stale
scrollbar geometry, leaving the viewport short of the saved anchor. Treat a
mismatch between viewportY and the target line as a retry instead of a
successful restore, so the next frame lands on the anchored line.

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 18:03:28 -08:00
b213e4153d fix(native-chat): let Cmd+R rename a chat tab from its composer (#38388)
The file-search text-key guard made the global shortcut handler yield
Cmd+R whenever focus was in an editable field, so the default tab.rename
chord did nothing while typing in a native chat composer. Exempt the
default (non-overridden) tab.rename chord when the target sits inside a
native chat root.

Co-authored-by: Michael Schaecher <276865230+big-sheq@users.noreply.github.com>
Co-authored-by: Neil <neil@stably.ai>
2026-11-05 18:03:19 -08:00
Marco Schäck ea2cb54d41 fix(plugins): let isolated editor frames announce their merge (#38546)
A custom editor whose document session has `merge` posts `editor.merges`,
so Orca hands it disk writes made under unsaved edits instead of showing
the changed-on-disk banner. The frame host forwards only a guest's
`editor.subscribed` and trusted chords to the editor, so in isolated
frames (the desktop default) the announcement was dropped: the merge
never ran and the banner always showed.

`editor.merges` is not input. Page script sends it through
`orca.document.session()` just as it sends `editor.subscribed`, so it
passes the guest filter the same way.

Fixes #38535
2026-11-05 18:03:10 -08:00
Jechan LeeandNeil 7255eb929d fix(browser): keep client hints alive under the temporary tab UA override (#38046)
A UA-only Emulation.setUserAgentOverride blanks every client hint, so
desktop tabs on the temporary override (e.g. Google sign-in) sent empty
Sec-CH-UA-Platform and friends. Restate Chromium's own desktop platform,
platform version, and architecture with the override so hints match the
non-overridden browser on macOS, Windows, and Linux.

Co-authored-by: Neil <neil@stably.ai>
2026-11-05 18:02:58 -08:00
SungmanandNeil 4b638186d2 fix(native-chat): run the equalize pane shortcut from Chat UI panes (#37755)
The equalize-pane-sizes keybinding did nothing while focus was inside a
Chat UI pane because the native chat key handler only matched the split
shortcuts. Match terminal.equalizePaneSizes alongside split right/down and
run it through the terminal pane actions. When the pane cannot equalize
(lone or expanded pane) or lives in a tab group, leave the chord
unconsumed so the composer still receives it.

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 17:57:30 -08:00
NeilandClaude 3ca2f1876b fix(browser): name the previewed file in HTML preview annotations (#38771)
Workspace HTML previews are served from a grant-bearing orca-doc-preview
URL that the grab payload sanitizer blanks, so annotations sent to an
agent arrived as "Design Feedback: current page" with an empty URL.

Main now resolves the guest's committed document URL (tracked from
did-navigate, so pushState cannot rewrite it) through the live preview
grant to the host file path, and uses it as the payload page URL when it
is display-safe. The annotation heading keeps Windows paths intact
instead of parsing `C:\` as a URL scheme.

Fixes #38564

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-05 17:57:19 -08:00
OrcaWinandOrcaWin d00f32fa29 test: remove 383 low-value runtime and account tests (#38770)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 17:55:06 -08:00
OrcaWinandOrcaWin 4abbef34d4 test: remove 859 low-value runtime and account tests (#38763)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-05 17:53:55 -08:00
Kelvin Amoaba c8c620cd21 feat(mobile): rename a workspace from the workspace menu (#38728)
* feat(mobile): rename a workspace from the workspace menu

The phone's workspace menu gets a Rename row that swaps the drawer to the
text sheet, prefilled and selected. Saving writes worktree.set displayName at
the row's owner, so server rows work too; an empty name returns the label to
its automatic branch or folder name, as desktop's Workspace details does. A
failed save keeps the sheet and text, shows the host's error and offers Retry.

* refactor: share the automatic workspace name rule with the phone's rename sheet
2026-11-06 01:52:38 +00:00
EdgerHaoandNeil 554a16f328 fix(agent-hooks): keep CodeBuddy PermissionRequest from reporting waiting (#38009)
CodeBuddy fires PermissionRequest even when its auto-review approves the
tool, so the pane flashed "waiting" for calls that never needed the user.
Real prompts still arrive as Notification(permission_prompt), so drop
PermissionRequest for CodeBuddy only; Qoder keeps the existing mapping.

Co-authored-by: Neil <neil@stably.ai>
2026-11-05 17:35:57 -08:00
registered2ndandNeil c624d85cbc fix(windows): a failed process-table snapshot can no longer kill the terminal host (#37820)
node-addon-api's default OnError hands the getProcessList callback an Error
(e.g. bad_alloc) instead of rows. The callback only checked for a missing
value, so `.some` threw inside the addon's callback loop, which is uncaught
and ended the terminal host with every PTY on it. Reject the read unless the
snapshot is an array.

Fixes #33350

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-11-05 17:30:38 -08:00
f13a67a7c4 fix(skills): stop the orchestration stub repeating its description (#37850)
The orchestration stub body opened with a near-verbatim copy of its front
matter description plus a paragraph on why the guide lives in the binary.
Give it the one-line opening every other stub uses and keep its only unique
rule: never substitute a non-Orca subagent tool for Orca orchestration. The
description is unchanged since it drives skill routing.

Regenerated skills/orchestration/SKILL.md, the bundle manifest, bundled
sources, and the released-digest ledger (adds the new stub digest only).

Fixes #37849

Co-authored-by: Michael <mhoeykens@wattvibe.eu>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-11-05 17:20:22 -08:00