Commit Graph
5586 Commits
Author SHA1 Message Date
Jinjing 2edfad0fc6 Clarify full handoff routing guidance (#6687) 2026-06-28 19:51:14 -07:00
Neil 0976f9427c fix(linux): disable GPU sandbox to stop terminal input freeze on Wayland (#5319) 2026-06-28 19:43:18 -07:00
Jinjing 4a07a1dd86 fix(terminal): keep post-spawn reconcile alive through locks (#6684) 2026-06-28 19:24:37 -07:00
NeilandOrca 8555acbee4 fix: restore right-click "Mark Unread" in compact worktree cards (#6677)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 19:19:35 -07:00
Jinjing 6e2a3a4b6a Keep custom and prefilled workspace names as user-authored (#6680)
Avoid automatically managing or overwriting manually entered or prefilled
workspace names in the composer state. This ensures user-authored names
are preserved and not overridden by linked-item or AI-generated naming,
unless the prefilled name matches the linked work item seed.
2026-06-28 19:00:47 -07:00
Jinjing 31d35b14fc Fix mobile terminal close keyboard dismissal (#6681)
* fix: dismiss keyboard before tab actions

* fix: reset mobile tab sheet keyboard listener
2026-06-28 18:46:31 -07:00
Jinjing 3c614b2e68 Fix terminal history, focus recovery, and stale PTY events (#6354)
* Wire terminal-initiated worktree navigation to back-and-forth stack

* Unify terminal-driven worktree activation and Cmd+J recency marking.
* Record worktree visits in the back/forward history stack unless navigating history.

* Resolve stale terminal focus and ignore late exits from old PTYs

- Repair the active terminal pane leaf selection when a pane's PTY exits, preventing focus from being stranded on a dead pane.
- Ensure stale, pruned, or unbound terminal leaves are not persisted as active in visual layouts or shutdown snapshots.
- Ignore late exit notifications and subscription end events from old PTY transports or remote stream handles after a reconnect or rebind.

* Prevent active terminal focus on dead panes and ignore stale PTY events

- Redirect active keyboard focus to a live, PTY-backed sibling pane
  if the focused pane dies, fails to spawn, or is hydrated without a
  live connection.
- Ignore stale data, replay messages, and subscription rejection errors
  from older PTY sessions after a transport has reconnected.
- Avoid persisting stale PTY bindings and dead pane focus inside
  terminal shutdown layout snapshots.

* Clear pending input when attaching a different remote terminal handle

When switching between different remote terminal handles, debounced input
meant for the previous terminal could get incorrectly flushed and sent
to the newly attached terminal.

Fix this by clearing the batcher's pending state (text and byte counts)
and invoking `inputBatcher.clear()` if the attached terminal handle
changes.

* Add window wake recovery hook for visible terminal panes

- Extract and enhance window focus and visibility change recovery logic
  into a dedicated `useTerminalWindowWakeRecovery` hook.
- Recover the xterm renderer, input surface, and WebGL texture atlases
  when macOS/display wakes or the window/tab regains focus.
- Schedule recovery steps with requestAnimationFrame to ensure the
  terminal layout settles correctly.

* Fix mutable variable capturing in remote transport test

Avoid mutating a local `let` variable from inside a Promise executor
closure by wrapping the rejection callback in a `const` object.

* Prevent duplicate terminal wake recovery on overlapping window events

When window focus and visibility events fire concurrently, they can trigger multiple redundant wake recovery passes.

- Return early if a wake recovery frame is already scheduled.
- Keep the scheduled animation frame instead of canceling it to ensure we get a settled recovery pass.
2026-06-28 18:11:15 -07:00
NeilandOrca 31bfeff01d fix(gitlab): thread MR search query and surface MR base failures (#6263) (#6591)
Defect 1: the typed GitLab MR search query was dropped before reaching
the API. Thread query?: string end-to-end through the renderer effect,
the source-lookup, the preload/RPC args, and the desktop IPC handlers
(which previously passed a hardcoded undefined), and honor it on both the
glab REST path (&search=) and the cwd-inferred 'glab mr list' fallback.

Defect 2: when MR base resolution failed the renderer silently returned,
leaving baseBranch undefined so the worktree was created off the repo
default branch (origin/master) with no feedback. Surface the failure via
toast and clear stale base state, mirroring the GitHub PR path. Also make
resolveManagedMrBase resilient to an optional compare-base (target branch)
fetch failure: degrade gracefully by dropping compareBaseRef instead of
aborting, so a merged MR with a deleted target ref still resolves to its
valid source-branch base.

Fixes #6263

Co-authored-by: Orca <help@stably.ai>
2026-06-28 18:05:29 -07:00
Jinwoo Hong f49808c540 Fix Windows terminal cursor restore (#6646) 2026-06-28 21:02:28 -04:00
Jinjing 93867ba05c fix: dismiss keyboard before tab actions (#6671) 2026-06-28 17:32:22 -07:00
NeilandOrca 06392a4523 perf: dedupe relay process-table scans behind a short-TTL cache (#6288) (#6667)
* perf: dedupe relay process-table scans behind a short-TTL cache (#6288)

Agent foreground-process inspection runs `ps -axo pid=,ppid=,stat=,command=`
(a full system process-table scan) on a 750ms/2000ms per-pane cadence. On a
shared SSH relay every tracked agent terminal drives it, so concurrent panes
each forked their own `ps` — sustaining up to the per-second inspection cap of
full-table scans for as long as agents are open, pinning idle relay CPU and
amplified by AV process scanning. This is the CPU half of #6288 (PR #6564
covers the memory-leak half).

Memoize the scan behind a single in-flight promise + 500ms TTL shared by the
relay and local main-process call sites. 500ms sits below the active poll's
minimum inter-poll gap (~675ms after jitter), so a single pane never reuses a
snapshot older than it would have scanned itself — same data and freshness,
just deduplicated within the cadence window (worst case ~8 scans/sec -> ~2).

Failures are never cached (in-flight cleared on settle) so a transient `ps`
error retries and the existing best-effort fall-through is preserved. Windows
branches are untouched; no git-provider implications.

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

* test: regression guard for #6288 ps-scan volume (repro + measurement)

Drives the real local foreground-inspection call site under the documented
750ms agent-completion cadence across 6 concurrently-inspecting agent panes
over a 30s window, counting actual `ps -axo pid=,ppid=,stat=,command=`
full-table scans.

Reproduces the waste on `main` (240 inspections -> 240 scans, 1.0/inspection;
the test fails there) and proves the fix (240 inspections -> 40 scans,
0.167/inspection — bounded by poll ticks, not pane count) while every pane
still resolves its foreground agent. Guards against regressing the cache back
to a per-call scan.

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

* docs: clarify 500ms TTL covers cadence floor + tolerated event-driven staleness (#6288)

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-28 17:28:37 -07:00
Jinjing 7c6f88ba6e fix: address review findings (#6666) 2026-06-28 16:53:32 -07:00
Neil 2e59e066b0 fix: bound preload runtime subscription IPC listeners to O(1)
Fixes #6288. Bounds preload runtime subscription IPC listeners to one active dispatcher per renderer and releases subscription state on terminal cleanup paths.
2026-06-28 16:53:03 -07:00
NeilandOrca 6154aded34 Quiet-window Pi/OMP intermediate done so resumed work cancels notification (#6361) (#6558)
Pi (pi.dev) and OMP are goal/mission agents whose normalizePiCompatibleEvent
maps milestone agent_end -> hook state 'done' while they are still working.
observeHookStatus gated the quiet window on `workingStatusObserved`, so these
intermediate 'done' events (workingStatusObserved === false) fell through to an
immediate "agent finished" notification while the TUI kept spinning, and a
follow-up working event could not cancel it.

Route Pi/OMP 'done' through the existing quiet window via a new
doneShouldUseQuietWindow() predicate (delegating to a shared
isPiCompatibleAgentType on the canonical PiAgentKind), so resumed work cancels
the premature notification. Codex and other turn-end-only producers keep their
immediate dispatch.

Also harden the process-exit backstop: skip the agent-evidence teardown while a
quiet-window 'done' is pending, otherwise a poll that finds the agent gone would
clear hasAgentRunEvidence and the timer would silently drop the real completion.

Co-authored-by: Orca <help@stably.ai>
2026-06-28 16:52:55 -07:00
github-actions[bot] 8c51ab12fa release: v1.4.105-rc.1 v1.4.105-rc.1 2026-06-28 23:44:09 +00:00
NeilandRod Boev adcf74a9fb fix: root monorepo subfolder imports at the git repo while keeping the first terminal in the subfolder (#6336) (#6574)
Add Project → Browse folder on a monorepo subfolder (e.g. /tmp/monorepo/packages/web)
stored the subfolder as Repo.path because isGitRepo() uses
`git rev-parse --is-inside-work-tree`, which is true for any subdirectory.
Authoritative worktree resolution then snapped activation back to the repo root,
so the import identity mismatched and the first terminal landed at the repo root
rather than the selected subfolder.

Canonicalize local git imports to the actual repo root via getGitRepoRoot()
(mirroring the SSH import path that snaps to check.rootPath, including its
post-resolution dedup), and preserve the user-selected subfolder as a one-shot
initial terminal cwd consumed only by the first activation-created pane.
Selecting the repo root applies no override, and re-importing a subfolder of an
existing project dedupes.

Supersedes community PR #6362.

Fixes #6336

Co-authored-by: Rod Boev <rodboev@users.noreply.github.com>
2026-06-28 16:33:06 -07:00
Jinjing ca90af2450 Remove tracked node_modules symlink (#6662)
* Remove tracked node_modules symlink

The node_modules directory was accidentally committed as a symlink
pointing to a developer's local absolute path. This breaks builds in
CI and on other developer environments.

* Fix direct launch remote test expectations
2026-06-28 16:29:52 -07:00
NeilandUtkarsh Parekh c906405eab Fix remote File Explorer opening files via local fs:readFile (#6440) (#6562)
Co-authored-by: Utkarsh Parekh <145644114+utkarshparekh@users.noreply.github.com>
2026-06-28 16:21:43 -07:00
NeilandOrca 863a5ec09c fix(terminal): forward synthesized/dictated text dropped under kitty keyboard protocol (#6513) (#6575)
* fix(terminal): forward synthesized/dictated text dropped under kitty keyboard protocol

With xterm's kitty keyboard protocol active, xterm encodes a printable key
on keydown and preventDefaults it, which cancels Chromium's native
insertText on the helper textarea. The IME punctuation forwarder added in
#6417 was gated to CJK input sources (isEnabled), so on a non-CJK (e.g. U.S.
Latin) input source it never armed and any synthesized text — dictation,
text expanders, accessibility / CGEvent injection — was silently dropped
before reaching the PTY.

Part A: drop the CJK-only gate so the forwarder arms on macOS regardless of
input source (the drop affects every locale, not just CJK punctuation).

Part B: forward a standalone non-composing insertText that no key event
produced. Injected prose/words never satisfy the punctuation-keydown claim
path, so recover them from the helper-textarea input event, guarded against
double-send (key-activity attribution, unresolved claimed press), against
composition (insertCompositionText + composition-commit), and via
stopImmediatePropagation so xterm's own _inputEvent cannot also forward.

Fixes #6513

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

* fix: broaden terminal injected text forwarding

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-28 16:18:56 -07:00
Jinjing cea920a3e4 Harden failed check details links (#6661)
* fix: harden failed check details links

* chore: remove tracked node_modules symlink
2026-06-28 16:17:32 -07:00
Jinjing 3d3453c216 Propagate upstream errors from branch-based PR discovery (#6660)
Previously, transient errors during candidate branch discovery (such as
rate limits or network issues) were silently ignored, leading to a
false "no-pr" result and causing the sidebar PR state to flicker.

Now, track and return any pending error encountered during branch
lookups, propagating it as an upstream error if no PR is successfully
recovered.
2026-06-28 16:17:01 -07:00
NeilandOrca 5ac7119c13 fix: suppress false zero-dimensions terminal error for hidden panes (#6475) (#6576)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 16:15:50 -07:00
Jinjing b6c0cb4f62 Migrate terminal scrollback setting from bytes to rows (#6593)
* Migrate terminal scrollback setting from bytes to rows

Transition terminal scrollback configuration from a byte-based (MB)
limit to a row-based count to align with standard terminal emulator
behavior.

- Introduce a shared scrollback policy to handle normalization and
  safe migration of legacy byte presets to row equivalents.
- Update persistence logic to automatically convert and clean up legacy
  settings on startup and write-back.
- Refactor the advanced settings interface and localization strings
  to let users configure scrollback in terms of rows (up to 50k).
- Live-apply row limit changes directly to mounted xterm instances
  without recreating panes or restarting PTY sessions.

* Migrate terminal scrollback setting from bytes to rows

Transition terminal scrollback configuration from a byte-based (MB)
limit to a row-based count to align with standard terminal emulator
behavior.

- Introduce a shared scrollback policy to handle normalization and
  safe migration of legacy byte presets to row equivalents.
- Update persistence logic to automatically convert and clean up legacy
  settings on startup and write-back.
- Refactor the advanced settings interface and localization strings
  to let users configure scrollback in terms of rows (up to 50k).
- Live-apply row limit changes directly to mounted xterm instances
  without recreating panes or restarting PTY sessions.

* defer updating terminal scrollback rows until blur or Enter

Avoid committing terminal scrollback row setting changes on every
keystroke, which can trigger rapid updates with incomplete or
invalid numbers. Instead, manage a local draft state and commit to
settings only when the input is blurred or the user presses Enter.
2026-06-28 16:13:16 -07:00
Brennan BensonandOrca 5d29b55187 Replace automation pause/resume button with an on/off toggle (#6642)
* Replace automation pause/resume button with an on/off toggle

The External automations list showed two play-glyph icon buttons side by
side when a job was paused: a run button and a pause/resume button. Replace
the pause/resume button with an on/off Switch beside the Active/Paused badge,
leaving the action cluster with just Run, Edit, and Delete.

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

* Document why the in-flight spinner matches both action keys

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

* Move automation toggle to the trailing edge of the row

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

* Align automation toggle to the right of the title line

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

* Pin automation toggle to the row's right edge

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-28 16:10:36 -07:00
Neil 654dafb4f1 fix: use plain orca CLI shim for Claude Agent Teams on SSH remotes (#6586) 2026-06-28 16:03:16 -07:00
NeilandOrca da48fa71dd Refuse cross-worktree global fallback for browser text insertion (#5093) (#6563)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 15:58:15 -07:00
b916248294 Polish desktop native chat view (#6641)
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-06-28 15:43:07 -07:00
github-actions[bot] bcbcf4126b release: v1.4.105-rc.0 [rc-slot:2026-06-28-15] v1.4.105-rc.0 2026-06-28 22:26:44 +00:00
Brennan BensonandOrca b847a9df89 Run setup scripts for scheduled automation worktrees (#6236)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 15:25:35 -07:00
Brennan BensonandOrca 710d567e82 Suppress Codex auto-approval notifications (#6230)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 15:25:06 -07:00
Brennan BensonandOrca ef6e643031 Update mobile 0.0.17 release links (#6654)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 15:23:00 -07:00
Jinwoo HongandOrca db2ce7a10d Fix remote-host automation ownership (#6636)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 15:20:56 -07:00
Rod BoevandJinwoo Hong 5e3d8a12bf fix(terminal): support Windows shell selection for SSH hosts (#6466)
* fix(terminal): support Windows shell selection for SSH hosts

* fix(runtime): register SSH Windows capability preflight RPC

* fix(terminal): honor remote Git Bash and split preflight IPC seams

* fix(terminal): keep SSH Windows shell state tied to the selected host

* fix(terminal): preserve Windows SSH shell selection

---------

Co-authored-by: Jinwoo Hong <73622457+Jinwoo-H@users.noreply.github.com>
2026-06-28 15:08:13 -07:00
Jinjing 60baa449d4 Fix sidebar shortcut combo spacing (#6651) 2026-06-28 14:50:52 -07:00
Jinjing 1b8e7c5bb5 Improve sidebar search button styling and shortcut rendering (#6601)
* Redesign the search button in the sidebar to look like a standard input field with a border, background, and absolute icon positioning.
* Replace the basic `<kbd>` label with `ShortcutKeyCombo` elements driven by `useShortcutKeyComboDetails`.
* Show the shortcut combinations when the search container is focused as well as hovered.
2026-06-28 14:46:28 -07:00
JinjingandOrca 11a0a36087 fix(terminal): poll across frames in post-spawn PTY reconcile (#6649)
Follow-up to #6644. The merged fix used a single post-spawn
requestAnimationFrame, which did not fully close the first-mount column
race: the pane's real layout can keep changing for several frames (split
equalize, sidebar/title reflow), so a one-shot re-fit could still measure a
stale width and leave the PTY pinned. The golden 'during initial mount' e2e
test failed ~1 in 9 runs with the single-frame version.

Poll for up to 12 frames, forwarding the settled size to the PTY only when
it differs from what the PTY was last told (mirroring the existing
ResizeObserver stability loop). Each resize is gated on an actual change, so
a TUI sees at most a couple of SIGWINCH during startup, not a loop.

Verified: golden test passes 6/6 with repeat-each + retries; full spec
15/15. Without this change the single-frame version is intermittently flaky.

Co-authored-by: Orca <help@stably.ai>
2026-06-28 14:44:01 -07:00
github-actions[bot] d3e6449373 release: v1.4.104-rc.6 v1.4.104-rc.6 2026-06-28 20:58:59 +00:00
Jinjing 8430a10a10 fix(terminal): reconcile PTY size after spawn to fix first-mount column desync 2026-06-28 13:56:44 -07:00
Brennan BensonandOrca a278a30b1c Let agents wait for setup when requested (#6298)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 13:50:00 -07:00
github-actions[bot] ca6c3c207a release: v1.4.104-rc.5 v1.4.104-rc.5 2026-06-28 20:11:27 +00:00
Brennan BensonandOrca 8ed890374a Refresh project worktrees created outside Orca (#6241)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 13:09:05 -07:00
github-actions[bot] b38e88a5cc release: v1.4.104-rc.4 v1.4.104-rc.4 2026-06-28 19:49:57 +00:00
Brennan BensonandNeil 5cb02a9420 Keep Orca visible when Windows startup stalls (#6462)
Co-authored-by: Neil <neil@stably.ai>
2026-06-28 12:31:57 -07:00
Brennan BensonandOrca 7019693e6f Keep PR checks aligned with branch switches (#6458)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 12:00:09 -07:00
Brennan BensonandNeil d6f3f514d6 Fix agent session row drag restore (#6463)
Co-authored-by: Neil <neil@stably.ai>
2026-06-28 11:58:02 -07:00
Brennan BensonandOrca e58a5e9e17 Simplify Appearance settings (#6459)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 11:50:29 -07:00
Brennan BensonandOrca 6015ad07a0 Show working tree in file explorer for repos using a separate Git directory (#6482)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 11:46:59 -07:00
Brennan BensonandOrca 5c3ba7be91 Improve inactive workspace cleanup UX (#3600)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 11:38:23 -07:00
Brennan BensonandOrca a71b865867 Show PR status for branch worktrees at a merged PR head (#6607)
Co-authored-by: Orca <help@stably.ai>
2026-06-28 11:22:07 -07:00
github-actions[bot] 6b1a4497db Update README downloads badge 2026-06-28 12:46:30 +00:00