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