




















@@ -25,8 +25,26 @@ export function resolvePluginMetadataControlPlaneFingerprint(
2525// never accumulate historical metadata snapshots here.
2626export function setCurrentPluginMetadataSnapshot(
2727snapshot: PluginMetadataSnapshot | undefined,
28-options: { config?: OpenClawConfig; env?: NodeJS.ProcessEnv; workspaceDir?: string } = {},
28+options: {
29+config?: OpenClawConfig;
30+compatibleConfigs?: readonly OpenClawConfig[];
31+env?: NodeJS.ProcessEnv;
32+workspaceDir?: string;
33+} = {},
2934): void {
35+const compatiblePolicyHashes = snapshot
36+ ? options.compatibleConfigs?.map((config) => resolveInstalledPluginIndexPolicyHash(config))
37+ : undefined;
38+const compatibleConfigFingerprints = snapshot
39+ ? options.compatibleConfigs?.map((config, index) =>
40+resolvePluginMetadataControlPlaneFingerprint(config, {
41+env: options.env,
42+index: snapshot.index,
43+policyHash: compatiblePolicyHashes?.[index],
44+workspaceDir: options.workspaceDir ?? snapshot.workspaceDir,
45+}),
46+)
47+ : undefined;
3048setCurrentPluginMetadataSnapshotState(
3149snapshot,
3250snapshot
@@ -37,6 +55,8 @@ export function setCurrentPluginMetadataSnapshot(
3755workspaceDir: options.workspaceDir ?? snapshot.workspaceDir,
3856})
3957 : undefined,
58+compatiblePolicyHashes,
59+compatibleConfigFingerprints,
4060);
4161}
4262@@ -52,16 +72,24 @@ export function getCurrentPluginMetadataSnapshot(
5272allowWorkspaceScopedSnapshot?: boolean;
5373} = {},
5474): PluginMetadataSnapshot | undefined {
55-const { snapshot: rawSnapshot, configFingerprint } = getCurrentPluginMetadataSnapshotState();
75+const {
76+snapshot: rawSnapshot,
77+ configFingerprint,
78+ compatiblePolicyHashes,
79+ compatibleConfigFingerprints,
80+} = getCurrentPluginMetadataSnapshotState();
5681const snapshot = rawSnapshot as PluginMetadataSnapshot | undefined;
5782if (!snapshot) {
5883return undefined;
5984}
60-if (
61-params.config &&
62-snapshot.policyHash !== resolveInstalledPluginIndexPolicyHash(params.config)
63-) {
64-return undefined;
85+const requestedPolicyHash = params.config
86+ ? resolveInstalledPluginIndexPolicyHash(params.config)
87+ : undefined;
88+if (requestedPolicyHash && snapshot.policyHash !== requestedPolicyHash) {
89+const compatiblePolicies = new Set(compatiblePolicyHashes ?? []);
90+if (!compatiblePolicies.has(requestedPolicyHash)) {
91+return undefined;
92+}
6593}
6694const requestedWorkspaceDir =
6795params.workspaceDir ??
@@ -70,13 +98,15 @@ export function getCurrentPluginMetadataSnapshot(
7098const requestedConfigFingerprint = resolvePluginMetadataControlPlaneFingerprint(params.config, {
7199env: params.env,
72100index: snapshot.index,
73-policyHash: snapshot.policyHash,
101+policyHash: requestedPolicyHash,
74102workspaceDir: requestedWorkspaceDir,
75103});
76-if (configFingerprint && configFingerprint !== requestedConfigFingerprint) {
77-return undefined;
78-}
79-if (snapshot.configFingerprint && snapshot.configFingerprint !== requestedConfigFingerprint) {
104+const compatibleFingerprints = new Set(compatibleConfigFingerprints ?? []);
105+const fingerprintMatches =
106+configFingerprint === requestedConfigFingerprint ||
107+snapshot.configFingerprint === requestedConfigFingerprint ||
108+compatibleFingerprints.has(requestedConfigFingerprint);
109+if (!fingerprintMatches) {
80110return undefined;
81111}
82112}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。