From 669b26a3dc5bcf198845dd02ab6ea1f17850430a Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sat, 30 May 2026 00:00:16 +0200 Subject: [PATCH] perf(cli): cache routed command imports --- src/cli/program/register.subclis-core.ts | 10 ++++++++-- src/cli/program/routed-command-definitions.ts | 12 ++++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/cli/program/register.subclis-core.ts b/src/cli/program/register.subclis-core.ts index d76dee5a0a3..7035dabfab1 100644 --- a/src/cli/program/register.subclis-core.ts +++ b/src/cli/program/register.subclis-core.ts @@ -1,4 +1,5 @@ import type { Command } from "commander"; +import { createLazyImportLoader } from "../../shared/lazy-promise.js"; import { resolveCliArgvInvocation } from "../argv-invocation.js"; import { resolveCliCommandPathPolicy } from "../command-path-policy.js"; import { @@ -29,12 +30,17 @@ export type SubCliRegistrationContext = { purpose?: "runtime" | "completion"; }; +type PluginCliModule = typeof import("../../plugins/cli.js"); type SubCliRegistrar = ( program: Command, argv: string[], context: SubCliRegistrationContext, ) => Promise | void; +const pluginCliLoader = createLazyImportLoader( + () => import("../../plugins/cli.js"), +); + function shouldRegisterGatewayRunOnly(name: string, argv: string[]): boolean { if (name !== "gateway") { return false; @@ -68,12 +74,12 @@ async function registerSubCliWithPluginCommands( !invocation.hasHelpOrVersion && resolveCliCommandPathPolicy(invocation.commandPath).loadPlugins !== "never"; if (pluginCliPosition === "before" && shouldRegisterPluginCommands) { - const { registerPluginCliCommandsFromValidatedConfig } = await import("../../plugins/cli.js"); + const { registerPluginCliCommandsFromValidatedConfig } = await pluginCliLoader.load(); await registerPluginCliCommandsFromValidatedConfig(program); } await registerSubCli(); if (pluginCliPosition === "after" && shouldRegisterPluginCommands) { - const { registerPluginCliCommandsFromValidatedConfig } = await import("../../plugins/cli.js"); + const { registerPluginCliCommandsFromValidatedConfig } = await pluginCliLoader.load(); await registerPluginCliCommandsFromValidatedConfig(program); } } diff --git a/src/cli/program/routed-command-definitions.ts b/src/cli/program/routed-command-definitions.ts index dd7d3f2f8a4..a1f7ed2df60 100644 --- a/src/cli/program/routed-command-definitions.ts +++ b/src/cli/program/routed-command-definitions.ts @@ -24,6 +24,7 @@ type AgentsListCommandModule = typeof import("../../commands/agents.commands.lis type ConfigCliModule = typeof import("../config-cli.js"); type ModelsListCommandModule = typeof import("../../commands/models/list.list-command.js"); type ModelsStatusCommandModule = typeof import("../../commands/models/list.status-command.js"); +type TasksJsonCommandModule = typeof import("../../commands/tasks-json.js"); export type RoutedCommandDefinition> = { parseArgs: TParse; @@ -51,6 +52,9 @@ const modelsListCommandLoader = createLazyImportLoader( const modelsStatusCommandLoader = createLazyImportLoader( () => import("../../commands/models/list.status-command.js"), ); +const tasksJsonCommandLoader = createLazyImportLoader( + () => import("../../commands/tasks-json.js"), +); function loadConfigCli(): Promise { return configCliLoader.load(); @@ -68,6 +72,10 @@ function loadModelsStatusCommand(): Promise { return modelsStatusCommandLoader.load(); } +function loadTasksJsonCommand(): Promise { + return tasksJsonCommandLoader.load(); +} + export const routedCommandDefinitions = { health: defineRoutedCommand({ parseArgs: parseHealthRouteArgs, @@ -148,14 +156,14 @@ export const routedCommandDefinitions = { "tasks-list": defineRoutedCommand({ parseArgs: parseTasksListRouteArgs, runParsedArgs: async (args) => { - const { tasksListJsonCommand } = await import("../../commands/tasks-json.js"); + const { tasksListJsonCommand } = await loadTasksJsonCommand(); await tasksListJsonCommand(args, defaultRuntime); }, }), "tasks-audit": defineRoutedCommand({ parseArgs: parseTasksAuditRouteArgs, runParsedArgs: async (args) => { - const { tasksAuditJsonCommand } = await import("../../commands/tasks-json.js"); + const { tasksAuditJsonCommand } = await loadTasksJsonCommand(); await tasksAuditJsonCommand(args, defaultRuntime); }, }),