* fix(cli): report a denied runtime connection instead of a dead Orca Inside Codex's macOS Seatbelt sandbox, connect() on the runtime socket fails with EPERM. The CLI dropped the errno and reported "Could not connect ... Restart Orca", appended "Orca is not running. Run 'orca open' first.", and `orca status` answered ok:true with `starting` (its pid probe also gets EPERM). An agent following that advice restarts a healthy app, which cannot help. EPERM/EACCES on the metadata read or the socket/pipe connect now fails with a CLI-local `runtime_access_denied` error: ok:false, non-zero exit, operation/systemCode/processState:"unverifiable"/retryable:false and nextSteps that say to re-run with escalated permissions and not restart. CODEX_SANDBOX only picks the wording. `orca open` stops before launching. The status pid probe is unchanged: a refused or missing socket proves the caller reached the endpoint, so a later EPERM probe is another uid and keeps #20098's `starting`. Missing, refused, stale-pid and timeout paths are unchanged. Adapted from the diagnosis and tests in #20487 (and #19605, #13583). Co-authored-by: lifeodyssey <zhenjiazhou0127@outlook.com> * docs(skills): tell agents runtime_access_denied means escalate, not restart The shared CLI-resolution block told every bundled skill to run `orca open` when a command says Orca is not running. Add the counterpart for the new access-denied code so sandboxed agents re-run with escalated permissions instead of launching or restarting Orca. Regenerated stubs and manifest. * refactor(cli): classify only a denied runtime connect, with a leaner error A denied metadata read was never observed under a sandbox, and it turned an unreadable user-data path (the Linux launch contract's root-owned HOME) into runtime_access_denied instead of "Orca is not running". Keep metadata reads as on main and classify only the socket/pipe connect. One helper now maps a socket errno to the error or null; the error data keeps only systemCode and nextSteps. Tests drop cases already pinned by status.test.ts. * fix(cli): give not-running advice when a denied socket belongs to a dead Orca A crashed Orca leaves its metadata and socket file behind, and a sandbox denies the connect with EPERM before the CLI can see ECONNREFUSED. The sandbox still reports ESRCH for a gone pid, so a denied connect now probes the metadata pid and falls through to the ordinary unavailable path when the pid is proven gone. isProcessRunning moves to its own module so transport and status share it. * refactor(cli): inline the runtime_access_denied code like other CLI error codes --------- Co-authored-by: lifeodyssey <zhenjiazhou0127@outlook.com>
1.6 KiB
Resolve the CLI for this session
Choose the executable once and reuse it for every later command:
- If the
ORCA_CLI_COMMANDenvironment variable is set, use its value. Orca exports this for managed WSL sessions. - Otherwise, in a dev checkout whose session exposes
ORCA_DEV_REPO_ROOT, useorca-dev. - Otherwise, on Linux outside an Orca-managed terminal, use
orca-ide. Never run bareorcathere — outside Orca's terminals it normally resolves to the GNOME Orca screen reader (/usr/bin/orca) and starts speech on the user's machine. - Otherwise, use
orca.
Below, ORCA is a placeholder for the executable you resolved. Substitute it before
running anything; do not create a shell variable or run ORCA literally. This works the
same way in POSIX shells, PowerShell, and cmd.exe.
If the selected executable cannot run, report its exact error and stop. Do not fall through to another executable, which could silently target a different Orca build.
Prefer --json. Use the selected executable's --help for commands or flags the guide does
not cover. If a command reports that Orca is not running, start it with ORCA open --json
and retry. If it fails with runtime_access_denied, your sandbox blocked the connection:
re-run it with escalated permissions, and do not run ORCA open or restart Orca. If
skills get is unknown, explain that updating Orca restores the guide; use --help for
read-only discovery and do not guess unsupported commands.