diff --git a/src/cli/plugins-cli.ts b/src/cli/plugins-cli.ts index eba4020e1a..3d3a334111 100644 --- a/src/cli/plugins-cli.ts +++ b/src/cli/plugins-cli.ts @@ -127,6 +127,29 @@ function applySlotSelectionForPlugin( return { config: result.config, warnings: result.warnings }; } +function createPluginInstallLogger(): { info: (msg: string) => void; warn: (msg: string) => void } { + return { + info: (msg) => defaultRuntime.log(msg), + warn: (msg) => defaultRuntime.log(theme.warn(msg)), + }; +} + +function enablePluginInConfig(config: OpenClawConfig, pluginId: string): OpenClawConfig { + return { + ...config, + plugins: { + ...config.plugins, + entries: { + ...config.plugins?.entries, + [pluginId]: { + ...(config.plugins?.entries?.[pluginId] as object | undefined), + enabled: true, + }, + }, + }, + }; +} + function logSlotWarnings(warnings: string[]) { if (warnings.length === 0) { return; @@ -531,23 +554,19 @@ export function registerPluginsCli(program: Command) { process.exit(1); } - let next: OpenClawConfig = { - ...cfg, - plugins: { - ...cfg.plugins, - load: { - ...cfg.plugins?.load, - paths: merged, - }, - entries: { - ...cfg.plugins?.entries, - [probe.pluginId]: { - ...(cfg.plugins?.entries?.[probe.pluginId] as object | undefined), - enabled: true, + let next: OpenClawConfig = enablePluginInConfig( + { + ...cfg, + plugins: { + ...cfg.plugins, + load: { + ...cfg.plugins?.load, + paths: merged, }, }, }, - }; + probe.pluginId, + ); next = recordPluginInstall(next, { pluginId: probe.pluginId, source: "path", @@ -566,29 +585,14 @@ export function registerPluginsCli(program: Command) { const result = await installPluginFromPath({ path: resolved, - logger: { - info: (msg) => defaultRuntime.log(msg), - warn: (msg) => defaultRuntime.log(theme.warn(msg)), - }, + logger: createPluginInstallLogger(), }); if (!result.ok) { defaultRuntime.error(result.error); process.exit(1); } - let next: OpenClawConfig = { - ...cfg, - plugins: { - ...cfg.plugins, - entries: { - ...cfg.plugins?.entries, - [result.pluginId]: { - ...(cfg.plugins?.entries?.[result.pluginId] as object | undefined), - enabled: true, - }, - }, - }, - }; + let next = enablePluginInConfig(cfg, result.pluginId); const source: "archive" | "path" = resolveArchiveKind(resolved) ? "archive" : "path"; next = recordPluginInstall(next, { pluginId: result.pluginId, @@ -630,29 +634,14 @@ export function registerPluginsCli(program: Command) { const result = await installPluginFromNpmSpec({ spec: raw, - logger: { - info: (msg) => defaultRuntime.log(msg), - warn: (msg) => defaultRuntime.log(theme.warn(msg)), - }, + logger: createPluginInstallLogger(), }); if (!result.ok) { defaultRuntime.error(result.error); process.exit(1); } - let next: OpenClawConfig = { - ...cfg, - plugins: { - ...cfg.plugins, - entries: { - ...cfg.plugins?.entries, - [result.pluginId]: { - ...(cfg.plugins?.entries?.[result.pluginId] as object | undefined), - enabled: true, - }, - }, - }, - }; + let next = enablePluginInConfig(cfg, result.pluginId); next = recordPluginInstall(next, { pluginId: result.pluginId, source: "npm",