* fix(computer): report a locked screen instead of missing Accessibility
Behind the lock screen (display sleep, screen saver or a manual lock) macOS reports Accessibility as untrusted. Orca read that as a missing permission, and its recovery hint led agents to open System Settings. Check the session lock first and return screen_locked; permission setup refuses while locked.
* fix(computer): recheck the lock under the provider lock and at setup launch
* fix(computer): read the lock fresh for setup and keep locked status reads out of the cache
* refactor(computer): drop the extra lock read at setup; the status and setup helper already check it
* feat: run setup and archive hooks for group folder workspaces
* fix: align group workspace owners and create result consumers
* chore: carry terminal extraction allowances through validation
* fix: remove extracted terminal import cycle and refresh deletion fixtures
* fix: show group setup settings in project navigation
* Run Archive scripts before removing group folder workspaces
* Tighten workspace record read allowance after removal extraction
* Correct Archive waiver regression expectation
* Complete Archive hook settings test fixture
* Refresh group hook Settings when runtime contact returns
* Cover group hook support across replacement pairings
* Skip completed Codex launch preparation when inputs match
* Stop validation work once preparation cannot be reused
* Combine file observation imports for code quality checks
* Use annotations for preparation test controls
* Read preparation snapshots asynchronously and refresh context after waits
* Reuse Codex configuration preparation at the actual launch boundary
* perf(cli): use packaged Node for ordinary Mac commands
* test(cli): couple Mac shim fixture to packaged helper layout
* fix(cli): narrow optional native process replacement API
* test(cli): isolate native replacement API across test platforms
* test(cli): allow spying on the isolated replacement API
* test(cli): use NodeNext-compatible dynamic import specifiers
* Keep desktop lifecycle commands on the direct Electron route
* fix(macos): FDA toast copy claims only observed file prompts, not agent interruptions
* fix(macos): keep FDA toast actions inline on roomy cards and ring the dismiss link on focus
* fix(native-chat): offer Submit on the last question step after skipping
The last step's footer label came from the current question only, so a
skipped last question showed an outlined Skip even when earlier answers
would be submitted. Label the last step Submit whenever any question is
answered; an all-skipped prompt keeps Skip, which still dismisses.
* test(native-chat): add skipped-last-step question card fixture
agent-browser's `cookies clear` ignores --name/--domain and wipes the
whole profile cookie jar, so `orca cookie delete` signed users out of
every site. Delete through the guest debugger instead: list cookies with
Network.getAllCookies, match by name and host (host-only, dot-prefixed,
and parent-domain cookies for --url / tab URL), and call
Network.deleteCookies per match, passing CHIPS partition keys back.
Report deleted:false when nothing matched, and reject tab URLs without a
cookie host (about:, file:, data:) asking for --domain or --url. The
external Chromium provider no longer maps cookie delete to the
jar-wiping agent-browser command.
Fixes#42229
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* Fix worktree deletion on server hosts
* Finish workspace removal cancellation and final saves
* Wait for WSL workspace deletion to finish
* Capture CLI deletion errors in the server integration test
* test: canonicalize removal fixture and expose serve stop phases
* test: align serve fixture versions and report workspace paths
* test: isolate removal lifetimes and resolve native fixture paths
* Type-check cancellation assertions on the shared removal mock
Pi's launch catalog now opts into launch-time model/effort preferences, so
`orca agent launch --agent pi` and `orca orchestration worker-start --agent pi`
accept `--model <provider/id>` and `--effort <level>` instead of refusing.
Pi models without a provider/id shape are refused up front, before a
worktree or worker is created. A new host capability,
`agent.launch.pi-model.v1`, lets the CLI refuse a Pi model/effort on older
execution hosts that would otherwise start Pi on its default model.
Co-authored-by: Neil <neil@stably.ai>
On macOS and Linux a backslash is an ordinary filename character, but
absolutePathToFileUrl converted every backslash into a path separator, so
typing /tmp/site\draft.html opened /tmp/site/draft.html instead.
Keep backslashes (encoded as %5C) for rooted paths when the local host is not
Windows. On Windows every path still has backslashes normalized to slashes,
so drive, UNC and rooted /foo\bar inputs behave as before.
Fixes#42256
Co-authored-by: Neil <neil@stably.ai>
* chore(test): load Vitest config as native ESM to drop configLoader warning
* chore(test): use rewriteRelativeImportExtensions so type-aware lint accepts .ts imports
macOS Local Network caches one executable UUID per bundle id, and the terminal host shares the app's bundle id. With a UUID of its own the cache flips between the two, which blocked some connections and prompted again after an update. Give the host exactly the main executable's UUID per CPU type, and check that in packaging and after notarization.
The markdown grammar's frontMatter rule embeds source.yaml at the start
of the document, but Orca loaded YAML only when a ```yaml fence label
was seen, so frontmatter stayed plain text. Load the YAML grammar
together with markdown.
Fixes#41658
Co-authored-by: Garrett Peppers <garrett@pepperstech.net>
* fix(native-chat): say /fork is refused while the agent replies, and to run it again
The old notice read as a promise to fork later. Like the common pattern, a running turn is not forkable and nothing is deferred, so the copy now names the agent and tells the user to run /fork again.
* chore(fixtures): show the /fork refusal notice at a narrow composer width
* Revert "chore(fixtures): show the /fork refusal notice at a narrow composer width"
This reverts commit 4ae7756dfd.
* fix(native-chat): /fork during a reply forks through the newest finished response
Like /btw and the common pattern for a fork that names no response, a running reply no longer refuses /fork when a finished response exists; only a first reply or an agent that forks only its latest turn still refuses, with the retry wording.
* perf(dashboard): window agent board lanes instead of mounting every card
Each dashboard lane now renders its cards through a measured per-lane
virtualizer in the existing scroller, so opening a board with thousands of
cards mounts only the viewport, overscan and a constant set of pinned cards
(lane first/last, last focused, dialog opener, pending Tab target).
Search, filters, grouping, counts, dialog routing and acknowledgments still
run on the full card arrays. Subagent disclosure moves to lane-owned state so
it survives scrolling away and resets when the card leaves the lane, as the
old unmount did. Tab and Shift+Tab bridge to the logical neighbour card when
native order would skip to a distant pinned card.
The workspace board's single-index range extractor is generalized into a
shared pinned-index extractor with the same behavior for its caller.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* perf(dashboard): keep the lane card list compiler-compatible
Move the lane virtualizer into its own hook so the card list compiles, and
prune lane disclosure/focus keys during render instead of in an effect.
Give the dashboard destination integration test a lane viewport, since
cards now mount only inside the measured window.
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
* chore(dashboard): record isolated virtualizer compiler diagnostic
* perf(dashboard): preserve layout identity and retire departed measurements
* fix(dashboard): reveal the focused edge of tall cards
---------
Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The pane-to-subagent map only dropped an entry on going back to the main
agent, so a tab closed with a subagent open kept its entry for the
renderer's life. The removed-chat-tab seam that retires draft positions
now retires those entries too.
Orca terminals run under the signed helper, whose executable was stock Node,
sharing its LC_UUID with every install of that Node build. macOS Local Network
privacy maps a responsible process to an app by that UUID, so terminals could be
attributed to another program and blocked from the LAN while Orca showed allowed.
Rewrite the helper executable's UUID during assembly (same scheme as #41676),
and fail packaging and the release check if it drifts.
Fixes#21988
The per-removal safety re-check listed and projected every workspace on the
host before filtering to one id, so M removals rebuilt the listing M times.
getWorktreePs now takes an optional id and projects only that workspace's
rows; PTY liveness still refreshes against every worktree.
Refs STA-15293