


















@@ -5,36 +5,21 @@ import {
55setCurrentPluginMetadataSnapshotState,
66} from "./current-plugin-metadata-state.js";
77import { resolveInstalledPluginIndexPolicyHash } from "./installed-plugin-index-policy.js";
8+import { resolvePluginMetadataSnapshotConfigFingerprint } from "./plugin-metadata-config-fingerprint.js";
89import type { PluginMetadataSnapshot } from "./plugin-metadata-snapshot.types.js";
9-10-function normalizeLoadPaths(config: OpenClawConfig | undefined): readonly string[] {
11-const paths = config?.plugins?.load?.paths;
12-if (!Array.isArray(paths)) {
13-return [];
14-}
15-return paths.filter((entry) => typeof entry === "string");
16-}
17-18-export function resolvePluginMetadataSnapshotConfigFingerprint(
19-config: OpenClawConfig | undefined,
20-options: { policyHash?: string } = {},
21-): string {
22-return JSON.stringify({
23-policyHash: options.policyHash ?? resolveInstalledPluginIndexPolicyHash(config),
24-pluginLoadPaths: normalizeLoadPaths(config),
25-});
26-}
10+export { resolvePluginMetadataSnapshotConfigFingerprint } from "./plugin-metadata-config-fingerprint.js";
27112812// Single-slot Gateway-owned handoff. Replace or clear it at lifecycle boundaries;
2913// never accumulate historical metadata snapshots here.
3014export function setCurrentPluginMetadataSnapshot(
3115snapshot: PluginMetadataSnapshot | undefined,
32-options: { config?: OpenClawConfig } = {},
16+options: { config?: OpenClawConfig; env?: NodeJS.ProcessEnv } = {},
3317): void {
3418setCurrentPluginMetadataSnapshotState(
3519snapshot,
3620snapshot
3721 ? resolvePluginMetadataSnapshotConfigFingerprint(options.config, {
22+env: options.env,
3823policyHash: snapshot.policyHash,
3924})
4025 : undefined,
@@ -48,6 +33,7 @@ export function clearCurrentPluginMetadataSnapshot(): void {
4833export function getCurrentPluginMetadataSnapshot(
4934params: {
5035config?: OpenClawConfig;
36+env?: NodeJS.ProcessEnv;
5137workspaceDir?: string;
5238} = {},
5339): PluginMetadataSnapshot | undefined {
@@ -62,12 +48,19 @@ export function getCurrentPluginMetadataSnapshot(
6248) {
6349return undefined;
6450}
65-if (
66-params.config &&
67-configFingerprint &&
68-configFingerprint !== resolvePluginMetadataSnapshotConfigFingerprint(params.config)
69-) {
70-return undefined;
51+if (params.config) {
52+const requestedConfigFingerprint = resolvePluginMetadataSnapshotConfigFingerprint(
53+params.config,
54+{
55+env: params.env,
56+},
57+);
58+if (configFingerprint && configFingerprint !== requestedConfigFingerprint) {
59+return undefined;
60+}
61+if (snapshot.configFingerprint && snapshot.configFingerprint !== requestedConfigFingerprint) {
62+return undefined;
63+}
7164}
7265if (snapshot.workspaceDir !== undefined && params.workspaceDir === undefined) {
7366return undefined;
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。