UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

567 lines (566 loc) 23.9 kB
#!/usr/bin/env node import { V as isForegroundGatewayRunArgv, n as getCommandPathWithRootOptions, u as isRootHelpInvocation } from "./argv-DNjh_yaF.js"; import { m as readNonBlankString } from "./string-coerce-CIXf7egm.js"; import { t as resolveCliArgvInvocation } from "./argv-invocation-C1WhAkJL.js"; import { n as parseCliContainerArgs, r as resolveCliContainerTarget } from "./container-target-yd6OnwF_.js"; import { r as defaultRuntime } from "./runtime-CF2WjnNZ.js"; import { n as requestExitAfterOneShotOutput, r as runCliWithExitFinalization } from "./one-shot-exit-BkFPnjbM.js"; import { a as tryOutputPrecomputedCommandHelp, i as parseCliProfileArgs, n as createGatewayDispatchStartupTrace, r as applyCliProfileEnv, t as configureGatewayStartupTraceConsoleFormatting } from "./startup-trace-C2SBInNS.js"; import { r as withCliProcessScope } from "./runtime-cleanup-scope-cCKdH8QO.js"; import { i as normalizeEnv, n as isTruthyEnvValue } from "./env-M3R40TOb.js"; import { t as normalizeWindowsArgv } from "./windows-argv-Dl7Refj1.js"; import { t as attachChildProcessBridge } from "./child-process-bridge-CFJsa4sQ.js"; import { n as signalProcessTree } from "./kill-tree-CR2oLt9D.js"; import { t as installDistEsmResolveFastPath } from "./entry.esm-resolve-fast-path-jqbSGeOV.js"; import { t as resolveNodeStartupTlsEnvironment } from "./node-startup-env-C5ZHYlJG.js"; import { t as tryHandleRootVersionFastPath } from "./entry.version-fast-path-BBTOuUbi.js"; import { t as isMainModule } from "./is-main-CH4EEB_R.js"; import { n as ensureOpenClawExecMarkerOnProcess } from "./openclaw-exec-env-BmbZ1aqS.js"; import { t as installProcessWarningFilter } from "./warning-filter-z3hZGeVP.js"; import { enableCompileCache, getCompileCacheDir } from "node:module"; import { existsSync, readFileSync, statSync } from "node:fs"; import process$1 from "node:process"; import { fileURLToPath } from "node:url"; import { format as format$1 } from "node:util"; import path from "node:path"; import { spawn } from "node:child_process"; import os from "node:os"; //#region src/cli/respawn-policy.ts const INTERACTIVE_TTY_COMMANDS = /* @__PURE__ */ new Set([ "tui", "terminal", "chat" ]); /** Gmail owns a shutdown grace period longer than the generic respawn wrapper allows. */ function isForegroundGmailRunArgv(argv) { return getCommandPathWithRootOptions(argv, 3).join(" ") === "webhooks gmail run"; } function isNativeHookRelayArgv(argv) { const { commandPath } = resolveCliArgvInvocation(argv); return commandPath[0] === "hooks" && commandPath[1] === "relay"; } function shouldKeepNativeHookRelayInProcess(argv, platform) { return platform !== "win32" && isNativeHookRelayArgv(argv); } function isInteractiveTtyCommandArgv(argv) { const invocation = resolveCliArgvInvocation(argv); return invocation.primary !== null && INTERACTIVE_TTY_COMMANDS.has(invocation.primary); } function isTerminalInteractiveRespawnArgv(argv) { const invocation = resolveCliArgvInvocation(argv); if (invocation.hasHelpOrVersion) return false; return invocation.primary === null || INTERACTIVE_TTY_COMMANDS.has(invocation.primary); } /** Returns whether CLI startup should avoid the general respawn wrapper for this argv. */ function shouldSkipRespawnForArgv(argv, platform = process.platform) { const invocation = resolveCliArgvInvocation(argv); const isGatewayStatus = invocation.commandPath.length === 2 && invocation.commandPath[0] === "gateway" && invocation.commandPath[1] === "status"; return invocation.hasHelpOrVersion || isInteractiveTtyCommandArgv(argv) || isForegroundGmailRunArgv(argv) || shouldKeepNativeHookRelayInProcess(argv, platform) || isGatewayStatus || invocation.primary === "gateway" && isForegroundGatewayRunArgv(argv); } /** Returns whether startup-environment respawn should be skipped without suppressing TUI respawn policy. */ function shouldSkipStartupEnvironmentRespawnForArgv(argv, platform = process.platform) { const invocation = resolveCliArgvInvocation(argv); return invocation.hasHelpOrVersion || isForegroundGmailRunArgv(argv) || shouldKeepNativeHookRelayInProcess(argv, platform) || invocation.primary === "gateway" && isForegroundGatewayRunArgv(argv); } //#endregion //#region src/process/respawn-child-runner.ts const RESPAWN_SIGNAL_EXIT_GRACE_MS = 1e3; const RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS = 1e3; const RESPAWN_SIGNAL_HARD_EXIT_GRACE_MS = 1e3; function runRespawnChildWithSignalBridge(params) { const { command, args, env, runtime, onError } = params; const stdioIsTerminal = params.stdioIsTerminal ?? (process.stdin.isTTY || process.stdout.isTTY); const detachForProcessTree = params.detachForProcessTree === true && process.platform !== "win32" && !stdioIsTerminal; const child = runtime.spawn(command, args, { stdio: "inherit", env, detached: detachForProcessTree }); let signalExitTimer; let signalForceKillTimer; let signalHardExitTimer; let parentSignalReceived = false; let firstForwardedSignal; let hardKillBackstopStarted = false; const clearSignalTimers = () => { if (signalExitTimer) { clearTimeout(signalExitTimer); signalExitTimer = void 0; } if (signalForceKillTimer) { clearTimeout(signalForceKillTimer); signalForceKillTimer = void 0; } if (signalHardExitTimer) { clearTimeout(signalHardExitTimer); signalHardExitTimer = void 0; } }; const signalChild = (signal) => { if (detachForProcessTree && typeof child.pid === "number" && child.pid > 0) { signalProcessTree(child.pid, signal, { detached: true }); return; } child.kill(signal === "SIGKILL" && process.platform === "win32" ? "SIGTERM" : signal); }; const forceKillChild = () => { try { signalChild("SIGKILL"); } catch {} }; const requestChildTermination = () => { try { signalChild("SIGTERM"); } catch {} signalForceKillTimer = setTimeout(() => { hardKillBackstopStarted = true; forceKillChild(); signalHardExitTimer = setTimeout(() => { runtime.exit(1); }, RESPAWN_SIGNAL_HARD_EXIT_GRACE_MS); signalHardExitTimer.unref?.(); }, RESPAWN_SIGNAL_FORCE_KILL_GRACE_MS); signalForceKillTimer.unref?.(); }; const scheduleParentExit = (signal) => { parentSignalReceived = true; firstForwardedSignal ??= signal; if (signalExitTimer) return; signalExitTimer = setTimeout(() => { requestChildTermination(); }, RESPAWN_SIGNAL_EXIT_GRACE_MS); signalExitTimer.unref?.(); }; runtime.attachChildProcessBridge(child, { onSignal: scheduleParentExit }); child.once("exit", (code, signal) => { if (parentSignalReceived && detachForProcessTree) forceKillChild(); clearSignalTimers(); if (signal) { const forwardedSignalExitCode = !hardKillBackstopStarted && signal === firstForwardedSignal ? signal === "SIGINT" ? 130 : signal === "SIGTERM" ? 143 : void 0 : void 0; runtime.exit(forwardedSignalExitCode ?? 1); return; } runtime.exit(code ?? 1); }); child.on("error", (error) => { if (child.pid !== void 0) return; clearSignalTimers(); onError(error); runtime.exit(1); }); return child; } //#endregion //#region src/entry.compile-cache.ts const COMPILE_CACHE_DISABLED_RESPAWNED_ENV = "OPENCLAW_COMPILE_CACHE_DISABLED_RESPAWNED"; function resolveEntryInstallRoot(entryFile) { const entryDir = path.dirname(entryFile); const entryParent = path.basename(entryDir); return entryParent === "dist" || entryParent === "src" ? path.dirname(entryDir) : entryDir; } function isSourceCheckoutInstallRoot(installRoot) { return existsSync(path.join(installRoot, ".git")) || existsSync(path.join(installRoot, "src", "entry.ts")); } function isNodeCompileCacheDisabled(env) { return env?.NODE_DISABLE_COMPILE_CACHE !== void 0; } function isNodeCompileCacheRequested(env) { return env?.NODE_COMPILE_CACHE !== void 0 && !isNodeCompileCacheDisabled(env); } function shouldEnableOpenClawCompileCache(params) { return !isNodeCompileCacheDisabled(params.env) && !isSourceCheckoutInstallRoot(params.installRoot); } function sanitizeCompileCachePathSegment(value) { const normalized = value.replace(/[^A-Za-z0-9._-]+/g, "_").replace(/^_+|_+$/g, ""); return normalized.length > 0 ? normalized : "unknown"; } function readPackageVersion(packageJsonPath) { try { const parsed = JSON.parse(readFileSync(packageJsonPath, "utf8")); if (parsed && typeof parsed === "object" && "version" in parsed && typeof parsed.version === "string" && parsed.version.trim().length > 0) return parsed.version; } catch {} return "unknown"; } function resolveOpenClawCompileCacheDirectory(params) { const env = params.env ?? process$1.env; const packageJsonPath = path.join(params.installRoot, "package.json"); const version = sanitizeCompileCachePathSegment(readPackageVersion(packageJsonPath)); let installMarker = "no-package-json"; try { const stat = statSync(packageJsonPath); installMarker = `${Math.trunc(stat.mtimeMs)}-${stat.size}`; } catch {} const baseDirectory = env.NODE_COMPILE_CACHE && !isNodeCompileCacheDisabled(env) ? env.NODE_COMPILE_CACHE : path.join(os.tmpdir(), "node-compile-cache"); return path.join(baseDirectory, "openclaw", version, sanitizeCompileCachePathSegment(installMarker)); } function buildOpenClawCompileCacheRespawnPlan(params) { const env = process$1.env; const argv = process$1.argv; const platform = process$1.platform; if (isForegroundGmailRunArgv(argv) || shouldKeepNativeHookRelayInProcess(argv, platform)) return; if (!isSourceCheckoutInstallRoot(params.installRoot)) return; if (env[COMPILE_CACHE_DISABLED_RESPAWNED_ENV] === "1") return; if (!params.compileCacheDir && !isNodeCompileCacheRequested(env)) return; const nextEnv = { ...env, NODE_DISABLE_COMPILE_CACHE: "1", [COMPILE_CACHE_DISABLED_RESPAWNED_ENV]: "1" }; delete nextEnv.NODE_COMPILE_CACHE; return { command: process$1.execPath, args: [ ...process$1.execArgv, params.currentFile, ...argv.slice(2) ], env: nextEnv, detachForProcessTree: platform !== "win32" && !isTerminalInteractiveRespawnArgv(argv) }; } async function respawnWithoutOpenClawCompileCacheIfNeeded(params) { const plan = buildOpenClawCompileCacheRespawnPlan({ currentFile: params.currentFile, installRoot: params.installRoot, compileCacheDir: getCompileCacheDir?.() }); if (!plan) return false; const writeError = await params.prepareWriteError?.(); runOpenClawCompileCacheRespawnPlan(plan, writeError ? { spawn, attachChildProcessBridge, exit: process$1.exit.bind(process$1), writeError } : void 0); return true; } function runOpenClawCompileCacheRespawnPlan(plan, runtime = { spawn, attachChildProcessBridge, exit: process$1.exit.bind(process$1), writeError: (message) => process$1.stderr.write(message) }) { return runRespawnChildWithSignalBridge({ command: plan.command, args: plan.args, env: plan.env, detachForProcessTree: plan.detachForProcessTree, runtime, onError: (error) => { runtime.writeError(`[openclaw] Failed to respawn CLI without compile cache: ${error instanceof Error ? error.stack ?? error.message : String(error)}\n`); } }); } function enableOpenClawCompileCache(params) { if (!shouldEnableOpenClawCompileCache(params)) return; try { enableCompileCache(resolveOpenClawCompileCacheDirectory(params)); } catch {} } //#endregion //#region src/entry.respawn.ts const EXPERIMENTAL_WARNING_FLAG = "--disable-warning=ExperimentalWarning"; const OPENCLAW_NODE_OPTIONS_READY = "OPENCLAW_NODE_OPTIONS_READY"; const OPENCLAW_NODE_EXTRA_CA_CERTS_READY = "OPENCLAW_NODE_EXTRA_CA_CERTS_READY"; const WINDOWS_STACK_SIZE_FLAG = "--stack-size=8192"; function pathModuleForPlatform(platform) { return platform === "win32" ? path.win32 : path.posix; } function resolveCliRespawnCommand(params) { const basename = pathModuleForPlatform(params.platform ?? process.platform).basename(params.execPath).toLowerCase(); if (basename === "volta-shim" || basename === "volta-shim.exe") return "node"; return params.execPath; } function hasExperimentalWarningSuppressed(params = {}) { const env = params.env ?? process.env; const execArgv = params.execArgv ?? process.execArgv; const nodeOptions = env.NODE_OPTIONS ?? ""; if (nodeOptions.includes(EXPERIMENTAL_WARNING_FLAG) || nodeOptions.includes("--no-warnings")) return true; return execArgv.some((arg) => arg === EXPERIMENTAL_WARNING_FLAG || arg === "--no-warnings"); } function hasStackSizeConfigured(execArgv) { return execArgv.some((arg) => arg === "--stack-size" || arg.startsWith("--stack-size=") || arg === "--stack_size" || arg.startsWith("--stack_size=")); } function buildCliRespawnPlan(params = {}) { const argv = params.argv ?? process.argv; const env = params.env ?? process.env; const execArgv = params.execArgv ?? process.execArgv; const execPath = params.execPath ?? process.execPath; const platform = params.platform ?? process.platform; const normalizedArgv = platform === "win32" ? normalizeWindowsArgv(argv, { platform, execPath }) : argv; if (shouldSkipStartupEnvironmentRespawnForArgv(normalizedArgv, platform) || isTruthyEnvValue(env.OPENCLAW_NO_RESPAWN)) return null; const childEnv = { ...env }; if (!readNonBlankString(childEnv.NODE_EXTRA_CA_CERTS)) delete childEnv.NODE_EXTRA_CA_CERTS; const childExecArgv = [...execArgv]; let needsRespawn = false; if (platform === "win32") { if (!hasStackSizeConfigured(childExecArgv)) { childExecArgv.unshift(WINDOWS_STACK_SIZE_FLAG); needsRespawn = true; } if (!needsRespawn) return null; return { command: resolveCliRespawnCommand({ execPath, platform }), argv: [...childExecArgv, ...normalizedArgv.slice(1)], env: childEnv, detachForProcessTree: false }; } const autoNodeExtraCaCerts = params.autoNodeExtraCaCerts ?? resolveNodeStartupTlsEnvironment({ env, execPath, includeDarwinDefaults: false }).NODE_EXTRA_CA_CERTS; if (autoNodeExtraCaCerts && !isTruthyEnvValue(env[OPENCLAW_NODE_EXTRA_CA_CERTS_READY]) && !childEnv.NODE_EXTRA_CA_CERTS) { childEnv.NODE_EXTRA_CA_CERTS = autoNodeExtraCaCerts; childEnv[OPENCLAW_NODE_EXTRA_CA_CERTS_READY] = "1"; needsRespawn = true; } if (!shouldSkipRespawnForArgv(argv, platform) && !isTruthyEnvValue(env[OPENCLAW_NODE_OPTIONS_READY]) && !hasExperimentalWarningSuppressed({ env, execArgv })) { childEnv[OPENCLAW_NODE_OPTIONS_READY] = "1"; childExecArgv.unshift(EXPERIMENTAL_WARNING_FLAG); needsRespawn = true; } if (!needsRespawn) return null; return { command: resolveCliRespawnCommand({ execPath, platform }), argv: [...childExecArgv, ...argv.slice(1)], env: childEnv, detachForProcessTree: !isTerminalInteractiveRespawnArgv(argv) }; } function runCliRespawnPlan(plan, runtime, writeError = (message, error) => console.error(message, error)) { const resolvedRuntime = runtime ?? { spawn, attachChildProcessBridge, exit: process.exit.bind(process), writeError }; return runRespawnChildWithSignalBridge({ command: plan.command, args: plan.argv, env: plan.env, detachForProcessTree: plan.detachForProcessTree, runtime: resolvedRuntime, onError: (error) => { resolvedRuntime.writeError("[openclaw] Failed to respawn CLI:", error instanceof Error ? error.stack ?? error.message : error); } }); } //#endregion //#region src/entry.ts const ENTRY_WRAPPER_PAIRS = [ { wrapperBasename: "openclaw.mjs", entryBasename: "entry.js" }, { wrapperBasename: "openclaw.mjs", entryBasename: "entry.mjs" }, { wrapperBasename: "openclaw.js", entryBasename: "entry.js" } ]; const loadRootHelpLiveConfigModule = async () => await import("./root-help-live-config-DLFpCf-w.js"); const loadRootHelpMetadataModule = async () => await import("./root-help-metadata-BCFFf7h3.js"); async function writeCapturedCliArgumentError(message) { const { loadCliDotEnv } = await import("./dotenv-Bvm6eLnE.js"); loadCliDotEnv({ quiet: true }); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); const { enableConsoleCapture } = await import("./logging-CoIcMOSn.js"); enableConsoleCapture(); const [{ formatCliJsonFailure }, { isJsonOutputModeActive }] = await Promise.all([import("./failure-output-DoW9YQTW.js"), import("./json-output-mode-D6GIUD5R.js")]); if (isJsonOutputModeActive(process$1.argv)) defaultRuntime.writeJson(formatCliJsonFailure(message)); console.error(`[openclaw] ${message}`); } async function writeCliDiagnosticBlock(message) { const { loadCliDotEnv } = await import("./dotenv-Bvm6eLnE.js"); loadCliDotEnv({ quiet: true }); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); const { formatConsoleDiagnosticBlock } = await import("./json-console-line-kiRP3hor.js"); process$1.stderr.write(formatConsoleDiagnosticBlock({ level: "error", message: `${message}\n` })); } async function prepareCliDiagnosticBlockWriter() { const { loadCliDotEnv } = await import("./dotenv-Bvm6eLnE.js"); loadCliDotEnv({ quiet: true }); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); const { formatConsoleDiagnosticBlock } = await import("./json-console-line-kiRP3hor.js"); return (message, error) => { const formatted = error === void 0 ? message : format$1(message, error); process$1.stderr.write(formatConsoleDiagnosticBlock({ level: "error", message: formatted.endsWith("\n") ? formatted : `${formatted}\n` })); }; } async function flushEntryStartupTraceForEarlyReturn(argv) { if (!gatewayEntryStartupTrace.enabled) return; const { loadCliDotEnvForEarlyDiagnostic } = await import("./dotenv-Bvm6eLnE.js"); await loadCliDotEnvForEarlyDiagnostic(argv); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); } function shouldForceReadOnlyAuthStore(argv) { const tokens = argv.slice(2).filter((token) => token.length > 0 && !token.startsWith("-")); for (let index = 0; index < tokens.length - 1; index += 1) if (tokens[index] === "secrets" && tokens[index + 1] === "audit") return true; return false; } const gatewayEntryStartupTrace = createGatewayDispatchStartupTrace(process$1.argv, "entry"); if (!isMainModule({ currentFile: fileURLToPath(import.meta.url), wrapperEntryPairs: [...ENTRY_WRAPPER_PAIRS] })) {} else { const entryFile = fileURLToPath(import.meta.url); const installRoot = resolveEntryInstallRoot(entryFile); installDistEsmResolveFastPath(import.meta.url); process$1.title = "openclaw"; ensureOpenClawExecMarkerOnProcess(); installProcessWarningFilter(); normalizeEnv(); process$1.argv = normalizeWindowsArgv(process$1.argv); const earlyProfile = parseCliProfileArgs(process$1.argv); if (earlyProfile.ok && earlyProfile.profile) applyCliProfileEnv({ profile: earlyProfile.profile }); const { assertSupportedRuntime, isCurrentRuntimeSupported } = await import("./runtime-guard-DSAtGMjd.js"); if (!isCurrentRuntimeSupported()) { const { loadCliDotEnv } = await import("./dotenv-Bvm6eLnE.js"); loadCliDotEnv({ quiet: true }); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); } assertSupportedRuntime(); gatewayEntryStartupTrace.mark("bootstrap"); if (!await respawnWithoutOpenClawCompileCacheIfNeeded({ currentFile: entryFile, installRoot, prepareWriteError: async () => { const writeError = await prepareCliDiagnosticBlockWriter(); return (message) => writeError(message); } })) { enableOpenClawCompileCache({ installRoot }); if (shouldForceReadOnlyAuthStore(process$1.argv)) process$1.env.OPENCLAW_AUTH_STORE_READONLY = "1"; if (process$1.argv.includes("--no-color")) { process$1.env.NO_COLOR = "1"; process$1.env.FORCE_COLOR = "0"; } async function ensureCliRespawnReady() { const plan = buildCliRespawnPlan(); if (!plan) return false; runCliRespawnPlan(plan, void 0, await prepareCliDiagnosticBlockWriter()); return true; } if (!await ensureCliRespawnReady()) { const parsedContainer = parseCliContainerArgs(process$1.argv); if (!parsedContainer.ok) { await writeCapturedCliArgumentError(parsedContainer.error); process$1.exit(2); } const parsed = parseCliProfileArgs(parsedContainer.argv); if (!parsed.ok) { await writeCapturedCliArgumentError(parsed.error); process$1.exit(2); } const containerTargetName = resolveCliContainerTarget(process$1.argv); if (parsed.profile) { applyCliProfileEnv({ profile: parsed.profile }); process$1.argv = parsed.argv; } if (containerTargetName && parsed.profile) { await writeCapturedCliArgumentError("--container cannot be combined with --profile/--dev"); process$1.exit(2); } gatewayEntryStartupTrace.mark("argv"); if (!tryHandleRootVersionFastPath(process$1.argv)) await withCliProcessScope(() => runMainOrRootHelp(process$1.argv)); } } } async function tryHandleRootHelpFastPath(argv, deps = {}) { const env = deps.env ?? process$1.env; if (env.OPENCLAW_DISABLE_CLI_STARTUP_HELP_FAST_PATH === "1" || resolveCliContainerTarget(argv, env)) return false; if (!isRootHelpInvocation(argv)) return false; const handleError = deps.onError ?? (async (error) => { await writeCliDiagnosticBlock(`[openclaw] Failed to display help: ${error instanceof Error ? error.stack ?? error.message : String(error)}`); process$1.exit(1); }); try { const liveRootHelpOptions = await (deps.loadRootHelpRenderOptionsForConfigSensitivePlugins ?? (await loadRootHelpLiveConfigModule()).loadRootHelpRenderOptionsForConfigSensitivePlugins)(env); if (!liveRootHelpOptions) { if ((deps.outputPrecomputedRootHelpText ?? (await loadRootHelpMetadataModule()).outputPrecomputedRootHelpText)()) return true; } await (deps.outputRootHelp ?? (await import("./root-help-DOEa7DOZ.js")).outputRootHelp)(liveRootHelpOptions ?? void 0); return true; } catch (error) { await handleError(error); return true; } } async function tryHandlePrecomputedCommandHelpFastPath(argv, deps = {}) { const env = deps.env ?? process$1.env; if (resolveCliContainerTarget(argv, env)) return false; try { return await tryOutputPrecomputedCommandHelp(argv, { ...deps, env }); } catch { return false; } } async function runMainOrRootHelp(argv, deps = {}) { await runCliWithExitFinalization({ run: async () => { if (isNativeHookRelayArgv(argv) && !argv.includes("--help") && !argv.includes("-h")) { const { runNativeHookRelayCliFromArgv } = await import("./native-hook-relay-cli-D95kngzW.js"); const exitCode = await runNativeHookRelayCliFromArgv(argv); process$1.exitCode = exitCode; requestExitAfterOneShotOutput(defaultRuntime, exitCode); return; } if (await tryHandleRootHelpFastPath(argv)) { await flushEntryStartupTraceForEarlyReturn(argv); return; } if (await tryHandlePrecomputedCommandHelpFastPath(argv)) { await flushEntryStartupTraceForEarlyReturn(argv); return; } const { runCli } = await gatewayEntryStartupTrace.measure("run-main-import", deps.loadRunCli ?? (() => import("./cli/run-main.js"))); await runCli(argv, { additionalStartupTrace: gatewayEntryStartupTrace, retainConsoleRoutingUntilProcessExit: true }); }, onError: async (error) => { const { loadCliDotEnvForEarlyDiagnostic } = await import("./dotenv-Bvm6eLnE.js"); await loadCliDotEnvForEarlyDiagnostic(argv); await configureGatewayStartupTraceConsoleFormatting(gatewayEntryStartupTrace); const { enableConsoleCapture } = await import("./logging-CoIcMOSn.js"); enableConsoleCapture(); const [{ formatCliFailureLines, formatCliJsonFailure }, { isJsonOutputModeActive }] = await Promise.all([import("./failure-output-DoW9YQTW.js"), import("./json-output-mode-D6GIUD5R.js")]); if (isJsonOutputModeActive(argv)) defaultRuntime.writeJson(formatCliJsonFailure(error)); for (const line of formatCliFailureLines({ title: "Could not start the CLI.", error, argv })) console.error(line); process$1.exitCode = 1; } }); } //#endregion export { runMainOrRootHelp, tryHandlePrecomputedCommandHelpFastPath, tryHandleRootHelpFastPath };