Commit Graph
1259 Commits
Author SHA1 Message Date
github-actions[bot] 8559d07509 release: v1.3.23-rc.1 v1.3.23-rc.1 2026-04-28 05:48:26 +00:00
NeilandOrca 0e8571b58d Tabbed Create Workspace dialog (Quick / Create from…) (#1191)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:48:04 -07:00
JinjingandOrca a110b6d794 feat(ui): unify SSH workspace icon to Server across all surfaces (#1198)
SSH workspaces previously rendered as Globe in some places and Wifi in
others. Globe implies web/internet and Wifi implies wireless network
strength — neither reads as "remote machine". Use Server/ServerOff
across every SSH context for a consistent mental model. Globe remains
in true browser/web surfaces (browser pane, address bar, tabs, clone
from URL, Browser settings pane).

Co-authored-by: Orca <help@stably.ai>
2026-04-27 22:31:11 -07:00
Jinwoo HongandOrca 3abf68dbef fix(terminal): restore cursor visibility after scrollback replay (#1192)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:50:13 -07:00
Brennan BensonandOrca 4279fc8075 feat(agent-hooks): on-disk endpoint discovery for surviving PTYs (v2) (#1196)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:49:18 -07:00
Brennan BensonandOrca 812ca5488b fix(preload): collapse index.d.ts into type-checked api-types.ts (#1197)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 21:46:17 -07:00
Brennan BensonandOrca 76a1c691e9 test(e2e): assert on rendered DOM in 5 specs previously store-tautologies (#1194)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 20:55:47 -07:00
github-actions[bot] 4563d753bf release: v1.3.22 v1.3.22 2026-04-28 02:42:39 +00:00
Brennan BensonandOrca 1cfc3256c5 feat(status-bar): restructure memory/CPU popover and add row actions (#1190)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 18:11:59 -07:00
Brennan BensonandOrca 0ea27dfdd2 test(e2e): drive real composer flow for worktree creation (#1193)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 17:42:03 -07:00
github-actions[bot] 8f97e0009e release: v1.3.22-rc.6 v1.3.22-rc.6 2026-04-27 23:54:23 +00:00
Neil 1839a50c92 fix(new-workspace): unwrap getBaseRefDefault envelope in StartFromField (#1189) 2026-04-27 16:53:45 -07:00
Brennan BensonandOrca 3fe7162634 fix(sidebar): don't bump lastActivityAt when worktree is activated by click (#1169)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 15:53:52 -07:00
github-actions[bot] 821c9639fd release: 1.3.22-rc.5 [rc-slot:2026-04-27-15] v1.3.22-rc.5 2026-04-27 22:14:03 +00:00
github-actions[bot] d8beb057c9 release: v1.3.22-rc.4 v1.3.22-rc.4 2026-04-27 21:55:00 +00:00
Brennan BensonandOrca 3edb2f3ea2 fix(updater): surface user-initiated check failures when GitHub is down (#1181)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 14:50:39 -07:00
Kevin Acuña 7f6d42134d fix: resolve letter window shortcuts by layout-aware key (Dvorak/Colemak/AZERTY) (#1015) 2026-04-27 14:09:35 -07:00
github-actions[bot] 4d9816283a release: v1.3.22-rc.3 v1.3.22-rc.3 2026-04-27 21:05:44 +00:00
Brennan BensonandOrca 76139f88a9 fix: support upstream remote as base ref for fork workflows (#1186)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 13:51:19 -07:00
NeilandOrca 4ad1458fad fix(release): derive prerelease state from tag shape, not release flag (#1187)
Two interacting bugs produced v1.3.1-rc.4 today:

1. release-cut.yml used `gh release list --exclude-pre-releases` to
   find latest_stable. That filter checks the GitHub `isPrerelease`
   flag, which had been flipped to `false` on several RC releases
   (including v1.3.22-rc.2 and v1.3.1-rc.3). The query returned an
   RC tag, and bump() then silently mis-parsed `1.3.1-rc.3` via
   `Number("1-rc") = NaN` -> `(NaN||0)+1 = 1`, yielding base=1.3.1.

   Fix: filter by tag shape (no `-rc.`) in jq so an RC tag can never
   be treated as stable, regardless of metadata. Also strip any
   prerelease suffix in bump() and semver_gt() so the numeric math
   is robust even if a caller passes a dirty input.

2. release.yml's final publish step only ran `--draft=false`, leaving
   the `prerelease` flag at whatever electron-builder last wrote. When
   that flag ended up false on an RC, GitHub marked the RC as the
   "latest" release.

   Fix: re-assert `--prerelease=<derived from tag>` alongside
   `--draft=false` so the final state is a function of the tag name,
   not of any intermediate publisher behavior.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 13:49:41 -07:00
github-actions[bot] 6b7d7d7cc0 release: v1.3.1-rc.4 v1.3.1-rc.4 2026-04-27 20:02:27 +00:00
Brennan BensonandOrca dd1ed7c697 fix(cli): record back/forward history for CLI-activated worktrees (#1166)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 12:43:02 -07:00
Jinwoo HongandOrca 75c6f25887 feat(linear): add create-issue button for feature parity with GitHub (#1185)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 12:28:09 -07:00
Jinwoo Hong ba0f263df1 Fix shell-ready zsh wrapper self loops (#1184) 2026-04-27 12:13:45 -07:00
Jinwoo Hong d8d2c0f033 Scope pending PTY spawns to terminal panes (#1182) 2026-04-27 11:55:56 -07:00
Jinwoo HongandOrca ead2368230 fix(tab-bar): dismiss new-tab menu when clicking browser webview (#1183)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 11:45:31 -07:00
JinjingandOrca 6978e6a4aa feat(cmd-j): show Recent Worktrees section + repo/branch composite search (#1180)
- Surface top 3 worktrees under a RECENT WORKTREES header on empty query
  when there are ≥4 worktrees, with a WORKTREES header for the rest
- Support "repo/branch" composite queries in the palette search, with
  highlight ranges on both segments
- Add placeholder hint for the new composite query

Co-authored-by: Orca <help@stably.ai>
2026-04-27 11:32:40 -07:00
github-actions[bot] 8cce94eb5a release: v1.3.1-rc.3 v1.3.1-rc.3 2026-04-27 18:32:06 +00:00
JinjingandOrca 6d2212c068 chore: remove pr-size-labeler workflow and config (#1177)
- chore: remove pr-size-labeler workflow and config

Co-authored-by: Orca <help@stably.ai>
2026-04-27 10:11:21 -07:00
github-actions[bot] a06b85078f release: v1.3.22-rc.2 v1.3.22-rc.2 2026-04-27 17:04:54 +00:00
JinjingandOrca 91b7068ab4 fix(sidebar): Cmd+Shift+Up/Down crosses Pinned/All boundary when collapsed (#1176)
Derive keyboard cycle order from an all-expanded layout so collapsed groups don't cause worktrees to be skipped, and uncollapse the All header on reveal when groupBy is 'none'.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:59:29 -07:00
JinjingandOrca abd0ab9f49 fix(monaco): disable semantic validation in diff viewer (#1175)
- fix(monaco): disable semantic validation in diff viewer

Monaco's sandboxed TS worker cannot resolve cross-file imports, cascading
into a long tail of false semantic diagnostics beyond the previously-ignored
codes. Replace the growing ignore list with noSemanticValidation; keep
syntax validation for genuine parse errors.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:58:41 -07:00
JinjingandOrca 2c2d970c14 fix(cmd-j-palette): increase selected row contrast (#1174)
- fix(cmd-j-palette): increase selected row contrast

Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:57:08 -07:00
JinjingandOrca cfe247659a opt: disable GitHub attribution by default (#1173)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 09:53:33 -07:00
github-actions[bot] 830b78e0a7 release: 1.3.22-rc.1 [rc-slot:2026-04-27-03] v1.3.22-rc.1 2026-04-27 10:35:49 +00:00
github-actions[bot] 4af21e1793 release: v1.3.22-rc.0 v1.3.22-rc.0 2026-04-27 07:49:33 +00:00
NeilandOrca 5fe4fd4853 fix(pty): honor Windows shell selection on daemon path + shell-specific icons (#1164)
* fix(pty): honor Windows shell selection on the daemon path + shell-specific icons

The "+" menu picker and the Settings → Default Shell preference both set a
shellOverride, but the daemon-backed PTY path never forwarded it. Every
Windows terminal ended up as PowerShell (or cmd.exe via COMSPEC) no matter
what the user picked.

Fix:
- Thread shellOverride through daemon-pty-adapter → createOrAttach RPC →
  terminal-host → pty-subprocess, and actually resolve the correct launch
  args (chcp for CMD, $PROFILE dot-sourcing for PowerShell, /mnt/<drive>
  cwd translation for WSL) on the daemon path.
- Extract the Windows shell-args decision into a shared helper
  (resolveWindowsShellLaunchArgs) so LocalPtyProvider and the daemon
  spawner cannot drift again.
- In ipc/pty.ts, fall back to the persisted terminalWindowsShell setting
  when no per-tab override is sent, so the daemon path honors the user's
  Default Shell preference the same way LocalPtyProvider already did.

UI polish on the "+" dropdown and tab strip:
- Drop the "Default" tag next to the top entry (takes too much space).
- Rename "Command Prompt" → "CMD Prompt" to fit next to the Ctrl+T hint.
- Replace the generic terminal glyph with brand-style icons per shell
  (ShellIcon). Both the "+" menu and the per-tab strip use the same
  icon set so a WSL tab is visually distinct from a PowerShell tab.

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

* fix(daemon): add oxlint-disable max-lines to daemon-server

CI counts 312 non-blank/non-comment lines for daemon-server.ts after the
shellOverride plumbing was added, exceeding the 300-line .ts override.
The file is a single RPC route table; splitting it would leak the host
reference across modules for no readability win, so add a scoped disable
with the rationale.

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

* chore(lint): disable max-lines on pre-existing 312-line tabs-hydration test

Unrelated to the shell-selection fix, but surfaced on PR CI: the file is
right at oxlint's 300-line .ts ceiling; each case in the table is a
minimal fixture + assertion, so splitting it across files would scatter
closely related regression coverage for a single reducer.

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

* chore(lint): disable max-lines on shared text-search module

The shared text-search module exceeds oxlint's 300-line .ts ceiling. It
is the single source of truth for rg arg construction, rg --json parsing,
git-grep submatch parsing, and relative-path normalization shared between
the local main process and the SSH relay. Re-splitting it would
re-introduce the maxBuffer divergence the design doc explicitly calls out.

Also reverts two speculative oxlint-disable directives on daemon-server
and tabs-hydration.test — those files were not the offender; CI's error
message elides the file path but running the lint locally against the
PR-merge commit pinpointed text-search.ts.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:47:15 -07:00
NeilandOrca aac395dbff fix(release-cut): anchor RC base to latest_stable + patch (#1163)
The rc branch previously derived the base version from the highest
git tag, which reopened an already-shipped series: after v1.3.21
stable was published, cutting an RC still produced v1.3.21-rc.N.
Anchor RCs to latest_stable + patch so a fresh RC after v1.3.21
correctly resolves to v1.3.22-rc.0. Minor/major RCs are cut by
running that stable kind first, which is a clearer workflow than
the old heuristic.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:09:27 -07:00
Brennan BensonandOrca 8347b3099d test(opencode): add buildPtyEnv/clearPty round-trip coverage (#1162)
Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:07:19 -07:00
JinjingandOrca 099c4089a7 refactor(search): share rg/git-grep logic between main and relay (#1157)
Extracts rg and git-grep search logic into src/shared/text-search.ts so
the local main and SSH relay paths stop reinventing arg construction,
JSON parsing, submatch regex, and accumulator/truncation semantics.

Fixes silent truncation in the relay: searchWithRg used execFile with
a 50MB maxBuffer cap that rg --json easily exceeds on large repos,
dropping matches with no error surfaced to the user. The relay now
streams via spawn, matching the local path.

See docs/design/share-text-search.md for full rationale.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:06:00 -07:00
JinjingandOrca afeac870b2 fix(search): keep include/exclude visible and prevent buried matches (#1161)
- Remove queryDetailsExpanded toggle; always show scope filters in the
  Search tab since it is a secondary destination used specifically for
  scoped search.
- Left-truncate pre-match text in MatchResultRow so the highlight stays
  visible at narrow sidebar widths instead of being pushed off the right
  edge. Mirrors VS Code's lcut behavior.

Co-authored-by: Orca <help@stably.ai>
2026-04-27 00:01:34 -07:00
Jinwoo HongandOrca 9e37f6c3c7 fix(daemon): checkpoint-based history persistence to reduce memory (#1139)
Co-authored-by: Orca <help@stably.ai>
2026-04-26 23:44:08 -07:00
github-actions[bot] 6c1b6f6f3c release: v1.3.21-rc.6 v1.3.21-rc.6 2026-04-27 06:24:28 +00:00
NeilandOrca 3a1d506e93 fix(tab-bar): inline Windows shell choices in the "+" menu (#1159)
Replace the flaky Radix submenu on the "+" New-tab dropdown with a flat
list of all available shells (PowerShell, Command Prompt, WSL when
present). The configured default shell is pinned to the top, labeled
"Default", and carries the Ctrl+T shortcut hint so users can see at a
glance which shell Ctrl+T will open.

Co-authored-by: Orca <help@stably.ai>
2026-04-26 23:23:42 -07:00
Brennan BensonandOrca c4b054fa39 fix(pty): tolerate trailing slash in ZDOTDIR self-loop guard (#1156)
Co-authored-by: Orca <help@stably.ai>
2026-04-26 23:02:48 -07:00
Brennan BensonandOrca ec907534fb fix(opencode): accept daemon-shaped sessionIds, hash to safe dir name (#1155)
Co-authored-by: Orca <help@stably.ai>
2026-04-26 22:49:08 -07:00
github-actions[bot] 07fb8ccc7c release: v1.3.21-rc.5 v1.3.21-rc.5 2026-04-27 05:45:36 +00:00
NeilandNeil Parker 98ba693481 feat(terminal): WSL shell support for Windows users (#1154)
Co-authored-by: Neil Parker <nwparker@anthropic.com>
2026-04-26 22:43:54 -07:00
3653b55f38 feat(language-detect): add Svelte Monarch grammar for .svelte syntax highlighting (#1150)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
2026-04-26 22:31:17 -07:00
cfc444242c fix(win32): resolve EPERM on userData writes, batch-file spawn failures, and native dep rebuild (#1152)
* chore: update .gitignore to include stackdump and .serena, enhance pre-commit script

* fix(win32): resolve EPERM on userData writes and batch-file spawn failures

Three Windows-specific issues prevented Orca from running correctly on
machines where Chromium resets the userData DACL during startup:

1. **EPERM on userData writes** — Chromium's BrowserWindow constructor calls
   SetNamedSecurityInfo on the userData folder with a Protected DACL.  When
   propagated to child directories the ACEs carry the Inherit-Only flag,
   meaning they apply to children-of-children but NOT to the directories
   themselves.  Any file write inside codex-runtime-home, agent-hooks, or
   similar subdirectories fails with EPERM.

   Fix: grant an explicit Full Control ACE (OI)(CI)(F) on userData and all
   existing children before BrowserWindow is created (icacls /T /C).
   Explicit ACEs survive future DACL propagation from the parent.  Per-write
   EPERM retries in fs-utils and installer-utils serve as the backstop for
   directories created after startup.

2. **Batch-file spawn failures** — resolveCodexCommand() can return a .cmd
   or .bat path (e.g. codex.cmd installed via npm).  Node's spawn() cannot
   execute batch scripts directly without shell:true, but shell:true with an
   args array triggers DEP0190 because args are concatenated rather than
   escaped.  Both service.ts and codex-fetcher.ts were affected.

   Fix: detect .cmd/.bat paths and route through cmd.exe /c explicitly,
   which is equivalent to what shell:true does internally but avoids the
   deprecation warning and arg-escaping hazard.

3. **Native dep rebuild failure** — electron-builder install-app-deps does
   not expose the ignoreModules option.  On Windows dev machines without the
   full VC++ / Python toolchain, cpu-features (an optional dep of ssh2) fails
   to build with node-gyp, aborting the entire postinstall step.

   Fix: replace electron-builder install-app-deps with a thin wrapper script
   (scripts/rebuild-native-deps.mjs) that calls @electron/rebuild's JS API
   directly with ignoreModules: ['cpu-features'] on Windows.  ssh2 detects
   the missing native module and falls back to pure-JS automatically.

Refactoring: extract shared win32-utils.ts with getIcaclsExePath(),
getCmdExePath(), isWindowsBatchScript(), isPermissionError(), grantDirAcl(),
and getSpawnArgsForWindows() to eliminate five instances of duplicated
SystemRoot path construction and two near-identical EPERM retry blocks.
Reduce startup icacls calls from three sequential blocking /T invocations
to one, removing up to 20 s of potential startup delay.

* fix(win32): address review feedback on ACL and spawn helpers

- Fall back to SID via `whoami /user` when `USERNAME` is unset so
  `grantDirAcl` works under services, CI, and hardened envs instead of
  silently no-op'ing.
- Use a 60s timeout for recursive `icacls /T` walks; the 10s cap could
  starve on large userData trees and silently fail the startup grant.
- Pass `windowsHide: true` to `icacls` and the cmd.exe-routed Codex
  spawns so no console window flashes in the packaged GUI app.
- Add `/d` to `cmd.exe /c` invocations to disable AutoRun registry
  commands — safer default for background spawns.
- Drop unused `createRequire`/`require` from rebuild-native-deps.mjs.
- Add `@electron/rebuild` as an explicit devDependency; relying on the
  electron-builder transitive was brittle under pnpm.
- Fix two misleading "Re-enable inheritance" comments that describe
  behavior opposite to what the code actually does (explicit ACL grant).
- Add unit tests for `isWindowsBatchScript`, `getSpawnArgsForWindows`,
  and `isPermissionError` to lock in Windows batch detection + cmd.exe
  routing.

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

* fix(win32): unify PTY spawn through /d and document cmd.exe safety

- fetchViaPty now uses getCmdExePath() and /d /c, matching the rest of
  the codebase instead of hand-rolling 'cmd.exe' + ['/c', ...].
- getSpawnArgsForWindows gains a SAFETY note: when the .cmd/.bat branch
  is taken, cmd.exe re-parses the combined command line, so callers
  must only pass trusted/literal args.

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

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
2026-04-26 22:29:58 -07:00