openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
76 lines (75 loc) • 3.61 kB
JavaScript
import { s as normalizeSortedUniqueStringEntries } from "./string-normalization-WNUDCpXX.js";
import { t as discoverOpenClawPlugins } from "./discovery-BDSfxwT6.js";
import { t as loadPluginManifestRegistry } from "./manifest-registry-BywZIeAq.js";
import { n as loadPluginManifestRegistryForPluginRegistry } from "./plugin-registry-ChcJPHWl.js";
import "./config-contract-matches-XtluDaw1.js";
//#region src/plugins/config-contracts.ts
/** Resolves plugin config contract metadata for scanners and secret/config policy checks. */
/** Resolve config contract metadata for plugin ids through the runtime registry and bundled fallback. */
function resolvePluginConfigContractsById(params) {
const matches = /* @__PURE__ */ new Map();
const pluginIds = normalizeSortedUniqueStringEntries(params.pluginIds);
if (pluginIds.length === 0) return matches;
const fallbackBundledPluginIds = new Set(normalizeSortedUniqueStringEntries(params.fallbackBundledPluginIds));
const bundledContractFallbacks = /* @__PURE__ */ new Map();
const findBundledConfigContracts = (pluginId) => {
if (bundledContractFallbacks.has(pluginId)) return bundledContractFallbacks.get(pluginId);
const discovery = params.discovery ?? discoverOpenClawPlugins({
workspaceDir: params.workspaceDir,
env: params.env
});
const registry = loadPluginManifestRegistry({
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
candidates: discovery.candidates.filter((candidate) => candidate.origin === "bundled"),
diagnostics: discovery.diagnostics
});
for (const plugin of registry.plugins) bundledContractFallbacks.set(plugin.id, plugin.configContracts);
if (!bundledContractFallbacks.has(pluginId)) bundledContractFallbacks.set(pluginId, void 0);
return bundledContractFallbacks.get(pluginId);
};
const resolvedPluginOrigins = /* @__PURE__ */ new Map();
const registry = loadPluginManifestRegistryForPluginRegistry({
config: params.config,
workspaceDir: params.workspaceDir,
env: params.env,
includeDisabled: true
});
for (const plugin of registry.plugins) {
if (!pluginIds.includes(plugin.id)) continue;
resolvedPluginOrigins.set(plugin.id, plugin.origin);
if (!plugin.configContracts) continue;
matches.set(plugin.id, {
origin: plugin.origin,
configContracts: plugin.configContracts
});
}
if (params.fallbackToBundledMetadata ?? true) for (const pluginId of pluginIds) {
const existing = matches.get(pluginId);
if (existing && (params.fallbackToBundledMetadataForResolvedBundled && existing.origin === "bundled" || fallbackBundledPluginIds.has(pluginId))) {
const bundledConfigContracts = findBundledConfigContracts(pluginId);
if (bundledConfigContracts) matches.set(pluginId, {
origin: fallbackBundledPluginIds.has(pluginId) ? "bundled" : existing.origin,
configContracts: {
...bundledConfigContracts,
...existing.configContracts,
...bundledConfigContracts.secretInputs ? { secretInputs: bundledConfigContracts.secretInputs } : {}
}
});
continue;
}
if (matches.has(pluginId)) continue;
const resolvedOrigin = resolvedPluginOrigins.get(pluginId);
if (resolvedOrigin && !(params.fallbackToBundledMetadataForResolvedBundled && resolvedOrigin === "bundled") && !fallbackBundledPluginIds.has(pluginId)) continue;
const bundledConfigContracts = findBundledConfigContracts(pluginId);
if (!bundledConfigContracts) continue;
matches.set(pluginId, {
origin: "bundled",
configContracts: bundledConfigContracts
});
}
return matches;
}
//#endregion
export { resolvePluginConfigContractsById as t };