openclaw/node-runtime-recovery.d.mts
Peter Steinberger 05963f8b5e
fix(runtime): re-exec under an available supported Node before refusing (#143464)
* fix(runtime): reuse an available compatible Node at startup

Share startup recovery between the launcher and legacy CLI runtime admission
so older updaters can run target Doctor through dist/index.js under an
already installed compatible Node. Preserve process-contract exclusions,
arguments, environment, standard streams, and exit status.

Refs #140465

* test(runtime): include recovery proof in E2E routing

* fix(runtime): secure Node discovery and decode service scripts

Reject relative candidates and cwd-resolved runtimes before probing, except
for explicit absolute PATH directories. Parse generated Windows command
quoting and recorded code pages without loading application dependencies.

Skip CP850 and CP949 with a diagnostic instead of guessing executable paths.
Use real task-writer fixtures for encoding, quoting, and fallback coverage.

Refs #140465

* fix(runtime): reject cwd-local manager symlinks

* test(runtime): keep recovery home outside launcher cwd

* fix(runtime): isolate recovery from dotenv environment

* fix(runtime): canonicalize discovery paths before use

* fix(runtime): preserve private Node recovery from home

* refactor(runtime): trim Node recovery comments and aliases

Behavior-neutral cleanup of the recovery launcher module: fold the serviceHome and managerHome aliases into homeDir and shorten five comment blocks to the invariant they protect.
2026-09-10 01:35:39 -07:00

18 lines
815 B
TypeScript

export function consumeLauncherRootOptionToken(args: string[], index: number): number;
export function isForegroundGmailRunInvocation(argv: string[]): boolean;
export function isNativeHookRelayInvocation(argv: string[]): boolean;
export function resolveRecoveryPath(
value: string | null | undefined,
homeDir?: string | null,
options?: { allowMissing?: boolean; allowCwd?: boolean; trustedRoot?: string },
): string | null;
export function isUsableNode(
nodePath: string,
options?: { allowCwd?: boolean; trustedRoot?: string; env?: NodeJS.ProcessEnv },
): boolean;
export function runRespawnedChild(command: string, args: string[], env: NodeJS.ProcessEnv): true;
export function recoverNodeRuntime(options?: {
homeDir?: string;
allowInstall?: boolean;
env?: NodeJS.ProcessEnv;
}): Promise<boolean>;