Files
moltbot/src/plugins/enable.ts
Vincent Koc 579acc3a91 fix(plugins): avoid source rebuilds for policy toggles
Reuse current installed-plugin registry records for policy-only enable and disable refreshes.\n\nThanks @vincentkoc
2026-05-01 09:01:13 -07:00

40 lines
1.3 KiB
TypeScript

import { normalizeChatChannelId } from "../channels/ids.js";
import type { OpenClawConfig } from "../config/types.openclaw.js";
import { setPluginEnabledInConfig } from "./toggle-config.js";
export type PluginEnableResult = {
config: OpenClawConfig;
enabled: boolean;
pluginId: string;
reason?: string;
};
export function enablePluginInConfig(
cfg: OpenClawConfig,
pluginId: string,
options: { updateChannelConfig?: boolean } = {},
): PluginEnableResult {
const builtInChannelId = normalizeChatChannelId(pluginId);
const resolvedId = builtInChannelId ?? pluginId;
if (cfg.plugins?.enabled === false) {
return { config: cfg, enabled: false, pluginId: resolvedId, reason: "plugins disabled" };
}
if (cfg.plugins?.deny?.includes(pluginId) || cfg.plugins?.deny?.includes(resolvedId)) {
return { config: cfg, enabled: false, pluginId: resolvedId, reason: "blocked by denylist" };
}
const allow = cfg.plugins?.allow;
if (
Array.isArray(allow) &&
allow.length > 0 &&
!allow.includes(pluginId) &&
!allow.includes(resolvedId)
) {
return { config: cfg, enabled: false, pluginId: resolvedId, reason: "blocked by allowlist" };
}
return {
config: setPluginEnabledInConfig(cfg, resolvedId, true, options),
enabled: true,
pluginId: resolvedId,
};
}