import { listPotentialConfiguredChannelIds } from "../channels/config-presence.js"; import type { OpenClawConfig } from "../config/config.js"; import { loadPluginManifestRegistry } from "./manifest-registry.js"; export function resolveChannelPluginIds(params: { config: OpenClawConfig; workspaceDir?: string; env: NodeJS.ProcessEnv; }): string[] { return loadPluginManifestRegistry({ config: params.config, workspaceDir: params.workspaceDir, env: params.env, }) .plugins.filter((plugin) => plugin.channels.length > 0) .map((plugin) => plugin.id); } export function resolveConfiguredChannelPluginIds(params: { config: OpenClawConfig; workspaceDir?: string; env: NodeJS.ProcessEnv; }): string[] { const configuredChannelIds = new Set( listPotentialConfiguredChannelIds(params.config, params.env).map((id) => id.trim()), ); if (configuredChannelIds.size === 0) { return []; } return resolveChannelPluginIds(params).filter((pluginId) => configuredChannelIds.has(pluginId)); } export function resolveConfiguredDeferredChannelPluginIds(params: { config: OpenClawConfig; workspaceDir?: string; env: NodeJS.ProcessEnv; }): string[] { const configuredChannelIds = new Set( listPotentialConfiguredChannelIds(params.config, params.env).map((id) => id.trim()), ); if (configuredChannelIds.size === 0) { return []; } return loadPluginManifestRegistry({ config: params.config, workspaceDir: params.workspaceDir, env: params.env, }) .plugins.filter( (plugin) => plugin.channels.some((channelId) => configuredChannelIds.has(channelId)) && plugin.startupDeferConfiguredChannelFullLoadUntilAfterListen === true, ) .map((plugin) => plugin.id); }