import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../../agents/agent-scope.js"; import type { OpenClawConfig } from "../../config/config.js"; import { loadConfig } from "../../config/config.js"; import { applyPluginAutoEnable } from "../../config/plugin-auto-enable.js"; import { createSubsystemLogger } from "../../logging.js"; import type { PluginLoadOptions } from "../loader.js"; import type { PluginLogger } from "../types.js"; const log = createSubsystemLogger("plugins"); export type PluginRuntimeLoadContext = { rawConfig: OpenClawConfig; config: OpenClawConfig; activationSourceConfig: OpenClawConfig; autoEnabledReasons: Readonly>; workspaceDir: string | undefined; env: NodeJS.ProcessEnv; logger: PluginLogger; }; export type PluginRuntimeResolvedLoadValues = Pick< PluginLoadOptions, "config" | "activationSourceConfig" | "autoEnabledReasons" | "workspaceDir" | "env" | "logger" >; export type PluginRuntimeLoadContextOptions = { config?: OpenClawConfig; activationSourceConfig?: OpenClawConfig; env?: NodeJS.ProcessEnv; workspaceDir?: string; logger?: PluginLogger; }; export function createPluginRuntimeLoaderLogger(): PluginLogger { return { info: (message) => log.info(message), warn: (message) => log.warn(message), error: (message) => log.error(message), debug: (message) => log.debug(message), }; } export function resolvePluginRuntimeLoadContext( options?: PluginRuntimeLoadContextOptions, ): PluginRuntimeLoadContext { const env = options?.env ?? process.env; const rawConfig = options?.config ?? loadConfig(); const autoEnabled = applyPluginAutoEnable({ config: rawConfig, env }); const config = autoEnabled.config; const workspaceDir = options?.workspaceDir ?? resolveAgentWorkspaceDir(config, resolveDefaultAgentId(config)); return { rawConfig, config, activationSourceConfig: options?.activationSourceConfig ?? rawConfig, autoEnabledReasons: autoEnabled.autoEnabledReasons, workspaceDir, env, logger: options?.logger ?? createPluginRuntimeLoaderLogger(), }; } export function buildPluginRuntimeLoadOptions( context: PluginRuntimeLoadContext, overrides?: Partial, ): PluginLoadOptions { return buildPluginRuntimeLoadOptionsFromValues(context, overrides); } export function buildPluginRuntimeLoadOptionsFromValues( values: PluginRuntimeResolvedLoadValues, overrides?: Partial, ): PluginLoadOptions { return { config: values.config, activationSourceConfig: values.activationSourceConfig, autoEnabledReasons: values.autoEnabledReasons, workspaceDir: values.workspaceDir, env: values.env, logger: values.logger, ...overrides, }; }