Commit Graph
14302 Commits
Author SHA1 Message Date
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 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
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
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 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
Brennan Benson d2d61ba0c0 Center plain Project table cells and label the linked PR overflow (#34532)
* fix(github-project): make linked PR numbers clickable

* fix: open linked pull requests at their exact URLs

* test: assert complete project relation cell text

* fix: clarify linked pull request controls and overflow

* Fix linked pull request focus clipping and overflow label

* Keep linked pull request overflow outside clipped values

* fix(github-project): center plain project cells and say what +N means

Drop the clickable linked PR numbers: the numbers stay plain text as
before. Plain text cells (repository, parent issue, linked pull requests,
sub-issue progress) now center vertically like the other cells, and the
linked PR overflow reads "+N more" instead of a bare "+N".

* fix(github-project): keep the linked PR "+N more" visible when numbers truncate
2026-10-29 15:04:43 -07:00
Neil 6be115a064 refactor(jira): group status and quick-filter owners (#36082) 2026-10-29 15:04:11 -07:00
OrcaWinandOrcaWin c5d74cec5f fix(browser): close client-hosted Find on full navigation (#35692)
* fix(browser): close client-hosted Find on full navigation

* test(browser): trim client-hosted Find navigation coverage

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:57 -07:00
OrcaWinandOrcaWin f6d4381a79 fix(emulator): reject reported Android activity launch failures (#35623)
* fix(emulator): reject zero-exit uiautomator dump failures

* fix(emulator): reject reported Android activity launch failures

* test(emulator): trim Android launch and uiautomator dump failure cases

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:53 -07:00
OrcaWinandOrcaWin 2d6ee2ab9b fix(emulator): run Android commands through the process host (#35599)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:48 -07:00
OrcaWinandOrcaWin b0e2bf6f81 fix(emulator): wait for the requested AVD during Android boot (#35536)
* fix(emulator): match the requested AVD while waiting for boot

* test(emulator): trim AVD boot identity test to the regression case

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:43 -07:00
OrcaWinandOrcaWin 71918d4a78 fix(emulator): launch scrcpy through the background process wrapper (#35566)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:37 -07:00
OrcaWinandOrcaWin 895fd4324a fix(emulator): publish scrcpy JAR only after download completes (#35503)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:30 -07:00
OrcaWinandOrcaWin 6c8baa3fc2 fix(emulator): quote Android text for the device shell (#35561)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:25 -07:00
OrcaWinandOrcaWin a4447426a3 perf(emulator): reuse registered device backend routing (#35616)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:20 -07:00
OrcaWinandOrcaWin 7ad81415e7 fix(emulator): reset partial JPEG state when reconnecting (#35593)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:15 -07:00
OrcaWinandOrcaWin 59be15b7ef fix(persistence): reject non-file recovery artifacts before publication (#35059)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:10 -07:00
OrcaWinandOrcaWin 35124e4252 fix(agent-awake): release macOS sleep assertions when Orca exits (#35649)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:05 -07:00
OrcaWinandOrcaWin c2cc986a8d fix(diagnostics): handle late request errors until socket close (#35496)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 15:00:00 -07:00
Neil a4c0b16eeb fix(wsl): read a distro's automount root once per start, the default /mnt/ too (#36097)
A successful read of the default /mnt/ root stored nothing, so every confirmed running-distro
probe (e.g. the 2 s WSL transcript observer) launched another wsl.exe guest read per distro.
Any successful read is now remembered until the distro stops; a failed read still retries, and a
stop during a read leaves the restart to read again.
2026-10-29 14:59:32 -07:00