#!/usr/bin/env node import module from "node:module"; const MIN_NODE_MAJOR = 22; const MIN_NODE_MINOR = 12; const ensureSupportedNodeVersion = () => { const [majorRaw = "0", minorRaw = "0"] = process.versions.node.split("."); const major = Number(majorRaw); const minor = Number(minorRaw); const supported = major > MIN_NODE_MAJOR || (major === MIN_NODE_MAJOR && minor >= MIN_NODE_MINOR); if (supported) { return; } throw new Error( `openclaw: Node.js v${MIN_NODE_MAJOR}.${MIN_NODE_MINOR}+ is required (current: v${process.versions.node}).\n` + "If you use nvm, run:\n" + " nvm install 22\n" + " nvm use 22\n" + " nvm alias default 22", ); }; ensureSupportedNodeVersion(); // https://nodejs.org/api/module.html#module-compile-cache if (module.enableCompileCache && !process.env.NODE_DISABLE_COMPILE_CACHE) { try { module.enableCompileCache(); } catch { // Ignore errors } } const isModuleNotFoundError = (err) => err && typeof err === "object" && "code" in err && err.code === "ERR_MODULE_NOT_FOUND"; const installProcessWarningFilter = async () => { // Keep bootstrap warnings consistent with the TypeScript runtime. for (const specifier of ["./dist/warning-filter.js", "./dist/warning-filter.mjs"]) { try { const mod = await import(specifier); if (typeof mod.installProcessWarningFilter === "function") { mod.installProcessWarningFilter(); return; } } catch (err) { if (isModuleNotFoundError(err)) { continue; } throw err; } } }; await installProcessWarningFilter(); const tryImport = async (specifier) => { try { await import(specifier); return true; } catch (err) { // Only swallow missing-module errors; rethrow real runtime errors. if (isModuleNotFoundError(err)) { return false; } throw err; } }; if (await tryImport("./dist/entry.js")) { // OK } else if (await tryImport("./dist/entry.mjs")) { // OK } else { throw new Error("openclaw: missing dist/entry.(m)js (build output)."); }