Commit Graph
16993 Commits
Author SHA1 Message Date
Brennan Benson bb8a6b5ba2 fix(cli): agent show labels a place from its own host's catalog row or keyed records
A shown place carries the host its status row's connection names, and its workspace and repo
names come from the published catalog row for that host and id (indexed once per publication)
or, cold, from the repo registered on that host (a store-owned index rebuilt only when the repo
collection changes) and that host's metadata. A same-id workspace on another host no longer lends
its name, and no show scans every workspace or repo. Adds the refused-clear and rewind read
fixtures, and words the WSL saved-location refusal by what it proves.
2026-11-13 08:22:50 -08:00
Brennan Benson 1d75eda73e fix(cli): agent read shows the current context after /clear; show labels WSL workspaces like list; name unattested WSL transcripts
Tail and forward reads start at the latest /clear divider, read as "system: Context cleared",
using a floor the read index keeps from committed dividers; a cursor cut before a clear gets the
source-changed answer. agent show labels a workspace from the same resolved worktree as agent
list (keyed, with its repo). A WSL terminal agent whose hooks skipped the WSL relay is refused
with that reason instead of "transcript missing". Adds the QA 5385 completed-turn read as an
expected failure until the conversation-unit forward read lands.
2026-11-13 07:11:22 -08:00
Brennan Benson 58e8651627 fix(cli): continue a partly read journal row by the raw slots it has represented
A forward agent read keeps its presented order but no longer resumes a row by an ordinal into a
recomputed list. A v2 chat cursor carries the unfinished row's sequence, slot count, slot
fingerprint and a bitset of represented raw slots, so a deleted, hidden, moved or newly aliased
item neither skips an unread sibling nor repeats a delivered one. Version 1 chat cursors at a row
boundary still read; ones inside a row are refused. Transcript cursors are unchanged.
2026-11-13 06:31:18 -08:00
Brennan Benson b2e375d2a3 fix(cli): agent read forward pages list one write's items in presented order
A forward page orders a row's current items by their chat position, as the history batch
projector does, instead of the stored id order an outcome row keeps; within counts positions in
that order.
2026-11-13 05:34:58 -08:00
Brennan Benson df06c8939b fix(cli): admit cached transcript reads in one step, show unsendable chat items as the history marker, keep Stop-note and queued-send dependencies exact
The transcript cache now compares, adopts and hits/joins/starts in the same continuation as its
stat, and adopting the current version changes nothing. A read entry no page can carry becomes
the history's too-large marker as a system line, and every entry counts against the page budget.
The read index drops emptied Stop-note buckets, and a queued card's row names both the send it
recovers and its own hand-off. Cache race tests wait on explicit events.
2026-11-13 05:03:50 -08:00
Brennan Benson dcf0cc4683 fix(cli): agent chat reads from an ordered live index with byte-bounded pages; fence transcript cache publication; prove reverse index searches 2026-11-13 03:38:39 -08:00
Brennan Benson b6b1009d50 fix(cli): bound agent chat reads by the page, cache served transcript pages by version, read-only identity reverse lookups by index 2026-11-13 01:22:35 -08:00
Brennan Benson 3515abb8a8 fix(cli): keep agent reads bounded without hiding the latest reply, fence carried keys, keyed show labels 2026-11-12 23:26:04 -08:00
Brennan Benson 6885f8eb6c fix(cli): send agent list/show/read to the selected host, and read sleeping native Windows agents 2026-11-12 22:21:37 -08:00
Brennan Benson 3b4fefc0eb fix(cli): keep agent show/read work bounded by the agent they name 2026-11-12 21:52:54 -08:00
Brennan Benson c04d19e0d0 feat(cli): list and read agents by their Orca session ID with orca agent list/show/read 2026-11-12 20:59:46 -08:00
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 0f80eed95a perf(plugins): pause a plugin's automations in one batched write (#41787)
* perf(plugins): pause a plugin's automations in one batched write

