openclaw/node-version.d.mts
Peter Steinberger cd90e0619e
fix(daemon): node install reports a supported Node runtime as unsupported when the working directory is unreadable (#131998)
* fix(daemon): stop reporting failed runtime probes as unsupported runtimes

The daemon runtime probe wrapped its exec in a bare catch that returned
`supported: false`, so any failure to *run* the probe was laundered into a
verdict that the runtime itself was unsupported. Operators on a perfectly
good Node install were told to install a Node version they already had.

Observed on Ubuntu 26.04 with Node 26.8.1: `openclaw node install` failed
with "No supported Node runtime was selected for the daemon" whenever the
process cwd was not readable by the service user (e.g. `runuser -u openclaw`
inheriting root's 0700 home over SSH), because every child spawn then fails
EACCES. The version logic was never wrong -- resolveSystemNodeInfo returned
supported:true and resolvePreferredNodePath returned /usr/bin/node when
probed directly on the affected host.

Node and Bun probes now share one resolver returning a closed
supported | unsupported | probe-failed union. A failed probe retains its
cause, executable, and cwd, and selection propagates that instead of falling
through to Node-upgrade advice.

Also:
- Derive the supported-version wording from NODE_RELEASE_FLOORS via a new
  exported SUPPORTED_NODE_VERSIONS, replacing six hand-copied spellings that
  omitted the >=25.9.0 line and told operators to downgrade.
- Forward OPENCLAW_WRAPPER through the node-host install path; the documented
  escape hatch was previously gateway-daemon-only.

Production LOC net +6 (+156/-150); consolidating the duplicated Node/Bun
probes paid for the new failure handling.

* docs(cli): drop machine-local path from node probe-failure guidance

ClawSweeper P3: docs/AGENTS.md requires generic docs content with no local
paths. The probe-failure recovery example prescribed a specific directory;
state the readability requirement instead.
2026-08-28 11:43:11 -07:00

15 lines
462 B
TypeScript

export type NodeReleaseVersion = {
major: number;
minor: number;
patch: number;
};
export function parseNodeReleaseVersion(value: unknown): NodeReleaseVersion | null;
export function isNodeVersionAtLeast(
version: NodeReleaseVersion | null,
minimum: NodeReleaseVersion,
): boolean;
export function isSupportedOpenClawNodeVersion(value: unknown): boolean;
export const PROCESS_NODE_VERSION_CHECK: string;
export const SUPPORTED_NODE_VERSIONS: string;