


























@@ -5,6 +5,10 @@ import {
55withBundledPluginEnablementCompat,
66withBundledPluginVitestCompat,
77} from "./bundled-compat.js";
8+import {
9+resolveConfigScopedRuntimeCacheValue,
10+type ConfigScopedRuntimeCache,
11+} from "./config-scoped-runtime-cache.js";
812import {
913resolvePluginRegistryLoadCacheKey,
1014resolveRuntimePluginRegistry,
@@ -37,10 +41,8 @@ type CapabilityProviderForKey<K extends CapabilityProviderRegistryKey> =
3741PluginRegistry[K][number] extends { provider: infer T } ? T : never;
3842type CapabilityProviderEntries = PluginRegistry[CapabilityProviderRegistryKey];
394340-const capabilityProviderSnapshotCache = new WeakMap<
41-OpenClawConfig,
42-Map<string, CapabilityProviderEntries>
43->();
44+const capabilityProviderSnapshotCache: ConfigScopedRuntimeCache<CapabilityProviderEntries> =
45+new WeakMap();
44464547const CAPABILITY_CONTRACT_KEY: Record<CapabilityProviderRegistryKey, CapabilityContractKey> = {
4648memoryEmbeddingProviders: "memoryEmbeddingProviders",
@@ -140,20 +142,6 @@ function createCapabilityProviderFallbackLoadOptions(params: {
140142};
141143}
142144143-function resolveCapabilityProviderSnapshotCache(
144-cfg: OpenClawConfig | undefined,
145-): Map<string, CapabilityProviderEntries> | undefined {
146-if (!cfg) {
147-return undefined;
148-}
149-let cache = capabilityProviderSnapshotCache.get(cfg);
150-if (!cache) {
151-cache = new Map();
152-capabilityProviderSnapshotCache.set(cfg, cache);
153-}
154-return cache;
155-}
156-157145function resolveCapabilityProviderSnapshotCacheKey(params: {
158146key: CapabilityProviderRegistryKey;
159147loadOptions: PluginLoadOptions;
@@ -424,23 +412,45 @@ export function resolvePluginCapabilityProvider<K extends CapabilityProviderRegi
424412 compatConfig,
425413 pluginIds,
426414});
427-const cache = resolveCapabilityProviderSnapshotCache(params.cfg);
428-const cacheKey = cache
429- ? resolveCapabilityProviderSnapshotCacheKey({ key: params.key, loadOptions })
430- : "";
431-let loadedProviders = cache?.get(cacheKey) as PluginRegistry[K] | undefined;
432-if (!loadedProviders) {
433-loadedProviders = loadCapabilityProviderEntries({
434-key: params.key,
435- pluginIds,
436- loadOptions,
437-requested: new Set([params.providerId.toLowerCase()]),
438-});
439-cache?.set(cacheKey, loadedProviders as CapabilityProviderEntries);
440-}
415+const loadedProviders = resolveConfigScopedRuntimeCacheValue({
416+cache: capabilityProviderSnapshotCache,
417+config: params.cfg,
418+key: resolveCapabilityProviderSnapshotCacheKey({ key: params.key, loadOptions }),
419+load: () =>
420+loadCapabilityProviderEntries({
421+key: params.key,
422+ pluginIds,
423+ loadOptions,
424+requested: new Set([params.providerId.toLowerCase()]),
425+}) as CapabilityProviderEntries,
426+}) as PluginRegistry[K];
441427return findProviderById(loadedProviders, params.providerId);
442428}
443429430+function resolveCachedCapabilityProviderEntries<K extends CapabilityProviderRegistryKey>(params: {
431+key: K;
432+cfg?: OpenClawConfig;
433+pluginIds: string[];
434+loadOptions: PluginLoadOptions;
435+requested?: Set<string>;
436+}): PluginRegistry[K] {
437+return resolveConfigScopedRuntimeCacheValue({
438+cache: capabilityProviderSnapshotCache,
439+config: params.cfg,
440+key: resolveCapabilityProviderSnapshotCacheKey({
441+key: params.key,
442+loadOptions: params.loadOptions,
443+}),
444+load: () =>
445+loadCapabilityProviderEntries({
446+key: params.key,
447+pluginIds: params.pluginIds,
448+loadOptions: params.loadOptions,
449+requested: params.requested,
450+}) as CapabilityProviderEntries,
451+}) as PluginRegistry[K];
452+}
453+444454export function resolvePluginCapabilityProviders<K extends CapabilityProviderRegistryKey>(params: {
445455key: K;
446456cfg?: OpenClawConfig;
@@ -489,20 +499,13 @@ export function resolvePluginCapabilityProviders<K extends CapabilityProviderReg
489499 compatConfig,
490500 pluginIds,
491501});
492-const cache = resolveCapabilityProviderSnapshotCache(params.cfg);
493-const cacheKey = cache
494- ? resolveCapabilityProviderSnapshotCacheKey({ key: params.key, loadOptions })
495- : "";
496-let loadedProviders = cache?.get(cacheKey) as PluginRegistry[K] | undefined;
497-if (!loadedProviders) {
498-loadedProviders = loadCapabilityProviderEntries({
499-key: params.key,
500- pluginIds,
501- loadOptions,
502-requested: requestedSpeechProviders,
503-});
504-cache?.set(cacheKey, loadedProviders as CapabilityProviderEntries);
505-}
502+const loadedProviders = resolveCachedCapabilityProviderEntries({
503+key: params.key,
504+cfg: params.cfg,
505+ pluginIds,
506+ loadOptions,
507+requested: requestedSpeechProviders,
508+});
506509if (params.key !== "memoryEmbeddingProviders") {
507510const mergeLoadedProviders =
508511activeProviders.length > 0
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。