openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
101 lines (100 loc) • 4.76 kB
JavaScript
import { c as normalizeOptionalLowercaseString } from "./string-coerce-1VuiLaaR.mjs";
import { n as listAgentEntries } from "./agent-roster-DH6r_8f4.mjs";
import "./agent-scope-config-BEk6-ThS.mjs";
import { u as normalizePluginsConfig } from "./config-state-Ba1MVBAI.mjs";
import { f as hasNonEmptyPluginIdScope } from "./current-plugin-metadata-snapshot-DpeEPkbV.mjs";
import { l as resolveConfiguredChannelPluginIds } from "./channel-presence-policy-CZfPoPKL.mjs";
import { n as buildPluginRuntimeLoadOptions } from "./load-context-DHsEiS3U.mjs";
import { r as loadAndActivateRootPluginRegistry } from "./loader-runtime-load-ZVHWOf_z.mjs";
import { _ as collectConfiguredMemoryEmbeddingProviderIds } from "./gateway-startup-plugin-config-DJmD6Fvw.mjs";
import { r as resolveChannelPluginIds } from "./gateway-startup-plugin-loader-BKXHztyQ.mjs";
import { t as createInstalledPluginIndexScopeLookup } from "./installed-plugin-index-scope-lookup-zVHC9Dq8.mjs";
import "./gateway-startup-plugin-ids-CxNTuJbx.mjs";
import "./channel-plugin-ids-Dy16pCvQ.mjs";
import { n as withActivatedPluginIds } from "./activation-context-CHczBoPP.mjs";
import "./loader-DD9YGElz.mjs";
import { t as resolvePluginRuntimeLoadContext } from "./load-context.resolve-sJWgrbqc.mjs";
import { t as resolveEffectivePluginIds } from "./effective-plugin-ids-DizDweJM.mjs";
//#region src/plugins/runtime/runtime-registry-loader.ts
const CORE_SANDBOX_BACKEND_IDS = /* @__PURE__ */ new Set([
"docker",
"podman",
"ssh"
]);
function resolveMemoryPluginIds(context) {
const configuredProviderIds = [...collectConfiguredMemoryEmbeddingProviderIds(context.activationSourceConfig)];
const pluginIds = /* @__PURE__ */ new Set();
if (context.metadataSnapshot) createInstalledPluginIndexScopeLookup(context.metadataSnapshot.index).addProviderContributionOwners(pluginIds, configuredProviderIds);
else for (const providerId of configuredProviderIds) pluginIds.add(providerId);
const memoryPluginId = normalizePluginsConfig(context.config.plugins).slots.memory?.trim();
if (memoryPluginId) pluginIds.add(memoryPluginId);
return [...pluginIds].toSorted();
}
function resolveSandboxBackendPluginIds(context, persistedBackendIds = []) {
if (!context.metadataSnapshot) return [];
const configuredBackendIds = [
context.activationSourceConfig.agents?.defaults?.sandbox?.backend,
...listAgentEntries(context.activationSourceConfig).map((agent) => agent.sandbox?.backend),
...persistedBackendIds
];
const lookup = createInstalledPluginIndexScopeLookup(context.metadataSnapshot.index);
const pluginIds = /* @__PURE__ */ new Set();
for (const backendId of configuredBackendIds) {
const normalizedBackendId = normalizeOptionalLowercaseString(backendId);
if (!normalizedBackendId || CORE_SANDBOX_BACKEND_IDS.has(normalizedBackendId) || !lookup.hasInstalledPluginIds([normalizedBackendId])) continue;
pluginIds.add(lookup.normalizePluginId(normalizedBackendId));
}
return [...pluginIds].toSorted();
}
async function ensurePluginRegistryLoaded(options) {
const scope = options?.scope ?? "all";
const context = resolvePluginRuntimeLoadContext(options);
let pluginIds;
switch (scope) {
case "configured-channels":
pluginIds = resolveConfiguredChannelPluginIds({
config: context.config,
activationSourceConfig: context.activationSourceConfig,
workspaceDir: context.workspaceDir,
env: context.env
});
break;
case "channels":
pluginIds = resolveChannelPluginIds({
config: context.config,
workspaceDir: context.workspaceDir,
env: context.env
});
break;
case "memory":
pluginIds = resolveMemoryPluginIds(context);
break;
case "sandbox-backends":
pluginIds = resolveSandboxBackendPluginIds(context, options?.persistedSandboxBackendIds);
break;
default: pluginIds = resolveEffectivePluginIds({
config: context.rawConfig,
workspaceDir: context.workspaceDir,
env: context.env
});
}
const activateConfigured = scope === "configured-channels" && pluginIds.length > 0;
const config = activateConfigured ? withActivatedPluginIds({
config: context.config,
pluginIds
}) ?? context.config : context.config;
const activationSourceConfig = activateConfigured ? withActivatedPluginIds({
config: context.activationSourceConfig,
pluginIds
}) ?? context.activationSourceConfig : context.activationSourceConfig;
await loadAndActivateRootPluginRegistry(buildPluginRuntimeLoadOptions({
...context,
config,
activationSourceConfig
}, {
throwOnLoadError: true,
...scope === "configured-channels" || scope === "memory" || scope === "sandbox-backends" || scope === "all" || hasNonEmptyPluginIdScope(pluginIds) ? { onlyPluginIds: pluginIds } : {}
}));
}
//#endregion
export { ensurePluginRegistryLoaded };