Commit Graph
10565 Commits
Author SHA1 Message Date
Neilandmmarabel e4f599df05 perf(worktrees): preserve Git scans when saving sidebar order (#27343)
* perf(worktrees): preserve Git scans when saving sort order

Credit @mmarabel for identifying the repeated scans and the host-only approach in #27271.

Co-authored-by: mmarabel <166927047+mmarabel@users.noreply.github.com>

* perf(worktrees): skip Git scan invalidation for order saves on desktop hosts too

The desktop window notifier ran the worktree-change invalidators unconditionally,
so a desktop (or paired-host) Orca still cleared Git scan caches on every sidebar
order save. Carry the invalidateGitScans flag through the notifier; every other
caller keeps the default.

---------

Co-authored-by: mmarabel <166927047+mmarabel@users.noreply.github.com>
2026-10-10 21:24:34 -07:00
Jinwoo Hong 74856c83b3 fix(dev): keep Node-only Quick Open path accumulator out of the renderer (#27372)
The renderer imports quick-open-listing-limits for the result cap, but the
same module also held a Buffer-backed accumulator that imports the CommonJS
@orca/process-host dist. Vite dev serves that dist as raw ESM, so the named
import failed and the workspace workbench and right sidebar crashed. Move the
accumulator to its own main-only module.
2026-10-11 00:22:18 -04:00
Neil dae2cc9110 test(runtime): enforce ANSI preview-final pre-filter invariant (#27376)
Follow-up to #27344. isTerminalPreviewLineControl now gates on
isTerminalPreviewLineControlFinal, so the normalizeTerminalChunk
pre-filter cannot drop a final the predicate accepts. Add a test over
every CSI final 0x40-0x7e and replace String.prototype.charCodeAt spies
with behavior assertions.
2026-10-10 21:21:27 -07:00
Neil f49d0bc764 test(main): guard against a shared journal no-row sentinel returning (#27375)
Follow-up to #27342: the existing tests also pass on the old module-level
Error, so add one that fails if a single error object is reused.
2026-10-10 21:19:50 -07:00
YEONGUK LEE 1e5031e134 fix(i18n): correct Korean CI check translations (#27367)
* fix(i18n): correct Korean CI check translations

* fix(i18n): clarify Korean GitLab pipeline requirement
2026-10-10 21:11:29 -07:00
Neil c2d5430489 [CI] Fix test fixtures and reduce unnecessary test setup (#27330)
* [CI] Fix E2E folder and catalog fixtures

* [CI] Strengthen folder readiness and reuse composer fixtures

* [CI] Repair E2E catalog owners and retain stronger unit checks

* [CI] Defer optional unit deletions to avoid extra CI jobs

* [CI] Forward Monaco test mocks to the real editor API

* [CI] Make agent launch fixtures handle probes and terminal resize

* [CI] Avoid unused test initialization and flush version probe output
2026-10-10 21:06:11 -07:00
NeilandMatheus Breguêz 41de89a626 fix: spell source NUL separators as Unicode escapes (#26864)
Co-authored-by: Matheus Breguêz <23284276+matbrgz@users.noreply.github.com>
2026-10-10 21:04:49 -07:00
Neilandoutof-place bc02f3ce6e perf(main): release startup allocations held by journal sentinel (#27342)
Credit to outof-place for identifying the retention and proposing the focused fix in #27335. Independently validated 15.19 MiB of collectible startup allocations.

Co-authored-by: outof-place <contact@outofplace.space>
2026-10-10 21:01:23 -07:00
Neilandoutof-place b411bf33fd perf(runtime): reduce terminal ANSI scanning work (#27344)
Adapted from outof-place normalization work in #27170. Preserve tail behavior while avoiding repeated CSI scans and newline-density regressions.

Co-authored-by: outof-place <contact@outofplace.space>
2026-10-10 21:00:37 -07:00
NeilandRishabh Jain a2c2f8b859 fix(computer-use): clean up completed permission helpers asynchronously (#27347)
* fix(computer-use): clean up completed permission helpers asynchronously

Stop the helper belonging to each finished status check without waiting
for a process scan on the main thread. Keep concurrent probes, setup
prompts and agent helpers running.

Adapted from #22451; fixes the cleanup gap reported in #22436.

Co-authored-by: Rishabh Jain <18290665+jrishabh55@users.noreply.github.com>

* test(computer-use): derive cleanup expectations from host paths

---------

Co-authored-by: Rishabh Jain <18290665+jrishabh55@users.noreply.github.com>
2026-10-10 20:55:35 -07:00
Neilanddrakeo338 56d25b00bd fix(settings): reenable terminal link Actions after an old opt-out (#26853)
An explicit Actions, Open URL, or Leave to terminal choice now also writes the
legacy terminalLinkActionPopoverEnabled switch, so an older opt-out no longer
snaps the Actions selection back to Leave to terminal.

Fixes #25576

Co-authored-by: drakeo338 <paranoyouz@gmail.com>
2026-10-10 20:47:45 -07:00
Jinwoo Hong 666d990bc0 Record a display-only snapshot of each paired server's tabs (inert) (#27359)
* feat(layout): record a display-only snapshot of each paired server's tabs

Records the session.tabs.subscribeAll frames main already relays to the window
into a new remoteLayoutSnapshots profile domain (design 6.3, D3). No new server
requests; written only by the recorder; dropped when the server is removed.
Nothing reads it yet.

* fix(layout): keep only what the snapshot draws and save it on structure changes

Drop retirement proofs (sent as deltas) and one-shot navigation from recorded
workspaces; save immediately only when tabs or groups change, letting title
ticks ride the next save; drop the protocol field.
2026-10-10 23:36:37 -04:00
e0625521ac fix(files): a managed terminal links and opens a host file outside its workspace (#27364)
* fix(files): a managed terminal links and opens a host file outside its workspace

A paired-server terminal checked out-of-workspace paths on this computer, so a
host file such as /tmp/screenshot.png never became a link, and a click was
refused. Link detection now asks the host the same question a click asks, with
the printing terminal's handle, and a granted file opens read-only through the
host's existing terminal-artifact grant.

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

* fix(files): a restored server-granted tab is never this computer's file

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

* test(e2e): keep the external-image journey's /tmp outside every workspace

The default folder workspace is /tmp, so the image resolved into it instead of
exercising a host file outside all workspaces.

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

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
Co-authored-by: Claude <noreply@anthropic.com>
2026-10-10 20:36:10 -07:00
OrcaWinandm4air 5f350a3786 fix(ssh): restore saved port forwards on managed hosts and show their Ports tab (#27361)
* fix(ssh): restore saved port forwards on managed hosts; show Ports for managed workspaces

* test: annotate the mock connection casts

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 20:01:11 -07:00
cf36928a69 test(native-chat): unmount the cut-turn notice hooks after each test (#27358)
A rendered hook left mounted can commit after happy-dom is torn down, which
fails the shard with "window is not defined" from React's scheduler.

Co-authored-by: m4air <m4air@Mac.localdomain>
Co-authored-by: Claude <noreply@anthropic.com>
2026-10-10 19:44:23 -07:00
OrcaWinandm4air 1dde4c0049 fix(projects): create on a server's SSH project; Add Project SSH lists the server's targets (#27331)
* fix(projects): create on a server's SSH project; Add Project lists the server's SSH hosts

* fix(projects): derive server SSH states; drop redundant casts

* fix(composer): a server's SSH project gets its agents from the server

* fix(composer): only agent detection treats a server's SSH project as the server's

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 18:41:46 -07:00
OrcaWinandm4air e6af89741f feat(ssh): a paired client can manage the server's own SSH hosts (ssh.target-management.v1) (#27329)
* feat(ssh): manage a paired server's own SSH targets over RPC (ssh.target-management.v1)

* fix(ssh): keep a browsed remote path untrimmed

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 18:25:54 -07:00
Jinwoo HongandClaude f6d536dcda Save runtime-started tabs in the tab bar before their terminal starts (#27083)
* Write runtime-started panes with their tab bar entry and group before they spawn

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

* List the headless reorder's row-order finding and mark the headless group writer for the switch

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

* Admit runtime-started tabs into the targeted or focused tab group

A phone, CLI or orchestration create on a headless host with two tab groups was written into the
first group, so after a restart the tab moved groups. The phone's targetGroupId, else the host's
focused group, now reaches the pane admission.

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

* Admit an untargeted runtime-started tab into the first tab group

Defaulting to the host's focused group moved a CLI-created tab to the right group after a restart
and in the desktop window, while main and the live view keep it in the first group. Only the
phone's explicit targetGroupId now picks the group.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-10 21:22:45 -04:00
Neil 91f9744d3a fix(settings): return current preferences after slow updates (#27199)
* fix(settings): return current preferences after reconciliation

* test(settings): run SQLite reply regressions in Node
2026-10-10 17:36:49 -07:00
OrcaWinandm4air 77d5de1f6c fix(orcad): provide the orca CLI in Windows managed-host terminals (#27324)
Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 17:18:01 -07:00
outofplaceandoutof-place ee8cd8e58f perf(ai-vault): pipeline fresh transcript discovery with bounded I/O (#27009)
Overlap transcript stat/sidecar reads in ordered batches (4 workers per root, 8 global slots); WSL stays sequential.

Fixes #27008

Co-authored-by: outof-place <contact@outofplace.space>
2026-10-10 17:14:25 -07:00
OrcaWinandm4air b4d8e370da fix(orcad): install agent status hooks when a managed host starts (#27319)
* fix(orcad): install agent status hooks when a managed host starts

* fix(orcad): read login-profile Grok/Kiro homes before installing hooks

* refactor(agent-hooks): run the login-shell home probe through process-host

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 17:08:36 -07:00
Neilandpetersindex 884575a797 fix(github): verify cached integration PRs after tracking is removed
Use the existing REST PR mapping to read the head repository's default
branch when no tracked remote or origin can identify it. Require matching
repository and head metadata, and preserve the PR if the lookup fails.

This clears both closed and merged integration PRs cached by a fork
checkout after its upstream tracking is removed.

Co-authored-by: petersindex <287557875+petersindex@users.noreply.github.com>
2026-10-10 17:08:10 -07:00
Neilandpetersindex 82c5484f66 fix(github): scope PR selection and clear rejected cached links
Apply the default-branch policy while probing each repository, so an
integration PR cannot preempt a valid result or suppress the same number
in another repository. Check branch heads by repository and server.

Invalidate remote defaults when their review scope or SSH provider changes.
Report rejected PR URLs through an optional refresh-result field, so merged
integration PRs clear from both caches even at the current worktree head.
Share the manual and coordinator cache update implementation.

Co-authored-by: petersindex <287557875+petersindex@users.noreply.github.com>
2026-10-10 17:08:10 -07:00
Neil 0bc07c9954 fix(github): validate implicit default-branch PR repository identity 2026-10-10 17:08:10 -07:00
petersindex 7ac9f4d2f1 fix(github): compare a tracked upstream with its own remote's default branch
A fork's upstream remote can default to a different branch than origin.
Read refs/remotes/<remote>/HEAD for the tracked remote and fall back to
origin's default only when git never recorded it. Reuses the default-branch
resolver's host routing and cache.
2026-10-10 17:08:10 -07:00
petersindex ae861b76c1 fix(github): don't link a PR headed by the default branch a branch tracks
A branch made with `git switch -c feature/x origin/develop` tracks the
default branch. When its own PR lookup missed, the tracked-upstream fallback
attached the newest PR whose head is `develop` (an unrelated develop to
release PR) and cached its number, so the wrong link survived restarts.

Drop a match headed by the tracked upstream when that upstream is the default
branch of a repo PRs target. The check runs only after such a match, so normal
polling adds no git calls, and it also heals numbers cached before the fix.

Fixes #26948
2026-10-10 17:08:10 -07:00
Neil 8b2c795d8a test(native-chat): seed large transcript fixtures in one transaction 2026-10-10 17:05:02 -07:00
Neil b74e9464eb fix(native-chat): prepare SQLite readers for ZCode-only WSL homes 2026-10-10 17:05:02 -07:00
Neil 3d51f67f2f test(native-chat): seed ZCode through the execution host 2026-10-10 17:05:02 -07:00
Neil 45c4d6ecbb fix(native-chat): preserve ZCode store selection and transcript order 2026-10-10 17:05:02 -07:00
star-nebula ecc3433bdf feat(native-chat): read ZCode session transcripts through the OpenCode SQLite reader
ZCode's CLI persists an OpenCode-v1-shaped history in its own SQLite store
(~/.zcode/cli/db/db.sqlite). The Agent Session History scan already lists
those sessions, but opening one in the native chat found nothing: the chat
transcript path had no ZCode awareness.

Resolve a zcode transcript against the ZCode database (native home, then WSL
homes) before any OpenCode install, tag every read (signal, page, subscribe)
with the agent, and apply the same hidden-transcript filter the scan uses so
ZCode's hidden bookkeeping rows stay out of chat renders.
2026-10-10 17:05:02 -07:00
db2ed7ca36 perf(mac): name terminals in Orca instead of ps tty= (#27146)
Ask ps for raw terminal device numbers and name them in Orca: a verified direct lookup of /dev/ttys<minor> per distinct terminal, with an exact first-alias /dev scan fallback. Removes Apple ps's per-row /dev scan (~1 s CPU per capture on a busy Mac).

Fixes #24889

Co-authored-by: Giorgio Zamparelli <giorgio.zamparelli@gmail.com>
Co-authored-by: out-of-place <contact@outofplace.space>
2026-10-10 16:45:23 -07:00
Neil 6de900fcc6 test(zcode): verify rollback with real Windows file permissions 2026-10-10 16:24:14 -07:00
Neil 1f6ab26ec6 fix(accounts): preserve competing keys during failed GLM saves 2026-10-10 16:24:14 -07:00
Luchong ae573a9063 fix(accounts): keep an identical plaintext key after a failed restore
A restored plaintext envelope can match the rejected replacement byte for
byte. Do not delete that file, since it is the previous key rather than a
new secret.
2026-10-10 16:24:14 -07:00
Luchong c33fa877d4 fix(accounts): remove a rejected GLM key when restore fails
A failed plaintext replacement can publish the new key before file
restriction is confirmed. If restoring the previous key fails before it
replaces that file, delete only the rejected envelope so a completed
restore is left intact.
2026-10-10 16:24:14 -07:00
NeilandTauri-EPO a09dc9aa71 fix: honor inactive Claude account retry deadlines (#26936)
Automatic inactive Claude account refreshes now reuse each account’s existing retry deadline before sending requests. Healthy accounts keep refreshing, and manual forced refresh retains its current behavior.

Partially addresses #26588.

Co-authored-by: Tauri-EPO <enrico.pin@gmail.com>
2026-10-10 16:12:08 -07:00
Neil 04f8f2b5d8 feat(accounts): isolate ZCode sign-in terminal setup 2026-10-10 16:04:51 -07:00
Neil 7dfcef4e10 test(composer): reuse fixtures to restore the main lint gate 2026-10-10 16:04:08 -07:00
Neil b9ea43ba9e test(accounts): keep quota fixtures consistent with saved state 2026-10-10 16:04:08 -07:00
87da8432cd fix(zcode): isolate read-only account discovery and quota ownership
Co-authored-by: Luchong <lu740528977@gmail.com>
Co-authored-by: GuanBear <guanbear@users.noreply.github.com>
2026-10-10 16:04:08 -07:00
OrcaWinandm4air e7ee93e265 docs(rpc): a paired client runs commands as you; say so when pairing (#27317)
* docs(rpc): paired workspace access runs commands as the user; pairing dialogs say so

* docs(rpc): mobile is gated by its allowlist, not by tier

* docs(rpc): wrap comment

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 15:53:43 -07:00
Neil 68519e63b9 fix(composer): preserve explicit workspace names after selecting tasks (#26937)
Preserve names entered after selecting a work item in desktop, mobile and folder creation. Reuse the existing source and last-generated-name state, and avoid repeating source naming when a delayed base lookup finishes.

Verified the current-main merge composition: 70 focused tests and renderer typecheck pass; newer execution-host routing and folder launch checks remain intact. The reviewed PR head has no failed or pending CI checks and no unresolved review threads.
2026-10-10 15:32:21 -07:00
Neilandkambarakun eaf5dbed9e fix(cli): preserve alias recovery while guarding destructive suggestions (#26934)
Co-authored-by: kambarakun <kambarakun@gmail.com>
2026-10-10 15:16:18 -07:00
Neil 8ba353a1a7 [CI] Refresh unit timing weights and reduce repeated test setup (#27315) 2026-10-10 15:15:03 -07:00
OrcaWinandm4air 42be4c50d4 chore(settings): rename "Active Server" to "Default host for new projects" (#27286)
* chore(settings): rename "Active Server" to "Default host for new projects"

The setting (still activeRuntimeEnvironmentId) now only picks the host for new
projects with no source and the initial host of the Settings host picker, so
the copy says that. Refusal and help text say existing projects stay on their
own host, the provider-scope hints point at the Settings Host menu, and the
Remote Orca Servers search entry keeps "active server" as a keyword.

* fix(settings): credential hints point at the setting that still scopes them

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 15:01:12 -07:00
OrcaWinandm4air ddcbb78013 chore(lint): bypassing owner routing fails lint (#27313)
* chore(lint): delete the focus-routing helpers; bypassing owner routing fails lint

The last six renderer sites (Settings visibility defaults, preflight readiness,
Linear key dialog copy) mirror the default scope host and now say so through
defaultScopeHost. getActiveRuntimeTarget and settingsForRuntimeOwner are
deleted with their re-exports, the unused settings-fabrication helpers go with
them, and the owner-routing baseline is empty, so any new use fails lint. The
provider dispatch rationale is rewritten in neutral, shorter terms.

* test(preflight): keep the existing cast's rationale on the edited line

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 14:43:42 -07:00
OrcaWinandm4air e7d7c5bbeb refactor(worktrees): worktree create, listing, removal and repo hook/ref reads route by their owner (#27298)
* refactor(worktrees): worktree create, listing, removal and repo hook/ref reads route by their owner

Worktree create, prefetch, detected listings and missing-terminal teardown,
preserved-branch cleanup and removal follow the repo or workspace owner.
Repo hook and base-ref reads take the repo's host id instead of settings.
Composer, settings panes and the setup guide pass the selected repo's host.

* test(hooks): build the duplicate-row state without a cast

---------

Co-authored-by: m4air <m4air@Mac.localdomain>
2026-10-10 14:28:22 -07:00
Neil 26ee9bbfab [CI] Reduce repeated test setup and unnecessary packaging (#27308)
* [CI] Reduce repeated test setup and remove source text checks

* [CI] Consolidate transcript tests and preserve fixture-only CI routing

* [CI] Retarget reliability gate to consolidated transcript suite
2026-10-10 14:26:04 -07:00