

























@@ -3,6 +3,7 @@ import fs from "node:fs";
33import os from "node:os";
44import path from "node:path";
55import JSON5 from "json5";
6+import { resolveAgentWorkspaceDir, resolveDefaultAgentId } from "../agents/agent-scope-config.js";
67import { ensureOwnerDisplaySecret } from "../agents/owner-display.js";
78import { applyRuntimeLegacyConfigMigrations } from "../commands/doctor/shared/runtime-compat-api.js";
89import { loadDotEnv } from "../infra/dotenv.js";
@@ -23,6 +24,10 @@ import {
2324resolveInstalledPluginIndexRecordsStorePath,
2425writePersistedInstalledPluginIndexInstallRecordsSync,
2526} from "../plugins/installed-plugin-index-records.js";
27+import {
28+loadPluginMetadataSnapshot,
29+type PluginMetadataSnapshot,
30+} from "../plugins/plugin-metadata-snapshot.js";
2631import { sanitizeTerminalText } from "../terminal/safe-text.js";
2732import { isRecord } from "../utils.js";
2833import { VERSION } from "../version.js";
@@ -1166,6 +1171,7 @@ function createConfigFileSnapshot(params: {
11661171issues: ConfigFileSnapshot["issues"];
11671172warnings: ConfigFileSnapshot["warnings"];
11681173legacyIssues: LegacyConfigIssue[];
1174+pluginMetadataSnapshot?: PluginMetadataSnapshot;
11691175}): ConfigFileSnapshot {
11701176const sourceConfig = asResolvedSourceConfig(params.sourceConfig);
11711177const runtimeConfig = asRuntimeConfig(params.runtimeConfig);
@@ -1183,6 +1189,9 @@ function createConfigFileSnapshot(params: {
11831189issues: params.issues,
11841190warnings: params.warnings,
11851191legacyIssues: params.legacyIssues,
1192+ ...(params.pluginMetadataSnapshot
1193+ ? { pluginMetadataSnapshot: params.pluginMetadataSnapshot }
1194+ : {}),
11861195};
11871196}
11881197@@ -1745,10 +1754,24 @@ export function createConfigIO(
17451754 ? hashConfigRaw(installMigration.persistedRootRaw)
17461755 : hash;
17471756fallbackSourceConfig = coerceConfig(effectiveConfigRaw);
1757+let pluginMetadataSnapshot: PluginMetadataSnapshot | undefined;
1758+const loadValidationPluginMetadataSnapshot = (config: OpenClawConfig) => {
1759+if (pluginMetadataSnapshot) {
1760+return pluginMetadataSnapshot;
1761+}
1762+const defaultAgentId = resolveDefaultAgentId(config);
1763+pluginMetadataSnapshot = loadPluginMetadataSnapshot({
1764+ config,
1765+workspaceDir: resolveAgentWorkspaceDir(config, defaultAgentId),
1766+env: deps.env,
1767+});
1768+return pluginMetadataSnapshot;
1769+};
17481770const validated = await deps.measure("config.snapshot.read.validate", () =>
17491771validateConfigObjectWithPlugins(effectiveConfigRaw, {
17501772env: deps.env,
17511773pluginValidation: overrides.pluginValidation,
1774+loadPluginMetadataSnapshot: loadValidationPluginMetadataSnapshot,
17521775}),
17531776);
17541777if (!validated.ok) {
@@ -1789,6 +1812,7 @@ export function createConfigIO(
17891812issues: [],
17901813warnings: [...validated.warnings, ...envVarWarnings],
17911814legacyIssues: legacyResolution.sourceLegacyIssues,
1815+ pluginMetadataSnapshot,
17921816}),
17931817envSnapshotForRestore: readResolution.envSnapshotForRestore,
17941818}),
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。