* perf(plugins): limit the automation batch path to pause fields; test batch/single parity
2026-11-12 20:39:03 -08:00
OrcaWinandOrcaWin 038793de64 test: retire narrow runtime and navigation samples (#41813)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:36:16 -08:00
OrcaWinandOrcaWin f5ab621250 test: remove low-value mobile and source control suites (#41811)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:31:27 -08:00
Kelvin Amoaba 6484b7a211 feat(workspace-cleanup): remove finished automation-run and released worker workspaces when their rules are on (#41808) 2026-11-13 04:30:59 +00:00
Jinjing faf7c69ffa Revert "Chat New line: draw only when it helps, then fade once seen" (#41735) (#41804)
This reverts commit 6854ab5ae9.

Conflict resolution: native-chat-new-rows-marker.test.tsx (pre-existing) and
native-chat-new-rows-marker.journal.test.tsx (added by #41735) stay deleted, as
#41782 removed/trimmed them on main after #41735 landed.
2026-11-12 20:26:18 -08:00
OrcaWinandOrcaWin 57dbdf8713 test: remove narrow wakeup and worker output checks (#41807)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:21:00 -08:00
Neil c1364b6d77 test(github): stub the moved gh downloader in the job-log retention benchmark (#41790) 2026-11-12 20:18:22 -08:00
Neil 89bac6f400 fix(plugins): host API 1.7-1.9 release floors are 1.4.259 (#41789) 2026-11-12 20:18:10 -08:00
Neil f3c8ef86b8 perf(sidebar): skip Hidden projects host labels while collapsed (#41788) 2026-11-12 20:17:55 -08:00
Kelvin Amoaba 6514abb90c feat(workspace-cleanup): keep workspaces with unsaved edits from a paired desktop (#41785)
* feat(workspace-cleanup): keep workspaces a paired client has unsaved edits in

* fix(workspace-cleanup): keep each window's unsaved-editor report and send them in order
2026-11-13 04:09:18 +00:00
OrcaWinandOrcaWin 7b91228aa0 test: trim automation lifecycle and reply projection cases (#41801)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 20:07:54 -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
OrcaWinandOrcaWin 96bad75a6d test: remove narrow release and migration checks (#41792)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 19:57:21 -08:00
OrcaWinandOrcaWin ddf4aa8d74 test: trim worker release checks and remove precheck suites (#41796)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 19:53:48 -08:00
30fa6b4398 fix: explain merged workspace cleanup and keep visible reviews fresh (#41200)
* fix(github): keep the selected workspace's PR on its one-minute refresh

Follow-up reads inherited the priority of whatever entry ran last. A workspace
selected while its cached PR was still fresh never got a foreground entry, so
its follow-ups competed with every visible card for the shared list budget and
were read about every five minutes with 25 visible open PRs. Previously
selected workspaces kept priority 80 forever. Follow-ups now take foreground
priority only while their workspace is selected.

* feat(source-control): say when a merged workspace is safe to delete

Source Control's committed list is a merge-base diff against the base ref. A
squash or rebase merge copies the commits onto the base with new IDs, so the
list looks the same after the merge as before it. A notice now states whether
the merged review contains everything: HEAD is the review's head (or the
provider confirmed it is contained) and nothing is uncommitted.

* fix(sidebar): keep PR status visible on sleeping workspaces

The sleeping moon replaced the review glyph, hiding whether a sleeping
workspace's PR was open, failing or merged. Review status now keeps the lane;
the dimmed row already shows sleep and the accessible label names both.

Co-authored-by: Tobias Diez <code@tobiasdiez.com>
Co-authored-by: alpenshtokk <wawesandways@gmail.com>

* fix(source-control): wait for a git status read before judging a merged workspace

Before the first status read the change count is zero and HEAD may be stale,
so the notice could call a dirty workspace safe to delete. Use the HEAD from
the latest successful status read and say nothing until one completes.

* chore(i18n): ship the merged-review plural copy in the runtime English catalog

* fix: satisfy design-system, cast and flaky-test gates for the merged notice

Use the callout-important token instead of raw purple, let Button own its
type size, build the fixture worktree with the shared factory, pin the test
clock and give the long simulated-time tests a reason for their timeout.

* fix(github): align selected-refresh regression with feature ownership

* refactor(github): give refresh queue aliases their concrete owner

* fix(source-control): preserve cleanup warnings and reserve refresh fairness

* fix(source-control): describe missing merged-head proof as unverified

---------

Co-authored-by: Tobias Diez <code@tobiasdiez.com>
Co-authored-by: alpenshtokk <wawesandways@gmail.com>
2026-11-12 19:49:04 -08:00
Brennan Benson d8c802bf57 Name the terminal's Orca ID item Copy Orca Session ID, matching chat (#41725) 2026-11-12 19:42:21 -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 25eba813d3 feat(markdown): open clicked URLs in Orca, middle-click in system browser, and show link menu on hover (#41767)
* feat(markdown): open clicked URLs in Orca, middle-click in system browser, and show link menu on hover

* fix(markdown): share click handling and dismiss stale link edits

* fix(markdown): respect disabled editors and browser availability
2026-11-12 19:38:26 -08:00
Brennan Benson e4fdb8db89 Attribute Git demand and make setup path discovery asynchronous (#41325)
* Attribute Git demand and resolve setup paths asynchronously

* Check detached attribution without requiring an exact span envelope

* Keep invalid setup repository fixtures inside disposable directories

* Retire setup runner synchronous launch allowance

* test: type the canonical Git executor mock import
2026-11-12 19:36:24 -08:00
OrcaWinandOrcaWin 82f90d9f07 test: remove narrow marker and orchestration checks (#41782)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 19:33:10 -08:00
Brennan Benson 681d19707c Drop the empty slot under the Permissions setting (#41734) 2026-11-12 19:28:09 -08:00
Brennan Benson 6968a60fb1 Keep Orca responsive during macOS permission helper cleanup (#41764)
* Keep Computer Use permission cleanup off Electron main

* Verify queued permission setup resumes after cleanup
2026-11-12 19:27:57 -08:00
Jinjing 571d29adf4 fix(mobile): open a linked workspace root from a chat link (#36078) 2026-11-12 19:26:30 -08:00
Jinjing 7922a4a0e4 Scroll combined diff panes with sideways wheel input (#21108) 2026-11-12 19:25:22 -08:00
Kelvin Amoaba 900d458c0c perf(workspace-cleanup): keep cleanup scans offline and about 4x faster (#41765)
Scan merge proofs run with lazy fetches and transports off, so partial
clones never download blobs; direct WSL reads forward those variables.
Base and coordinator refs resolve once per repo per scan, and the squash
search lists target commits once and only patch-ids commits that touch
the branch's exact file set.
2026-11-13 03:15:13 +00:00
Kelvin Amoaba c4d844d369 fix(remote): focus the new pane after a paired Cmd+D split (#41773)
The split-focus guard treated the replayed snapshot making the new leaf
active (its own focus intent) as the viewer moving away, so it dropped
the focus call whenever the host's layout push beat the split reply.
2026-11-13 03:12:34 +00:00
OrcaWinandOrcaWin 41e1083b08 test: remove narrow automation policy suites (#41777)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 19:12:15 -08:00
Kelvin Amoaba 1449339903 feat(workspace-cleanup): run cleanup rules automatically in the background on each host (#41760)
* feat(workspace-cleanup): run cleanup rules in the background on the owning host

* fix(workspace-cleanup): keep workspaces whose own orca.yaml has an archive script
2026-11-13 03:10:49 +00:00
Jinjing 6854ab5ae9 Chat New line: draw only when it helps, then fade once seen (#41735)
* feat(native-chat): draw the New line only when it helps, then fade it once seen

* fix(native-chat): adapt the New line port to public main (test helper, class-names, no notice field)

* fix(native-chat): a queued send that ran behind a turn with no reply drawn yet still draws the New line

* fix(native-chat): judge a running turn from the host's turn record, not row liveness, for the New line
2026-11-12 19:04:11 -08:00
OrcaWinandOrcaWin 002a2410ae test: remove low-value cleanup, cursor, and quota cases (#41769)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 19:02:53 -08:00
Kelvin Amoaba 0f395db435 feat(workspace-cleanup): classify released orchestration worker workspaces for cleanup (#41763)
A workspace a worker start created gets the 'orchestration-worker' reason once every dispatch on it released its terminal and its work landed in the default branch, a merged review or the coordinator's branch. Commits the coordinator's branch already holds no longer count as unpushed.
2026-11-13 02:51:19 +00:00
OrcaWinandOrcaWin 86313a0f87 test: prune fleet variants and scoped automation fixture (#41759)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 18:41:49 -08:00
Kelvin Amoaba 6addcb1881 fix(rate-limits): run a usage refresh queued while another refresh is finishing (#41758)
The fetch queue checked each queued-refresh flag once per loop, in a fixed
order. A forced refresh queued after its flag was checked stayed set when the
loop ended, so nothing ran it: after two quick account switches during a
refresh the meter stayed on fetching with no numbers, and the switch never
read the new account. One drain loop now re-reads every flag after each cycle.
2026-11-13 02:41:07 +00:00
Neil a17de5c13d fix(terminal): draw the hardware cursor in remounted panes before first focus (#41736)
* fix(terminal): draw the hardware cursor in remounted panes before first focus

xterm withholds the cursor until its textarea gets a focus event or a
keystroke. A remounted pane (reload, reattach) keeps DOM focus, so no
event fires and TUIs that use the hardware cursor, like agy, show no
cursor until the next keypress. Set showCursorImmediately so DECTCEM
alone decides visibility, matching the mobile fix in #11387.

* test(terminal): drop xterm-behavior cases and casts from cursor init test
2026-11-12 18:37:30 -08:00
OrcaWinandOrcaWin 309975de24 test: remove low-value lifecycle, follow-up, and cache cases (#41755)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 18:28:24 -08:00
Kelvin Amoaba 70488feec0 feat(workspace-cleanup): classify finished automation run workspaces (#41738)
* feat(workspace-cleanup): classify finished automation run workspaces

A new-per-run automation leaves one workspace behind per run. Cleanup
scans now tag such a workspace 'automation-run' once its run is final
and the automation has released the run's terminal, so the
automationRuns rule can remove it behind the usual safety blockers.

* refactor(workspace-cleanup): keep the scan file under its line cap
2026-11-13 02:11:32 +00:00
OrcaWinandOrcaWin 7b73a633cf test: remove repetitive federation and onboarding policy cases (#41748)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 18:02:23 -08:00