Commit Graph
2022 Commits
Author SHA1 Message Date
OrcaWinandOrcaWin aa736b6650 test: remove narrow mobile and settings navigation samples (#41818)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:49:14 -08:00
Neil 2050d9fbc6 refactor: group source-control modules by operation ownership (#41812) 2026-11-12 20:41:35 -08:00
Neil cc29ae4820 refactor: organize provider modules by defining owner (#41772)
* refactor: organize provider modules by defining owner

* refactor: bind cleanup runner to provider owners
2026-11-12 20:04:13 -08:00
Brennan Benson a37ff2fa62 Show matching settings as a results list in Settings search (#40852)
* Show matching settings as a results list in the Settings sidebar

Typing in the Settings search now replaces the nav with a ranked list of
individual settings (pane title on the second line, matched text marked).
The first result is selected and previewed: its pane opens unfiltered,
scrolled to the setting with the target highlight. Arrow keys move and
preview, Enter or a click picks and keeps the query, Esc or the clear
button returns to the nav while leaving the shown pane open.

The sidebar query no longer filters page content. The Back to app row is
now 48px so its border lines up with the Settings header.

* Highlight settings search targets with a full-bleed bar and find unanchored rows

Matches in the results list are marked with semibold text (the jump palette's
HighlightedText) instead of a grey box. The landed-on row gets a tint from card
edge to card edge with a left bar that fades after ~3s, replacing the inset
grey block that sat off-center in the card padding. Integration provider rows
get anchors, and rows not wrapped in SearchableSetting are found by their
visible label.

* Fit the search highlight to each row's enclosing card

Settings cards pad differently (groups, plain sections, shadcn cards, the
Appearance accordion), so the highlight now measures the gap from the row to
its nearest card's inner edges instead of assuming one gutter. A group title
match highlights that group's card rather than the heading text.

* Give the settings target highlight a single owner

Components applied the highlight through SettingsTargetHighlightContext while the
page effect applied it to whatever element the jump scrolled to; when those
differed (Jira's provider row vs. its card shell) two highlights showed. The
effect now owns it alone, and the context, its provider and the macOS
Permissions prop are removed. Jira and Linear reuse their existing anchor ids.

* Use a plain fading tint for the settings target highlight

Drops the left bar; the tint still spans the enclosing card and fades after ~3s.

* Mark settings result titles with the ranking fold

The title highlight lowercased by hand and skipped titles whose length changed,
so İstanbul matching "stan" (or a query of İ) ranked but was never marked. Fold
per code point with the ranking's own fold and map offsets back to the title.

* Make settings search list-only until a pick and reveal collapsed targets

Typing now only changes the result rows: nothing is selected and the page does
not move until Enter or a click (arrows move the selection only). This removes
previews that discarded the Open in draft, re-ran repo hook checks, mounted a
pane per keystroke and drifted after deep links.

- Rank once on a deferred query, cap the list at 50 with a 'keep typing' hint,
  and skip rendering the normal nav while searching.
- A settings jump dispatches a reveal event from its target; Appearance sections,
  Advanced disclosures and the network/mobile collapsibles (now kept mounted)
  open themselves instead of reading the search query.
- Nested scrollers (Shortcuts) scroll the target into view; General sub-page
  results open their page; mirror recovery deep-links to the mirror field; a
  target that never mounts drops its pending jump; group-title matches use
  data-settings-group.

* Fix follow-ups from the settings search repair review

- Two more e2e specs pick a result with ArrowDown + Enter instead of relying on
  typing to navigate.
- After a jump reveals a growing section, re-scroll once if the row is still cut off.
- Hide 'No settings match' while the deferred ranking catches up.
- The reveal hook is a ref callback so disclosures that mount later still open.
- The Advanced disclosure fixture shows the real forced-open case (unsaved edits).

* Give every settings search result a reachable row

* Type the General sub-page anchors as a list instead of casting map entries

* Keep the reveal callback ref out of render

* Match the e2e shortcut labels to main's sentence-case names

* Highlight the result's card, not its section title or a bare label
2026-11-12 19:39:39 -08:00
Neil 69dc20ed33 refactor(automations): group run lifecycle modules by ownership (#41737) 2026-11-12 17:44:20 -08:00
Kelvin Amoaba c5657bd5a7 feat(computer): type into a named text field without focusing it on Linux and macOS (#41421)
* feat(computer): type into a named text field without focusing it on Linux and macOS

* fix(computer): report unconfirmed Linux text readback and cover element typing

* test(computer): send an element with benchmark text only for targeted typing

* test(computer): pick gedit's editor, not its hidden overview map, in Linux e2e

* docs(computer): confirm focus before the unindexed type-text fallback

* fix(computer): report unreadable element text readback as readback_unsupported
2026-11-13 00:28:06 +00:00
Neil f9c7d17f9d refactor: organize sidebar inputs by concrete owners (#41698) 2026-11-12 16:24:24 -08:00
Jinjingandalpenshtokk 7fa2c6e075 fix(tab-group): keep split dividers draggable beside a browser group (#41335)
* fix(tab-group): track divider drags by pointer and keep guests click-through

When a divider drag's first move lands on a browser page, the guest's
process takes that event and every later one, so pointer capture never
activates and the divider stays stuck in is-dragging. Hold webview drag
passthrough for the whole gesture, as the pane-divider, tab and DevTools
dock drags already do.

Linux Chromium can report hasPointerCapture() false while moves still
arrive (#34287), so own the gesture by pointerId with window-level
listeners, and end it on a buttonless move when the release was missed.

Drawn from #35919 by alpenshtokk.

Co-authored-by: alpenshtokk <wawesandways@gmail.com>

* fix(tab-group): keep split dividers grabbable beside a narrow browser group

A squeezed browser toolbar overflowed its overlay slot and sat on top of the
divider to its right, so presses in the toolbar row never reached the handle.
Clip the overlay slot to its group like other retained pane hosts.

Adds a real-mouse e2e for a narrow terminal | browser | terminal row: the
divider must be uncovered along its whole height, follow a drag whose first
move lands on the page, and accept the next drag afterwards.

* fix(tab-group): end a lost divider drag on blur, hide or re-press

A release outside the window could be missed with no buttonless move to end
the gesture, leaving guest passthrough held and letting a later pressed move
resume the old drag. End the gesture when the window blurs or is hidden, and
let a new press of the same pointer replace a gesture whose release was missed.

Covers release outside the window, Linux false capture, multiple guest
surfaces and unmount mid-drag.

Co-authored-by: alpenshtokk <wawesandways@gmail.com>

* fix(tab-group): end a lost divider drag on the next press anywhere

Divider moves are tracked on window, but the same-pointer recovery only ran
when the next press landed on the stale handle itself. A press on another
divider or on pane content let later pressed moves resume the old drag, and
with two dividers both followed the new gesture. Listen for the active
pointer's next pointerdown on window in the capture phase and end the stale
gesture before anything handles the press.

* fix(browser): clip the narrow browser toolbar without making it scrollable

overflow-hidden still made the browser overlay slot a scroll container, so
tabbing to a toolbar control clipped in a narrow group scrolled the toolbar
and page sideways with no way back. overflow-clip clips the same way without
a scroll position.

---------

Co-authored-by: alpenshtokk <wawesandways@gmail.com>
2026-11-12 16:17:56 -08:00
Kelvin Amoaba c794f75e4e fix(computer-use): use UI Automation for Windows scroll, expand and slider actions (#41429)
* fix(computer-use): scroll, expand and set sliders on Windows without raising the window

* fix(computer-use): wait for Windows scroll and slider writes to settle before verifying

* fix(computer-use): reject NaN for Windows slider set-value

* test(computer-use): wait on the Windows fixture state with vi.waitFor and a schema

* test(computer-use): check activation per action against a holder window in the Windows fixture

* test(computer-use): log fixture window events for activation failures

* fix(computer-use): report foreground when a Windows app raises itself for a UI Automation action

WPF activates its own window for Scroll, ExpandCollapse, RangeValue and SelectionItem calls from any UIA client, so the runtime now compares the foreground window before and after a pattern action instead of assuming background. The Windows e2e checks delivery against the fixture's own activation count, with a holder window in another process.

* test(computer-use): skip an unstarted holder when closing the Windows fixture

* fix(computer-use): bound Windows pattern scroll paging and tighten slider read-back

* fix(computer-use): cap Windows slider read-back tolerance and run the UIA e2e only on CI
2026-11-12 23:17:10 +00:00
Jinjing 51fffa8753 fix(browser): bind guest text input to its webContents (#40931)
* fix(browser): keep guest input bound to its webContents

* test(browser): reject unresolved guest input routes

* test(browser): keep text on the guest when the root frame probe fails

* fix(browser): insert guest text only into a confirmed focused frame

Electron's webContents.insertText crashes the guest renderer and never
settles when no local frame holds focus (a fresh tab, or focus in a
cross-site frame after a root probe timeout). Use it only when the focus
probe confirms a focused element or same-site frame, refuse otherwise,
and reject promptly if the renderer dies or stops answering.

* test(browser): explain the busy-page e2e timeout

* fix(browser): expire guest text edits at the renderer mutation boundary

* fix(browser): preserve focused local frame contexts for text edits
2026-11-12 14:48:53 -08:00
Neil d634063ef2 refactor: organize mobile cloud relay by lifecycle owner (#41681) 2026-11-12 14:36:07 -08:00
Neil cab3a67382 refactor(orcad): organize runtime, launch, and host lifecycle owners (#41659) 2026-11-12 13:54:51 -08:00
Jinjing 2434a63be9 fix(tab-group): keep a grabbable tab in narrow tab-group strips (#41249)
* fix(tab-group): keep a grabbable tab in narrow tab-group strips

Tabs were the only shrinkable item in a pane's strip, and the only drag
source, so a narrow pane clipped them to 0px while +, quick commands, the
pane-actions menu and the reserved window-chrome spacers kept their width.
Give the tab area a 40px floor and let the action chrome clip before it.

* test(tab-group): open the right sidebar so the narrow-strip e2e is platform-neutral

* test(tab-group): assert the dragged tab moves between strips in the DOM

* fix(tab-group): hide strip actions whole instead of clipping their focus targets

Narrow strips clipped the new-tab, quick-command and pane-actions buttons
behind the 40px tab floor, so Tab could focus a control that was mostly or
entirely out of view. Measure the room left after the reserved spacers and
drop each control whole, and so out of Tab order, below the width where it
fits: quick commands first, then pane actions, then new tab (groups with a
tab only). Close split pane stays in every tab's context menu.

The e2e now measures only pixels that start a tab drag (not the close
button), drags from that run, and walks the strip with Tab at normal and
narrow widths, asserting every focused control is fully visible.

* fix(tab-group): offer quick commands from pane actions when the strip hides them

When a narrow strip folds the quick-command button away, the pane actions
menu now carries the same Quick Commands submenu the terminal and chat
menus use, so running or adding a command still works from the strip.

The narrow-strip e2e no longer sleeps or casts: it retries the first Tab
until focus lands in the strip, and a new test checks the menu offers quick
commands only when the button is hidden.

* fix(tab-group): drop the window-drag gap before strip controls clip

With the right sidebar closed, the 40px window-drag gap only shrank after
the tab bar hit its floor, so "+" and the actions clipped behind it while
the width rules said they fit. Hide the gap below the width where it and
every control fit, so the existing thresholds hold.

Adds an e2e that sweeps the top-right strip with the right sidebar closed
and asserts no focused strip control is clipped.
2026-11-12 13:41:50 -08:00
Neil c3f8f4100c refactor(native-chat): organize launch, transcript, and conversation owners (#41643) 2026-11-12 12:45:03 -08:00
Kelvin Amoaba 41c8b81372 fix(computer): capture covered Windows windows, refuse elevated targets, time-box hung windows (#41468) 2026-11-12 20:40:24 +00:00
Jinjing 296d703053 Improve browser extensions discovery (#36190) 2026-11-12 12:30:18 -08:00
Jinjing 365515d418 Improve onboarding (#41378) 2026-11-12 12:07:25 -08:00
OrcaWinandOrcaWin 3c46c57682 test: remove low-value launch and contract tests plus unused fixtures (#41636)
* test: remove unused comparator coverage and orphan fixtures

* test: retire redundant CLI agent launch composition suite

* test: remove connector hello limit mirror

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 11:48:47 -08:00
Neil e1d4314a46 refactor(window): organize clipboard, lifecycle, security, and relay owners (#41634)
* refactor(window): group clipboard, lifecycle, security, and relay owners

* refactor(window): keep Electron paste handling with desktop clipboard
2026-11-12 11:47:00 -08:00
Neil 7fea1779d0 refactor(startup): group launch and platform startup owners (#41613)
* refactor(startup): group launch and platform startup owners

* refactor(startup): preserve ACL recovery copy protection
2026-11-12 10:15:54 -08:00
Neil fb8d6f950b refactor(github): organize concrete feature owners (#41601) 2026-11-12 09:17:26 -08:00
OrcaWinandOrcaWin 895cd026c0 test: remove low-value fixture, relay, and recovery cases (#41591)
* test: remove low-value fixture suites and custom scenarios

* test: prune relay and recovery matrices and refresh retained host journey

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 08:32:10 -08:00
Neil 560a22e00f refactor(cli): organize command dispatch and orchestration owners (#41562)
* refactor(cli): organize command dispatch and orchestration owners

* test(orchestration): retire superseded unbound mail refusal case
2026-11-12 08:12:55 -08:00
Neil 382c7cfcb3 refactor(cli): group plugin and skill implementation owners (#41549) 2026-11-12 05:47:35 -08:00
Neil 95a7ce652d refactor(cli): group workspace, terminal, and host owners (#41543) 2026-11-12 05:07:58 -08:00
Neil 3b5a433247 refactor(cli): group command handlers and support by feature owner (#41534) 2026-11-12 04:33:34 -08:00
Neil 9eb2195c64 refactor(ai-vault): group scanner modules by defining owner (#41520)
* refactor(ai-vault): group scanner modules by defining owner

* refactor(ai-vault): consolidate owner imports and isolate path absence

* Preserve mobile CI triggers for extracted absence predicate
2026-11-12 03:44:09 -08:00
OrcaWinandOrcaWin 831f655b1d test: remove low-value smoke and fixture assertions (#41493)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 02:25:47 -08:00
Neil d3b6609ac9 refactor(rpc): group root modules by defining owner (#41475)
* refactor(rpc): group root modules by defining owner

* test(orcad): include JSON CLI failures in launcher diagnostics
2026-11-12 02:18:19 -08:00
Kelvin Amoaba fa47b1a434 fix(computer): stop action results repeating the value or text an agent wrote (#41479)
* fix(computer): stop echoing written text and secure read-backs in action results

* fix(computer): treat a truncated set-value read-back as unverifiable

* fix(computer): accept code-point truncated read-backs as unverifiable
2026-11-12 09:25:49 +00:00
OrcaWinandOrcaWin 318bf64769 test: remove low-value catalog and shared checks (#41474)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 01:13:49 -08:00
Jinjing e881c7e76c Highlight featured and newly added plugins (#41460)
* feat(plugins): Featured and Newly added rows in the plugin catalog

Featured shows the most installed plugin per category; Newly added lists plugins
by the catalog's new entry-level addedAt (hidden when no catalog dates entries),
with a New badge for 24h and an Added this week filter. Snapshots move to a v3
cache key so older builds never read addedAt.

* feat(plugins): derive Newly added dates from release dates, as the website does

Drops the catalog-level addedAt field (schema, docs, v3 snapshot key). Main now
estimates a listing date for each non-official plugin from its oldest dated
release, and the Newly added row, New badge and This week filter read it through
shared helpers that mirror orca-site's pluginNew.ts: 30-day window, newest first,
dates more than an hour in the future ignored, "just now / N hours ago / N days ago".

* feat(plugins): show nine Newly added plugins, drop the counts release dates inflate

Listing dates come from each community plugin's oldest kept release, and
catalogs keep only recent releases, so almost every plugin looks new: 181
of 182 fall in the 30-day window and 142 count as this week. Remove what
that inflates rather than flag it: the "N this week" count and its See all,
the This week filter, and the 24h New badge.

The Newly added row now offers the website's nine in the catalog's normal
wrapping grid, the same columns and card widths as the catalog groups.

* fix(plugins): pick Featured winners by every kind a plugin belongs to

Featured used only a plugin's first filter kind, while the category filters
count every kind, so category order could change winners or drop a kind's only
candidate. Each plugin, walked by installs with a key tie-break, now fills one
unfilled kind it belongs to (the one with the fewest candidates left, then by
name). Also note why Featured is a capped one-row teaser and pin the cap.

* fix(plugins): hide Featured when Newly added is empty

Without Newly added, Featured sat directly on the Official catalog, whose
leading cards are the same popular plugins in the same columns, so back-to-back
rows repeated and read as a render bug. Featured now shows only alongside
Newly added. Leaving featured plugins out of their catalog instead would move a
card into the catalog the moment it's installed and skew the catalog's N of M.

Adds a PluginManager test that no plugin card shows twice in the empty state,
and page-level fixtures (390, 600, 1440, empty 1440) for screenshots.

* fix(plugins): cap Newly added at two full rows of the current columns

At phone width nine stacked cards pushed the catalogs about 3.5 screens
down. The grid now shows two full rows of its container-query column
count (8 at four columns, 4 at two, 2 at one), hides a partial last row,
and the pick renders at most eight. Hidden plugins stay listed in their
catalog group, so there's no See all.

* Correct plugin catalog fixture evidence

* Make plugin highlight tests match observable behavior
2026-11-12 00:40:31 -08:00
Neil fb58871bdb refactor(claude): group root modules by defining owners (#41437) 2026-11-12 00:20:10 -08:00
NeilandDuncan 34bde5edd4 fix(floating-terminal): keep east resize handle off the terminal scrollbar (#41443)
Fixes #33825

Co-authored-by: Duncan <dfierens@infitex.fr>
2026-11-11 23:56:17 -08:00
OrcaWinandOrcaWin 4dcf689fb2 test: remove low-value mobile and host policy suites (#41436)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:25:07 -08:00
NeilandClaude e7d25df3ed feat(wsl): turn WSL hosts on by default (flag-on; owner decides) (#36501)
* feat(wsl): turn WSL hosts on by default; ORCA_INTERNAL_WSL_HOSTS=0, false, off or no turns them off

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

* fix(wsl): review follow-ups for WSL hosts on by default

- Off words also match when quoted (cmd.exe's set NAME="0" keeps the quotes).
- The refusal now says WSL hosts are turned off for this launch, not missing from the build.
- New preload test pins when the renderer gets the WSL hosts API.
- Unit tests no longer inherit the gate state an Orca terminal publishes.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-11 22:03:29 -08:00
Neil e902c9a65b refactor(workspace-layout): organize concrete domain owners (#41350)
* refactor(workspace-layout): organize concrete domain owners

* test(layout): retire obsolete legacy-leaf publication setup
2026-11-11 20:54:34 -08:00
Neil a0f1cb0ee2 refactor(git): group root modules by concrete domain owners (#41322)
* refactor(git): group root modules by concrete domain owners

* chore(git): reconcile retired-test metadata with owner cleanup
2026-11-11 18:02:15 -08:00
OrcaWinandOrcaWin 252cfa3efd test: remove 34 low-value tests, including five whole suites (#41321)
* test: remove low-value startup and usage suites

* test: drop redundant form driver and lease recipes

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 17:40:04 -08:00
Neil 04158606b5 refactor(git): group command execution by concrete owners (#41316) 2026-11-11 17:05:03 -08:00
Brennan Benson dacb1751d2 Tidy the Settings → Agents installed list (#41250)
* Tidy the Settings → Agents installed list

Rows line up on one line, the default agent gets a Default pill, and
Set as default moves into each row's ⋯ menu. Chat/CLI stays in place,
grayed out, when an agent is off. Click a row to expand its settings.

* Keep a saved default clearable when its agent isn't installed

The ⋯ checkbox follows the saved default, not the badge, so a saved
agent that isn't detected still shows Default and can go back to Auto.
Row hover uses the list-row accent token.

* Use plain items in the agent row's ⋯ menu

No checkmark column: Set as default, or Clear default agent on the saved
default, then Docs/Install aligned to the menu edge.
2026-11-11 16:45:14 -08:00
OrcaWinandOrcaWin 4509730131 test: remove repeated wiring and suspended orchestration suites (#41302)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 16:16:48 -08:00
mousepotato03 b13956330e fix(tab-group): keep a window-drag handle when tabs fill the strip (#33988) 2026-11-11 13:32:03 -08:00
Neil 21c8fdc07f fix(terminal): preserve host focus when CLI splits a parked tab (#41203)
* test(e2e): verify parked split by stable pane identity

* fix(terminal): preserve host focus for CLI splits

* fix(terminal): reveal non-activating splits in the background

* test(e2e): retain parked split focus screenshots in CI

* test(e2e): capture stalled split parking state

* fix(terminal): retain cold split targets during PTY adoption

* test(e2e): persist passing parked split proof files
2026-11-11 12:12:13 -08:00
OrcaWinandOrcaWin d5f6fe17bf test: remove 129 low-value cases and 21 whole suites (#41210)
* test: remove 83 low-value cases and ten whole suites

* test: remove 46 more low-value cases and eleven suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 11:03:08 -08:00
Neil 4b241c1d03 refactor: group Pi provider modules by owner (#41162)
* refactor: group Pi provider modules by owner

* test(pty): retain public provider early-exit coverage
2026-11-11 08:51:39 -08:00
OrcaWinandOrcaWin 0184d8187d test: remove 98 low-value cases and 17 suites (#41124)
* test: remove 60 low-value cases and orphaned conversion fixtures

* docs(ci): list supported Windows SSH host cells

* test: recognize direct Windows orcad server entry

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 06:08:53 -08:00
OrcaWinandOrcaWin 5796c30c97 test: remove 161 low-value cases and 12 suites (#41151)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 05:16:06 -08:00
Neil f6b86ecf62 refactor: group WSL and Orcad migration owners (#41148) 2026-11-11 04:44:42 -08:00
OrcaWinandOrcaWin 3c7d1e1675 test: remove 263 low-value cases across 20 suites (#41144)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 04:05:46 -08:00