Commit Graph

6444 Commits

Author SHA1 Message Date
Neil e82eb82716
perf(renderer): purge sparse-preset maps when a repo is removed (#7564)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:45:29 -07:00
Neil 39dbab41d8
perf(renderer): purge three orphaned tab/worktree module maps on removal (#7562)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:44:58 -07:00
Neil aa3936c1e0
perf(main): bound agent-hook closed-tab suppression set (#7561)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:44:18 -07:00
Neil c4c934cf7c
perf(main): bound authorized-external-path set with LRU eviction (#7556)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:43:43 -07:00
Neil ec52db6d20
perf(main): drop localhost label routes when a worktree is removed (#7557)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:43:05 -07:00
Brennan Benson 7237c8e592
Route title-status consumers through one pane-agent-evidence seam (title evidence plan, PR 2) (#7600)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 16:39:20 -07:00
github-actions[bot] ee2e3a30a5 release: v1.4.126 2026-07-06 22:59:57 +00:00
Brennan Benson 99ae2dc90f
Show full workspace file tree on mobile (#7289)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 15:41:51 -07:00
Brennan Benson a393facef8
Keep the Peek References scrollbar visible (#7584) 2026-07-06 15:28:09 -07:00
Jinwoo Hong bc84f4b04b
Speed up startup with deferred remote catalogs (#7087)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 15:15:15 -07:00
github-actions[bot] 014fd3cf26 release: v1.4.126-rc.0 2026-07-06 22:14:09 +00:00
Brennan Benson 16439fd499
perf(ai-vault): extend incremental transcript parsing to all append-only JSONL agents (STA-1417) (#7593)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 15:13:00 -07:00
Jinwoo Hong 417723411e
perf(source-control): stop gh rate-limit storms and idle git-status spawn churn (#7595)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 15:12:56 -07:00
Jinwoo Hong 377bde351c
Bridge WSL Codex sessions into runtime home (#7477) 2026-07-06 15:11:48 -07:00
Brennan Benson 6aed5c1122
Gate the Gemini GPU fallback on pane-owner evidence instead of raw title text (title evidence plan, PR 1) (#7458)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 15:01:06 -07:00
Dzmitry Bachko 47feae3fb3
fix(settings): portal the IDE Font dropdown outside the settings section
Fixes #7585
2026-07-06 13:46:50 -07:00
Neil 63384d0497
perf(renderer): gate the jump palette's status-map subscriptions while closed (#7558)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 13:31:08 -07:00
github-actions[bot] 28495f6036 release: v1.4.125 2026-07-06 20:25:41 +00:00
github-actions[bot] d8ed41f74c release: v1.4.125-rc.2 2026-07-06 18:27:45 +00:00
Brennan Benson 34a254956e
perf(ai-vault): reuse and incrementally parse session transcripts across scans (STA-1278) (#7525)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 11:09:44 -07:00
github-actions[bot] 883b56be6e release: v1.4.125-rc.1 2026-07-06 17:50:35 +00:00
github-actions[bot] 057db5b287 release: v1.4.125-rc.0 2026-07-06 17:14:30 +00:00
Brennan Benson fbaf3f7d81
Stop terminal flicker during active Claude Code sessions (#7540)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 10:11:27 -07:00
Rod Boev 4f284652c8
fix(orchestration): stop coordinator message auto-submit (#7391) 2026-07-06 10:05:03 -07:00
Trevin Chow cd3d0e99db
fix: add view file action to file context menu
* fix: add view file context menu action

* Address PR review feedback (#4620)

- Localize the View File context menu label

- Update file explorer virtual row test fixture

* test: cover view file context menu visibility

---------

Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-07-06 10:03:43 -07:00
github-actions[bot] 9d9ebe69af Update README downloads badge 2026-07-06 13:32:45 +00:00
Neil b41cab1a9e
fix(renderer): raise renderer V8 heap toward the 4GB pointer-compression cage (#7531)
* fix(renderer): raise renderer V8 heap toward the 4GB pointer-compression cage

Renderer OOM ('renderer crashed'/'oom', exit 5 / 0xE0000008 / SIGTRAP) is the
dominant crash in the crash channel: the renderer JS heap reaches Chromium's
default V8 old-space ceiling (~RAM/4) and V8 aborts. Two adversarial leak hunts
(13 agents across every renderer subsystem) found no unbounded GB-scale leak, so
this is a capacity ceiling, not a leak.

Chromium sizes the renderer heap at ~RAM/4, leaving 8-15GB machines well under
V8's ~4GB pointer-compression cage (an 8GB machine caps near 2.2GB). Reclaim that
unused headroom via --max-old-space-size in a focused startup module, gated on
physical RAM (>=8GB, ~40% of RAM, floor 3072MB, capped at the real 4096MB cage).
16GB+ machines are already at the cage so this is a no-op for them; low-RAM
machines keep the default to avoid trading a clean OOM for OS memory-pressure
kills.

Overridable with ORCA_RENDERER_HEAP_MB (number to force, default/off/0 to opt
out). Verified on Electron 42.3.3: the main-process js-flags switch propagates to
the renderer V8 and is honored up to the 4096MB cage (5000/12288 -> 4096).

Co-authored-by: Orca <help@stably.ai>

* fix(renderer): address CodeRabbit — floor-to-0 override + Linux 8GB gate

- parseRendererHeapOverrideMb: a fractional override in (0,1) floored to 0 and
  emitted an invalid --max-old-space-size=0; treat floored-to-0 as an opt-out.
- Lower the RAM gate from 8 to 7.5 GiB: os.totalmem() on Linux reports MemTotal
  (excludes kernel/firmware-reserved RAM), so a real 8 GB box reports ~7.7 GiB
  and was wrongly excluded from the headroom — the exact crashing population.
  7.5 still cleanly excludes 6 GB machines (report ~5.7 GiB).

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-07-06 02:13:10 -07:00
Neil e33b2006f4
Remove stale max-lines lint disables from files under the limit (#7548)
110 files carried an eslint/oxlint-disable max-lines directive but are
already under the default max-lines budget (300 .ts / 400 .tsx / 600 .mjs
/ 800 test), so the suppression is dead. Removing it restores real
max-lines coverage on these files with zero behavior change.

Each removed directive had max-lines as its only rule; verified via a
full oxlint run (0 max-lines violations, 0 new errors). Diff is pure
deletions (200 lines, 0 additions) — no code touched.

Co-authored-by: Orca <help@stably.ai>
2026-07-06 02:12:32 -07:00
Neil dfc839fcb5
perf(renderer): gate WorktreeCardAgentsBody's send-target subscriptions (#7545)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 02:01:14 -07:00
Neil 2e44f72755
perf(main): stop allocating a debug snapshot on every PTY delivery event (#7541)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 02:00:29 -07:00
Neil b38f5babb4
perf(renderer): pause the shared useNow clock while the window is hidden (#7537)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:59:41 -07:00
Neil 82a59f8822
perf(renderer): purge pane-expand maps on worktree removal (#7534)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:58:32 -07:00
Jinjing 3c963dd285
Prepare mobile 0.0.24 (#7546)
Bump marketing version 0.0.22 -> 0.0.24 and Android versionCode 4 -> 5.

The 0.0.22 base was never committed after prior releases, so the Jul 6
builds carrying the show-all-worktrees fix (#7500) regressed below the
0.0.23 already on TestFlight (iOS) and collided with the existing
0.0.22/versionCode 4 APK (Android, no upgrade signal). Committing the
bump makes app.json authoritative again so 0.0.24 supersedes both.

Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:39:40 -07:00
Brennan Benson 28fe4df817
Preserve terminal scrollbar position after tab switches (#7472)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:33:05 -07:00
Jinwoo Hong 2e5057f341
Fix mobile emulator device rotation (#6326) 2026-07-06 01:26:36 -07:00
Brennan Benson eb8435950a
Clear a worktree's merged pull request after it switches to a different branch (#7460)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:26:10 -07:00
github-actions[bot] f2393c9555 release: v1.4.124 2026-07-06 08:22:48 +00:00
Brennan Benson 3826169c11
Keep Claude live-PTY refresh gate closed across restarts; recover wiped runtime credentials (STA-1246) (#7483)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 01:16:23 -07:00
Jinwoo Hong 3b081c11e0
Revert "feat(daemon): Phase 0 update-survival groundwork — daemon file log + packaged-update proof harness (#7532)" (#7535)
This reverts commit e9b9836da5.
2026-07-06 01:12:37 -07:00
Jinwoo Hong e9b9836da5
feat(daemon): Phase 0 update-survival groundwork — daemon file log + packaged-update proof harness (#7532)
Two independent pieces, no behavior change to terminal handling:

1. Daemon lifecycle file log. The detached daemon runs with stdio
ignored, so field failures have zero daemon-side evidence. The daemon
now writes rotated NDJSON lifecycle events (startup/ready/hello
accept+reject/session create/attach/exit/kill/shutdown/uncaught
exceptions) to logs/daemon.log via a new optional --log-file fork arg.
Fail-open (any fs error disables logging), adoption-neutral (old
daemons without the arg keep working, protocol untouched), and the
diagnostic bundle collector now includes the file, bounded by the same
lookback window as trace spans.

2. tools/win-update-e2e: a packaged NSIS update proof harness. Installs
version N, drives the installed app (isolated userData), plants a
canary marker session, silently updates to N+1, relaunches, and
asserts an explicit expectations profile: --expect cold-restore
(today's behavior) or --expect survival (the Phase 1 target). Window
flashes are detected by baseline-diffed window enumeration with
canary-title attribution; daemons are identified by command-line
marker, never exe name. Refuses to run when a pre-existing Orca app is
running or (without --allow-existing-install) installed, and only
uninstalls an install it fully owns.
2026-07-06 01:09:54 -07:00
Jinjing 2b5f6af0e9
Respect terminalWindowsShell setting for local Windows agent launches (#7526)
Ensure agent CLI startup and draft launch commands use the correct quoting
format based on the user's configured local Windows shell (e.g., cmd.exe).
This avoids using host settings for remote/SSH targets where local shell
preferences do not apply.
2026-07-06 01:05:56 -07:00
Brennan Benson be4d963905
test(windows): guard PowerShell setup-runner encoded delivery (#7236) (#7520)
Issue #7236 reported that any non-empty worktree Setup Script failed on
Windows PowerShell with a "missing terminator" parser error, regardless
of content. Root cause: in pre-encoded builds the setup-runner command
(`cmd.exe /c "<runner>"`) was typed into PowerShell as raw stdin, where a
dropped/unbalanced double quote got re-parsed as an open string.

Encoded-command delivery (base64 UTF-16, shipped in v1.4.81) already
fixes this by passing the command as a shell argument with quotes intact.
This adds a regression test tying resolveSetupRunnerCommand to
resolveWindowsShellLaunchArgs: the real setup-runner command must reach
PowerShell via -EncodedCommand (startupCommandDeliveredInShellArgs),
never raw stdin, with its quotes preserved verbatim.

Co-authored-by: Neil <neil@stably.ai>
2026-07-06 00:54:45 -07:00
Neil 88640ef4c6
docs(runtime): fix stale ps-snapshot factory comment after #7518 (#7529)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 00:44:21 -07:00
Brennan Benson 39c7bef3d6
Fix latent prefer-array-find lint error breaking verify on every PR (#7523)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 00:33:04 -07:00
Jinwoo Hong d9103d08c1
Revert "fix(terminal): launch prior/default agent when a woken terminal can’t resume" (#7524)
Co-authored-by: Orca <help@stably.ai>
2026-07-06 00:27:32 -07:00
Jinjing 3dd3cc9f68
Clarify Orca orchestration tool boundary and sidebar lineage (#7522)
* Clarify Orca orchestration tool boundary and sidebar lineage

Add a "Tool Boundary" section to the orchestration skill, requiring
explicit Orca runtime state instead of generic subagent tools or
chat-only parallel workers. Also add tests to verify the tool boundary
and clarify sidebar lineage for same-worktree workers.

* Clarify worktree lineage guidance and parent-child boundaries

Update orchestration guidance and tests to clarify when to use child versus
top-level worktree lineages, and when to prefer same-worktree workers.

* Require stating the desired Orca lineage before creating a worktree from
  an active feature branch.
* Limit child worktrees to conceptually stacked or dependent tasks.
* Prefer same-worktree workers unless isolated checkouts are explicitly
  needed and do not require uncommitted changes.
2026-07-06 00:05:49 -07:00
Neil 27ba95cf31
perf(runtime): cache parsed ps rows on POSIX so panes share one parse (#7518)
getProcessTableSnapshot deduped the ps fork (#6288/#6667) but cached only the
raw stdout string on POSIX, so every concurrent agent pane re-ran parsePsRows
over the identical output within each 500ms TTL window — O(M*P) redundant
tokenization + row allocation. The Windows reader already caches parsed rows;
this makes the POSIX default reader do the same by parsing inside the deduped
scan and returning ProcessTableRow[]. Collapses the duplicate parsePsRows in
the main and relay foreground resolvers into one shared parseProcessTableRows.

Co-authored-by: Orca <help@stably.ai>
2026-07-06 00:03:54 -07:00
Neil 8348443719
fix(emulator): remove destroyed listener on stream stop to stop webContents leak (#7517)
* fix(emulator): remove destroyed listener on stream stop to stop webContents leak

Both emulator stream IPC handlers register owner.once('destroyed', ...) per
start but never remove it on stop. .once only self-removes when the event
fires (window close), so every emulator tab show/hide cycle leaked a closure
on the long-lived main-window webContents — ~11 cycles trips Node's
MaxListenersExceededWarning and the closures grow unbounded until the window
dies. Store the handler on the session/subscription and removeListener on stop.

Co-authored-by: Orca <help@stably.ai>

* chore(emulator): trim why-comment to 2 lines, drop no-op afterEach

Review polish: honor AGENTS.md 1-2 line comment guidance and remove a
vi.clearAllTimers() that is a no-op without fake timers.

Co-authored-by: Orca <help@stably.ai>

---------

Co-authored-by: Orca <help@stably.ai>
2026-07-06 00:03:31 -07:00
Neil f6954cb5d2
fix(checks): stop Checks tab flip-flopping between 'Branch not published' and 'PR status unavailable' (#7519)
The empty-state copy chooser only handled idle PR-refresh statuses inside the
ambiguous-hosted-review guard. When a background PR refresh went active
(queued/in-flight) or errored, it fell through to the publish-branch branch and
rendered 'Branch not published' on a no-upstream branch. As the refresh cycled,
the panel flip-flopped between the two messages (most visible on Windows, where
local git latency widens the active window).

Resolve the whole empty state inside the ambiguous guard so the copy is stable
across the entire refresh lifecycle: 'error' -> 'Could not refresh pull request',
every other status -> 'Pull request status unavailable'. The ambiguous state can
no longer surface publish guidance.

Co-authored-by: Orca <help@stably.ai>
2026-07-05 23:58:22 -07:00
Neil ce687221d3
lint(unicorn): enable prefer-number-properties, prefer-array-find, prefer-array-index-of (#7516)
Enable three unicorn rules — one correctness, two performance — and fix every
existing violation repo-wide so the rules pass as errors.

prefer-number-properties (76 sites)
- parseInt/parseFloat/NaN -> Number.* : safe aliases (autofixed).
- isNaN -> Number.isNaN (12 sites, hand-converted): global isNaN coerces its
  argument, Number.isNaN does not. Verified every call site already passes a
  number (Number.parseInt results, number-typed fields, Date.getTime()), so the
  conversion is behavior-preserving today and guards against a future non-numeric
  argument silently coercing.

prefer-array-find (26 sites)
- .filter(pred)[0] -> .find(pred); .filter(pred).at(-1) / .pop() -> .findLast(pred).
  Drops the intermediate array and short-circuits.

prefer-array-index-of (5 sites)
- .findIndex(x => x === v) -> .indexOf(v).

Verified: typecheck (node/cli/web) clean, 53 affected suites pass (1679 tests),
oxlint clean repo-wide. mobile/ uses findLast safely (already ships ES2023
.toReversed()); config scripts and e2e helpers run on Node 24.
2026-07-05 23:56:37 -07:00