























@@ -48,6 +48,7 @@ import {
4848resolveOfficialExternalPluginInstall,
4949} from "./official-external-plugin-catalog.js";
5050import { linkOpenClawPeerDependencies } from "./plugin-peer-link.js";
51+import { defaultSlotIdForKey } from "./slots.js";
51525253export type PluginUpdateLogger = {
5354info?: (message: string) => void;
@@ -760,14 +761,52 @@ function createPluginUpdateIntegrityDriftHandler(params: {
760761};
761762}
762763764+function removeDisabledPluginIdFromList(
765+list: string[] | undefined,
766+pluginId: string,
767+): string[] | undefined {
768+if (!Array.isArray(list) || !list.includes(pluginId)) {
769+return list;
770+}
771+const next = list.filter((id) => id !== pluginId);
772+return next.length > 0 ? next : undefined;
773+}
774+775+function resetDisabledPluginSlots(
776+slots: NonNullable<OpenClawConfig["plugins"]>["slots"] | undefined,
777+pluginId: string,
778+): NonNullable<OpenClawConfig["plugins"]>["slots"] | undefined {
779+if (!slots) {
780+return slots;
781+}
782+let next = slots;
783+if (next.memory === pluginId) {
784+next = {
785+ ...next,
786+memory: defaultSlotIdForKey("memory"),
787+};
788+}
789+if (next.contextEngine === pluginId) {
790+next = {
791+ ...next,
792+contextEngine: defaultSlotIdForKey("contextEngine"),
793+};
794+}
795+return next;
796+}
797+763798function disablePluginConfigEntry(config: OpenClawConfig, pluginId: string): OpenClawConfig {
764-const existingEntry = config.plugins?.entries?.[pluginId];
799+const pluginsConfig = config.plugins ?? {};
800+const existingEntry = pluginsConfig.entries?.[pluginId];
765801return {
766802 ...config,
767803plugins: {
768- ...config.plugins,
804+ ...pluginsConfig,
805+allow: removeDisabledPluginIdFromList(pluginsConfig.allow, pluginId),
806+deny: removeDisabledPluginIdFromList(pluginsConfig.deny, pluginId),
807+slots: resetDisabledPluginSlots(pluginsConfig.slots, pluginId),
769808entries: {
770- ...config.plugins?.entries,
809+ ...pluginsConfig.entries,
771810[pluginId]: {
772811 ...existingEntry,
773812enabled: false,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。