import { isTruthyEnvValue } from "../infra/env.js"; import { defaultRuntime } from "../runtime.js"; import { resolveCliArgvInvocation } from "./argv-invocation.js"; import { hasFlag } from "./argv.js"; import { applyCliExecutionStartupPresentation, ensureCliExecutionBootstrap, resolveCliExecutionStartupContext, } from "./command-execution-startup.js"; import { findRoutedCommand } from "./program/routes.js"; async function prepareRoutedCommand(params: { argv: string[]; commandPath: string[]; loadPlugins?: boolean | ((argv: string[]) => boolean); }) { const { startupPolicy } = resolveCliExecutionStartupContext({ argv: params.argv, jsonOutputMode: hasFlag(params.argv, "--json"), env: process.env, routeMode: true, }); const { VERSION } = await import("../version.js"); await applyCliExecutionStartupPresentation({ argv: params.argv, routeLogsToStderrOnSuppress: false, startupPolicy, showBanner: process.stdout.isTTY && !startupPolicy.suppressDoctorStdout, version: VERSION, }); const shouldLoadPlugins = typeof params.loadPlugins === "function" ? params.loadPlugins(params.argv) : params.loadPlugins; await ensureCliExecutionBootstrap({ runtime: defaultRuntime, commandPath: params.commandPath, startupPolicy, loadPlugins: shouldLoadPlugins ?? startupPolicy.loadPlugins, }); } export async function tryRouteCli(argv: string[]): Promise { if (isTruthyEnvValue(process.env.OPENCLAW_DISABLE_ROUTE_FIRST)) { return false; } const invocation = resolveCliArgvInvocation(argv); if (invocation.hasHelpOrVersion) { return false; } if (!invocation.commandPath[0]) { return false; } const route = findRoutedCommand(invocation.commandPath); if (!route) { return false; } await prepareRoutedCommand({ argv, commandPath: invocation.commandPath, loadPlugins: route.loadPlugins, }); return route.run(argv); }