Files
openclaw/src/plugins/config-policy.ts
2026-04-20 13:31:00 +01:00

94 lines
3.1 KiB
TypeScript

import type { OpenClawConfig } from "../config/types.openclaw.js";
import {
createEffectiveEnableStateResolver,
createPluginEnableStateResolver,
resolveMemorySlotDecisionShared,
resolvePluginActivationDecisionShared,
toPluginActivationState,
type PluginActivationSource,
type PluginActivationStateLike,
} from "./config-activation-shared.js";
import {
hasExplicitPluginConfig as hasExplicitPluginConfigShared,
identityNormalizePluginId,
isBundledChannelEnabledByChannelConfig as isBundledChannelEnabledByChannelConfigShared,
normalizePluginsConfigWithResolver as normalizePluginsConfigWithResolverShared,
type NormalizePluginId,
type NormalizedPluginsConfig as SharedNormalizedPluginsConfig,
} from "./config-normalization-shared.js";
import type { PluginKind } from "./plugin-kind.types.js";
import type { PluginOrigin } from "./plugin-origin.types.js";
export type { PluginActivationSource };
export type PluginActivationState = PluginActivationStateLike;
export type NormalizedPluginsConfig = SharedNormalizedPluginsConfig;
export function normalizePluginsConfigWithResolver(
config?: OpenClawConfig["plugins"],
normalizePluginId: NormalizePluginId = identityNormalizePluginId,
): NormalizedPluginsConfig {
return normalizePluginsConfigWithResolverShared(config, normalizePluginId);
}
export function resolvePluginActivationState(params: {
id: string;
origin: PluginOrigin;
config: NormalizedPluginsConfig;
rootConfig?: OpenClawConfig;
enabledByDefault?: boolean;
sourceConfig?: NormalizedPluginsConfig;
sourceRootConfig?: OpenClawConfig;
autoEnabledReason?: string;
}): PluginActivationState {
return toPluginActivationState(
resolvePluginActivationDecisionShared({
...params,
activationSource: {
plugins: params.sourceConfig ?? params.config,
rootConfig: params.sourceRootConfig ?? params.rootConfig,
},
isBundledChannelEnabledByChannelConfig,
}),
);
}
export const hasExplicitPluginConfig = hasExplicitPluginConfigShared;
export const resolveEnableState = createPluginEnableStateResolver<
NormalizedPluginsConfig,
PluginOrigin
>(resolvePluginActivationState);
export const isBundledChannelEnabledByChannelConfig = isBundledChannelEnabledByChannelConfigShared;
type PolicyEffectiveActivationParams = {
id: string;
origin: PluginOrigin;
config: NormalizedPluginsConfig;
rootConfig?: OpenClawConfig;
enabledByDefault?: boolean;
sourceConfig?: NormalizedPluginsConfig;
sourceRootConfig?: OpenClawConfig;
autoEnabledReason?: string;
};
export const resolveEffectiveEnableState =
createEffectiveEnableStateResolver<PolicyEffectiveActivationParams>(
resolveEffectivePluginActivationState,
);
export function resolveEffectivePluginActivationState(
params: PolicyEffectiveActivationParams,
): PluginActivationState {
return resolvePluginActivationState(params);
}
export function resolveMemorySlotDecision(params: {
id: string;
kind?: PluginKind | PluginKind[];
slot: string | null | undefined;
selectedId: string | null;
}): { enabled: boolean; reason?: string; selected?: boolean } {
return resolveMemorySlotDecisionShared(params);
}