UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

105 lines (104 loc) 4.32 kB
import { t as isTruthyEnvValue } from "./env-Di49gJwo.js"; import { u as toSafeImportPath } from "./plugin-module-loader-cache-lz0qhu-X.js"; import { D as commitPluginInteractiveCallbackDedupe, E as claimPluginInteractiveCallbackDedupe, O as releasePluginInteractiveCallbackDedupe, w as resolvePluginInteractiveNamespaceMatch } from "./command-registration-Bp1_oQY0.js"; import "./hook-runner-global-BnyQREr6.js"; import "./gateway-request-scope-BAEdAUQ6.js"; import { o as detachPluginConversationBinding, p as requestPluginConversationBinding, s as getCurrentPluginConversationBinding } from "./conversation-binding-F1u3otwq.js"; import "./commands-D0WhGlh-.js"; import "./http-registry-C6KnnU9A.js"; //#region src/plugins/interactive-binding-helpers.ts /** Helpers for binding interactive plugin handlers to conversations and sessions. */ function createInteractiveConversationBindingHelpers(params) { const { registration, senderId, conversation } = params; const pluginRoot = registration.pluginRoot; return { requestConversationBinding: async (binding = {}) => { if (!pluginRoot) return { status: "error", message: "This interaction cannot bind the current conversation." }; return requestPluginConversationBinding({ pluginId: registration.pluginId, pluginName: registration.pluginName, pluginRoot, requestedBySenderId: senderId, conversation, binding }); }, detachConversationBinding: async () => { if (!pluginRoot) return { removed: false }; return detachPluginConversationBinding({ pluginRoot, conversation }); }, getCurrentConversationBinding: async () => { if (!pluginRoot) return null; return getCurrentPluginConversationBinding({ pluginRoot, conversation }); } }; } //#endregion //#region src/plugins/interactive.ts /** Dispatches one interactive callback payload to a matching plugin handler. */ async function dispatchPluginInteractiveHandler(params) { const match = resolvePluginInteractiveNamespaceMatch(params.channel, params.data); if (!match) return { matched: false, handled: false, duplicate: false }; const dedupeKey = params.dedupeId?.trim(); if (dedupeKey && !claimPluginInteractiveCallbackDedupe(dedupeKey)) return { matched: true, handled: true, duplicate: true }; try { await params.onMatched?.(); const resolved = await params.invoke(match); if (dedupeKey) commitPluginInteractiveCallbackDedupe(dedupeKey); const shouldExposeResult = Boolean(resolved) && typeof resolved === "object" && Object.keys(resolved).some((key) => key !== "handled"); return { matched: true, handled: resolved?.handled ?? true, duplicate: false, ...shouldExposeResult ? { result: resolved } : {} }; } catch (error) { if (dedupeKey) releasePluginInteractiveCallbackDedupe(dedupeKey); throw error; } } //#endregion //#region src/plugins/lazy-service-module.ts function resolveExport(mod, names) { for (const name of names) { const value = mod[name]; if (typeof value === "function") return value; } return null; } async function defaultLoadOverrideModule(specifier, importModule = async (source) => await import(source)) { return importModule(toSafeImportPath(specifier)); } async function startLazyPluginServiceModule(params) { const skipEnvVar = params.skipEnvVar?.trim(); if (skipEnvVar && isTruthyEnvValue(process.env[skipEnvVar])) return null; const overrideEnvVar = params.overrideEnvVar?.trim(); const override = overrideEnvVar ? process.env[overrideEnvVar]?.trim() : void 0; const loadOverrideModule = params.loadOverrideModule ?? defaultLoadOverrideModule; const validatedOverride = override && params.validateOverrideSpecifier ? params.validateOverrideSpecifier(override) : override; const mod = validatedOverride ? await loadOverrideModule(validatedOverride) : await params.loadDefaultModule(); const start = resolveExport(mod, params.startExportNames); if (!start) return null; const stop = params.stopExportNames && params.stopExportNames.length > 0 ? resolveExport(mod, params.stopExportNames) : null; await start(); return { stop: stop ?? (async () => {}) }; } //#endregion export { createInteractiveConversationBindingHelpers as i, startLazyPluginServiceModule as n, dispatchPluginInteractiveHandler as r, defaultLoadOverrideModule as t };