Commit Graph
16002 Commits
Author SHA1 Message Date
Neil 708aca6a46 fix(terminal): never type a colour reply into the shell after the program that asked has exited (#37402)
* fix(terminal): never type a colour reply into the shell after the program that asked has exited

The PTY owner holds a colour-query reply made inside a shell command for up
to 20 ms and drops it if the command's OSC 133;D arrives, or (POSIX) another
process group takes the terminal; otherwise it answers. Command markers ride
the colour scan every emission already pays, so the hot path does no new
work until a query is pending. No daemon protocol change.

Closes #16633
Closes #14631

* fix(terminal): track command markers in the existing colour scan, drop the live-group shortcut, and hold through claimed echoes

* fix(terminal): one verdict for every query held behind the first, contiguous ranges through a held echo, drop held replies at the final snapshot

* refactor(terminal): move the torn query/echo holds out of the ingress

* fix(terminal): a query completed after a verdict is judged afresh; the final snapshot judges held askers instead of dropping them
2026-11-07 17:59:32 -08:00
Neil b35941e4f9 perf(ssh): slow remote polls while the Orca window is visible but unfocused (#39650)
* perf(renderer): add unfocused slowdown to shared visibility poll primitives

installWindowVisibilityInterval gains slowWhileUnfocused (focus read at tick
time, overdue catch-up on window focus) and the git status refresh scheduler
gains cadenceScale + retime(). Opt-in; focused cadence is unchanged.

* refactor(source-control): extract git status scheduler window-presence hook

* perf(ssh): slow remote port, git status and compare polls while unfocused

Visible-but-unfocused windows poll workspace/host ports, branch compare,
stale conflict probes and active git status 4x slower, so agent edits no
longer drive remote git status every 3s behind another app. Hidden windows
still pause; window focus runs overdue work immediately.

* perf(source-control): keep activity debounce when refocus re-times git status

* test: drop cadence-count tests for unfocused poll slowdown
2026-11-07 17:50:39 -08:00
OrcaWinandOrcaWin d031ca84a8 refactor(i18n): read render-path translations from useTranslate in right sidebar (source control, hosted review) (#39385)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:46:45 -08:00
Neil aa6c949614 perf(native-chat): render streaming markdown block by block on every streaming surface (#39647)
Live reasoning and reduced-motion replies passed streaming but never growing,
so each update re-parsed the whole message (~260ms avg per update on a 20KB
reply in happy-dom, vs ~3ms block by block).
2026-11-07 17:42:39 -08:00
OrcaWinandOrcaWin e833bb703c test: remove 140 low-value tests (#39644)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:40:01 -08:00
OrcaWinandOrcaWin 62cb2dde86 refactor(i18n): read render-path translations from useTranslate in sidebar (remaining) (#39382)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:34:22 -08:00
Jinjing ce1426b8eb improve chat ui rolleout (#39420)
* wip

* Standardize chat UI launch tip telemetry on corner-card-v3
2026-11-07 17:27:31 -08:00
OrcaWinandOrcaWin 27b12f5081 fix(native-chat): key option support and terminal reads on the snapshots they already take (#39641)
The accepted option support and the selection controller's terminal revision were read from mutable owners during render. Pass the reader snapshot and the selection revision each hook already subscribes to as recomputeOn inputs, so a compiled memo recomputes exactly when those values can change. Without the compiler the reads are unchanged.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:25:09 -08:00
OrcaWinandOrcaWin 898fd25226 refactor(i18n): read render-path translations from useTranslate in sidebar (workspace cards, worktree list) (#39375)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:16:39 -08:00
Jinjing 40aab37bb6 Hide merge badges on workspace cards (#39638)
* Hide the merging badge on workspace cards

* Show only cherry-pick conflict badges on workspace cards
2026-11-07 17:14:58 -08:00
OrcaWinandOrcaWin 126cf690ae test: remove 158 low-value tests (#39639)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:10:38 -08:00
Jinjing a238176954 Open HTML previews in the editor's tab group (#39367)
* wip

* Open HTML previews in the editor's tab group

Keep previews in the invoking group for local and remote files, and
avoid changing the selection if the user navigates away while opening.

* test: cover HTML preview from editor

* fix perf issue

* Prevent HTML previews from opening on the wrong host

* Guard HTML previews against workspace ownership changes
2026-11-07 17:07:14 -08:00
OrcaWinandOrcaWin 30cf87d0a1 refactor(i18n): read render-path translations from useTranslate in settings (remaining panes) (#39371)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 17:00:44 -08:00
OrcaWinandOrcaWin e4a479ceec test: remove 282 low-value tests (#39632)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:51:15 -08:00
OrcaWinandOrcaWin 2daee44e9b refactor(i18n): read render-path translations from useTranslate in settings (appearance, accounts, agents, source control, mobile, shortcuts, editor, voice) (#39366)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:42:09 -08:00
OrcaWinandOrcaWin 63e019af72 fix(renderer): key render reads on the version hooks they already call (#39629)
Host chat-agent readers called useHostStructuredAgentsVersion, CrewRowTime
called useNow, and both discarded the value before reading module state or wall
time. The titlebar portal target was a bare document lookup. React Compiler
would cache all three on unrelated inputs. The reads now go through recomputeOn
with the returned version, and the titlebar lookup moves into a tiny hook whose
result the compiler never caches. With the compiler off the code runs the same.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:35:24 -08:00
OrcaWinandOrcaWin 10e8eaeb5d fix(renderer): key external-store reads on the subscription version they already take (#39628)
* fix(renderer): key external-store reads on the subscription version they already take

Browser driver, remote viewer, client-hosted row and automation visibility hooks
subscribed with useSyncExternalStore, discarded the version, then read module
state. useHighlightedSyntax did the same with a reducer tick. React Compiler
memoizes those reads on their arguments only, so they would stop updating.
Each read now goes through recomputeOn with the version it already has; with
the compiler off the same code runs on the same renders.

* fix(renderer): read the client-hosted row selection through its subscription version

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:34:52 -08:00
Brennan Benson fd334f1e99 Show CI results in the chat that opened or pushed to a pull request (#39020)
Shows CI result lines in the chat that opened or pushed to a pull request. They're hidden in the terminal overlay and on the phone until the phone app gets the setting.
2026-11-07 16:34:21 -08:00
OrcaWinandOrcaWin 892c536ecf fix(renderer): replace the last two bare void reads React Compiler would drop (#39626)
The browser page mount admission hook now returns its useSyncExternalStore
snapshot instead of recomputing it after a discarded subscription, and the
sleeping sweep keys its wall-clock read on the grace tick with recomputeOn.
Both run the same code with the compiler off; the hazard baseline is now empty.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:25:30 -08:00
Kelvin Amoaba 5a6e0510e1 fix(mobile): save only the listing a pre-turn read waits on, not later reads (#39622) 2026-11-08 00:21:08 +00:00
OrcaWinandOrcaWin 810080fe86 test: remove 468 low-value tests (#39614)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 16:13:17 -08:00
Jinjing 51d6192d7a fix(agent-picker): search fallback models and show cached models while the list refreshes (#39444)
* fix(agent-picker): search fallback models and show cached models while the list refreshes

The new-tab agent picker's search skipped any agent whose model catalog was
unknown, while that agent's model submenu still listed the built-in models,
so typing "gpt" found nothing even though Codex showed GPT models. Search now
covers the same models the submenu offers.

The picker also waited for a fresh model probe on every read, and Claude and
Codex catalogs go stale after two minutes, so most opens showed the built-in
list for 0.5-1.5s. Like the chat composer, it now reads the saved listing
first and shows it at once, then follows with the waiting read, which joins
the same host refresh (no extra probe). An unknown catalog still takes the
waiting read, as before.

* Fix model catalog refresh when reopening the agent picker

* fix(agent-picker): wait only for active catalog refreshes
2026-11-07 16:08:26 -08:00
Kelvin Amoaba 3c1149ea5e fix(runtime): keep a terminal's last output on exit and stop charging dropped screencast frames (#39384)
* fix(runtime): keep a terminal's last output on exit and stop charging dropped screencast frames

* fix(browser): clear an oversize frame held for credit instead of retrying it
2026-11-08 00:03:09 +00:00
Kelvin Amoaba aa30c8140a fix(mobile): keep the saved model list right across late reads and account switches (#39470)
* fix(mobile): keep held model lists through late preloads and running chats

* fix(mobile): let progress answers fill empty lists and decide recording per read

* fix(mobile): record a pre-send listing on rejoin and leave unheld retirements alone

* test(desktop): use a valid listed catalog in the preload race test

* test(mobile): type the catalog cache test's renderer
2026-11-07 23:45:44 +00:00
Kelvin Amoaba 50a4cccbad perf(runtime): cache OMP and Grok model discovery for desktop IPC too (#39402) 2026-11-07 23:44:49 +00:00
Kelvin Amoaba 336fd01968 fix(tasks): confirm a lost Tasks comment by author on GitLab and GitHub REST reads (#39422)
* fix(tasks): confirm a lost Tasks comment by author on GitLab and GitHub REST reads

Only GitHub GraphQL's viewerDidAuthor marked the viewer's comments, so on GitLab,
the GitHub REST fallbacks (including issues with more than 100 comments) and the
gh view fallbacks the phone kept an unconfirmed draft even after the comment
posted. Those reads now match the login of the account that made them, and an
explicit PR refresh reads comments uncached.

* fix(mobile): settle an unconfirmed comment only on one posted after the send

A refresh of an issue with more than 100 comments reads comments the first
load never showed, so an older identical comment by the same account looked
new and could clear the draft.

* refactor(gitlab): share the glab viewer read and skip it on Checks polling

* test(mobile): pin the clock in the unconfirmed comment test
2026-11-07 23:44:06 +00:00
Kelvin Amoaba 659f279a0f fix(mobile): chat follow-ups for held replies, per-chat zoom and streamed math (#39403)
* fix(mobile): chat page follow-ups

- clear the touch state when the chat hides, so a held reply lands on return
- keep the chat pinch scale per chat
- record waiting display-math openers in the math plugin instead of a line regex
- share the details markup test and the orphan row id predicate

* fix(mobile): record math openers whose scan reaches the end, skip no-op pinch commits

* fix(mobile): fall back to a whole parse only for details section tags

* refactor(mobile): drop a repeated comment
2026-11-07 23:39:23 +00:00
Kelvin Amoaba 4c43219b74 perf(mobile): open Jump back in and notifications inside the host document (#39474)
* perf(mobile): open Jump back in and notifications inside the host document

* fix(mobile): gate open targets on page 3, keep notification suppression, fold double taps

* fix(mobile): report the shown session from host documents and only open this host's sessions

* test(mobile): ignore the page's location report in the agent-history notify check

* fix(mobile): let a Back before the paint gate settle the host stack

* refactor(mobile): build the route-param clear frame beside its name
2026-11-07 23:39:10 +00:00
Kelvin Amoaba 525e11196e perf(mobile): let the model pill take picks before the chat attaches (#39379)
* perf(mobile): let the model pill take picks before the chat attaches

* fix(mobile): lock the picker while a held pick is sent and keep the mode toggle for attach

* fix(mobile): report a held pick's refusal only for its own chat
2026-11-07 23:34:27 +00:00
Kelvin Amoaba ed3a3fd9f6 perf(mobile): reuse the connection's status in the automation editor and chat capability check (#39345)
* perf(mobile): route the last status.get callers through the shared status read

* refactor(mobile): drop the unused one-shot Codex reset capability read

* fix(mobile): open the chat transcript when the text-append check fails, and key connections on one epoch
2026-11-07 23:27:28 +00:00
OrcaWinandOrcaWin 7b509e477a test: remove 581 low-value tests (#39608)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 15:25:35 -08:00
Jinwoo Hong 2e3d58691f fix(automations): retain interrupted verdict after agent quits to shell (#39397) 2026-11-07 18:05:57 -05:00
OrcaWinandOrcaWin 8f368c1df0 refactor(i18n): read render-path translations from useTranslate in settings (repository, browser, terminal, runtime environments, ssh) (#39356)
Applies pnpm i18n:reactive-translate --helpers. Output is unchanged: t delegates
to translate() and helpers default the threaded parameter.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 14:57:09 -08:00
OrcaWinandOrcaWin 26179069b6 test: remove 763 low-value tests (#39604)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 14:44:04 -08:00
OrcaWinandOrcaWin 8da13a8e6d test: remove 585 low-value tests (#39600)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 14:23:58 -08:00
OrcaWinandOrcaWin 60003df154 feat(i18n): make render-path translation reactive to the UI language (#39353)
Add useTranslate()/useIntlLocale() backed by a TranslationScopeProvider whose key
changes only with the active language or its own resources, an AST codemod that
rewrites render-path translate()/getIntlLocale() calls and threads the hook values
into render-called helpers, a helper analysis report, and a ratchet that keeps
render-path module translate() calls from growing. Apply the codemod to
components/native-chat.

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 13:44:33 -08:00
OrcaWinandOrcaWin 0956e333d3 test: remove 313 low-value tests (#39592)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 13:35:39 -08:00
OrcaWinandOrcaWin ed67e11362 test: remove 255 low-value tests (#39587)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 13:16:01 -08:00
5bb273776e perf(memory): run ps without a shell on each Resource Manager poll (#39445)
The Resource Manager samples every 2 s while visible. execFile runs ps
directly instead of through /bin/sh -c, one fewer process per tick, with
the same arguments and output.

The collector test mocked child_process.exec; it now mocks execFile.

Co-authored-by: m4air <m4air@Mac.localdomain>
Co-authored-by: Neil <neil@stably.ai>
2026-11-07 12:58:54 -08:00
OrcaWinandm4air 9138c7b699 perf(file-explorer): select the active worktree's git status and expanded dirs (#39442)
The explorer subscribed to the whole gitStatusByWorktree and expandedDirs
maps, so a status or expansion write in any other worktree re-rendered it.
It only reads the active worktree's entry, so select that entry instead.

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-11-07 12:53:38 -08:00
Neil 05af4b2a66 chore(native-chat): remove rail wake comments (#39585) 2026-11-07 12:50:24 -08:00
Brennan Benson c3534a9954 feat(settings): show each settings group as a titled card (#39253)
* feat(settings): group settings into titled cards so section boundaries are clear

Each settings group now shows its title above its own card, with hairlines
between rows, replacing one shared card where group headers looked like rows.
Adds SettingsGroup; SettingsSection drops its outer card when a pane is built
from groups, and SettingsRow/SearchableSetting mark rows for the dividers.

* fix(settings): use status-warning tokens for the task sources banner

* fix(settings): avoid subtree-restyling :has() spacing and keep orchestration search copy

* fix(settings): keep agent catalog rows mounted when an agent moves from available to installed

* fix(settings): hide groups that search empties and divide rows inside multi-row wrappers

* fix(settings): drop pane-wide :has scans, keep group headers when search empties a card

Ruling D2/E2/S3 on #39253 review: outermost rows own dividers, only an empty
card hides (direct-child selector) so header actions like Remove Project stay,
and panes declare grouped statically. Also restores the whole-header Alt-click
for the release channel, gives App Icon and the Windows admin row stable cards,
and removes wrapper divs that kept emptied cards visible.

* test(settings): Option-clicking the Updates version line reveals the release channel switcher

* test(settings): stub the updater API without a type assertion
2026-11-07 12:37:16 -08:00
OrcaWinandOrcaWin a299de5630 test: remove 438 low-value tests (#39580)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 12:36:38 -08:00
Neil b0ac9ae521 refactor: organize native chat composer and conversation owners (#39534) 2026-11-07 12:26:03 -08:00
OrcaWinandOrcaWin 76ffc1f046 test: remove 618 low-value tests (#39576)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 12:06:11 -08:00
Brennan Benson c6e243d640 feat(native-chat): add /fork to fork a chat from its latest response (#39257)
* feat(native-chat): add /fork to fork a chat from its latest response

Typing /fork in a native chat now runs the same fork as "Fork from this
response", through the newest response still in context, instead of
passing the text to the agent. It is offered only where the host and
agent can fork, and answers with a composer notice while a response is
still running, before any response exists, while a fork is opening, or
when text follows the command.

* fix(native-chat): keep /fork off the transcript rows' fork surface

* fix(native-chat): read /fork's response from the hook's latest input
2026-11-07 11:56:39 -08:00
Brennan Benson 133bc99e5a Keep waiting chat input in one ordered queue (#39271)
* Prepare queue rows to preserve accepted delivery intent

* Keep waiting native chat input in one ordered queue

* Keep a typed view of admitted queue records

* Keep the removed queue caption in the runtime catalog

* Remove the unused queue barrier caption

* Keep queue writes local and preserve accepted send provenance

* Read the sender from the queued admission request

* Keep continuation fixture clock within its operation window

* Remove deleted queue-barrier test from ratchet baseline

* Keep ratchet baseline change scoped to the deleted test

* Filter historical acceptance reads before loading payloads

* Instrument cached acceptance cursor once per fixture

* Restore original personal provenance after legacy card cleanup

* Complete legacy sender fixture metadata

* Narrow admitted history record types

* Reconstruct accepted personal proof after restoring original admissions

* Use the fixed clock for historical queue fixtures

* Consolidate queue source and type imports

* Preserve admission refusals and failed startup ownership

* Keep manual queue holds independent of later turn endings

* Remove obsolete mobile queue barrier expectations

* Keep journal format initialization independent of its decoder

* Assert returned-row recovery for released send clients

* Preserve Stop assertion across handoff-only publication
2026-11-07 11:35:38 -08:00
OrcaWinandOrcaWin d1bc1f7c9b test: remove 354 low-value tests (#39570)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 11:33:46 -08:00
Brennan Benson a20b16a595 Redesign Antigravity chat sign-in settings (#39248)
* Redesign Antigravity chat sign-in settings

Settings rows for method, project and location; one full-size Sign in
button named for the method; a status badge; the chat runtime install
row inside the card; and no save error while Enterprise fields are
still empty.

* Use primitive variants for Antigravity sign-in styling

* Drop Antigravity sign-in strings translated on main after removal

* Announce settled sign-in, keep Change account after a cancelled switch, reset paste form per flow
2026-11-07 11:32:13 -08:00
OrcaWinandOrcaWin bd9483483c test: remove 395 low-value tests (#39568)
* test: remove 396 low-value tests

* test: remove 395 low-value tests

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-07 11:20:25 -08:00