UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

122 lines (121 loc) 7.04 kB
import { c as resolveUserPath } from "./home-dir-BPhrG-aM.js"; import "./utils-P__uGsPB.js"; import { f as extractPluginInstallRecordsFromInstalledPluginIndex } from "./installed-plugin-index-wrDsjyMD.js"; import { a as loadPluginMetadataSnapshot } from "./plugin-metadata-snapshot-w-4EjxI4.js"; import { p as getActivePluginRegistryWorkspaceDir, u as getActivePluginRegistry } from "./runtime-BL4wZfTq.js"; import { a as getPluginRuntimeGatewayRequestScope, f as withPluginRuntimeRegistryScope } from "./gateway-request-scope-BCMYlsDI.js"; import { a as registryContainsRuntimePluginIds, i as listRuntimePluginIdsFromRegistry, r as listLoadedRuntimePluginIds } from "./active-runtime-registry-C5SJbS7x.js"; import { n as loadPluginRegistryHandle } from "./loader-DPiOPJjR.js"; import { r as adoptRuntimeContextEngineRegistrations } from "./registry-B0bOFDjU.js"; import { a as resolveAgentRuntimePluginSelections, i as resolveAgentRuntimePluginLoadPlan } from "./runtime-plugin-load-plan-bSDzapSx.js"; import { t as adoptRuntimeMemoryRegistrations } from "./memory-state-BanUXlB7.js"; //#region src/plugins/widget-presenters.ts function hasMatchingLoadedOwner(registration, targetRegistry, runtimeRegistry) { const target = targetRegistry.plugins.find((plugin) => plugin.id === registration.pluginId); const runtime = runtimeRegistry.plugins.find((plugin) => plugin.id === registration.pluginId); return target?.status === "loaded" && runtime?.status === "loaded" && target.source === runtime.source && registration.source === runtime.source; } /** Copies full-only presenters into a matching discovery registry without rerunning plugin code. */ function adoptRuntimeWidgetPresenterRegistrations(targetRegistry, runtimeRegistry) { const presenters = [...targetRegistry.widgetPresenters]; let changed = false; for (const registration of runtimeRegistry.widgetPresenters) { if (!hasMatchingLoadedOwner(registration, targetRegistry, runtimeRegistry)) continue; if (!presenters.some((candidate) => registration.presenter.target === "current_channel" ? candidate.pluginId === registration.pluginId && candidate.presenter.target === registration.presenter.target : candidate.presenter.target === registration.presenter.target)) { presenters.push(registration); changed = true; } } return changed ? { ...targetRegistry, widgetPresenters: presenters } : targetRegistry; } /** Returns presenter registrations from the exact request registry when available. */ function resolveWidgetPresenters() { return (getPluginRuntimeGatewayRequestScope()?.pluginRegistry ?? getActivePluginRegistry() ?? void 0)?.widgetPresenters ?? []; } //#endregion //#region src/agents/runtime-plugins.ts function resolveAgentRuntimePluginRegistryLoad(params) { const loadOptions = { config: params.config, activationSourceConfig: params.config, env: params.env, workspaceDir: typeof params.workspaceDir === "string" && params.workspaceDir.trim() ? resolveUserPath(params.workspaceDir) : void 0, runtimeOptions: params.allowGatewaySubagentBinding ? { allowGatewaySubagentBinding: true } : void 0 }; if (params.config?.plugins?.enabled === false) return { ...loadOptions, onlyPluginIds: [] }; const metadataSnapshot = params.metadataSnapshot ?? loadPluginMetadataSnapshot({ config: params.config ?? {}, env: params.env ?? process.env, workspaceDir: loadOptions.workspaceDir }); const workspaceDir = metadataSnapshot.workspaceDir ?? loadOptions.workspaceDir; const requestPluginRegistry = getPluginRuntimeGatewayRequestScope()?.pluginRegistry; const activePluginIds = listLoadedRuntimePluginIds(); const startupPluginIds = params.basePluginIds ?? (requestPluginRegistry ? listRuntimePluginIdsFromRegistry(requestPluginRegistry) : metadataSnapshot.pluginIds ?? (activePluginIds.length > 0 ? activePluginIds : void 0)); const plan = resolveAgentRuntimePluginLoadPlan({ config: params.config, workspaceDir: workspaceDir ?? process.cwd(), basePluginIds: startupPluginIds, selections: resolveAgentRuntimePluginSelections(params.config, params.selections ?? [], params.configuredHarnessRuntimes), metadataSnapshot }); return { ...loadOptions, config: plan.config, activationSourceConfig: plan.config, workspaceDir, discovery: metadataSnapshot.discovery, installRecords: extractPluginInstallRecordsFromInstalledPluginIndex(metadataSnapshot.index), manifestRegistry: metadataSnapshot.manifestRegistry, preferBuiltPluginArtifacts: params.preferBuiltPluginArtifacts, onlyPluginIds: startupPluginIds === void 0 ? void 0 : plan.pluginIds, channelPluginLoadIntent: startupPluginIds === void 0 ? void 0 : "full" }; } /** Loads the registry handle owned by an agent prepared-runtime generation. */ function loadAgentRuntimePluginRegistryHandle(params) { const loadOptions = resolveAgentRuntimePluginRegistryLoad(params); if (params.reusableRegistry && loadOptions.onlyPluginIds !== void 0 && registryContainsRuntimePluginIds(params.reusableRegistry, loadOptions.onlyPluginIds)) return params.reusableRegistry; const pluginRegistry = loadPluginRegistryHandle({ ...loadOptions, activate: false }); const activeRegistry = getActivePluginRegistry(); if (!activeRegistry) return pluginRegistry; return adoptRuntimeWidgetPresenterRegistrations(adoptRuntimeContextEngineRegistrations(pluginRegistry, activeRegistry), activeRegistry); } /** Binds a scoped plugin generation when a direct host has no Gateway owner. */ async function withAgentPluginRegistry(params) { const requestPluginRegistry = getPluginRuntimeGatewayRequestScope()?.pluginRegistry; if (requestPluginRegistry && params.selections === void 0) return await params.run(requestPluginRegistry); const [{ setPluginRuntimeLoadContext }, { resolvePluginRuntimeLoadContext }] = await Promise.all([import("./load-context-DnG7XpHU.js"), import("./load-context.resolve-364vQGME.js")]); const context = resolvePluginRuntimeLoadContext({ config: params.config, activationSourceConfig: params.config, env: params.env, workspaceDir: params.workspaceDir, ...params.config.plugins?.enabled === false ? { manifestRegistry: { plugins: [], diagnostics: [] } } : { metadataSnapshot: loadPluginMetadataSnapshot(params) } }); const pluginRegistry = loadAgentRuntimePluginRegistryHandle({ config: params.config, env: context.env, metadataSnapshot: context.metadataSnapshot, selections: params.selections, workspaceDir: params.workspaceDir }); const activeRegistry = getActivePluginRegistry(); const scopedRegistry = activeRegistry && context.metadataSnapshot && getActivePluginRegistryWorkspaceDir() === resolveUserPath(params.workspaceDir) ? adoptRuntimeMemoryRegistrations(pluginRegistry, activeRegistry, context.config) : pluginRegistry; setPluginRuntimeLoadContext(scopedRegistry, context); return await withPluginRuntimeRegistryScope(scopedRegistry, () => params.run(scopedRegistry)); } //#endregion export { withAgentPluginRegistry as n, resolveWidgetPresenters as r, loadAgentRuntimePluginRegistryHandle as t };