diff --git a/src/config/plugin-auto-enable.shared.ts b/src/config/plugin-auto-enable.shared.ts index 2b8642f8ac3..c280d94ae64 100644 --- a/src/config/plugin-auto-enable.shared.ts +++ b/src/config/plugin-auto-enable.shared.ts @@ -304,6 +304,37 @@ function hasBrowserToolReference(cfg: OpenClawConfig): boolean { : false; } +function collectConfiguredPluginEntryIds(cfg: OpenClawConfig): string[] { + const entries = cfg.plugins?.entries; + if (!entries || typeof entries !== "object") { + return []; + } + return Object.keys(entries) + .map((pluginId) => pluginId.trim()) + .filter(Boolean); +} + +function resolveRelevantSetupAutoEnablePluginIds(cfg: OpenClawConfig): string[] { + const pluginIds = new Set(collectConfiguredPluginEntryIds(cfg)); + if ( + isRecord(cfg.browser) || + isRecord(cfg.plugins?.entries?.browser) || + hasBrowserToolReference(cfg) + ) { + pluginIds.add("browser"); + } + if (isRecord(cfg.acp) || isRecord(cfg.plugins?.entries?.acpx)) { + pluginIds.add("acpx"); + } + if ( + isRecord(cfg.plugins?.entries?.xai) || + (isRecord(cfg.tools?.web) && isRecord((cfg.tools.web as Record).x_search)) + ) { + pluginIds.add("xai"); + } + return [...pluginIds].toSorted((left, right) => left.localeCompare(right)); +} + function hasSetupAutoEnableRelevantConfig(cfg: OpenClawConfig): boolean { const entries = cfg.plugins?.entries; if (isRecord(cfg.browser) || isRecord(cfg.acp) || hasBrowserToolReference(cfg)) { @@ -396,6 +427,7 @@ export function configMayNeedPluginAutoEnable( resolvePluginSetupAutoEnableReasons({ config: cfg, env, + pluginIds: resolveRelevantSetupAutoEnablePluginIds(cfg), }).length > 0 ); } @@ -516,6 +548,7 @@ export function resolveConfiguredPluginAutoEnableCandidates(params: { for (const entry of resolvePluginSetupAutoEnableReasons({ config: params.config, env: params.env, + pluginIds: resolveRelevantSetupAutoEnablePluginIds(params.config), })) { changes.push({ pluginId: entry.pluginId, diff --git a/src/plugins/setup-registry.ts b/src/plugins/setup-registry.ts index 4243fff7931..e9708b4303e 100644 --- a/src/plugins/setup-registry.ts +++ b/src/plugins/setup-registry.ts @@ -689,6 +689,7 @@ export function resolvePluginSetupAutoEnableReasons(params: { config: OpenClawConfig; workspaceDir?: string; env?: NodeJS.ProcessEnv; + pluginIds?: readonly string[]; }): SetupAutoEnableReason[] { const env = params.env ?? process.env; const reasons: SetupAutoEnableReason[] = []; @@ -697,6 +698,7 @@ export function resolvePluginSetupAutoEnableReasons(params: { for (const entry of resolvePluginSetupRegistry({ workspaceDir: params.workspaceDir, env, + pluginIds: params.pluginIds, }).autoEnableProbes) { const raw = entry.probe({ config: params.config,