Commit Graph

63 Commits

Author SHA1 Message Date
Brennan Benson 669ade2313
Update onboarding feature wall experience (#2652)
Co-authored-by: Orca <help@stably.ai>
2026-05-23 12:21:13 -07:00
Jinwoo Hong 3861d65a17
Fix Linux package icon sizes (#2538)
Co-authored-by: Orca <help@stably.ai>
2026-05-21 13:54:31 -07:00
Jinjing ac10c4075f
Show sleeping workspaces by default (#2514)
- Add a narrow SSH relay RPC for refreshing remote-tracking refs without
  reopening generic fetch execution
- Resolve SSH connection context from composite worktree IDs during startup
  before worktree discovery completes
- Make the sleeping workspace filter negative-form and reset to the new visible
  default
- Tolerate transient xterm scroll restoration failures during layout
- Restore macOS Electron framework symlinks after copying the dev app
2026-05-21 02:12:22 -07:00
Neil 8b77dffec2
Fix macOS notification settings recovery
Open the current app's macOS notification settings entry and stop reporting test notification success until Electron confirms the native notification was shown.
2026-05-20 22:39:18 -07:00
Jinjing e0104372da
Squashed commits (#2485)
- Fix workspace space cache and git status cleanup checks

- Treat browser tabs as workspace delete blockers

- Move deletion readiness into shared presentation logic so tests cover it
- Preserve explicit empty git status entries for clean worktrees

- Add package manager cache cleanup to space manager

- Detect npm, pnpm, Yarn, and Bun caches from lockfiles during scans
- Add explicit cleanup IPC for safe and aggressive cache actions
- Support local, SSH, and Windows command execution paths safely
- Tighten workspace deletion decisions with git, editor, agent, and terminal state
2026-05-20 22:09:35 -07:00
Jinjing a1f9e16ccb
Rebuild stale macOS dev Electron app copies (#2479)
- Detect missing Chromium framework resources before reusing the copied app
- Prevent interrupted copies from leaving `pn dev` with a blank Electron window
2026-05-20 20:16:56 -07:00
Neil 54a2547ff6
Clean up styled scrollbar guard 2026-05-20 10:38:23 -07:00
Neil ed23e04073
Fix styled scrollbar guard cn handling 2026-05-20 02:53:40 -07:00
Neil db4199e91a
Enforce styled scrollbars in renderer 2026-05-19 23:12:37 -07:00
Anwesh 300a55afc7
Pin Linux package icon source explicitly (#2241) 2026-05-18 19:10:32 -07:00
Jinwoo Hong 8a4d558c1d
Skip initial dev web client build (#2273)
Co-authored-by: Orca <help@stably.ai>
2026-05-18 14:30:36 -07:00
Jinwoo Hong 4d2a435bb0
Fix Windows native rebuild EPERM devex (#2159) 2026-05-18 13:44:57 -07:00
Jinwoo Hong 4b7c9b7213
Improve remote client runtime parity (#1975)
Co-authored-by: Orca <help@stably.ai>
2026-05-17 22:24:38 -07:00
Jinjing d603242766
fix: address review findings (#2130) 2026-05-16 17:13:01 -07:00
Jinjing 52e737e7db
fix: guard native module ABI rebuilds (#2118) 2026-05-16 15:56:47 -07:00
Jinwoo Hong b8de007f03
Fix Windows setup hook script (#2106) 2026-05-16 17:44:42 -04:00
Neil c017229149
Simplify dev Dock instance naming (#2111) 2026-05-16 14:36:46 -07:00
Neil 2ead67c650
Label macOS dev Dock instances by branch (#2068)
* fix: label macOS dev Dock instances

* fix: keep dev badge visible in Dock labels

* chore: clean up dev identity plumbing

* feat: add stable-name dev command
2026-05-15 22:46:13 -07:00
Jinwoo Hong 6c4bcf7ea6
feat(ssh): make remote workspaces first-class (#1876)
Co-authored-by: Orca <help@stably.ai>
2026-05-15 12:32:07 -07:00
Neil c0884f5f21
Fix release-cut draft RC recovery (#1942)
* fix: recover stuck draft RC releases

* fix: address release recovery lint
2026-05-15 11:33:05 -07:00
Jinwoo Hong 618f39d179
Add web runtime client support 2026-05-15 05:44:25 -04:00
Jinwoo Hong a22717bb35
Refactor runtime app architecture (#1878)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 23:13:37 -07:00
Neil 322eab0f83 fix: expect debian release artifact name 2026-05-14 19:37:04 -07:00
Neil 2d9cf72084 fix: verify macOS entitlements before release 2026-05-14 19:02:37 -07:00
Brennan Benson 2cadcbc4e1
Support agent status hooks over SSH (#1865)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 16:06:23 -07:00
Brennan Benson fdf7d9e97a
feat(onboarding): add feature wall tour (#1772)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 15:20:49 -07:00
Jinwoo Hong 151040f05f
Add desktop-backed mobile voice dictation (#1869)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 14:36:44 -07:00
Jinjing 133c8788a5
fix: separate workspace filter reset action (#1849) 2026-05-14 10:01:21 -07:00
Nikolatesla-lj 543d9a6c30
fix(linux): avoid Ubuntu orca package conflict (#1306)
Co-authored-by: Codex <codex@users.noreply.github.com>
2026-05-14 01:52:24 -07:00
Brennan Benson e361b4339e
fix(release): harden prerelease update fallback checks (#1793)
Co-authored-by: Orca <help@stably.ai>
2026-05-13 21:45:33 -07:00
Will Hampson 8b12ac658b
Fix Linux Wayland terminal WebGL glyph corruption (#1743)
Fixes #1579.
2026-05-13 17:36:27 -07:00
Jinwoo Hong 0f54103dda
Add native computer-use automation (#1683)
Co-authored-by: Orca <help@stably.ai>
2026-05-11 14:20:08 -07:00
Neil ad5d5dc841
fix terminal complex script rendering (#1675) 2026-05-10 16:53:24 -07:00
Jinjing e0851ec722
feat: onboarding flow for new users (#1596)
* wip

* WIP: Changes before auto-review fixes

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

* WIP: Changes before auto-review fixes

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

* WIP: Changes before auto-review fixes

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

* fix: address auto-review findings (iteration 1)

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

* fix: address auto-review findings (iteration 2)

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

* fix: archive review context and improve agent detection on wizard mount

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

* fix: address CI lint failures and split use-onboarding-flow.ts

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

* fix: mock ./onboarding in register-core-handlers test

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

* fix: also toggle light class on documentElement so onboarding e2e theme wait resolves

The onboarding e2e calls waitForFunction(() => classList.contains('dark') || classList.contains('light')) before snapshotting the starting theme. applyDocumentTheme only toggled 'dark', so on a host that resolves system to light the wait timed out (CI Linux headless). Toggle 'light' as the inverse class so consumers can observe the resolved theme symmetrically; Tailwind keys only on 'dark' so styling is unchanged.

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

* fix: add braces to Landing menu close-on-outside-click handler

oxlint config requires braces for all if statements.

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

* chore: trigger CI

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-08 14:17:50 -07:00
Jinjing 3cf4f7e93d
Close node-pty spawn failure fds (#1597) 2026-05-08 13:27:53 -07:00
Jinjing bcbb7528bd
Close node-pty macOS slave fd (#1588) 2026-05-08 13:09:09 -07:00
Jinjing 1fbe7d9dbf
Improve node-pty spawn diagnostics (#1587)
* Improve node-pty spawn diagnostics

* Preserve original error stack when adding node-pty recovery hint

Mutate the existing Error's message instead of replacing the object so
the original stack trace and custom fields survive into telemetry/logs.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-08 12:53:03 -07:00
Brennan Benson c0801b9aef
chore(dev): auto-expose a CDP port from `pn dev` (#1511)
Co-authored-by: Orca <help@stably.ai>
2026-05-06 14:14:51 -07:00
Brennan Benson f90da6ea37
ci(telemetry): inject ORCA_POSTHOG_WRITE_KEY + ORCA_BUILD_IDENTITY at release build time (#1418)
Co-authored-by: Orca <help@stably.ai>
2026-05-04 21:43:22 -07:00
Neil ae2958ace0
fix(install): regenerate cpu-features buildcheck.gypi before rebuild (#1387)
* fix(install): regenerate cpu-features buildcheck.gypi before rebuild

cpu-features@0.0.10 ships without buildcheck.gypi and relies on its
own install script to generate it via `node buildcheck.js` before
node-gyp runs. @electron/rebuild with force:true calls node-gyp
directly and bypasses that hook, so a missing gypi (fresh install,
store prune, or prior failed run) aborts postinstall with
"buildcheck.gypi not found".

Generate the file ourselves for every cpu-features copy under .pnpm/
before invoking @electron/rebuild on platforms where cpu-features is
not in ignoreModules.

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

* fix(install): satisfy oxlint curly rule

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-04 00:49:15 -07:00
Brennan Benson 9802a7f59f
feat(source-control): commit action in sidebar panel (#1373)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Alexander Saavedra <mralexsaavedra@gmail.com>
2026-05-03 17:19:52 -07:00
Brennan Benson fd86e1869a
feat(telemetry): PR 2 — transport (client, validator, burst cap, IPC, build gate) (#1374)
Co-authored-by: Orca <help@stably.ai>
2026-05-03 16:51:31 -07:00
Jinwoo Hong a638215729
fix(pty): release ptmx fd on natural exit + defuse SIGHUP-to-recycled-pid (#1327)
* fix(pty): release ptmx fd on natural exit + defuse SIGHUP-to-recycled-pid

Daemons accumulated ptmx fds over time because node-pty's UnixTerminal
only releases the master fd when destroy() runs. On the natural-exit
path (the common case — user closes a tab, shell runs `exit`) nothing
ever calls destroy(), so the fd leaks until GC. On macOS this
eventually hits kern.tty.ptmx_max=511 and all new terminals fail to
spawn.

Fix: release the fd synchronously on every teardown path (natural
exit, explicit kill, stale SSH spawn, daemon shutdown) and close the
concurrent SIGHUP-to-recycled-pid hazard inside node-pty's
UnixTerminal.destroy().

- src/main/daemon/pty-subprocess.ts: synchronous POSIX proc.kill
  neutralization inside proc.onExit; dead guards on forceKill/signal
  so they never target a reaped-and-possibly-recycled pid
- src/main/daemon/session.ts: new disposeSubprocess() for already-
  exited sessions (fd release only, no SIGKILL) — avoids sending
  SIGKILL to a recycled pid during daemon shutdown
- src/main/daemon/terminal-host.ts: dispose loop routes on isAlive —
  live sessions get forceKillAndDisposeSubprocess (SIGKILL + fd
  release), exited sessions get disposeSubprocess (fd release only)
- src/main/providers/local-pty-provider.ts: same POSIX kill
  neutralization at top of onExit for the legacy local path
- src/relay/pty-handler.ts: same neutralization in wireAndStore;
  disposed flag guards all public entry points; dispose() uses
  SIGKILL (not SIGTERM) before destroy since the relay is exiting;
  killTimer fallback + immediate-shutdown + stale-spawn cleanup all
  call disposeManagedPty + ptys.delete so wedged children (D-state,
  bad NFS) can't leak map entries against the 50-PTY cap

Windows is exempt everywhere — WindowsTerminal.destroy IS a kill()
call internally (closes the ConPTY agent), so neutralizing would
turn destroy into a no-op and leak the agent.

See docs/fix-pty-fd-leak.md for the full design.

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

* fix(pty): patch node-pty native off-by-one leaking /dev/ptmx per spawn

node-pty 1.1.0's pty_posix_spawn on macOS walks low_fds[0..2] in an
allocation loop that breaks at the first fd >= STDERR_FILENO, then
cleans up via `for (; count > 0; count--) close(low_fds[count])`. In
the typical case (break at count=0) the cleanup body never runs and
low_fds[0] — a /dev/ptmx handle — leaks per spawn. Fixed upstream in
microsoft/node-pty af053f2 (PR #882), not in any 1.1.0 release.

Backport the 3-line cleanup-loop fix as a pnpm patch. E2E validated
against a dev daemon: 200 spawn/kill cycles kept the daemon's ptmx
fd count flat at baseline; prior runs reproduced linear 1-per-spawn
growth. Also documents the native root cause as a status addendum in
docs/fix-pty-fd-leak.md — the JS-side destroy() discipline previously
landed is still load-bearing for the SIGHUP-to-recycled-pid hazard and
for synchronous fd release on daemon shutdown.

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

* fix(pty): capture stable kill spy ref in pty.test.ts

destroyPtyProcess reassigns proc.kill = () => {} on POSIX to defuse
the SIGHUP-to-recycled-pid hazard (see docs/fix-pty-fd-leak.md). After
that reassignment, proc.kill.mock is undefined and the assertions
crashed in CI. Capture a stable reference to the vi.fn() before it
gets reassigned.

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

---------

Co-authored-by: Orca <help@stably.ai>
2026-05-02 23:12:14 -07:00
Jinwoo Hong 000d4dc08b
Revert sparse checkout worktree creation (#1290) 2026-04-30 15:47:40 -07:00
Colin Chambachan 79faafcc98
Add sparse checkout worktree creation (#1131)
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-04-30 00:43:00 -07:00
Neil 8c83c8c971
chore: move dev-app-update.yml into config/ (#1276)
Co-authored-by: Orca <help@stably.ai>
2026-04-30 00:11:14 -07:00
Neil 4318f3bfa7
chore: reduce root-directory clutter (#1275)
Co-authored-by: Orca <help@stably.ai>
2026-04-30 00:09:46 -07:00
Neil c25b61c558
fix(mac): request media permissions dynamically (#1233) 2026-04-28 16:18:22 -07:00
Jinwoo Hong c9391e203f
feat(orchestration): add inter-agent orchestration system (#1188)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:21:31 -07:00
Brennan Benson 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