fix: sync built-in channel enablement across config paths

This commit is contained in:
Peter Steinberger
2026-02-23 19:40:32 +00:00
parent 69b17a37e8
commit 87603b5c45
10 changed files with 213 additions and 86 deletions

View File

@@ -0,0 +1,47 @@
import { normalizeChatChannelId } from "../channels/registry.js";
import type { OpenClawConfig } from "../config/config.js";
export function setPluginEnabledInConfig(
config: OpenClawConfig,
pluginId: string,
enabled: 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) {
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,
},
},
};
}