Files
openclaw/src/cli/command-bootstrap.ts
Peter Steinberger 843e3c7878 improve(gateway): speed up pristine plugin-heavy startup [AI] (#106195)
* perf(gateway): skip absent core startup migrations

* fix(gateway): revalidate recovered startup config
2026-07-13 02:32:24 -07:00

54 lines
2.1 KiB
TypeScript

// Shared command preflight: config readiness plus optional plugin registry activation.
import type { ConfigFileSnapshot } from "../config/types.js";
import type { RuntimeEnv } from "../runtime.js";
import { createLazyImportLoader } from "../shared/lazy-promise.js";
import type { CliPluginRegistryPolicy } from "./command-catalog.js";
import { resolveCliCommandPathPolicy } from "./command-path-policy.js";
import { ensureCliPluginRegistryLoaded } from "./plugin-registry-loader.js";
const configGuardModuleLoader = createLazyImportLoader(() => import("./program/config-guard.js"));
function loadConfigGuardModule() {
return configGuardModuleLoader.load();
}
/** Run the lazy command bootstrap steps selected by command policy. */
export async function ensureCliCommandBootstrap(params: {
runtime: RuntimeEnv;
commandPath: string[];
suppressDoctorStdout?: boolean;
skipConfigGuard?: boolean;
allowInvalid?: boolean;
beforeStateMigrations?: (snapshot?: ConfigFileSnapshot) => Promise<boolean>;
loadPlugins?: boolean;
pluginRegistry?: CliPluginRegistryPolicy;
skipPristineCoreStateMigrations?: boolean;
skipPristineStartupStateMigrations?: boolean;
}) {
if (!params.skipConfigGuard) {
const { ensureConfigReady } = await loadConfigGuardModule();
await ensureConfigReady({
runtime: params.runtime,
commandPath: params.commandPath,
...(params.allowInvalid ? { allowInvalid: true } : {}),
...(params.beforeStateMigrations
? { beforeStateMigrations: params.beforeStateMigrations }
: {}),
...(params.suppressDoctorStdout ? { suppressDoctorStdout: true } : {}),
...(params.skipPristineStartupStateMigrations
? { skipPristineStartupStateMigrations: true }
: {}),
...(params.skipPristineCoreStateMigrations ? { skipPristineCoreStateMigrations: true } : {}),
});
}
if (!params.loadPlugins) {
return;
}
const pluginRegistryLoadPolicy =
params.pluginRegistry ?? resolveCliCommandPathPolicy(params.commandPath).pluginRegistry;
await ensureCliPluginRegistryLoaded({
scope: pluginRegistryLoadPolicy.scope,
routeLogsToStderr: params.suppressDoctorStdout,
});
}