UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

88 lines (87 loc) 2.96 kB
import { c as normalizeOptionalString } from "./string-coerce-mnp54Vah.js"; import { n as CHAT_CHANNEL_ORDER } from "./ids-BVNPk-iM.js"; import { t as getActivePluginChannelRegistryFromState } from "./runtime-channel-state-D79Ax0is.js"; import "./registry-9YoS2BJP.js"; //#region src/channels/plugins/registry-loaded.ts /** * Loaded channel plugin registry view. * * Normalizes and sorts active plugin runtime state for channel registry callers. */ function coerceLoadedChannelPlugin(plugin) { const id = normalizeOptionalString(plugin?.id) ?? ""; if (!plugin || !id) return null; if (!plugin.meta || typeof plugin.meta !== "object") plugin.meta = {}; return plugin; } function dedupeChannels(channels) { const seen = /* @__PURE__ */ new Set(); const resolved = []; for (const plugin of channels) { const id = normalizeOptionalString(plugin.id) ?? ""; if (!id || seen.has(id)) continue; seen.add(id); resolved.push(plugin); } return resolved; } function resolveChannelPlugins() { const registry = getActivePluginChannelRegistryFromState(); const channelPlugins = []; const pluginEntries = []; if (registry && Array.isArray(registry.channels)) for (const entry of registry.channels) { const plugin = coerceLoadedChannelPlugin(entry?.plugin); if (plugin) { channelPlugins.push(plugin); pluginEntries.push({ ...entry, plugin }); } } const sorted = dedupeChannels(channelPlugins).toSorted((a, b) => { const indexA = CHAT_CHANNEL_ORDER.indexOf(a.id); const indexB = CHAT_CHANNEL_ORDER.indexOf(b.id); const orderA = a.meta.order ?? (indexA === -1 ? 999 : indexA); const orderB = b.meta.order ?? (indexB === -1 ? 999 : indexB); if (orderA !== orderB) return orderA - orderB; return a.id.localeCompare(b.id); }); const byId = /* @__PURE__ */ new Map(); const entriesById = /* @__PURE__ */ new Map(); const unsortedEntriesById = new Map(pluginEntries.map((entry) => [entry.plugin.id, entry])); for (const plugin of sorted) { byId.set(plugin.id, plugin); const entry = unsortedEntriesById.get(plugin.id); if (entry) entriesById.set(plugin.id, entry); } return { sorted, byId, entriesById }; } /** * Lists loaded channel plugins in deterministic display/runtime order. */ function listLoadedChannelPlugins() { return resolveChannelPlugins().sorted.slice(); } /** * Returns a loaded channel plugin by normalized id. */ function getLoadedChannelPluginById(id) { const resolvedId = normalizeOptionalString(id) ?? ""; if (!resolvedId) return; return resolveChannelPlugins().byId.get(resolvedId); } /** * Returns the loaded channel registry entry by normalized plugin id. */ function getLoadedChannelPluginEntryById(id) { const resolvedId = normalizeOptionalString(id) ?? ""; if (!resolvedId) return; return resolveChannelPlugins().entriesById.get(resolvedId); } //#endregion export { getLoadedChannelPluginEntryById as n, listLoadedChannelPlugins as r, getLoadedChannelPluginById as t };