Files
openclaw/src/cli/command-startup-policy.ts
2026-06-19 04:37:29 +08:00

54 lines
1.9 KiB
TypeScript

// Startup policy helpers for config guards, plugin loading, banners, and CLI path checks.
import { isTruthyEnvValue } from "../infra/env.js";
import type { CliCommandPluginLoadPolicy } from "./command-catalog.js";
import { resolveCliCommandPathPolicy } from "./command-path-policy.js";
export function shouldBypassConfigGuardForCommandPath(commandPath: string[]): boolean {
return resolveCliCommandPathPolicy(commandPath).bypassConfigGuard;
}
function shouldLoadPlugins(params: {
argv?: string[];
commandPath: string[];
jsonOutputMode: boolean;
loadPlugins: CliCommandPluginLoadPolicy;
}): boolean {
// Some commands need plugin text/help in human output but not in JSON mode.
const loadPlugins = params.loadPlugins;
if (typeof loadPlugins === "function") {
return loadPlugins({
argv: params.argv ?? [],
commandPath: params.commandPath,
jsonOutputMode: params.jsonOutputMode,
});
}
return loadPlugins === "always" || (loadPlugins === "text-only" && !params.jsonOutputMode);
}
export function resolveCliStartupPolicy(params: {
argv?: string[];
commandPath: string[];
jsonOutputMode: boolean;
env?: NodeJS.ProcessEnv;
routeMode?: boolean;
}) {
const suppressDoctorStdout = params.jsonOutputMode;
const commandPolicy = resolveCliCommandPathPolicy(params.commandPath);
const env = params.env ?? process.env;
return {
suppressDoctorStdout,
hideBanner: isTruthyEnvValue(env.OPENCLAW_HIDE_BANNER) || commandPolicy.hideBanner,
skipConfigGuard: params.routeMode
? commandPolicy.routeConfigGuard === "always" ||
(commandPolicy.routeConfigGuard === "when-suppressed" && suppressDoctorStdout)
: false,
loadPlugins: shouldLoadPlugins({
argv: params.argv,
commandPath: params.commandPath,
jsonOutputMode: params.jsonOutputMode,
loadPlugins: commandPolicy.loadPlugins,
}),
pluginRegistry: commandPolicy.pluginRegistry,
};
}