openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
114 lines (113 loc) • 5.59 kB
JavaScript
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 };