Commit Graph
195 Commits
Author SHA1 Message Date
Jinwoo-HandOrca 5460563ff4 build(ssh): add relay release asset gate
Co-authored-by: Orca <help@stably.ai>
2026-07-15 12:46:20 -04:00
Jinwoo-HandOrca 8d9013cd10 build(ssh): add bounded relay draft upload
Co-authored-by: Orca <help@stably.ai>
2026-07-15 12:06:02 -04:00
Jinwoo-HandOrca bb4b527e4e ci: probe Linux relay build prerequisites
Co-authored-by: Orca <help@stably.ai>
2026-07-15 11:35:26 -04:00
Jinwoo-HandOrca c9ffa26a90 ci: bound Linux relay runtime prerequisites
Co-authored-by: Orca <help@stably.ai>
2026-07-15 11:26:11 -04:00
Jinwoo-HandOrca 4979bc26c9 ci: add protected relay manifest workflow
Co-authored-by: Orca <help@stably.ai>
2026-07-15 11:00:10 -04:00
Jinwoo-HandOrca 8cf80a0228 ci: add fail-closed relay manifest aggregation
Co-authored-by: Orca <help@stably.ai>
2026-07-15 10:33:16 -04:00
Jinwoo-HandOrca 4180e04ac4 ci: add protected relay manifest seed signer
Co-authored-by: Orca <help@stably.ai>
2026-07-15 10:13:01 -04:00
Jinwoo-HandOrca 91f59d19e5 ci: finalize Linux relay artifacts for aggregation
Co-authored-by: Orca <help@stably.ai>
2026-07-15 09:34:18 -04:00
Jinwoo-HandOrca c2db2b62e5 ci: add manual relay runtime signing rehearsal
Co-authored-by: Orca <help@stably.ai>
2026-07-15 09:00:34 -04:00
Jinwoo-HandOrca 2a7083d278 ci(ssh): add disconnected native signing workflow
Co-authored-by: Orca <help@stably.ai>
2026-07-15 08:23:17 -04:00
Jinwoo-HandOrca 994daefabc ci(ssh): expose native runtime prerequisite
Co-authored-by: Orca <help@stably.ai>
2026-07-15 07:31:33 -04:00
Jinwoo-HandOrca 1989e801af build(ssh): verify post-sign runtime metadata
Co-authored-by: Orca <help@stably.ai>
2026-07-15 06:29:58 -04:00
Jinwoo-HandOrca cfea521c7c build(ssh): produce verified runtime manifest tuples
Co-authored-by: Orca <help@stably.ai>
2026-07-15 05:44:14 -04:00
Jinwoo-HandOrca 5e0c776d01 build(ssh): add fail-closed manifest aggregate
Co-authored-by: Orca <help@stably.ai>
2026-07-15 03:35:31 -04:00
Jinwoo-HandOrca 14355dfe05 build(ssh): add manifest signing handoff contracts
Co-authored-by: Orca <help@stably.ai>
2026-07-15 02:48:38 -04:00
Jinwoo-HandOrca 707a9da23e build(ssh): align Windows runtime manifest identity
Co-authored-by: Orca <help@stably.ai>
2026-07-15 02:00:46 -04:00
Jinwoo-HandOrca e995186545 build(ssh): verify runtime release bytes
Co-authored-by: Orca <help@stably.ai>
2026-07-15 01:30:16 -04:00
Jinwoo-HandOrca 6f13e94f8a build(ssh): gate runtime release stages
Co-authored-by: Orca <help@stably.ai>
2026-07-15 00:47:46 -04:00
Jinwoo-HandOrca 6ef2943ded build(ssh): verify preserved Windows signatures
Co-authored-by: Orca <help@stably.ai>
2026-07-15 00:18:03 -04:00
Jinwoo-HandOrca 072c0d434e build(ssh): verify Windows runtime signatures
Co-authored-by: Orca <help@stably.ai>
2026-07-14 23:53:56 -04:00
Jinwoo-HandOrca debb13f301 build(ssh): verify macOS runtime signatures
Co-authored-by: Orca <help@stably.ai>
2026-07-14 23:21:00 -04:00
Jinwoo-HandOrca 3eeea7bdb8 build(ssh): apply native signing returns safely
Co-authored-by: Orca <help@stably.ai>
2026-07-14 22:53:48 -04:00
Jinwoo-HandOrca 1a79e49214 build(ssh): assess native signing candidates
Co-authored-by: Orca <help@stably.ai>
2026-07-14 22:22:05 -04:00
Jinwoo-HandOrca c847c4a11d build(ssh): validate native signing payloads
Co-authored-by: Orca <help@stably.ai>
2026-07-14 21:51:45 -04:00
Jinwoo-HandOrca 9c03572358 ci(ssh): run native signing plan contracts
Co-authored-by: Orca <help@stably.ai>
2026-07-14 21:21:29 -04:00
Jinwoo-HandOrca 05b3a4b18a build(ssh): preserve Linux runner ownership
Co-authored-by: Orca <help@stably.ai>
2026-07-14 20:29:40 -04:00
Jinwoo-HandOrca 0cb3f7510b build(ssh): prove Linux runtime floor
Co-authored-by: Orca <help@stably.ai>
2026-07-14 20:00:11 -04:00
Jinwoo-HandOrca 26bbd7b67a build(ssh): complete runtime artifact provenance
Co-authored-by: Orca <help@stably.ai>
2026-07-14 17:06:44 -04:00
Jinwoo-HandOrca ec5461affb build(ssh): enforce exact relay runtime closure
Co-authored-by: Orca <help@stably.ai>
2026-07-14 16:52:32 -04:00
Jinwoo-HandOrca 0d3a0c9d3f test(ssh): diagnose generated arm64 build inputs
Co-authored-by: Orca <help@stably.ai>
2026-07-14 14:16:12 -04:00
Jinwoo-HandOrca 39ee3451b8 build(ssh): diagnose Windows PE reproducibility drift
Co-authored-by: Orca <help@stably.ai>
2026-07-14 13:19:46 -04:00
Jinwoo-HandOrca f864d3fa6d build(ssh): syntax-check runtime builder
Co-authored-by: Orca <help@stably.ai>
2026-07-14 12:52:15 -04:00
Jinwoo-HandOrca 3e433b3438 build(ssh): canonicalize native build path
Co-authored-by: Orca <help@stably.ai>
2026-07-14 12:36:14 -04:00
Jinwoo-HandOrca a09b02ec4e build(ssh): stabilize native runtime rebuilds
Co-authored-by: Orca <help@stably.ai>
2026-07-14 12:32:30 -04:00
Jinwoo-HandOrca e58913d1a5 test(ssh): improve native reproducibility diagnostics
Co-authored-by: Orca <help@stably.ai>
2026-07-14 12:05:53 -04:00
Jinwoo-HandOrca c70e96374c test(ssh): gate runtime clean-build identity
Co-authored-by: Orca <help@stably.ai>
2026-07-14 11:49:48 -04:00
Jinwoo-HandOrca c04b4f6300 fix(ssh): settle copied Windows ConPTY worker
Co-authored-by: Orca <help@stably.ai>
2026-07-14 11:20:42 -04:00
Jinwoo-HandOrca 6bba900209 test(ssh): classify lingering Windows smoke resources
Co-authored-by: Orca <help@stably.ai>
2026-07-14 11:05:09 -04:00
Jinwoo-HandOrca ddf28eb8db test(ssh): settle Windows runtime PTY smoke
Co-authored-by: Orca <help@stably.ai>
2026-07-14 10:52:54 -04:00
Jinwoo-HandOrca 922edb6ff2 build(ssh): add Windows relay runtime artifacts
Co-authored-by: Orca <help@stably.ai>
2026-07-14 09:58:21 -04:00
Jinwoo-HandOrca f2b387b21b build(ssh): assemble relay runtime artifacts
Co-authored-by: Orca <help@stably.ai>
2026-07-14 09:03:25 -04:00
Brennan Benson 31f643ca42 Add version-matched skill guides to the CLI (#8624)
* Add version-matched bundled skill guides

* Clarify skill freshness rollout PRs

* Add canonical skills show alias

* fix(skills): address guide review feedback

* fix(skills): make guide commands cross-platform

* fix(skills): apply the ORCA convention to the emulator guides

Review follow-up: the emulator guides still instructed literal
`orca emulator ...` in sh fences with no Linux disambiguation, so on
unmanaged Linux they could launch the GNOME screen reader — the exact
failure the executable-selection preamble prevents. Both emulator
guides now carry the preamble and ORCA placeholder across fences,
tables, and prose, and the cross-platform safety test covers all four
converted guides. Also replaces computer-use's "unless a block names a
shell" carve-out, which contradicted its own POSIX example, with the
unconditional placeholder rule.
2026-07-14 02:17:55 -07:00
Jinjing 302b97029a P2 windows cli hardening (#8638)
* fix(cli): harden Windows launcher transports

* Fix csc.exe compile failures on space-bearing Windows install paths

- Legacy csc.exe mangles absolute paths containing spaces, so the
  compile step now cd's into the bin directory and passes bare
  file names for /out and the source file instead of full paths
2026-07-13 18:58:21 -07:00
Jinjing b69c6043e3 Ssh watcher isolation e2e (#8494)
* Add a Docker SSH watcher-isolation E2E test to verify remote relay-watch

- Covers two scenarios: crashed watcher children are respawned under the
  same relay without dropping the terminal PTY or file-explorer view, and
  a missing deployed relay-watcher.js artifact is repaired on reconnect
- Extracts shared connect/disconnect/reconnect logic out of the perf spec
  into docker-ssh-relay-connection.ts, and adds docker-ssh-relay-processes.ts
  for inspecting/signaling remote relay and watcher PIDs
- Wires the new spec into a dedicated CI job and pnpm script

* Fix Windows and Linux-only issues in Docker SSH watcher-isolation E2E ha

- node-gyp override only applies on Linux runners now, since the CI job
  moved to ubuntu-latest but shares the workflow with non-Linux jobs
- spawn the e2e runner scripts through a shell on win32 to satisfy
  Node's CVE-2024-27980 restriction on unshelled .cmd spawns
- harden relay process row parsing against empty pid/ppid fields so a
  vanished /proc entry fails loudly instead of coercing to pid 0
- dedupe the reconnect helpers and export shellQuote for reuse across
  the docker-ssh-relay test helpers
2026-07-12 23:50:00 -07:00
Brennan Benson 43e481b1c3 Revert "Decouple feature copy from translated locale catalogs (#8488)" (#8500)
This reverts commit a5e9e139b1.
2026-07-12 23:43:07 -07:00
Brennan Benson a5e9e139b1 Decouple feature copy from translated locale catalogs (#8488)
* Decouple feature copy from locale catalogs

* Update PR workflow contract tests

* Address localization review findings

* Document localization cache context
2026-07-12 23:42:45 -07:00
Jinjing e3c47eff17 Fix ssh watcher isolation (#8463)
* fix(ssh): isolate relay filesystem watchers

* Fix relay watcher fault-harness pid file and in-process fallback isolati

- Use exclusive ('wx') creation for the fault-harness pid file so a leaked
  ORCA_WATCHER_CHILD_PID_FILE env var can't clobber an existing file, and
  have the harness remove the file after reading a replacement pid.
- Force useInProcessVitestFallback to false in the relay watcher pool so a
  leaked VITEST env var can never load the native watcher addon in-process
  on the relay; fail closed instead when the isolated child is missing.
- Thread an injectable RelayWatcherProcessPool into FsHandler/
  RelayFilesystemWatchRegistry for tests, and add coverage for both fixes.
2026-07-12 21:34:59 -07:00
Jinjing 433df4be3c fix(runtime): prevent file watcher SIGSEGV from crashing orca serve (#8370)
* Fix crash-isolated file watcher process pool for orca-serve SIGSEGV afte

Replace the worker-thread runtime file watcher with a forked, crash-isolated
@parcel/watcher child process pool so a native FSEvents fault can no longer
take down the main/serve process, and add bounded event batching, delivery
backpressure, and quarantine-based recovery for faulty watch roots.

* Fix crash-isolated file watcher teardown and shutdown leaks

- Fault harness could throw before mkdtemp/realpath completed, skipping
  cleanup; now tracks each temp path independently and races an async
  watcher-callback error so it can't escape the try/finally unhandled.
- In-process fallback swallowed unsubscribe failures via a bare rejection
  handler that could still throw; use .catch() instead.
- Watcher process entry's cancel-subscribe handler now reuses the async
  unsubscribe path when a crawl already finished, releasing the native
  handle instead of leaking it (blocks worktree unlock on Windows).
- Runtime watcher process pool exposed no real dispose(); shutdown now
  kills pooled children so they don't outlive the main process.

* Fix disposeSlot double-iteration bug in file watcher pool teardown

Remove the unnecessary array snapshot in dispose(): disposeSlot mutates
allSlots by deleting the slot being visited, and deleting the
in-progress element during Set iteration is well-defined, so the spread
copy was dead weight left over from prior debugging.

* Fix pending file watcher installs not aborting on unsubscribe

- Local/WSL watcher installs and SSH fs.watch setup now honor the
  in-flight AbortSignal, so the last unwatch cancels a slow native
  subscribe or remote setup instead of waiting for it to finish.
- Thread signal through IFilesystemProvider.watch and SSH-backed
  file explorer watches for the same early-cancel behavior.

* Fix crash-resubscribe hangs and SSH watch teardown races in file watcher

- Add a bounded deadline for post-crash resubscription crawls so one
  stuck root quarantines instead of pinning its whole shard forever.
- Report FSEvents overflow as recoverable so delivery continues after
  a dropped-events error instead of surfacing as terminal.
- Make WSL watcher abort errors real DOMException instances so
  AbortSignal-based cancellation checks recognize them.
- Rework SSH watch registration so ownership of the shared setup
  request (not just the first caller) decides teardown, preventing
  one caller's abort from cancelling another's shared watch and
  guaranteeing exactly one fs.unwatch per registration.
- Reformat reliability-gates.jsonc arrays and refresh WSL/SSH coverage
  entries and evidence runs to match the above.

* Add CI gate to run the file-watcher SIGSEGV fault harness under Electron

- The reliability gate and release workflows (mac, Linux) previously only
  exercised the crash-isolation harness under vanilla Node, which doesn't
  catch runtime differences in the actual Electron binary that ships to
  users.
- Adds an `ELECTRON_RUN_AS_NODE=1 pnpm exec electron ...` run of the same
  harness alongside the existing Node run, so #8212's SIGSEGV-survival
  contract is proven against both runtimes before packaging.

* Add CI gate blocking Linux/macOS release packaging on watcher fault reco

Adds a contract test asserting release-cut.yml and release-mac-build.yml
run the runtime-file-watcher-fault-harness after building and before
publishing artifacts, so a regression in watcher process fault recovery
fails release packaging instead of shipping silently.

* Fix use-after-clear crash in failAllWatcherSubscriptions

Snapshot the records map before iterating, since onTerminalError
hooks can dispose the supervisor and clear `records` mid-loop,
causing a crash. Also update the matching test to assert against
the shared buildParcelWatcherIgnoreOptions helper instead of a
loose arrayContaining match.

* Fix use-after-clear crash in failAllWatcherSubscriptions

Snapshot watcher records with Array.from instead of spread, since
spread syntax over an iterator that's mutated mid-loop by
onTerminalError hooks can produce inconsistent results.
2026-07-12 18:15:15 -07:00
Neil ee82d66a35 fix(cli): preserve multiline arguments on Windows (#8374)
* fix(cli): preserve multiline Windows arguments

* test(cli): run Windows launcher regression in CI

* fix(cli): support Windows Framework C# compiler
2026-07-12 02:13:41 -07:00
NeilandOrca 4f9fbecb9e Assign GitHub issue types (Bug/Feature) via issue templates (#8346)
Co-authored-by: Orca <help@stably.ai>
2026-07-11 20:20:49 -07:00