Files
openclaw/src/plugins/toggle-config.ts
Vincent Koc caba05b94a fix(plugins): harden bundled install/uninstall sweep
Fix bundled plugin install/uninstall sweep coverage and avoid persisting invalid placeholder config for config-gated bundled plugins.
2026-04-27 01:57:40 -07:00

49 lines
1.2 KiB
TypeScript

import { normalizeChatChannelId } from "../channels/ids.js";
import type { OpenClawConfig } from "../config/types.openclaw.js";
export function setPluginEnabledInConfig(
config: OpenClawConfig,
pluginId: string,
enabled: boolean,
options: { updateChannelConfig?: boolean } = {},
): OpenClawConfig {
const builtInChannelId = normalizeChatChannelId(pluginId);
const resolvedId = builtInChannelId ?? pluginId;
const next: OpenClawConfig = {
...config,
plugins: {
...config.plugins,
entries: {
...config.plugins?.entries,
[resolvedId]: {
...(config.plugins?.entries?.[resolvedId] as object | undefined),
enabled,
},
},
},
};
if (!builtInChannelId || options.updateChannelConfig === false) {
return next;
}
const channels = config.channels as Record<string, unknown> | undefined;
const existing = channels?.[builtInChannelId];
const existingRecord =
existing && typeof existing === "object" && !Array.isArray(existing)
? (existing as Record<string, unknown>)
: {};
return {
...next,
channels: {
...config.channels,
[builtInChannelId]: {
...existingRecord,
enabled,
},
},
};
}