Commit Graph
1117 Commits
Author SHA1 Message Date
Jinjing 924887bd44 Update E2E tests for project menu and startup readiness (#41923)
* test: update e2e project entry and readiness

* ci: keep targeted e2e launches in background
2026-11-13 23:39:26 -08:00
Jinjing a8f6e79631 Improve workspace sidebar cards and activity status (#41894)
* wip

* wip

* wip

* wip

* Improve experimental worktree cards with compact agent summaries

- Add an optional details row for workspace metadata and indicators
- Roll up descendant activity timestamps to parent cards

* Reduce worktree card metadata indentation

* wip

* Expand sidebar agent lines with subagents and remote host status

- Show subagent activity, send targets, and unread signals in slot cards
- Identify remote hosts and provide SSH reconnection controls

* Show child workspace status counts in sidebar cards

Distinguish monitoring agents and refine lineage alignment so workspace
activity is easier to scan.

* Enable navigation from worktree sidebar activity indicators

- Open the matching agent or workspace directly, or choose among multiple sources
- Use host-qualified identities for nested workspace activity
- Show pull requests in 2.0 card details and refine compact card layout

* Show every status in the sidebar card corner and let cards open and close

The title-row corner now shows one glyph per status the card speaks for
(needs, failed, unread, working), most urgent first, followed by the time,
instead of only the most urgent one. Each glyph opens its own sources.
Collapsed child workspaces report all their statuses through a flat,
shallow-comparable record.

Experimental 2.0 cards can also be opened and closed; a closed card's
title slot speaks for its hidden agents and children.

* final worktree design

* wip

* rm

* wip

* wip

* fix style

* fix commit

* Improve worktree card interactions and spacing

- Let users toggle cards by clicking their headers.
- Delay details until the pointer rests to avoid accidental popups.
- Add breathing room around card content.

* wip

* fix issues

* wip

* Improve workspace sidebar icons and navigation

- Batch AI icon generation and add settings to customize and regenerate icons.
- Fix agent navigation and unread handling across execution hosts.
- Keep linked reviews visible while loading and reduce unnecessary refresh work.

* Fix sidebar agent ownership and targeted title updates

Resolve unstamped agent sessions to their workspace runtime so sidebar
summaries and unread state follow the correct host. Limit title-change
invalidation to affected workspaces.

* fix build

* Simplify worktree sidebar icons and agent rows

- Generate monochrome icons that match the sidebar foreground
- Move agent model names into row tooltips to reduce clutter

* Keep agent timestamps visible alongside dismiss controls

* Fix worktree icon regeneration and bound the cache

Cancel stale requests when clearing icons so older results cannot
restore the previous cache. Evict unused renderer entries to limit
memory growth.

* Unify experimental workspace cards around title status

- Surface hidden agent and child workspace activity in the card title.
- Retire the second experimental layout and AI-generated icons.
- Preserve existing experimental card selections and add a details row option.

* wip

* wip

* wip

* fix bugs

* improve perf

* Fix sidebar lineage rollup: unread dot on children, running status on collapsed parent

- A card's unread dot and bold title now include its own visible agent rows'
  unread results, so expanding a parent reveals which child the unread came from.
- A collapsed parent's status lane shows the most urgent descendant state
  (needs you > failed > working) when it beats the parent's own status.
- Host-scoped workspace unread markers and related attention fixes.

* Improve sidebar activity rollup performance

- Refresh only stale descendant slots and scope unread updates to their workspace.
- Share agent row projections and index unread markers to reduce repeated work.
- Preserve host-specific agent activation and show the latest activity time.

* wip

* Fix sidebar attention state and optimize slot invalidation

- Preserve unread flags raised by users or earlier sessions when markers clear.
- Scope agent list expansion to each host.
- Track displayed panes and freshness deadlines to limit slot updates.

* wip

* Fix sidebar workspace status and host ownership

- Keep agent navigation and unread state scoped to the correct host,
  including paired SSH workspaces and runtimes.
- Correct collapsed lineage status, stale review display, and settings
  synchronization while reducing unnecessary sidebar refreshes.

* Show unread agent completions and scope workspace reads by host

* fix compile issue

* wip fix static checks

* wip

* Fix workspace sidebar agent ownership and PR display

- Update agent rows when terminal host bindings arrive and preserve
  local ownership for unstamped retained completions.
- Keep newer hosted PRs visible when an older merged PR is cached.
2026-11-14 02:41:25 +00:00
OrcaWinandOrcaWin f15962da9c test: remove low-value CLI, terminal, and projection cases (#42228)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 17:26:54 -08:00
Neil 6a0d446ccf fix(release): build Linux x64 on ubuntu-24.04 to keep node-pty baseline x86-64 (#42210)
ubuntu-latest now resolves to the Ubuntu 26.04 image, which installs the
amd64v3 package variant. Its GCC defaults to -march=x86-64-v3, so the
Electron-ABI node-pty in 1.4.257 shipped AVX instructions and the terminal
daemon died with SIGILL on CPUs without AVX. Pin the Linux x64 release
build to ubuntu-24.04, the image that produced the working 1.4.256.

Fixes #41637
2026-11-13 17:01:54 -08:00
Kelvin Amoaba 5a14019c15 test(browser): check on Windows that agent browser input leaves the user's app in front (#42194)
* test(browser): measure agent input focus on the Windows desktop

* test(browser): show Orca inactive before the Windows holder takes the foreground

* test(browser): name the foreground window in Windows holder replies

* test(browser): lift the foreground lock before the Windows holder takes the foreground

* test(browser): run the Windows agent focus check from a dispatch-only workflow

* test(browser): skip the Windows focus checks before launch off hosted runners

* test(browser): harden the Windows focus holder and its dispatch workflow
2026-11-14 00:00:31 +00:00
OrcaWinandOrcaWin a36d1ddafd test: remove low-value bridge and native checks (#42105)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 11:15:10 -08:00
OrcaWinandOrcaWin 41c301bb6a test: remove low-value cloud tests and unused support (#42029)
* test: remove low-value push and relay coverage

* test: delete orphaned fixture and closure support

* test: trim runner and mobile recording matrices

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 05:57:41 -08:00
OrcaWinandOrcaWin a3be49edd4 test: remove Calculator smoke and redundant coverage (#42000)
* test: remove weak native smoke and repeated writer coverage

* test: focus packaged PTY coverage on output and exit delivery

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 04:04:33 -08:00
OrcaWinandOrcaWin 94e84e4044 test: remove RPC work budgets and push lease replays (#41981)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 03:04:34 -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
Jinjing c75b43bc86 Improve bug report template for desktop, remote, and mobile (#11140)
* Improve bug report template for desktop, remote, and mobile

Capture where users hit the bug (local desktop, SSH, remote server, WSL, mobile, web) without extra host jargon, and collect remote OS when relevant. Extend the OS labeler for mobile.

* Reconcile OS and mobile labels from the bug form's current state

Form: one "Where were you using Orca?" choice (Desktop only, + SSH host,
+ Orca server, + WSL, Mobile app, Web browser, Other), device OS with iOS
and Android, optional remote host OS, shorter help copy and per-platform
version instructions. Main's English request is kept.

Labeler: read the issue as it is now instead of the webhook snapshot,
recognize only a bug form at the very start of the body (optionally after
the exact machine-translation note line), and stop at the free-text
heading. Unknown, repeated, out-of-order or multi-line metadata leaves
labels untouched. Only os:macos, os:Windows, os:linux, os:mobile and
mobile are ever added or removed, one label at a time, so labels added
concurrently by people or other workflows survive. Each pass is verified
by a re-read and retried up to three times; runs are serialized per issue.

Fixes stale mobile labels after an edit to desktop, stale OS labels after
an edit to Other or blank, empty sections reading the next heading as a
value, quoted form sections relabeling unrelated issues, and prototype
names such as "constructor" being sent as labels. Retired Where option
strings and the Client / Host operating system headings keep working for
open issues.

Tests run the workflow's inline script against a stateful mock of the
issues API.

* Trim OS labeler tests to behaviour that fails when the fix is reverted

Review finding F11140-C1-1: several added tests pinned form copy, option
inventories, schema keys, workflow constants or script source, and kept
passing with the production change reverted.

- Delete bug-report-issue-form.test.mjs (schema keys, copy, option lists,
  About-menu source regexes). The form/labeler contract is kept as one
  behavioural case: every option the shipped form offers is recognised.
- Drop the workflow-constant and script-source regex tests, the log-copy
  assertion, the note-length check and the plain-string label case.
- Replace the Where x OS matrix (with its test-side oracle) and the other
  Cartesian tables with one literal case per distinct behaviour.
- Point negative fixtures at an OS the old script would label, so each
  kept case fails against the reverted workflow rather than passing because
  the old script skipped iOS.

220 -> 59 tests; all 59 fail with only the workflow reverted to main.
Test-only change; no runtime path changed.

* Keep the shadowed legacy value case in the heading-presence test

It covers a distinct rule (an invalid legacy value is ignored when the
current heading is present) and was dropped by mistake in the trim.
2026-11-12 19:23:31 -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
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 3bf30ca1d5 fix(ci): skip closed-PR cleanup when the PR was reopened before it ran (#41646) 2026-11-12 12:48:01 -08:00
Neil c3f8f4100c refactor(native-chat): organize launch, transcript, and conversation owners (#41643) 2026-11-12 12:45:03 -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
OrcaWinandOrcaWin 908ab68ca0 test: remove low-value popup, plugin visibility and teardown checks (#41629)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 11:26:07 -08:00
Neil b10c07fbc3 refactor(startup): organize remaining lifecycle and service owners (#41624)
* refactor(startup): organize remaining lifecycle and service owners

* fix(tests): bind quit mocks to concrete shutdown owners
2026-11-12 11:08:38 -08:00
OrcaWinandOrcaWin 1fbd7c2356 test: retire low-value scanner, account, browser, and terminal suites (#41623)
* test: retire vault corpus and account setup suites

* test: retire synthetic browser and document host suites

* test: retire synthetic terminal motion suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 11:06:33 -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
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
OrcaWinandOrcaWin b0ad0c4d3a test: remove low-value AI Vault policy and mock surveys (#41567)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 14:34:09 +00:00
OrcaWinandOrcaWin 4d80e84f90 test: prune terminal, workspace and scanner policy cases (#41563)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 14:24:09 +00:00
OrcaWinandOrcaWin 2e22af9284 test: remove marginal CLI and mobile image suites (#41559)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 06:05:10 -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
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
Neil fb58871bdb refactor(claude): group root modules by defining owners (#41437) 2026-11-12 00:20:10 -08:00
Neil 46b225e473 chore(links): point website, docs and download links at orca.dev (#41376)
The site now lives at orca.dev; the old onorca.dev and www.onorca.dev hosts
redirect there. Linking to orca.dev directly skips that redirect.

Only page links change. Service hosts, sign-in and relay endpoints stay as they are.
2026-11-11 21:50:37 -08:00
Neil b9e3912ff8 Call orca.dev for feedback, plugin lists and update notes; accept orca.dev share and download links (#41380)
* chore(endpoints): call orca.dev for feedback, plugin lists and update notes

The site moved to orca.dev. Feedback, connection diagnostics, plugin install
stats, the plugin kill list, update nudges and the changelog feed now use
orca.dev, as do the diagnostics token URL baked into builds and the release
download mirror (downloads.orca.dev). The old hosts serve the same paths,
so released builds keep working.

Skill share links on share.orca.dev are accepted, and the mobile scanner
recognizes the orca.dev Android download code. The old hosts stay accepted.

* chore(ci): leave the release JavaScript benchmark workflow unchanged

Editing it triggers the benchmark, whose parity check currently fails on
arm64 because max-quality brotli output for the mobile page differs by
architecture. The benchmark only needs some diagnostics URL, and the old
host still serves it.
2026-11-11 21:50:31 -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
OrcaWinandOrcaWin bbe22681c2 test: remove notification, icon and native policy inventories (#41375)
* test: remove notification and native policy inventories

* test: remove icon projection samples and tray suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:54:07 -08:00
Jinjing b80ac94ba4 fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380) (#40539)
* fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380)

A shell auto-title (oh-my-zsh preexec) names the pane `claude` the moment
the command execs. Claude's `idle_title` rule counts that bare name as weak
idle once output has been quiet for 3s, so a Claude that took >3s to draw
its first frame settled `terminal wait --for tui-idle` on a blank screen.
`dispatch --inject` then pasted into a TUI that had not mounted yet and the
prompt was lost.

Name-only idle lanes (agent rule verdicts that require quiet, and the
sustained-title lane) now also require that the running command has painted
something since the shell's OSC 133;C command-start marker. Shells without
the marker keep today's behavior.

* fix(runtime): corroborate Claude's name-only idle with its own composer marker (STA-2380, C1 F1)

Orca's zsh OSC 133;C hook is first in preexec_functions, so a later user or
framework preexec hook (zsh-you-should-use, a custom echo) prints after the
command-start marker and before Claude runs. The any-visible-byte paint latch
counted that text as Claude's paint, so a silent cold start under such a hook
still settled tui-idle ready-weak on the shell's bare `claude` title.

For agents whose worker start already trusts their composer marker (Claude),
"painted" now means that marker (`❯`+NBSP after DECSET 2031, which no shell
sends) arrived since the command started. Other agents keep any-byte paint;
markerless shells and output gaps keep the permissive default.

Evidence: a real-zsh live-shell test under the production wrapper with
oh-my-zsh title-only, p10k/starship-style silent, and you-should-use-style
printing hooks, replayed through the real wait; runtime tests for the hook
text, a boot banner, the positive bare-title + composer path, and worker-start
readiness plus brief delivery timing.

* fix(ci): route command-paint attribution sources to shell_contracts; attribute live-shell bytes by stream offset (STA-2380, C2 F1/F2)

- pr-shell-contract-prefixes: the live-shell test, terminal-command-paint.ts,
  tui-idle-evidence-source.ts and draft-paste-ready-scanner.ts route to the
  shell_contracts job; a routing test reads the job's step from pr.yml and
  asserts every listed test routes there.
- tui-idle-zsh-preexec-hook-order.live-shell.test: locate the DECSET 2031
  anchor by offset in the accumulated stream, split a straddling read, carry
  pending escapes across the shell/agent halves, and assert attribution is
  invariant under coalescing and 3-byte re-chunking.
- terminal-command-paint: disclose the accepted trade-off (a known Claude with
  marker history but no supported composer signal times out; markerless shells
  and output gaps still fail open; no version cutoff claimed).

* test(ci): stream-offset launch-order proof, route tui-idle-evidence.ts, parse the whole shell-contracts step (STA-2380, C3-1/2/3)

- live-shell test: assert the launch order on the joined bytes by stream
  offset (133;C, then the user hook's output, then the agent's anchor and
  composer); no read-boundary or timestamp assertions remain. Re-chunk
  cases add a split anchor and a shell-tail/agent-start coalesced read.
- pr-shell-contract-prefixes: route tui-idle-evidence.ts, the readiness
  evaluator the live-shell replay exercises.
- routing ratchet: read the step's run script through the YAML parser so
  a blank line or later command cannot truncate it; cross-check against
  the real-shell tests UNIT_EXCLUDE drops so a dropped entry fails rather
  than a smaller count; fixture tests for blank line, exact list, missing
  step.

* test(ci): answer compinit's insecure-directory prompt in the zsh preexec live-shell test (STA-2380)

Ubuntu's global zshrc runs a plain compinit, which on CI runners stops at
"Ignore insecure directories and continue [y] or abort compinit [n]?"
before zle exists, so the stand-in never launched and the shell-contracts
job failed with "no composer frame from the stand-in". Answer the prompt
with y as zsh-startup-hook-pty-harness.ts does. The prompt bytes precede
Orca's OSC 133;C marker, so stream-offset attribution is unchanged.
2026-11-11 19:57:53 -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 890ad4d8aa Prevent new blocking work on Electron main in CI (#41263)
* WIP: guard blocking main-process APIs with file ratchets

* Cover declared SQLite receivers and preserve daemon guards

* Cover SQL iteration and shared synchronous IPC in ratchets
2026-11-11 16:24:55 -08:00
Neil 1708f1caee refactor(claude-accounts): organize sign-in and profile owners (#41222) 2026-11-11 13:47:58 -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 9576e55773 test: remove 1,144 low-value declarations (#41177)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 09:11:06 -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
Neil f820fdf8d4 ci: fail over unavailable Ubuntu package mirrors (#41174)
* ci: fail over unavailable Ubuntu package mirrors

* fix(ci): recover package retries across headless jobs

* fix(ci): allow complete fallback package index downloads

* fix(ci): recover dpkg locks and bound WebKit setup retries

* fix(ci): run apt deadlines inside sudo sessions

* fix(ci): invoke installed Playwright without root pnpm

* fix(ci): allow large fallback dependency downloads to finish
2026-11-11 08:30:55 -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
Neil faced26704 refactor: group computer provider owners (#41154) 2026-11-11 05:08:03 -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
Neil 386afed0ca refactor(persistence): organize profile state and Store domains (#41106)
* refactor(persistence): organize profile state and Store domains

* fix(test): locate relocated profile state worker fixtures
2026-11-11 02:44:06 -08:00
OrcaWinandOrcaWin aca88b05cc test: remove 83 low-value test definitions and seven suites (#41098)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 01:38:28 -08:00
Neil 280bcbc48a refactor: organize usage and CSV modules by concrete owners (#41059) 2026-11-10 23:26:07 -08:00