refactor: share bundled plugin compat decisions

This commit is contained in:
Peter Steinberger
2026-04-20 14:04:04 +01:00
parent ebcd475d24
commit 60818959b0

View File

@@ -52,6 +52,23 @@ export type BundledPluginCompatibleLoadValues = Pick<
"rawConfig" | "config" | "activationSourceConfig" | "autoEnabledReasons" | "compatPluginIds"
>;
type BundledPluginCompatibleActivationParams = {
rawConfig?: OpenClawConfig;
resolvedConfig?: OpenClawConfig;
autoEnabledReasons?: Record<string, string[]>;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
onlyPluginIds?: readonly string[];
applyAutoEnable?: boolean;
compatMode: PluginActivationBundledCompatMode;
resolveCompatPluginIds: (params: {
config?: OpenClawConfig;
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
onlyPluginIds?: readonly string[];
}) => string[];
};
export function withActivatedPluginIds(params: {
config?: OpenClawConfig;
pluginIds: readonly string[];
@@ -117,6 +134,34 @@ export function applyPluginCompatibilityOverrides(params: {
return vitestCompat;
}
function shouldResolveBundledCompatPluginIds(params: {
compatMode: PluginActivationBundledCompatMode;
allowlistCompatEnabled: boolean;
}): boolean {
return (
params.allowlistCompatEnabled ||
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && params.allowlistCompatEnabled) ||
params.compatMode.vitest === true
);
}
function createBundledPluginCompatConfig(params: {
compatMode: PluginActivationBundledCompatMode;
allowlistCompatEnabled: boolean;
compatPluginIds: string[];
}): PluginActivationCompatConfig {
return {
allowlistPluginIds: params.allowlistCompatEnabled ? params.compatPluginIds : undefined,
enablementPluginIds:
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && params.allowlistCompatEnabled)
? params.compatPluginIds
: undefined,
vitestPluginIds: params.compatMode.vitest ? params.compatPluginIds : undefined,
};
}
export function resolvePluginActivationSnapshot(params: {
rawConfig?: OpenClawConfig;
resolvedConfig?: OpenClawConfig;
@@ -182,22 +227,9 @@ export function resolvePluginActivationInputs(params: {
};
}
export function resolveBundledPluginCompatibleActivationInputs(params: {
rawConfig?: OpenClawConfig;
resolvedConfig?: OpenClawConfig;
autoEnabledReasons?: Record<string, string[]>;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
onlyPluginIds?: readonly string[];
applyAutoEnable?: boolean;
compatMode: PluginActivationBundledCompatMode;
resolveCompatPluginIds: (params: {
config?: OpenClawConfig;
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
onlyPluginIds?: readonly string[];
}) => string[];
}): BundledPluginCompatibleActivationInputs {
export function resolveBundledPluginCompatibleActivationInputs(
params: BundledPluginCompatibleActivationParams,
): BundledPluginCompatibleActivationInputs {
const snapshot = resolvePluginActivationSnapshot({
rawConfig: params.rawConfig,
resolvedConfig: params.resolvedConfig,
@@ -206,11 +238,10 @@ export function resolveBundledPluginCompatibleActivationInputs(params: {
applyAutoEnable: params.applyAutoEnable,
});
const allowlistCompatEnabled = params.compatMode.allowlist === true;
const shouldResolveCompatPluginIds =
allowlistCompatEnabled ||
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && allowlistCompatEnabled) ||
params.compatMode.vitest === true;
const shouldResolveCompatPluginIds = shouldResolveBundledCompatPluginIds({
compatMode: params.compatMode,
allowlistCompatEnabled,
});
const compatPluginIds = shouldResolveCompatPluginIds
? params.resolveCompatPluginIds({
config: snapshot.config,
@@ -224,15 +255,11 @@ export function resolveBundledPluginCompatibleActivationInputs(params: {
resolvedConfig: snapshot.config,
autoEnabledReasons: snapshot.autoEnabledReasons,
env: params.env,
compat: {
allowlistPluginIds: allowlistCompatEnabled ? compatPluginIds : undefined,
enablementPluginIds:
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && allowlistCompatEnabled)
? compatPluginIds
: undefined,
vitestPluginIds: params.compatMode.vitest ? compatPluginIds : undefined,
},
compat: createBundledPluginCompatConfig({
compatMode: params.compatMode,
allowlistCompatEnabled,
compatPluginIds,
}),
});
return {
@@ -241,22 +268,9 @@ export function resolveBundledPluginCompatibleActivationInputs(params: {
};
}
export function resolveBundledPluginCompatibleLoadValues(params: {
rawConfig?: OpenClawConfig;
resolvedConfig?: OpenClawConfig;
autoEnabledReasons?: Record<string, string[]>;
env?: NodeJS.ProcessEnv;
workspaceDir?: string;
onlyPluginIds?: readonly string[];
applyAutoEnable?: boolean;
compatMode: PluginActivationBundledCompatMode;
resolveCompatPluginIds: (params: {
config?: OpenClawConfig;
workspaceDir?: string;
env?: NodeJS.ProcessEnv;
onlyPluginIds?: readonly string[];
}) => string[];
}): BundledPluginCompatibleLoadValues {
export function resolveBundledPluginCompatibleLoadValues(
params: BundledPluginCompatibleActivationParams,
): BundledPluginCompatibleLoadValues {
const env = params.env ?? process.env;
const rawConfig = params.rawConfig ?? params.resolvedConfig;
let resolvedConfig = params.resolvedConfig ?? params.rawConfig;
@@ -272,11 +286,10 @@ export function resolveBundledPluginCompatibleLoadValues(params: {
}
const allowlistCompatEnabled = params.compatMode.allowlist === true;
const shouldResolveCompatPluginIds =
allowlistCompatEnabled ||
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && allowlistCompatEnabled) ||
params.compatMode.vitest === true;
const shouldResolveCompatPluginIds = shouldResolveBundledCompatPluginIds({
compatMode: params.compatMode,
allowlistCompatEnabled,
});
const compatPluginIds = shouldResolveCompatPluginIds
? params.resolveCompatPluginIds({
config: resolvedConfig,
@@ -287,15 +300,11 @@ export function resolveBundledPluginCompatibleLoadValues(params: {
: [];
const config = applyPluginCompatibilityOverrides({
config: resolvedConfig,
compat: {
allowlistPluginIds: allowlistCompatEnabled ? compatPluginIds : undefined,
enablementPluginIds:
params.compatMode.enablement === "always" ||
(params.compatMode.enablement === "allowlist" && allowlistCompatEnabled)
? compatPluginIds
: undefined,
vitestPluginIds: params.compatMode.vitest ? compatPluginIds : undefined,
},
compat: createBundledPluginCompatConfig({
compatMode: params.compatMode,
allowlistCompatEnabled,
compatPluginIds,
}),
env,
});