Commit Graph
21719 Commits
Author SHA1 Message Date
Brennan Benson 2e9a679aa9 fix(native-chat): retain pending legacy eligibility helpers 2026-11-13 05:12:29 -08:00
Brennan Benson a17b40a1d4 fix(native-chat): retry restored legacy retirement eligibility 2026-11-13 05:12:29 -08:00
Brennan Benson 3ff45604e5 fix(native-chat): apply retirement backoff before writer admission 2026-11-13 05:12:29 -08:00
Brennan Benson 311a1cad40 fix(native-chat): keep the prepared retirement state narrowed 2026-11-13 05:12:29 -08:00
Brennan Benson d6dc5359b2 fix(native-chat): settle retained journals and cancel stalled source leases 2026-11-13 05:12:29 -08:00
Brennan Benson d582313329 fix(native-chat): account for queued card epochs during source proof 2026-11-13 05:12:29 -08:00
Brennan Benson 6f77dae361 test(native-chat): exercise retirement with the native source lock 2026-11-13 05:12:29 -08:00
Brennan Benson 20d2c9ed92 perf(native-chat): pace source proof through existing maintenance 2026-11-13 05:12:29 -08:00
Brennan Benson 9130ef8257 fix(native-chat): retire certified legacy journals after the grace period 2026-11-13 05:12:29 -08:00
Brennan Benson 4981f181b9 fix(native-chat): record the original journal copy identity 2026-11-13 05:09:41 -08:00
Brennan Benson 5848bd66f7 Merge current main into native chat SQLite host
Resolve explorer watch files to main's #41874; keep the branch's SQL reads elsewhere.
2026-11-13 04:24:56 -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
Neil 59b88a1176 refactor: group GitHub task-page modules by domain (#41995) 2026-11-13 03:52:49 -08:00
OrcaWinandOrcaWin 8c9aff20a3 test: remove filesystem scale and telemetry schema replays (#41988)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 03:43:34 -08:00
Brennan Benson 5b6cf0c923 fix(agent-session): keep a settled send's frame over an older work restatement
Subscriber delivery reads current work before the history page, then lets
that work restate unanswered sends over the page's rows. When a send's
settlement committed between the two reads, the page carried it accepted
but the earlier work restated it pending, so the frame at the new cursor
published the stale state. Later caught-up frames restate only still
unanswered sends, so the client never learned of the acceptance: the
Claude echo case kept a "pending" bubble although the journal held it
accepted. A restatement only describes sends its read saw unanswered, so
an accepted or rejected page row is newer and now wins.

structured-agent-session-claude-echo-working (failed once in CI, never
reproduced) with an 8 ms SQL reply delay injected locally plus CPU load:
before, most repeats stayed pending for 15 s while the stored row was
accepted at the subscriber's own cursor; after, 7/7 passed in ~100 ms.
2026-11-13 03:34:29 -08:00
Neil 4245b59765 refactor: group agent hook providers by domain (#41968)
* refactor: group agent hook providers by domain

* chore: shrink retired hook test ratchet allowances
2026-11-13 03:27:33 -08:00
OrcaWinandOrcaWin 7658aebc4d test: remove repeated readiness and telemetry schema cases (#41983)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 03:24:50 -08:00
Kelvin Amoaba f4d294dac2 fix(browser): an agent's new server tab takes the selection from the user's This-device page (#41953)
Pageless agent commands prefer the workspace's active client page, and creating
an offscreen or renderer tab never cleared it, so the next command after
`orca tab create` acted on the user's page. Yield client selection wherever a
create moves the bridge's active tab, as orcad already does.
2026-11-13 11:18:51 +00: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
OrcaWinandOrcaWin 404ab9fccf test: remove upstream projections and duplicate submodule guard (#41974)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 02:50:19 -08:00
Kelvin Amoaba 52b48ebc09 fix(browser): carry large This-device results and typed errors back to the server (#41971) 2026-11-13 10:50:14 +00:00
Kelvin AmoabaandWooseong Kim eb1486c3ee fix(browser): open popups and new-tab links from This-device pages (#41973)
Co-authored-by: Wooseong Kim <innocarpe@gmail.com>
2026-11-13 10:49:45 +00:00
Kelvin Amoaba 6601b9127a fix(native-chat): don't stop a chat's agent while it is starting because the laptop slept (#41965)
The idle sweep stopped any still-starting agent whose chat had been quiet past the idle window on
the wall clock, which counts sleep. A message sent just before the Mac slept was rejected on wake
as "Claude couldn't start". A start's own deadline already runs on awake time, so the sweep now
leaves a start alone while that deadline still times it.
2026-11-13 10:40:23 +00:00
Kelvin Amoaba 1704173140 fix(browser): don't offer to open a streamed page's server loopback URL on this machine (#41967)
The streamed pane's context menu opened the page or link URL as-is in
the desktop's default browser, so a server's localhost page opened this
machine's localhost. Use resolveRemoteFailureExternalUrl, as the
streamed error page already does, and leave the items out when it
refuses.
2026-11-13 10:34:29 +00:00
OrcaWinandOrcaWin 85873ef846 test: remove Git staging and status replays (#41966)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 02:32:58 -08:00
Kelvin Amoaba 86fea2e81c fix(browser): show streamed pages' JavaScript dialogs on the desktop (#41960)
The desktop's screencast subscription dropped the stream's dialog and
dialogClosed events, so an alert, confirm or prompt on a Server
(streamed) page froze it with nothing to answer. Ask with the local
browser's dialog, answer through browser.dialogAccept/dialogDismiss,
and close it when the host closes the dialog or the stream stops.
2026-11-13 10:29:58 +00:00
Kelvin Amoaba 51d0c97e39 fix(browser): publish title, loading and history state for server-run browser tabs (#41952)
Streamed (offscreen) pages only republished their session-tab row on commit,
in-page navigation, first favicon and load failure. A title parsed after
commit, a live document.title change and the end of a load never reached the
desktop tab strip or the phone, and the row hardcoded loading and back/forward
as false. Publish title and load-state changes through a per-page coalescer
and read real loading and history state into the row.
2026-11-13 10:23:30 +00:00
Kelvin Amoaba c228a0bbc7 fix(native-chat): the browser Show button says why when the page can't be opened (#41956)
The button threw away activateBrowserPagePaletteResult's failure, so a
missing page, tab or workspace made it do nothing. It now shows the open-tab
switcher's messages, shared through one helper. A blocked activation stays
quiet like every other caller: the activation reports it.
2026-11-13 10:21:09 +00:00
OrcaWinandOrcaWin ee8ad02860 test: remove hook and generation replays and cache assertions (#41951)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 02:20:31 -08:00
Neil 7e10540b93 refactor: group preload modules by domain (#41940)
* refactor: group preload modules by domain

* fix: include preload entry dependencies in web typecheck
2026-11-13 02:06:33 -08:00
Brennan Benson 493ffadfaa test(agent-session): await the fake Codex child's requests in compact-exit
Restarting after a mid-command exit runs the exit settlement, a fresh
acquire and the queued send's handover through the SQL workers before
turn/start, which outran vi.waitFor's 1 s poll under load. The shared fake
Codex now resolves nextRequest(method) when a child receives that request;
compact-exit awaits it instead of polling the calls list.

Seen once in a contended local sweep (8 ms SQL reply delay plus CPU load):
"expected [] to have a length of 1" at the turn/start poll. The new
version passed 5/5 under the same delay.
2026-11-13 02:02:30 -08:00
Brennan Benson a88b5a6dee test(agent-session): let delivery park before the attention case's idle sweep
The single idle-sweep tick keeps a chat whose delivery loop is still
running, and the loop parks only after SQL reads that follow the second
send's completion event. When the tick ran first it touched the session
instead of retiring it, and the 1 s hasSession poll failed. Wait for the
loop to park (wake resolves when it does), as goal-steering does.

With an 8 ms SQL reply delay injected locally plus CPU load: old 2/5
failed (expected true to be false), new 5/5 passed.
2026-11-13 02:02:28 -08:00
OrcaWinandOrcaWin 7f43d8aab6 test: remove prompt transport replays and secret bookkeeping cases (#41947)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 02:01:50 -08:00
Jinwoo Hong fde1ae70da fix(mac): give Orca's main executable its own UUID so Local Network access works (#41676)
* fix(mac): give Orca's main executable its own Mach-O UUID

macOS Local Network privacy identifies an app by its main executable's
UUID. The packaged executable is stock Electron's, so it shares that UUID
with every other app on the same Electron version and macOS can apply
another app's Local Network decision to Orca. Rewrite LC_UUID in every
slice to a value derived from the app id, executable name and CPU type,
before signing.

* fix(mac): re-sign rewritten executables ad hoc, cover the terminal host, assert UUIDs at release

Rewriting LC_UUID breaks Electron's linker ad hoc signature, and arm64
kills unsigned code, so identity-less local builds (where app signing is
skipped) produced an Orca.app that died at launch. Re-sign the rewritten
executable ad hoc, outside the bundle so codesign does not treat it as
the bundle; real signing replaces it later.

The terminal host's executable is a stock Node binary whose UUID is
shared by every copy of that Node release, so give it its own stable
UUID the same way. Packaging and release verification now fail when a
shipped executable does not carry its expected UUID.

* fix(mac): scope the executable UUID rewrite to the main app

The terminal host gets a separate design; leave it unchanged here.
2026-11-13 04:53:48 -05:00
OrcaWinandOrcaWin d1d338cd02 test: remove generation replays and cache counter cases (#41944)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 01:52:46 -08:00
OrcaWinandOrcaWin 37f8222979 test: remove low-value cleanup suites and generation replays (#41941)
* test: remove cleanup wrappers and redundant settlement coverage

* test: remove ineffective preview and generation failure replays

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 01:43:44 -08:00
Brennan Benson 560643500c Show remote files created while a restarted host's watcher starts (#41874)
* fix(explorer): resync a recovered remote watch only after the host watcher is installed

The contact-regained resync fired when the files.watch subscription was accepted, before the
restarted host reported its watcher ready, so a file created in that gap was neither in the
re-read listing nor reported by the watcher. The managed-orcad explorer recovery spec now waits
for that resync before writing its probe file.

* fix(explorer): re-read a recovered remote explorer once when its host watcher fails to install

* test(explorer): the recovered watch resyncs after its ready signal

* fix(explorer): re-read a remote watch on acceptance and again once its host watcher is installed

A recovered watch re-reads when the restarted host accepts it, so outage changes
still appear if the watcher install stays pending, and again on ready so writes
made before the install appear. A first subscription also re-reads on ready,
which replaces the trimmed-watch first-ready catch-up for remote targets.

* test(explorer): the recovered explorer shows a file written while the host watcher installs

Counting resyncs is not an install barrier: two recovery attempts can both
re-read on acceptance before any watcher exists, and a ready that lands before
acceptance re-reads once. Assert the user-visible result instead, which holds
for any order of acceptance, install and the write.
2026-11-13 01:41:32 -08:00
Kelvin Amoaba d1bc6605c1 fix(speech): correct near-miss spellings of dictionary terms, like Superbase to Supabase (#41703)
* fix(speech): spell near misses of dictionary terms the term's way

* fix(speech): ship the common-word list as a 2% Bloom filter to fit the phone page budget
2026-11-13 09:39:16 +00:00
Kelvin Amoaba 3342284233 fix(native-chat): an older browser run's Show button never opens another run's page (#41939)
A run without --page fell back to the chat's latest agent page whenever it
had no remembered page, which is every older run after a restart or once 500
runs push it out. The chat's browser activity now belongs only to its newest
browser run, which remembers that page for when a newer run takes over. An
older run that this renderer never saw as the newest shows no button.
2026-11-13 09:33:08 +00:00
NeilandSibyl 616a581575 feat(usage): add a Claude usage polling switch (#41921)
Add an on-by-default Claude usage polling switch with live-terminal-only behavior when disabled, cancellation and account attribution safeguards, and translations for all supported locales.

Fixes #27151.
Fixes #39502.
Fixes #37037.

Co-authored-by: Sibyl <scauyb@qq.com>
2026-11-13 01:32:11 -08:00
OrcaWinandOrcaWin e4eecd847c test: remove low-value workspace wrapper and notice cases (#41938)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 01:31:41 -08:00
Kelvin Amoaba 96d2c0b0b6 fix(opencode): attach @-mentioned files to OpenCode chat prompts (#41932)
* fix(opencode): attach @-mentioned files to OpenCode chat prompts

OpenCode's ACP agent reads a file only from a resource_link block and
ignores @path text, so mentioned files never reached the model. Keep
the text as typed and link each mentioned file inside the session
folder.

* fix(opencode): reuse the chat mention scanner and compare paths byte-exactly

* fix(opencode): leave mentioned files over 20 MiB as text
2026-11-13 09:23:01 +00:00
Brennan Benson 799f88ec66 perf: window expanded sidebar workspace families (#41237)
* perf: virtualize individual sidebar workspace descendants

* chore: combine sidebar identity imports

* fix: preserve sidebar interactions with individual rows

* perf: derive sidebar fallback lookups only when needed

* test: document narrow sidebar geometry fixtures

* chore: keep sidebar lookup compatible with React compiler

* Dismiss lineage tooltips when toggling child workspaces

* fix: use measured rows for sidebar collapse and scroll

* test: exercise descendant deletion scroll takeover

* fix: keep sidebar scroll marks compiler compatible

* fix: complete sidebar reveal and folder surface integration
2026-11-13 01:20:39 -08:00
OrcaWinandOrcaWin 2850c00006 test: remove low-value smoke, wrapper, and copy assertions (#41925)
* test: remove prebuilt declarative demo smoke suite

* test: remove static Box summary copy assertion

* test: remove redundant wrapper cases and copied assertions

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 01:17:39 -08:00
Brennan Benson 98911ff1f6 fix(agent-session): reserve queued sends before a waiting operation's own place
DeliveryOrder.reconcile became async when the first-queued read moved to the
SQL readers, but the ready-operation path still called it without awaiting
and reserved the operation's place right after. The operation then took its
place before the queued send it was meant to follow, so a goal, rewind or
other operation requested while the agent starts could run ahead of a
message sent earlier; a failed read also became an unhandled rejection.
Await it, restoring main's order (reconcile, then reserve).

Found by typescript/no-floating-promises over src/main/native-chat.
2026-11-13 01:12:55 -08:00
Brennan Benson bc2fc4ea2b test(agent-session): await the queued-operation results instead of polling a settled flag
The operation-order cases polled a settled flag and the compact spy with
vi.waitFor's 1 s default. Under SQL worker contention the goal or rewind
answers after more than a second, so the poll gave up while the operation
was still on its way (CI: "expected false to be true", then "closed by
quit" from the unhandled result). Await the result itself and a promise the
compact stub resolves.

With a 30 ms SQL reply delay injected locally plus CPU load, 3 repeats: the
old file failed "releases a startup goal" (expected false to be true) and
"answers a goal" (compact called 0 times); the awaited version passed all.
2026-11-13 01:12:31 -08:00
NeilandBrennan Benson 28e0a0243c perf(sidebar): reuse tab ownership across activity projections (#41060)
* perf(sidebar): reuse tab ownership index for activity summaries

* perf(sidebar): share tab ownership across activity projections

---------

Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
2026-11-13 00:58:30 -08:00
OrcaWinandOrcaWin 4a81270d6f test: remove duplicate language wrapper and orphan host teardown (#41909)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-13 00:47:44 -08:00
Neil e7288d7ea5 refactor: group new-workspace modules by domain (#41905) 2026-11-13 00:46:08 -08:00
Neil ad0dfec9d4 fix(ime): keep plain-committed Hangul so macOS 2-Set can rebuild it in place (#41884)
* fix(ime): keep plain-committed Hangul so macOS 2-Set can rebuild it in place

Right after an input-source switch, macOS 2-Set can commit a lone jamo as
plain text and then rebuild it (ㅇ + ㅏ → 아) by replacing that committed
range. The native text forwarder emptied the field after every commit, so
the replacement had nothing to land on and the vowel was dropped (#9738).

Keep Hangul commits in the field (Latin commits still clear for #11504),
and erase replaced text from the PTY before the replacement is sent.

* fix(ime): only erase retained Hangul when the replacement is forwarded and still at the PTY cursor

Drop retention on blur, on any composition start, and on chord/named keydowns
the pane handles before the forwarder (macOS Ctrl+C, non-Latin control chords).
Erase only for insertText/composition replacements that end at the field tail.

* ci(e2e): route terminal IME changes to IME specs again after the input/ owner move

#39113 moved IME and keyboard policy files under terminal-pane/input/, but the
native IBus and synthetic IME routes still matched the old paths, so IME changes
selected neither lane.
2026-11-13 00:41:53 -08:00