Commit Graph
17961 Commits
Author SHA1 Message Date
Neil 0426223be5 feat(telemetry): count plugin installs from Orca's public catalogs (#36132)
* feat(telemetry): report plugin installs and removals from Orca's public catalogs

* refactor(plugins): move marketplace install origin out of the installer
2026-10-29 16:32:49 -07:00
Neil d063703de2 fix(wsl): main's background start preps its host env without waking the distro, on both providers (E9) (#36149)
* fix(wsl): main's background start preps its host env without waking the distro (E9)

* fix(wsl): daemon-off background starts prep their env without waking the distro (E9)
2026-10-29 16:29:48 -07:00
Jinwoo Hong 17a681b8f8 Suppress agent CLI updates for unattended automation launches (#36133)
* fix: suppress CLI updates for unattended automation launches

* fix: preserve updater suppression precedence and host launch expectations
2026-10-29 19:29:21 -04:00
Brennan BensonandVyacheslav Scherbinin 00de405c5c fix: group Antigravity models and refresh effort choices (#34518)
* fix(acp): update Antigravity model and effort metadata

* fix: confirm ACP model families and idle option metadata

* Preserve provider-owned model and effort selection

* test: repair model option host and consumer fixtures

* Use the provider child type for optional delivery ownership

* test: match model option fixtures to their protocol contracts

* fix: isolate resting options from adapter type dependencies

* Preserve Antigravity option fixture types

* Match option fixture control response contract

---------

Co-authored-by: Vyacheslav Scherbinin <gentslava@mail.ru>
2026-10-29 16:21:22 -07:00
OrcaWinandOrcaWin 24ebed2366 fix(editor): preserve literal text in citation paste fallback (#34827)
* fix(editor): preserve literal text in citation paste fallback

* test(editor): drop paste-meta implementation assertion from fallback test

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:18:03 -07:00
OrcaWinandOrcaWin 17e5d72a35 fix(editor): keep slash and document triggers literal inside code (#34971)
* fix(editor): keep slash and document triggers literal inside code

* fix(editor): import rich extensions in code-trigger tests and fold slash guards

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:17:46 -07:00
OrcaWinandOrcaWin bb2980c290 Preserve modified Enter line breaks in Markdown tables (#35224)
* Preserve modified Enter line breaks in Markdown tables

* fix(editor): limit table hard-break bypass to Tiptap's exact shortcuts

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:17:26 -07:00
OrcaWinandOrcaWin fe4ceec83f fix(editor): synchronize rendered image metadata (#35028)
* fix(editor): synchronize rendered image metadata

* fix(editor): resolve image attribute definitions once and trim metadata test

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:16:43 -07:00
OrcaWinandOrcaWin 85522e89b8 test: remove low-value theme and copy suites (#36140)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:13:19 -07:00
Jinwoo Hong e960b3091a fix(editor): keep useRichMarkdownSearch.ts within the 300-line cap (#36147)
#34969 added an import that put the file one line over the lint cap on main. The Find and Replace shortcut branches now share one open-and-stop path.
2026-10-29 19:13:04 -04:00
OrcaWinandOrcaWin a986c8251e perf(editor): discard stale code spans before mapping replacements (#35116)
Find stale lowlight decorations of touched code blocks in the old DecorationSet, remove them, then map only the survivors instead of mapping every span and searching by mapped bounds.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:09:23 -07:00
Brennan Benson 3699db8b64 fix(claude): ignore a launcher's own version when choosing hook events (#36119)
* fix(claude): ignore a launcher's own version when choosing hook events

* Bind Claude capability versions to identified output

* Complete Claude version probe test process results
2026-10-29 16:08:53 -07:00
Kelvin Amoaba a874ff9d76 fix(relay): diagnose desktop clock drift (#36139) 2026-10-29 23:08:23 +00:00
OrcaWinandOrcaWin a0b8181bf3 fix(editor): preserve table widths when inserting beside selected cells (#35162)
* fix(editor): preserve table widths when inserting beside selected cells

* test(editor): fold selected-rectangle width regressions into table actions tests

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:08:08 -07:00
OrcaWinandOrcaWin adb3da0a3b fix(editor): preserve small images beyond the reusable cache target (#34998)
* fix(editor): preserve small images beyond the reusable cache target

* docs(editor): clarify retained image payload accounting

* test(editor): cover integrated tooltip and image contracts

* test(editor): trim pinned image capacity coverage to one regression case

* test(native-chat): keep byte-budget retry fixture within the file length limit

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:07:15 -07:00
OrcaWinandOrcaWin 06c86c4828 fix(editor): cancel superseded review-note position frames (#35261)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:06:54 -07:00
OrcaWinandOrcaWin 84b673b87b perf(editor): collect review note elements once per geometry pass (#34986)
* perf(editor): collect review note elements once per geometry pass

* test(editor): drop selector call-count tests for review note heights

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:06:50 -07:00
OrcaWinandOrcaWin 8344ff268c fix(editor): scope delayed review saves to the current draft owner (#34964)
* fix(editor): scope delayed review saves to the current draft owner

* fix(editor): drop unreachable root/editor-swap checks from review submit guard

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:06:44 -07:00
OrcaWinandOrcaWin 47e23a4646 fix(editor): keep retained review highlight ranges mapped after edits (#34963)
* fix(editor): keep retained review highlight ranges mapped after edits

* test(editor): assert rendered review highlights instead of plugin state

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 16:06:37 -07:00
Kelvin Amoaba 030c88deec feat(computer): return tree diffs after actions and add get-app-state --query (#36023)
* feat(computer): send tree diffs after actions and add get-app-state --query

Action results now carry only the accessibility-tree lines that changed since
the caller's last view of the same window (~ changed, + added, - removed as
index ranges, or an explicit no-change line), plus the focused element. The
runtime sidecar keeps the last tree per session/worktree and app, so all three
providers get it. The CLI opts in with treeDiff; older runtimes strip the
param and keep returning the full tree, and --full-tree opts out.

The macOS helper now keeps an element's index across snapshots of a window:
AX identity first, then the next unclaimed index with the same signature for
views that rebuild their AX objects, and never reuses a removed index.

get-app-state --query prints matching elements with their ancestors and
--max-elements caps the output, both in the CLI over the rendered tree.

Custom action names with raw newlines no longer split an element over lines.

* fix(computer): preserve parent changes in snapshot diffs

* fix(computer): refuse stale index reuse for lookalike controls

* fix(computer): print full trees in action replies

* fix(computer): keep controls located in snapshot replies
2026-10-29 23:05:41 +00:00
Neil d61f8ba92f refactor(jira): group status metadata owners (#36138) 2026-10-29 16:01:38 -07:00
Kelvin Amoaba 12f9f8175c fix(mobile): hide handles for unavailable terminals (#36135) 2026-10-29 22:59:18 +00:00
OrcaWinandOrcaWin 24e7643517 perf(editor): install one code highlighting plugin per editor (#35112)
* perf(editor): install one code highlighting plugin per editor

* perf(editor): merge tiptap import, explain base plugin lookup, trim tests

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:59:04 -07:00
OrcaWinandOrcaWin 9edd4b01f9 perf(editor): reuse unchanged review block line counts (#34934)
* perf(editor): reuse unchanged review block line counts

* test(editor): drop serializer call-count assertions for review block reuse

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:58:00 -07:00
OrcaWinandOrcaWin 896fc04f38 fix(editor): preserve combining marks in whole-word replacement (#34957)
* fix(editor): preserve combining marks in whole-word replacement

* fix(editor): keep whole-word boundaries after emoji presentation sequences

Resolve a leading combining mark to its base character so VS16 after an
emoji does not count as a word character, treat enclosing marks (keycaps)
as symbols, and drop the redundant hook-level undo/redo test.

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:57:03 -07:00
OrcaWinandOrcaWin e7e3e568e7 fix(editor): keep composition-owned Escape inside Find (#34969)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:56:33 -07:00
Kelvin Amoaba 2e5711fcaa fix(mobile): use paired ports in firewall help (#36130)
* fix(mobile): use paired ports in firewall help

* fix(mobile): use a namespace type in diagnostics test
2026-10-29 22:55:38 +00:00
Kelvin Amoaba c97e6f16bc fix(computer): report macOS actions that changed nothing, read back wrong or hung (#36020)
* fix(computer): fail set-value when its read-back shows a different value

A value_mismatch came back as ok with exit 0, so callers that check only
the exit status took an ignored or misplaced write as success. The runtime
now turns it into a verification_failed error at the sidecar boundary,
which covers every provider and every caller of the RPC.

Part of #33511

* fix(computer): pair macOS AX windows with their CGWindowID

AppKit and WebKit windows don't answer AXWindowNumber, so matching a
capture to its accessibility window fell back to frames. Two windows with
the same frame then paired the screenshot of one with the tree and title
of whichever AX listed first, under the first one's id. Read the id with
_AXUIElementGetWindow, as yabai and Hammerspoon do, and keep AXWindowNumber
as the fallback.

Fixes #27252

* fix(computer): fail fast when a macOS app stops answering accessibility

Every request runs behind one helper lock, and a hung app cost a timeout
per AX read, so one get-app-state on it held every agent for up to the 60 s
RPC timeout. Pin the AX messaging timeout at 1.5 s, refuse an app that
doesn't answer a root probe, and stop a tree walk at the first read that
waits out the timeout, each with an action_timeout error.

A press or write that the app received but didn't answer now fails the
same way, saying it may have taken effect. Before, the click fell through
to AXConfirm and then a synthetic click, so a button whose handler blocked
ran twice, and type-text typed the text again as keys.

* fix(computer): report macOS accessibility actions that changed nothing

AXPress and other accessibility actions came back as plain unasserted
success even when the app ignored them, as Chromium does for a role=button
whose handler sits on a child. After such an action the helper now compares
the target's tree, frame and on-screen windows with the snapshot it took
just before. If they still match after re-reading for about a second, the
result says unverified/suspected_noop; if they change late, the result
carries the settled state instead.

The new reason is additive; older CLIs print it like any other reason.

Refs #31758

* fix(computer): propagate late macOS observation failures

* fix(computer): select existing text before replacement

* fix(computer): share native macOS window identity
2026-10-29 22:55:16 +00:00
OrcaWinandOrcaWin a83cb6ee33 Reuse Markdown tokenizer and details start searches across paragraph suffixes (#35374)
* Reuse Markdown tokenizer start searches across paragraph suffixes

* Reuse details start searches across Markdown paragraph suffixes

* test(editor): drop prototype spy-count tokenizer cursor tests

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:50:57 -07:00
OrcaWinandOrcaWin 5535d5e372 test: remove low-value inventories and wording suites (#36129)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:48:15 -07:00
OrcaWinandOrcaWin 95f45db57c fix(editor): honor Plain text code block highlighting (#35111)
* fix(editor): honor Plain text code block highlighting

* fix(editor): trim Plain text highlighting tests and drop redundant guard

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:48:09 -07:00
OrcaWinandOrcaWin 35c779ea36 perf(editor): honor the Find query debounce (#34829)
* perf(editor): honor the Find query debounce

* test(editor): drop redundant Find debounce walk-count test

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:47:13 -07:00
OrcaWinandOrcaWin 85ddd7aa30 test(native-chat): drop flaky at-rest admission bounds test (#36134)
The N/10N case asserted exact start/peak/permit counts across concurrent work under fake timers and failed intermittently on CI (expected 3 to be 4). The phone dispatch/retirement and shared-context tests in the same file still cover the user-facing behavior.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:46:48 -07:00
Kelvin Amoaba 7a805621b2 fix(mobile): forward iOS keys and Shift+Enter (#36120)
* fix(mobile): forward iOS keys and Shift+Enter

* fix(mobile): preserve Option text and newline mirrors
2026-10-29 22:46:04 +00:00
Kelvin Amoaba 41cd866fb1 fix(mobile): recover from native screen render errors (#36121)
* fix(mobile): recover from native screen render errors

* fix(mobile): avoid replaying launch links after recovery

* fix(mobile): discard launch intent before recovery Home

* test(mobile): correct recovery fixture types
2026-10-29 22:44:22 +00:00
Kelvin Amoaba a7c63de35e fix(mobile): return typed terminal input to the prompt (#36122)
* fix(mobile): return typed terminal input to the prompt

Phone input travels over RPC and bypasses xterm's user-input event.

Fixes #36092

* test(mobile): cover pointer queue failure retirement

* fix(mobile): preserve refused-send mutation anchor
2026-10-29 22:38:18 +00:00
Brennan Benson 019318b8df fix(settings): permission menus match the chat permission picker (#36104)
* fix(settings): permission menus match the chat permission picker

The per-agent permission menu (Settings > Agents and Source Control actions)
and the 'Agents without Approve for me' toggle rendered their own plain-text
items. They now reuse the chat picker's items: the same icons, Full access
warning colour, per-agent descriptions and width, with the agent's own
settings after a separator.

* Unify legacy permission menus and verify selection behavior

* Fix permission selection test typing and remove obsolete locale keys
2026-10-29 15:37:16 -07:00
Kelvin Amoaba a51164379e fix(mobile): explain scanned download QR codes (#36128) 2026-10-29 22:36:27 +00:00
Neil 6c6e6294c7 fix(sidebar): draw a cross-host project's header in each host section (#36012)
A project checked out on two hosts kept one header, placed in the host
section of its anchor repo, so the other host's rows sat under the
previous project. Project headers now carry, for each host that owns one
of their rows, that project's own registration on that host and its
counts, and host sectioning gives every such host its own copy, the way
Pinned and status lanes already split. A header never borrows another
host's or another project's registration, a hidden host that only
anchors the header no longer gets a section, and a view that ends up
showing one host still names that host's registration.

Every header inside a host section now names that section's host, and a
copy an earlier section already drew is marked repeated. When a repo id
is registered on several hosts, a copy's create button opens the
composer on its own host; header drag keys on the project's anchor and
skips repeated copies, so reordering still moves the project once; the
phone keys each copy per section while collapsing it as one. The desktop
list also resolves each row's repo by host, as the feed already does, so
same-id registrations on two hosts keep their own.

Host sectioning also stops carrying an ended project group into the next
ungrouped project, and host badge counts no longer add a project group's
project count when the group is expanded.

Fixes #35741
2026-10-29 15:32:59 -07:00
NeilandClaude 09f58f120b perf: fix six scan findings (STA-12863, 12852, 12864, 12865, 12867, 12871) (#36103)
* perf: gate store sweeps, dedupe plugin/catalog reads, index WSL git owners; convert nested WSL projects together

- STA-12863: skip binary draft cleanup on store writes that leave tabs, buffer index and boxes untouched
- STA-12852: native chat repo lookup re-resolves only when its file-link inputs change
- STA-12864: auto-update reads the install lockfile once per pass instead of once per plugin
- STA-12865: monorepo image fill runs per entry inside extraction and hands over bytes it already read
- STA-12867: Windows/WSL git router builds a repo->project owner map once per rebuild
- STA-12871: converting a project also converts nested projects so their saved-session identities move with them

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(plugins): retry the lockfile read after a failed auto-update read

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(wsl): expand nested conversion by the rewrite's own roots and drive roots; skip auto-update on a catalog switch

Addresses review on #36103: nested projects inside a saved worktree or under a drive root
were missed, and a source switch mid-pass could install from the old catalog.

Co-Authored-By: Claude <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-29 15:31:47 -07:00
Neil 82108b0da3 fix(wsl): uninstall ends a recorded holder its command line proves, even without a start time (#36126) 2026-10-29 15:27:09 -07:00
Jinwoo Hong a3ddc75414 perf(jira): resolve the project-sort collator once per sort (STA-12861) (#36107)
Resolve the UI-language collator once per Jira project sort instead of re-resolving locale support on every comparison.
2026-10-29 18:17:45 -04:00
OrcaWinandOrcaWin fee06ab9c3 test: remove low-value test inventories and wording fences (#36114)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:17:40 -07:00
Kelvin Amoaba 3b83d3d260 fix(computer): skip activation for accessibility clicks (#36006)
* fix(computer): leave Linux and Windows windows in the background for accessibility actions

Element clicks no longer restore and activate the target window when an
AT-SPI action or UIA Invoke/SelectionItem/Toggle pattern handles them; only
the pointer fallback activates. On Linux, type-text and paste-text insert
into the focused editable field through AT-SPI EditableText without needing
window focus, and fall back to key synthesis or the clipboard otherwise.

Refs #12412

* fix(computer): refuse pointer input after failed activation

* fix(computer): stop after unconfirmed text writes

* fix(computer): insert the full UTF-8 text on Linux

* test(computer): focus each Linux text-entry trial

* fix(computer): verify Linux text mutations before deletion

AT-SPI can acknowledge writes without changing text. Read back
mutation counts and caret state before reporting success.

* fix(computer): verify complete Linux text replacements

* fix(computer): decline unreadable Linux text selections
2026-10-29 22:17:13 +00:00
Neil c74168516b fix(mobile): update URI decoder for denial-of-service advisory (#36124) 2026-10-29 15:15:41 -07:00
OrcaWinandOrcaWin 9dfb110420 fix(emulator): follow decoded Android video dimensions (#35635)
* fix(emulator): follow decoded Android video dimensions

* test(emulator): trim decoded video size test to the rotation case

* chore(emulator): note video stream effect's timer cleanup for react-doctor

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:13:43 -07:00
Kelvin Amoaba c31fdaa6a5 feat(computer): drive macOS apps in the background by default (#36005)
* feat(computer): drive macOS apps in the background by default

Clicks no longer activate and raise the target first. Pointer and key
input go to the target window's pid through a new BackgroundInputTransport:
mouse and scroll events carry the window id in field 51 and a window-local
location, keys run inside a focus-without-raise key-window scope, and
chords carry no Unicode string so menu key equivalents fire. Scroll and
drag now land (#27306); typed text no longer doubles in Electron (#17942).

The HID tap and focus fence stay for --restore-window only. Results
report action.delivery, the handshake reports supports.input.background,
and a missing private symbol or a popup click fails with
background_unavailable instead of falling back to the foreground.

* test(computer): read typed key strings back instead of diffing live-state events

* fix(computer): keep Unicode characters in one key event

* fix(computer): preserve active macOS key windows

Refuse key-window changes in the active app and surface failed
focus records, including cleanup after partially delivered input.

* fix(computer): guard macOS click routes before delivery

* fix(computer): let paste events read the clipboard

* fix(computer): classify clicks in the requested macOS window

* fix(computer): fence macOS scroll and drag recipients
2026-10-29 22:13:19 +00:00
Kelvin Amoaba 960332fc72 fix(mobile): keep shortcut swipes from sending keys (#36116)
* fix(mobile): keep shortcut swipes from sending keys

* test(mobile): follow array type style in shortcut tests
2026-10-29 22:12:43 +00:00
Kelvin Amoaba d5611cf274 fix(mobile): report task pages and review state accurately (#36115)
* fix(mobile): report task pages and review state accurately

* test(mobile): record task page error provenance

* test(mobile): record task page errors in reply matrices
2026-10-29 22:09:45 +00:00
Kelvin Amoaba 0a75796a03 fix(mobile): detect dead direct links in seconds (#36112)
Fixes #36093
2026-10-29 22:07:47 +00:00