mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-06 12:00:44 +00:00
fix(plugins): preserve source activation config
This commit is contained in:
@@ -29,6 +29,7 @@ import {
|
||||
restoreDetachedTaskLifecycleRuntimeRegistration,
|
||||
} from "../tasks/detached-task-runtime-state.js";
|
||||
import { resolveUserPath } from "../utils.js";
|
||||
import { resolvePluginActivationSourceConfig } from "./activation-source-config.js";
|
||||
import { buildPluginApi } from "./api-builder.js";
|
||||
import { inspectBundleMcpRuntimeSupport } from "./bundle-mcp.js";
|
||||
import {
|
||||
@@ -833,11 +834,18 @@ function hasExplicitCompatibilityInputs(options: PluginLoadOptions): boolean {
|
||||
function resolvePluginLoadCacheContext(options: PluginLoadOptions = {}) {
|
||||
const env = options.env ?? process.env;
|
||||
const cfg = applyTestPluginDefaults(options.config ?? {}, env);
|
||||
const activationSourceConfig = options.activationSourceConfig ?? options.config ?? {};
|
||||
const activationSourceConfig = resolvePluginActivationSourceConfig({
|
||||
config: options.config,
|
||||
activationSourceConfig: options.activationSourceConfig,
|
||||
});
|
||||
const normalized = normalizePluginsConfig(cfg.plugins);
|
||||
const activationSource = createPluginActivationSource({
|
||||
config: activationSourceConfig,
|
||||
});
|
||||
const trustNormalized = mergeTrustPluginConfigFromActivationSource({
|
||||
normalized,
|
||||
activationSource,
|
||||
});
|
||||
const onlyPluginIds = normalizePluginIdScope(options.onlyPluginIds);
|
||||
const includeSetupOnlyChannelPlugins = options.includeSetupOnlyChannelPlugins === true;
|
||||
const forceSetupOnlyChannelPlugins = options.forceSetupOnlyChannelPlugins === true;
|
||||
@@ -848,7 +856,7 @@ function resolvePluginLoadCacheContext(options: PluginLoadOptions = {}) {
|
||||
const coreGatewayMethodNames = Object.keys(options.coreGatewayHandlers ?? {}).toSorted();
|
||||
const cacheKey = buildCacheKey({
|
||||
workspaceDir: options.workspaceDir,
|
||||
plugins: normalized,
|
||||
plugins: trustNormalized,
|
||||
activationMetadataKey: buildActivationMetadataHash({
|
||||
activationSource,
|
||||
autoEnabledReasons: options.autoEnabledReasons ?? {},
|
||||
@@ -868,7 +876,7 @@ function resolvePluginLoadCacheContext(options: PluginLoadOptions = {}) {
|
||||
return {
|
||||
env,
|
||||
cfg,
|
||||
normalized,
|
||||
normalized: trustNormalized,
|
||||
activationSourceConfig,
|
||||
activationSource,
|
||||
autoEnabledReasons: options.autoEnabledReasons ?? {},
|
||||
@@ -884,6 +892,44 @@ function resolvePluginLoadCacheContext(options: PluginLoadOptions = {}) {
|
||||
};
|
||||
}
|
||||
|
||||
function mergeTrustPluginConfigFromActivationSource(params: {
|
||||
normalized: NormalizedPluginsConfig;
|
||||
activationSource: PluginActivationConfigSource;
|
||||
}): NormalizedPluginsConfig {
|
||||
const source = params.activationSource.plugins;
|
||||
const allow = mergePluginTrustList(params.normalized.allow, source.allow);
|
||||
const deny = mergePluginTrustList(params.normalized.deny, source.deny);
|
||||
const loadPaths = mergePluginTrustList(params.normalized.loadPaths, source.loadPaths);
|
||||
if (
|
||||
allow === params.normalized.allow &&
|
||||
deny === params.normalized.deny &&
|
||||
loadPaths === params.normalized.loadPaths
|
||||
) {
|
||||
return params.normalized;
|
||||
}
|
||||
return {
|
||||
...params.normalized,
|
||||
allow,
|
||||
deny,
|
||||
loadPaths,
|
||||
};
|
||||
}
|
||||
|
||||
function mergePluginTrustList(runtimeList: string[], sourceList: readonly string[]): string[] {
|
||||
if (sourceList.length === 0) {
|
||||
return runtimeList;
|
||||
}
|
||||
const merged = [...runtimeList];
|
||||
const seen = new Set(merged);
|
||||
for (const entry of sourceList) {
|
||||
if (!seen.has(entry)) {
|
||||
merged.push(entry);
|
||||
seen.add(entry);
|
||||
}
|
||||
}
|
||||
return merged.length === runtimeList.length ? runtimeList : merged;
|
||||
}
|
||||
|
||||
function getCompatibleActivePluginRegistry(
|
||||
options: PluginLoadOptions = {},
|
||||
): PluginRegistry | undefined {
|
||||
|
||||
Reference in New Issue
Block a user