UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

114 lines (113 loc) 5.59 kB
import { a as getPluginCache, f as withPluginCache, i as createPluginCache } from "./plugin-cache-DGWspMEc.js"; import { i as getGatewayPluginMetadataSnapshot } from "./current-plugin-metadata-state-B1UoAr4G.js"; import { t as normalizePluginPolicyId } from "./plugin-policy-id-4QxPdFqy.js"; import { m as resolvePluginControlPlaneFingerprint } from "./current-plugin-metadata-snapshot-CmSX4G3W.js"; import { c as resolvePluginMetadataSnapshot, l as resolvePluginMetadataSnapshotCacheKey, n as finalizePluginMetadataSnapshot, o as projectPluginMetadataSnapshot, s as rebasePluginMetadataSnapshotManifestRegistry } from "./plugin-metadata-snapshot-w-4EjxI4.js"; import { t as listAgentWorkspaceDirs } from "./workspace-dirs-CrAmmWK4.js"; //#region src/config/io.plugin-metadata.ts function mergeRegistries(registries) { const grouped = /* @__PURE__ */ new Map(); const diagnostics = registries.flatMap((registry) => registry.diagnostics); for (const registry of registries) for (const plugin of registry.plugins) { const id = normalizePluginPolicyId(plugin.id); const group = grouped.get(id) ?? { plugin, sources: /* @__PURE__ */ new Set() }; group.plugin = plugin; group.sources.add(plugin.source); grouped.set(id, group); } return { plugins: [...grouped.entries()].flatMap(([pluginId, group]) => { if (group.sources.size === 1) return [group.plugin]; diagnostics.push({ level: "error", pluginId, message: `plugin id ${JSON.stringify(pluginId)} is present in multiple agent workspaces: ${[...group.sources].toSorted().join(", ")}` }); return []; }), diagnostics }; } function resolveConfigWidePluginMetadataSnapshot(params) { if (params.allowCurrent === false && getPluginCache().kind !== "operation") return withPluginCache(createPluginCache(), () => resolveConfigWidePluginMetadataSnapshot(params)); if (params.allowCurrent !== false && params.stateDir === void 0) { const gatewaySnapshot = getGatewayPluginMetadataSnapshot(); if (gatewaySnapshot) return gatewaySnapshot; } const env = params.env ?? process.env; const dirs = listAgentWorkspaceDirs(params.config, env); const workspaceDirs = dirs.length ? dirs : [void 0]; const cache = getPluginCache(); const key = JSON.stringify([ "config-wide", resolvePluginMetadataSnapshotCacheKey(params), workspaceDirs ]); const cached = cache.metadata.snapshots.get(key); if (cached) return cached; const snapshot = resolveConfigWidePluginMetadataSnapshotImpl(params, workspaceDirs); cache.metadata.snapshots.set(key, snapshot); return snapshot; } function resolveConfigWidePluginMetadataSnapshotImpl(params, workspaceDirs) { const env = params.env ?? process.env; const resolveSnapshot = (workspaceDir) => resolvePluginMetadataSnapshot({ config: params.config, ...workspaceDir ? { workspaceDir } : {}, ...params.stateDir ? { stateDir: params.stateDir } : {}, env, allowCurrent: params.allowCurrent, allowWorkspaceScopedCurrent: true }); const firstSnapshot = resolveSnapshot(workspaceDirs[0]); const snapshots = [firstSnapshot, ...workspaceDirs.slice(1).map(resolveSnapshot)]; if (snapshots.length === 1) return firstSnapshot; const manifestRegistry = mergeRegistries(snapshots.map((snapshot) => snapshot.manifestRegistry)); const selectedPlugins = new Map(manifestRegistry.plugins.map((plugin) => [normalizePluginPolicyId(plugin.id), plugin])); const indexPlugins = new Map(snapshots.flatMap((snapshot) => snapshot.index.plugins.flatMap((record) => { const id = normalizePluginPolicyId(record.pluginId); const selected = selectedPlugins.get(id); return selected && selected.manifestPath === record.manifestPath ? [[id, record]] : []; }))); const index = { ...firstSnapshot.index, plugins: [...indexPlugins.values()], installRecords: Object.fromEntries(snapshots.flatMap((snapshot) => Object.entries(snapshot.index.installRecords))), diagnostics: manifestRegistry.diagnostics }; const sources = new Set(manifestRegistry.plugins.map((plugin) => plugin.source)); const discovery = snapshots.every((snapshot) => snapshot.discovery) ? { candidates: [...new Map(snapshots.flatMap((snapshot) => (snapshot.discovery?.candidates ?? []).filter((candidate) => sources.has(candidate.source)).map((candidate) => [`${candidate.effectivePluginId ?? candidate.idHint}\0${candidate.source}`, candidate]))).values()], diagnostics: snapshots.flatMap((snapshot) => snapshot.discovery?.diagnostics ?? []) } : void 0; const sumMetric = (key) => snapshots.reduce((total, snapshot) => total + snapshot.metrics[key], 0); return finalizePluginMetadataSnapshot(rebasePluginMetadataSnapshotManifestRegistry({ ...firstSnapshot, index, discovery, configFingerprint: resolvePluginControlPlaneFingerprint({ config: params.config, env, index, workspaceDir: firstSnapshot.workspaceDir }), registryDiagnostics: snapshots.flatMap((snapshot) => snapshot.registryDiagnostics), metrics: { registrySnapshotMs: sumMetric("registrySnapshotMs"), manifestRegistryMs: sumMetric("manifestRegistryMs"), ownerMapsMs: sumMetric("ownerMapsMs"), totalMs: sumMetric("totalMs"), indexPluginCount: index.plugins.length, manifestPluginCount: manifestRegistry.plugins.length } }, manifestRegistry)); } function resolveConfigWidePluginManifestRegistry(params) { const snapshot = resolveConfigWidePluginMetadataSnapshot(params); return projectPluginMetadataSnapshot(snapshot, params.pluginIds).manifestRegistry; } //#endregion export { resolveConfigWidePluginMetadataSnapshot as n, resolveConfigWidePluginManifestRegistry as t };