

























@@ -3,22 +3,65 @@ import type { OpenClawConfig } from "../config/types.openclaw.js";
33import {
44collectPluginConfigContractMatches,
55resolvePluginConfigContractsById,
6+type PluginConfigContractMetadata,
67} from "../plugins/config-contracts.js";
8+import { getCurrentPluginMetadataSnapshot } from "../plugins/current-plugin-metadata-snapshot.js";
79import { isRecord } from "../utils.js";
810import { collectEnabledInsecureOrDangerousFlagsFromContracts } from "./dangerous-config-flags-core.js";
91110-export function collectEnabledInsecureOrDangerousFlags(cfg: OpenClawConfig): string[] {
12+function resolveCurrentPluginConfigContractsById(params: {
13+cfg: OpenClawConfig;
14+pluginIds: readonly string[];
15+}): ReadonlyMap<string, PluginConfigContractMetadata> | undefined {
16+// Gateway startup already owns this metadata snapshot; reuse it here so
17+// warning logs do not reload plugin manifests on the ready path.
18+const snapshot = getCurrentPluginMetadataSnapshot({
19+config: params.cfg,
20+env: process.env,
21+allowWorkspaceScopedSnapshot: true,
22+});
23+if (!snapshot) {
24+return undefined;
25+}
26+27+const contractsById = new Map<string, PluginConfigContractMetadata>();
28+for (const pluginId of params.pluginIds) {
29+const normalizedPluginId = snapshot.normalizePluginId(pluginId);
30+const plugin = snapshot.byPluginId.get(pluginId) ?? snapshot.byPluginId.get(normalizedPluginId);
31+if (!plugin) {
32+return undefined;
33+}
34+if (!plugin.configContracts) {
35+continue;
36+}
37+contractsById.set(pluginId, {
38+origin: plugin.origin,
39+configContracts: plugin.configContracts,
40+});
41+}
42+return contractsById;
43+}
44+45+export function collectEnabledInsecureOrDangerousFlags(
46+cfg: OpenClawConfig,
47+options: { preferCurrentPluginMetadataSnapshot?: boolean } = {},
48+): string[] {
1149const pluginEntries = cfg.plugins?.entries;
1250if (!isRecord(pluginEntries)) {
1351return collectEnabledInsecureOrDangerousFlagsFromContracts(cfg);
1452}
53+const pluginIds = Object.keys(pluginEntries);
155416-const configContracts = resolvePluginConfigContractsById({
17-config: cfg,
18-workspaceDir: resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg)),
19-env: process.env,
20-pluginIds: Object.keys(pluginEntries),
21-});
55+const configContracts =
56+(options.preferCurrentPluginMetadataSnapshot
57+ ? resolveCurrentPluginConfigContractsById({ cfg, pluginIds })
58+ : undefined) ??
59+resolvePluginConfigContractsById({
60+config: cfg,
61+workspaceDir: resolveAgentWorkspaceDir(cfg, resolveDefaultAgentId(cfg)),
62+env: process.env,
63+ pluginIds,
64+});
2265return collectEnabledInsecureOrDangerousFlagsFromContracts(cfg, {
2366 collectPluginConfigContractMatches,
2467configContractsById: configContracts,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。