Commit Graph
98 Commits
Author SHA1 Message Date
Neil 5363fcd668 Update xterm beta packages (#6486) 2026-06-27 02:37:23 -07:00
NeilandOrca 4e4fa9b8ee chore(deps): resolve Dependabot security alerts (no overrides) (#5795)
Co-authored-by: Orca <help@stably.ai>
2026-06-19 01:57:47 -07:00
08ba730d8e feat(devin): managed hooks, sleeping resume, AI Vault (#5380)
* Revert "fix(terminal): add proportional scroll fallback for sidebar resize" (#937)

* fix(sidebar): smoothly animate off-screen worktree reveal on click (#1302)

Clicking a worktree card whose row lies outside the sidebar viewport
caused an instant jump when scrolling it into view. Switching
`scrollToIndex` to `behavior: 'smooth'` turns that minimum-distance
scroll into an animated slide while keeping `align: 'auto'` so visible
cards still no-op (no re-centering).

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

* Avoid local scrollback serialization on shutdown (#1821)

* Fix PR refresh coordinator test arguments (#2545)

* release: v1.4.31

* release: v1.4.31

* release: v1.4.31

* release: v1.4.31

* release: v1.4.31

* release: v1.4.31

* release: v1.4.31

* release: v1.4.36-rc.6

* release: v1.4.36-rc.6

* release: v1.4.36-rc.6

* ci: gate release-cut to the canonical repo so it skips forks (#4815)

The cut job checks out main, bumps package.json's version, and
fast-forwards main. On a fork with Actions enabled, the scheduled RC
cut runs against the fork's main and diverges it on the version line
every slot, so that contributor's PRs back to upstream conflict on
package.json even when their change never touches it.

Gate the job to github.repository == 'stablyai/orca' so it (and the
jobs that depend on it) no-op on forks. Canonical scheduled and manual
cuts are unaffected.

* feat(hooks): install Devin managed status hooks

* feat(devin): address hook review, resume, and UI polish

- Parse Devin config.json as JSONC; warn on read_config_from overlap
- Windows hook command uses forward slashes; APPDATA fallback
- Add devin to sleeping-agent resume and UI registries (plan 003/004)
- Add hook-service and hook-config-json tests

Closes follow-up for plans 002–004 on feat/add-devin-agent.

* feat(devin): scan ATIF transcripts for AI Vault

Register devin in AI_VAULT_AGENTS, discover ~/.local/share/devin/cli/transcripts
(or DEVIN_HOME), parse ATIF JSON sessions, and build devin --resume commands.

* docs(devin): clarify stdin-after-start vs bracketed paste

* fix(devin): use JSONC for remote install, add partial+APPDATA tests

- installRemote: replace readHooksJsonRemote (JSON.parse) with
  readTextFileRemote + parseJsonc for JSONC compatibility on SSH
- Add partial status test (some hooks missing → state:'partial')
- Add Windows APPDATA config path test with fallback

* fix(devin): address CodeRabbit review — sessionId fallback, parseJsonc errors, comment, i18n

* Fix Devin integration edge cases

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

* Package Devin JSONC parser dependency

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

---------

Co-authored-by: Neil <4138956+nwparker@users.noreply.github.com>
Co-authored-by: Brennan Benson <79079362+brennanb2025@users.noreply.github.com>
Co-authored-by: Orca <help@stably.ai>
Co-authored-by: Jinjing <6427696+AmethystLiang@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Trevin Chow <trevin@trevinchow.com>
Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
2026-06-17 20:49:29 -07:00
Neil 98e7831247 Add TextMate-backed Nim highlighting (#5434) 2026-06-15 18:11:12 -07:00
Brennan BensonandOrca 10411fd39c Rebuild contextual tour positioning on floating-ui; fix hosted dialog placement and arrow seam (#5154)
Co-authored-by: Orca <help@stably.ai>
2026-06-10 21:55:49 -07:00
Jinwoo HongandOrca 9369708f6b Add English localization infrastructure (#4995)
Co-authored-by: Orca <help@stably.ai>
2026-06-09 10:43:04 -07:00
Neil 3153356d87 Fix terminal table rendering after workspace restore (#4877)
* Stabilize terminal cursor rendering and typing checks

* Fix terminal table rendering after workspace restore

* Fix terminal table width underfit

* Tighten terminal renderer stabilization
2026-06-08 03:25:55 -07:00
Jinwoo HongandOrca 1b363b4d9c Add mobile emulator (#4754)
Co-authored-by: Orca <help@stably.ai>
2026-06-08 00:08:57 -07:00
Neil 6e77c02fc6 fix: update Electron and revert UTF-8 write mitigations (#4598) 2026-06-03 16:45:01 -07:00
Neil af23e708f3 Update Electron for macOS launch diagnostics
Update Electron to 42.3.2 for the macOS 26 pre-main launch path and fix the macOS diagnostic harness unified-log capture.
2026-06-02 21:15:00 -07:00
Brennan BensonandOrca b7348e6c6b Prevent voice dictation tip after settings toggle (#4519)
Co-authored-by: Orca <help@stably.ai>
2026-06-02 18:40:04 -07:00
Brennan BensonandOrca 5b1f297078 Add contextual feature tours (#2734)
Co-authored-by: Orca <help@stably.ai>
2026-06-01 21:20:15 -07:00
Neil 41bf76aef2 chore: gate high-signal react doctor rules
Adds a focused React Doctor oxlint gate for high-signal state/effect rules, disables the noisy js-combine-iterations React Doctor rule, and refactors the mobile new-worktree modal away from prop-change state reset effects.
2026-05-31 22:35:15 -07:00
Neil 869b4e50db build: reduce packaged electron bundle size
Exclude repo-only package inputs and move renderer/build-only dependencies out of production dependencies to reduce packaged app.asar size while keeping source maps allowed for crash diagnostics.
2026-05-31 00:10:25 -07:00
Neil 1009ac9083 chore: update Electron to 42 (#3919) 2026-05-30 13:26:48 -07:00
Neil 181741d769 chore: enforce exhaustive switch handling 2026-05-30 13:18:12 -07:00
Jinjing 260bc8157f chore: update agent-browser to 0.27.0 (#3905) 2026-05-30 13:14:47 -07:00
Neil ddbb6a1e7d Update oxlint and oxfmt 2026-05-30 13:09:17 -07:00
Neil c99eb29bb0 chore: remove unused code 2026-05-30 11:05:58 -07:00
Neil 3d9d4179a1 Add custom repo hex color picker (#3022) 2026-05-28 19:38:41 -07:00
5c2ed9c6ce Add Notion style editable markdown toggle blocks (#1584)
* implement h1 and text toggle

* Review:
  - Details parsing is now depth-aware, so nested <details> blocks are not partially consumed.
  - Existing details blocks with raw HTML inside the summary/body now fall back to Orca’s raw HTML passthrough instead of
    becoming editable toggle nodes and escaping tags.
  - Simple supported details blocks still become editable rich toggle nodes.
  - Added regression tests for raw HTML inside details and nested details.

* placeholder and fix enter behaviour

* review findings

* Review: align toggle commands with grouped slash menu

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

* Review: finish toggle command rebase fixes

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

* Review: preserve unsupported details HTML

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

* Review: delete toggle body back into summary

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

* Review: make empty toggle backspace two-step

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

* Review: make empty toggle enter exit

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

---------

Co-authored-by: Jinwoo-H <jinwoo0825@gmail.com>
Co-authored-by: Orca <help@stably.ai>
2026-05-28 17:48:59 -04:00
Jinwoo Hong ff687a37b4 Fix Windows ConPTY process-list fallback (#3009) 2026-05-28 16:49:14 -04:00
Neil 3ff99fd101 Document upstream xterm patch tracking (#2752) 2026-05-24 13:21:56 -07:00
Neil 69da3222ca Update xterm to 6.1.0 beta 220 (#2751) 2026-05-24 13:10:04 -07:00
dependabot[bot] 5a23ac4eb1 build(deps): bump dompurify from 3.2.7 to 3.4.5 (#2653)
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-23 02:00:10 -07:00
Neil 942bcf7065 Remove small markdown helper dependencies (#2467) 2026-05-20 19:01:22 -07:00
dependabot[bot] 657e620c88 build(deps): bump brace-expansion from 5.0.5 to 5.0.6 (#2261)
Signed-off-by: dependabot[bot] <support@github.com>
2026-05-18 23:54:38 -07:00
Neil f4c67434f0 chore: make tsgo the default typecheck (#2013) 2026-05-15 18:47:51 -07:00
Neil c4cd233ae5 Add Hermes CLI status support (#1984)
## Summary
- add managed Hermes CLI hook plugin installation and status reporting
- normalize Hermes events into Orca agent status, tools, approvals, and completion states
- expose Hermes status through IPC/preload/web APIs and remote hook installation

## Verification
- targeted Vitest slice: 10 files, 291 tests passed
- pnpm run tc:node, tc:web, tc:cli passed
- oxlint passed with 0 warnings / 0 errors
- git diff --check passed
- GitHub checks passed: verify, e2e / e2e
2026-05-15 18:32:37 -07:00
Jinjing 1ba9cfc2e1 Add rich markdown building block insertion (#1893)
- Add rich markdown building block insertion
2026-05-14 22:11:50 -07:00
Jinjing 53150f6022 fix: address review findings (#1895) 2026-05-14 22:05:19 -07:00
Jinwoo HongandOrca 151040f05f Add desktop-backed mobile voice dictation (#1869)
Co-authored-by: Orca <help@stably.ai>
2026-05-14 14:36:44 -07:00
Neil bae5fba3a5 fix: harden mermaid rendering (#1838) 2026-05-14 02:02:38 -07:00
Will Hampson 8b12ac658b Fix Linux Wayland terminal WebGL glyph corruption (#1743)
Fixes #1579.
2026-05-13 17:36:27 -07:00
Neil ad5d5dc841 fix terminal complex script rendering (#1675) 2026-05-10 16:53:24 -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
JinjingandOrca 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
zerone0x 998815c2dd fix: allow omitted optional rpc schema fields with zod 4.4 (#1541) 2026-05-07 16:13:20 -07:00
Jinwoo HongandOrca 568d3175cf Pin zod to ~4.3.6 (revert 4.4.x bump from #1526) (#1539)
Co-authored-by: Orca <help@stably.ai>
2026-05-07 12:47:41 -07:00
NeilandOrca f441ee8f3d chore(deps): bump deps to clear Dependabot alerts (#1526)
Run pnpm update in root + mobile to pull patched versions of vite, hono,
@hono/node-server, dompurify, uuid, picomatch, lodash, brace-expansion,
path-to-regexp, postcss, @xmldom/xmldom, and other transitive packages
flagged by Dependabot.

Co-authored-by: Orca <help@stably.ai>
2026-05-06 22:39:54 -07:00
dependabot[bot] b72304b3b3 chore(deps-dev): bump vite from 7.3.1 to 7.3.2 (#1525)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-06 22:28:39 -07:00
dependabot[bot] a0002f8e82 chore(deps): bump simple-git from 3.33.0 to 3.36.0 (#1471)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-05 17:10:53 -07:00
Jinwoo HongandOrca fc578f5ea9 feat(mobile): Expo companion app [beta] (#1245)
Co-authored-by: Orca <help@stably.ai>
2026-05-04 13:08:27 -07:00
Brennan BensonandOrca 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 HongandOrca 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
NeilandOrca 4318f3bfa7 chore: reduce root-directory clutter (#1275)
Co-authored-by: Orca <help@stably.ai>
2026-04-30 00:09:46 -07:00
Jinwoo HongandOrca c9391e203f feat(orchestration): add inter-agent orchestration system (#1188)
Co-authored-by: Orca <help@stably.ai>
2026-04-28 12:21:31 -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
NeilandOrca d4399b4c92 feat(terminal): add programming-ligatures support (#1118)
Co-authored-by: Orca <help@stably.ai>
2026-04-25 22:26:33 -07:00