UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

151 lines (150 loc) 7.7 kB
import { c as normalizeOptionalLowercaseString } from "./string-coerce-CIXf7egm.js"; import { t as compileSafeRegex } from "./safe-regex-BQnlv3bA.js"; import { s as normalizePluginId } from "./config-state-BkU1frVq.js"; import "./installed-plugin-index-config-path-scope-BAeCI-f_.js"; //#region src/plugins/installed-plugin-index-scope-lookup.ts const PROVIDER_CONTRIBUTION_CONTRACTS = [ "externalAuthProviders", "embeddingProviders", "speechProviders", "realtimeTranscriptionProviders", "realtimeVoiceProviders", "mediaUnderstandingProviders", "meetingNotesSourceProviders", "imageGenerationProviders", "videoGenerationProviders", "musicGenerationProviders", "webFetchProviders", "webSearchProviders", "workerProviders", "usageProviders" ]; function appendOwner(owners, rawKey, pluginId) { const key = normalizeOptionalLowercaseString(rawKey); if (!key) return; const existing = owners.get(key); if (existing) { existing.push(pluginId); return; } owners.set(key, [pluginId]); } function freezeOwnerMap(owners) { return new Map([...owners.entries()].map(([key, pluginIds]) => [key, Object.freeze([...new Set(pluginIds)])])); } function addOwners(target, owners, ids) { for (const id of ids) { const normalized = normalizeOptionalLowercaseString(id); if (!normalized) continue; for (const pluginId of owners.get(normalized) ?? []) target.add(pluginId); } } function hasOwners(owners, ids) { return ids.every((id) => { const normalized = normalizeOptionalLowercaseString(id); return Boolean(normalized && owners.has(normalized)); }); } function listContributionValues(plugin, key) { const value = plugin.contributions?.[key]; return Array.isArray(value) ? value : []; } function listContractContributionValues(plugin, key) { const value = plugin.contributions?.contracts?.[key]; return Array.isArray(value) ? value : []; } function compileModelSupportPatterns(patterns) { const compiled = []; for (const pattern of patterns) { const regex = compileSafeRegex(pattern, "u"); if (regex) compiled.push(regex); } return compiled; } function modelSupportOwnerMatches(owner, modelId) { const trimmed = modelId.trim(); if (!trimmed) return false; if (owner.prefixes.some((prefix) => trimmed.startsWith(prefix))) return true; return owner.patterns.some((pattern) => pattern.test(trimmed)); } function buildLookupMaps(index) { const agentHarnessOwners = /* @__PURE__ */ new Map(); const channelContributionOwners = /* @__PURE__ */ new Map(); const directChannelOwners = /* @__PURE__ */ new Map(); const directProviderOwners = /* @__PURE__ */ new Map(); const pluginIdsByLowercase = /* @__PURE__ */ new Map(); const providerContributionOwners = /* @__PURE__ */ new Map(); const modelSupportOwners = []; for (const plugin of index.plugins) { const normalizedPluginId = normalizeOptionalLowercaseString(plugin.pluginId); if (normalizedPluginId) { pluginIdsByLowercase.set(normalizedPluginId, plugin.pluginId); appendOwner(directChannelOwners, plugin.pluginId, plugin.pluginId); appendOwner(directProviderOwners, plugin.pluginId, plugin.pluginId); appendOwner(channelContributionOwners, plugin.pluginId, plugin.pluginId); appendOwner(providerContributionOwners, plugin.pluginId, plugin.pluginId); } for (const runtimeId of plugin.startup.agentHarnesses) appendOwner(agentHarnessOwners, runtimeId, plugin.pluginId); appendOwner(directChannelOwners, plugin.packageChannel?.id, plugin.pluginId); appendOwner(channelContributionOwners, plugin.packageChannel?.id, plugin.pluginId); for (const channelId of listContributionValues(plugin, "channels")) appendOwner(channelContributionOwners, channelId, plugin.pluginId); for (const channelId of listContributionValues(plugin, "channelConfigs")) appendOwner(channelContributionOwners, channelId, plugin.pluginId); for (const providerId of listContributionValues(plugin, "providers")) appendOwner(providerContributionOwners, providerId, plugin.pluginId); for (const providerId of listContributionValues(plugin, "modelCatalogProviders")) appendOwner(providerContributionOwners, providerId, plugin.pluginId); for (const providerId of listContributionValues(plugin, "autoEnableProviderIds")) appendOwner(providerContributionOwners, providerId, plugin.pluginId); for (const contract of PROVIDER_CONTRIBUTION_CONTRACTS) for (const providerId of listContractContributionValues(plugin, contract)) appendOwner(providerContributionOwners, providerId, plugin.pluginId); modelSupportOwners.push({ pluginId: plugin.pluginId, prefixes: listContributionValues(plugin, "modelSupportPrefixes"), patterns: compileModelSupportPatterns(listContributionValues(plugin, "modelSupportPatterns")) }); } return { agentHarnessOwners: freezeOwnerMap(agentHarnessOwners), channelContributionOwners: freezeOwnerMap(channelContributionOwners), directChannelOwners: freezeOwnerMap(directChannelOwners), directProviderOwners: freezeOwnerMap(directProviderOwners), installedPluginIds: new Set(pluginIdsByLowercase.keys()), modelSupportOwners, pluginIdsByLowercase, providerContributionOwners: freezeOwnerMap(providerContributionOwners) }; } function createInstalledPluginIndexScopeLookup(index) { const maps = buildLookupMaps(index); const normalizeInstalledPluginId = (pluginId) => { const normalized = normalizePluginId(pluginId); const lowercase = normalizeOptionalLowercaseString(normalized); return lowercase ? maps.pluginIdsByLowercase.get(lowercase) ?? normalized : normalized; }; return { addAgentHarnessOwners: (target, ids) => addOwners(target, maps.agentHarnessOwners, ids), addChannelContributionOwners: (target, ids) => addOwners(target, maps.channelContributionOwners, ids), addDirectChannelOwners: (target, ids) => addOwners(target, maps.directChannelOwners, ids), addDirectProviderOwners: (target, ids) => addOwners(target, maps.directProviderOwners, ids), addProviderContributionOwners: (target, ids) => addOwners(target, maps.providerContributionOwners, ids), addShorthandModelOwners: (target, modelIds) => { for (const modelId of modelIds) for (const owner of maps.modelSupportOwners) if (modelSupportOwnerMatches(owner, modelId)) target.add(owner.pluginId); }, canResolveDirectProviderIds: (providerIds, scopePluginIds) => { const normalizedScope = new Set([...scopePluginIds].map((pluginId) => normalizeOptionalLowercaseString(pluginId)).filter((pluginId) => Boolean(pluginId))); return providerIds.every((providerId) => { const normalized = normalizeOptionalLowercaseString(providerId); return Boolean(normalized && (maps.directProviderOwners.has(normalized) || normalizedScope.has(normalized))); }); }, hasChannelContributionOwners: (ids) => hasOwners(maps.channelContributionOwners, ids), hasAgentHarnessOwners: (ids) => hasOwners(maps.agentHarnessOwners, ids), hasCompleteConfigPathActivationMetadata: () => index.plugins.every((plugin) => !plugin.compat.includes("activation-config-path-hint") || plugin.startup.configPaths !== void 0), hasDirectChannelOwners: (ids) => hasOwners(maps.directChannelOwners, ids), hasInstalledPluginIds: (ids) => [...ids].every((pluginId) => { const normalized = normalizeOptionalLowercaseString(pluginId); return Boolean(normalized && maps.installedPluginIds.has(normalized)); }), hasProviderContributionOwners: (ids) => hasOwners(maps.providerContributionOwners, ids), hasShorthandModelOwners: (modelIds) => modelIds.every((modelId) => maps.modelSupportOwners.some((owner) => modelSupportOwnerMatches(owner, modelId))), normalizePluginId: normalizeInstalledPluginId }; } //#endregion export { createInstalledPluginIndexScopeLookup as t };