Commit Graph
3283 Commits
Author SHA1 Message Date
Neil eb96ef94de fix: keep sidebar cards clear of gutter (#4602) 2026-06-03 17:13:26 -07:00
Brennan BensonandOrca 065c620c10 Preserve split-terminal setup milestone (#4546)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 17:11:29 -07:00
Benny Jiang 6ba4bf4fd4 fix: don't spawn Codex in the background when signed out (#4593)
The rate-limit quota poller fetches Codex usage on app start, window
focus, and every poll. Unlike the Claude and Gemini fetchers (which read
credentials from files/keychain and hit an HTTP endpoint), the Codex
fetcher always spawns the real codex binary — 'codex app-server' over
RPC, and on RPC failure an interactive codex PTY running /status.

For users who have Codex installed but never signed in, this surfaces as
an unexpected Codex process starting in the background even though they
never launched Codex. The spawn can only fail without auth.

Gate the fetch on the presence of Codex auth (auth.json under the
resolved CODEX_HOME / managed-account home). When absent, return
status 'unavailable' without spawning anything, mirroring how the other
providers stay quiet until configured. Signed-in users are unaffected.
2026-06-03 20:10:51 -04:00
Brennan BensonandOrca 1ebbab575c fix: hide setup checklist sidebar for existing users (#4584)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 16:53:31 -07:00
Brennan BensonandOrca 5142a24536 Simplify project add handoff (#4530)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 16:50:35 -07:00
Neil 6e77c02fc6 fix: update Electron and revert UTF-8 write mitigations (#4598) 2026-06-03 16:45:01 -07:00
Andrii Valenia 2ba6f00db4 Add tab and workspace rename keyboard shortcuts (macOS) (#3280)
Adds configurable macOS shortcuts for renaming the active terminal tab and active workspace, with review follow-up fixes for conflict detection, sidebar reveal, lineage child rename surfaces, and floating workspace focus scoping.
2026-06-03 19:29:20 -04:00
Jinwoo HongandOrca d9f2d4ac6c Support remote host Windows terminal UI (#4589)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 16:21:43 -07:00
Neil 0bbd103f5f Add process-gone diagnostics to crash reports (#4596) 2026-06-03 16:20:03 -07:00
885f3c3b25 Fix macOS provider launch failures (#3958)
* fix: handle macos provider launch failures

* fix macos provider launch failure race

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

* fix repeated missing upstream probes

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-03 18:57:44 -04:00
Trevin Chow 2c2ac2edbf fix: handle detached launch spawn errors (#3957) 2026-06-03 18:46:00 -04:00
Neil f62bf927cd Fix Electron stats JSON crash (#4595)
Avoid Electron 42.3.x's broken bulk UTF-8 conversion when persisting stats JSON. The crash loop reproduced when sparse non-ASCII strings in orca-stats.json were rewritten after restored terminal activity triggered a debounced stats save.

Add regression coverage for the sparse non-ASCII payload and surrogate-pair boundary handling.
2026-06-03 15:38:36 -07:00
Neilandthiagomsoares 996b69dce0 Harden large app state UTF-8 writes (#4587)
* fix: write stats file in chunks to avoid Electron UTF-8 abort

orca-stats.json gains an event on every agent start/stop. After about a
month of use mine had grown to ~3.6k events / ~608 KB, and the app started
hard-crashing a few seconds after every launch (SIGTRAP, no catchable JS
stack):

    Assertion failed: (length + 1) <= (capacity())
    node::MaybeStackBuffer<char>::SetLengthAndZeroTerminate <- node::Utf8Value

The crash is in StatsCollector.writeToDiskSync(), which saves the whole
file in one writeFileSync(JSON.stringify(data)). Electron 42.3.2's bundled
Node aborts when encoding a string that large to UTF-8 in a single write;
stock Node 24 handles the same file fine and the data is well-formed, so
it's an Electron/Node encoding limit, not bad data. The save runs on a
debounce after agent_start, which restored agents fire on launch -- so it
crashed right after opening.

Write the JSON in 64 KB slices through one fd instead (never splitting a
surrogate pair), and lower MAX_EVENTS 10k -> 1k so the file can't grow back
this large. Lifetime aggregates are unaffected.

Verified by reproducing the abort standalone with the real 608 KB file
under ELECTRON_RUN_AS_NODE, confirming the chunked writer round-trips it
byte-for-byte with no crash, and running a patched build that loads the
file without crashing. The underlying encode abort is an Electron/Node bug
to report upstream.

* fix: harden stats JSON writes

* fix: chunk app state UTF-8 writes

* fix: stabilize status and terminal polling

---------

Co-authored-by: thiagomsoares <5190162+thiagomsoares@users.noreply.github.com>
2026-06-03 14:58:28 -07:00
40d8eeb8a5 fix: write stats file in chunks to avoid Electron UTF-8 abort (#4571)
* fix: write stats file in chunks to avoid Electron UTF-8 abort

orca-stats.json gains an event on every agent start/stop. After about a
month of use mine had grown to ~3.6k events / ~608 KB, and the app started
hard-crashing a few seconds after every launch (SIGTRAP, no catchable JS
stack):

    Assertion failed: (length + 1) <= (capacity())
    node::MaybeStackBuffer<char>::SetLengthAndZeroTerminate <- node::Utf8Value

The crash is in StatsCollector.writeToDiskSync(), which saves the whole
file in one writeFileSync(JSON.stringify(data)). Electron 42.3.2's bundled
Node aborts when encoding a string that large to UTF-8 in a single write;
stock Node 24 handles the same file fine and the data is well-formed, so
it's an Electron/Node encoding limit, not bad data. The save runs on a
debounce after agent_start, which restored agents fire on launch -- so it
crashed right after opening.

Write the JSON in 64 KB slices through one fd instead (never splitting a
surrogate pair), and lower MAX_EVENTS 10k -> 1k so the file can't grow back
this large. Lifetime aggregates are unaffected.

Verified by reproducing the abort standalone with the real 608 KB file
under ELECTRON_RUN_AS_NODE, confirming the chunked writer round-trips it
byte-for-byte with no crash, and running a patched build that loads the
file without crashing. The underlying encode abort is an Electron/Node bug
to report upstream.

* fix: harden stats JSON writes

---------

Co-authored-by: thiagomsoares <5190162+thiagomsoares@users.noreply.github.com>
Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-03 14:48:41 -07:00
Jinwoo HongandOrca 0a679e992c Fix agent completion sidebar bell (#4590)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 17:35:30 -04:00
843d969c7d fix(tabs): make the active tab clearly stand out (#4545)
* fix(tabs): make the active tab clearly stand out

The active tab was marked only by a 1px dark-navy line on its top edge,
which read as just another border and was easy to lose in a long, busy
tab strip.

Replace it with a 2px `primary` bar on the bottom edge (bridging the tab
into the panel it controls), a subtle theme-uniform background lift, and
brighter text. The bar leads in both light and dark; the lift uses a
color-mix wash instead of `accent`, whose contrast against `card` is
near-zero in light mode but heavy in dark, so the two themes no longer
lead with different cues. Applies across terminal, browser, and editor
file tabs via the shared indicator constant and wrapper styling.

* fix(tabs): centralize active tab styling

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

* fix(git): cache missing upstream status probes

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

* fix(terminal): defer sustained ANSI redraw bursts

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-06-03 17:27:20 -04:00
Neil 9b3eace37b Fix Linear issue list response compatibility
Fixes #4588
2026-06-03 14:23:26 -07:00
Neil 280234a73e fix: stop OpenTUI redraw and git polling freezes (#4585)
* fix: budget foreground terminal redraw writes

* fix: cache stable no-upstream git probes
2026-06-03 14:13:02 -07:00
Trevin Chow be594b8652 Fix macOS helper path and token cleanup (#3961)
## Summary
- stop the macOS helper from unlinking caller-supplied socket and token paths
- keep parent-owned token cleanup tied to the helper startup that created it
- fail closed for non-socket socket-path collisions and cover helper cleanup races with regression tests

## Verification
- swift test --package-path native/computer-use-macos
- pnpm exec vitest run --config config/vitest.config.ts src/main/computer/macos-native-provider-client.test.ts
- pnpm run typecheck:node
- pnpm lint
- pnpm run build:computer-macos
- Electron/helper startup smoke validation
2026-06-03 16:59:02 -04:00
Neil 9061330ab5 test: reproduce terminal TUI and git polling regressions (#4581)
* test: reproduce terminal and git polling freezes

* test: document regression repro triggers
2026-06-03 13:34:27 -07:00
Jinwoo HongandOrca f958228739 Fix remote runtime worktree selectors (#4582)
* Fix remote runtime worktree selectors

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

* Harden remote worktree selector call sites

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-06-03 16:19:08 -04:00
Neil 6dc779c4f4 Address react doctor warnings 2026-06-03 12:48:00 -07:00
Neil 7bf33ea224 Fix new workspace shortcut terminal focus (#4565) 2026-06-03 12:25:54 -07:00
Jinwoo HongandOrca 9190a3391f Fix stale sidebar agent status spinner (#4577)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 12:21:39 -07:00
Jinwoo HongandOrca c5d3d595a4 Fix remote server switch reachability probe (#4578)
Co-authored-by: Orca <help@stably.ai>
2026-06-03 14:59:33 -04:00
Jinjing 82104c4a0c fix: delete untracked files without confirmation (#4572) 2026-06-03 10:44:22 -07:00
Jinjing 2d42e77309 Revert "Preserve explicit slept workspace state (#4536)"
This reverts commit 0d2abc5cb7.
2026-06-03 09:48:03 -07:00
Jinjing 7c701c9319 Revert "Fix hide sleeping lineage restoration (#4543)"
This reverts commit 195f3e94f9.
2026-06-03 09:48:03 -07:00
Neil dd53a46b95 Revert "Improve new worktree startup timing" (#4564) 2026-06-03 02:22:17 -07:00
Neil 8eee59c084 revert: remove terminal retention changes (#4562) 2026-06-03 02:12:47 -07:00
Neil 3079e4690a Improve new worktree startup timing 2026-06-03 01:42:14 -07:00
Neil c9c0418612 perf: cache floating tab count selector (#4550) 2026-06-03 00:07:45 -07:00
NeilandOrca 7834d3d297 Redesign shortcuts settings UX (#4554)
- Remove the Groups nav rail; filter shortcuts by search + status only
- Fold keybindings.json path into the subsection subtitle and move the
  Edit File in Orca action into the header
- Replace the floating hover-card action popover with an inline recorder:
  keycaps (or an Add shortcut placeholder) click to record in place, and
  Reset/Disable reveal on row hover/focus
- Fix a grid align-content stretch bug that opened a large gap between
  shortcut groups in the scroll area

Co-authored-by: Orca <help@stably.ai>
2026-06-02 23:54:10 -07:00
Jinwoo HongandOrca 0f2b918773 Avoid Claude CLI fallback during rate-limit refresh (#4553)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 23:44:46 -07:00
Jinwoo HongandOrca 205494b7ba Fix file search match parsing (#4542)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 22:11:37 -07:00
Jinwoo HongandOrca 195f3e94f9 Fix hide sleeping lineage restoration (#4543)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 22:09:36 -07:00
Jinjing 192fcde21d Revert "Use icon button for check run details" (#4541) 2026-06-02 22:00:30 -07:00
Neil cc96aec459 fix: restore parked terminals from main snapshots (#4539) 2026-06-02 21:43:56 -07:00
Jinjing f6ce5a3f8c test: cover web GitHub repo upstream route (#4538) 2026-06-02 21:29:50 -07:00
Jinjing 60e2dbb4ab Use icon button for check run details (#4537) 2026-06-02 21:24:30 -07:00
Jinjing 0d2abc5cb7 Preserve explicit slept workspace state (#4536)
* Track explicitly slept worktrees in session state

- Persist user sleep intent separately from inactive terminal/browser state
- Use slept markers for sidebar, jump palette, kanban, and activation deferral
- Preserve slept markers across local, web, and remote workspace sessions

* Preserve slept worktree state across remote sync

- Merge remote sleep/default-terminal markers by target workspace so remote
  hydration does not discard local markers
- Let Sleep run for selected worktrees even when they only have preserved
  wake hints, while avoiding reconnects for explicitly slept legacy sessions

* Allow session snapshots without slept worktree ids
2026-06-02 21:21:51 -07:00
Jinjing b960275db2 Remove toolbox menu from sidebar toolbar (#4535) 2026-06-02 21:13:52 -07:00
Trevin Chow d617a08a8a fix: follow a worktree in the sidebar when you pin or unpin it 2026-06-02 20:56:34 -07:00
Trevin ChowandNeil abfe9bd329 Default repo avatars to the GitHub upstream owner and flag forks (#4522)
* Default repo avatars to the GitHub upstream owner and flag forks

Make the GitHub owner avatar the default repo icon and surface it as the
primary choice in the icon picker (the "Image" tab becomes "Avatar",
moves first, and opens by default). For forks, resolve the upstream/
parent owner so the avatar reflects the source repo instead of the
personal fork, and show a fork indicator (GitFork glyph + "Fork of
owner/repo" tooltip) next to the repo in the sidebar and settings.

Fork detection prefers the offline `upstream` remote, falling back to a
`gh repo view --json isFork,parent` lookup; the resolved upstream is
stored on the repo. Existing repos self-correct via a one-time startup
backfill (local repos) and a lazy backfill when their icon settings open
(SSH repos); new repos resolve at add-time. Reset now restores the
default (re-detecting the upstream) instead of clearing to the Folder
icon.

* Harden repo upstream avatar handling

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
2026-06-02 20:55:35 -07:00
Trevin Chow da3c359a74 Show repo icon on pinned worktree cards (#4517)
The Pinned section mixes worktrees from every repo, yet cards identified
their repo only by a color dot — and showed no repo cue at all when the
sidebar was grouped by repo (hideRepoBadge). Render each repo's configured
icon (lucide/emoji/image) as a leading glyph on pinned cards regardless of
grouping, so a mixed-repo pinned list is scannable at a glance.

Extract a shared RepoIdentityChip so the pinned icon and the compact inline
badge use one chip + tooltip shell.
2026-06-02 20:48:38 -07:00
Jinjing fef6e042f5 fix: address agent status display (#4533) 2026-06-02 20:45:11 -07:00
Neil 256ae1ef0b Clean up long renderer JSX files 2026-06-02 20:31:40 -07:00
Jinwoo HongandOrca c0b573abda Persist editor drafts for hot exit (#4499)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 18:49:13 -07:00
Jinwoo HongandOrca def3374e76 Show delete progress for lineage child workspaces (#4532)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 18:42:46 -07:00
Neil 1ab6b87c7f Add bounded terminal renderer retention (#4523) 2026-06-02 18:40:45 -07:00