




















@@ -12,15 +12,7 @@ import {
1212import type { PluginMetadataSnapshot } from "./plugin-metadata-snapshot.types.js";
13131414type CurrentPluginMetadataSnapshotState = ReturnType<typeof getCurrentPluginMetadataSnapshotState>;
15-type CurrentPluginMetadataConfigCacheEntry = {
16-configFingerprint: string;
17-policyHash: string;
18-};
19-20-let currentPluginMetadataConfigIdentityCache = new WeakMap<
21-OpenClawConfig,
22-CurrentPluginMetadataConfigCacheEntry
23->();
15+let currentPluginMetadataConfigIdentityCache = new WeakSet<OpenClawConfig>();
24162517export function resolvePluginMetadataControlPlaneFingerprint(
2618config?: OpenClawConfig,
@@ -49,7 +41,7 @@ export function setCurrentPluginMetadataSnapshot(
4941workspaceDir?: string;
5042} = {},
5143): void {
52-currentPluginMetadataConfigIdentityCache = new WeakMap();
44+currentPluginMetadataConfigIdentityCache = new WeakSet();
5345const compatiblePolicyHashes = snapshot
5446 ? options.compatibleConfigs?.map((config) => resolveInstalledPluginIndexPolicyHash(config))
5547 : undefined;
@@ -79,35 +71,22 @@ export function setCurrentPluginMetadataSnapshot(
7971if (!snapshot) {
8072return;
8173}
82-const env = options.env ?? process.env;
83-const workspaceDir = options.workspaceDir ?? snapshot.workspaceDir;
8474if (options.config) {
8575const policyHash = resolveInstalledPluginIndexPolicyHash(options.config);
86-currentPluginMetadataConfigIdentityCache.set(options.config, {
87- policyHash,
88-configFingerprint: resolvePluginMetadataControlPlaneFingerprint(options.config, {
89- env,
90-index: snapshot.index,
91- policyHash,
92- workspaceDir,
93-}),
94-});
95-}
96-for (const [index, config] of (options.compatibleConfigs ?? []).entries()) {
97-const policyHash = compatiblePolicyHashes?.[index];
98-const configFingerprint = compatibleConfigFingerprints?.[index];
99-if (!policyHash || !configFingerprint) {
100-continue;
76+if (
77+policyHash === snapshot.policyHash ||
78+Boolean(compatiblePolicyHashes?.includes(policyHash))
79+) {
80+currentPluginMetadataConfigIdentityCache.add(options.config);
10181}
102-currentPluginMetadataConfigIdentityCache.set(config, {
103- policyHash,
104- configFingerprint,
105-});
82+}
83+for (const config of options.compatibleConfigs ?? []) {
84+currentPluginMetadataConfigIdentityCache.add(config);
10685}
10786}
1088710988export function clearCurrentPluginMetadataSnapshot(): void {
110-currentPluginMetadataConfigIdentityCache = new WeakMap();
89+currentPluginMetadataConfigIdentityCache = new WeakSet();
11190clearCurrentPluginMetadataSnapshotState();
11291}
11392@@ -118,7 +97,7 @@ export function captureCurrentPluginMetadataSnapshotState(): CurrentPluginMetada
11897export function restoreCurrentPluginMetadataSnapshotState(
11998state: CurrentPluginMetadataSnapshotState,
12099): void {
121-currentPluginMetadataConfigIdentityCache = new WeakMap();
100+currentPluginMetadataConfigIdentityCache = new WeakSet();
122101setCurrentPluginMetadataSnapshotState(
123102state.snapshot,
124103state.configFingerprint,
@@ -159,31 +138,28 @@ export function getCurrentPluginMetadataSnapshot(
159138) {
160139return undefined;
161140}
162-const cachedConfig = params.config && currentPluginMetadataConfigIdentityCache.get(params.config);
163-const canReuseCachedConfig = cachedConfig !== undefined;
164-const requestedPolicyHash = canReuseCachedConfig
165- ? cachedConfig.policyHash
166- : params.config
141+const canReuseCachedConfig = Boolean(
142+params.config && currentPluginMetadataConfigIdentityCache.has(params.config),
143+);
144+if (canReuseCachedConfig && params.requireDefaultDiscoveryContext !== true) {
145+return snapshot;
146+}
147+const requestedPolicyHash =
148+params.config && !canReuseCachedConfig
167149 ? resolveInstalledPluginIndexPolicyHash(params.config)
168150 : undefined;
169151if (requestedPolicyHash && snapshot.policyHash !== requestedPolicyHash) {
170-const compatiblePolicies = new Set(compatiblePolicyHashes ?? []);
171-if (!compatiblePolicies.has(requestedPolicyHash)) {
152+if (!compatiblePolicyHashes?.includes(requestedPolicyHash)) {
172153return undefined;
173154}
174155}
175-if (canReuseCachedConfig && params.requireDefaultDiscoveryContext !== true) {
176-return snapshot;
177-}
178-if (params.config) {
179-const requestedConfigFingerprint = canReuseCachedConfig
180- ? cachedConfig.configFingerprint
181- : resolvePluginMetadataControlPlaneFingerprint(params.config, {
182- env,
183-index: snapshot.index,
184-policyHash: requestedPolicyHash,
185-workspaceDir: requestedWorkspaceDir,
186-});
156+if (params.config && !canReuseCachedConfig) {
157+const requestedConfigFingerprint = resolvePluginMetadataControlPlaneFingerprint(params.config, {
158+ env,
159+index: snapshot.index,
160+policyHash: requestedPolicyHash,
161+workspaceDir: requestedWorkspaceDir,
162+});
187163const fingerprintMatches =
188164configFingerprint === requestedConfigFingerprint ||
189165snapshot.configFingerprint === requestedConfigFingerprint ||
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。