UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

568 lines (567 loc) 25.6 kB
import { a as getPluginCache, c as getPluginMetadataSnapshotCache } from "./plugin-cache-DGWspMEc.js"; import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js"; import { i as getGatewayPluginMetadataSnapshot } from "./current-plugin-metadata-state-B1UoAr4G.js"; import { r as loadPluginManifest } from "./manifest-ByRdkf9X.js"; import { l as normalizePluginsConfig } from "./config-state-BkU1frVq.js"; import { n as loadPluginManifestRegistryCore } from "./manifest-registry-DCCgYk7q.js"; import { n as getCurrentPluginMetadataSnapshot } from "./current-plugin-metadata-snapshot-CmSX4G3W.js"; import { i as passesManifestOwnerBasePolicy, n as isActivatedManifestOwner, r as isBundledManifestOwner, t as hasExplicitManifestOwnerTrust } from "./manifest-owner-policy-D98oU3cV.js"; import { n as createStaticProviderModelIdNormalizer, u as normalizeStaticProviderModelId } from "./model-ref-shared-Dz7QU0Lx.js"; import { n as planManifestModelCatalogSuppressions } from "./manifest-planner-bVm3dG3U.js"; import { t as listOpenClawPluginManifestMetadata } from "./manifest-metadata-scan-BaLPCL7D.js"; import "./defaults-CdX9UGcX.js"; import { t as planEffectiveModelCatalogRows } from "./model-catalog-BiOJ2EJd.js"; import { f as resolveOwningPluginIdsForProviderRef, n as resolveActivatableProviderOwnerPluginIds, r as resolveBundledProviderCompatPluginIds } from "./providers-DCe4UB6a.js"; import { r as normalizeResolvedPricing } from "./usage-cost-Va5dwVFW.js"; import "./src-g7CpceXJ.js"; import { a as resolveRuntimePluginDiscoveryProviders, n as normalizePluginDiscoveryResult, s as runProviderStaticCatalog } from "./provider-discovery-BPqo7Vo1.js"; import { t as buildInlineProviderModels } from "./model.inline-provider-DfSbZZJQ.js"; //#region src/agents/embedded-agent-runner/model.static-id.ts function matchesStaticModelId(params, normalizeModelId) { const normalizedProvider = normalizeProviderId(params.provider); if (params.rowProvider && normalizeProviderId(params.rowProvider) !== normalizedProvider) return false; return normalizeModelId(normalizedProvider, params.candidateId).trim().toLowerCase() === normalizeModelId(normalizedProvider, params.modelId).trim().toLowerCase(); } function staticModelIdMatches(params) { return matchesStaticModelId(params, normalizeStaticProviderModelId); } /** Builds a matcher pinned to one prepared manifest-policy generation. */ function createStaticModelIdMatcher(options = {}) { const normalizeModelId = createStaticProviderModelIdNormalizer(options); return (params) => matchesStaticModelId(params, normalizeModelId); } //#endregion //#region src/agents/embedded-agent-runner/model.manifest-alias.ts function hasModelCatalogAliasTransportOverride(alias) { return Boolean(alias.api?.trim() || alias.baseUrl?.trim()); } function hasModelCatalogAliasEndpointSurface(alias) { return Boolean(alias.baseUrl?.trim()); } function findConfiguredModelCatalogProviderConfig(params) { const provider = normalizeProviderId(params.provider); if (!provider) return; for (const [providerId, providerConfig] of Object.entries(params.cfg?.models?.providers ?? {})) if (normalizeProviderId(providerId) === provider) return providerConfig; } function hasConfiguredModelCatalogProviderEndpointSurface(params) { const provider = normalizeProviderId(params.provider); if (!provider) return false; const config = findConfiguredModelCatalogProviderConfig({ provider, cfg: params.cfg }); if (config?.baseUrl?.trim()) return true; const modelId = params.modelId?.trim(); if (!modelId || !Array.isArray(config?.models)) return false; return config.models.some((model) => Boolean(model.baseUrl?.trim()) && staticModelIdMatches({ candidateId: model.id, provider, modelId })); } function resolveConfiguredModelCatalogProviderApi(params) { const provider = normalizeProviderId(params.provider); const config = findConfiguredModelCatalogProviderConfig({ provider, cfg: params.cfg }); const modelId = params.modelId?.trim(); return (provider && modelId && Array.isArray(config?.models) ? config.models.find((candidate) => staticModelIdMatches({ candidateId: candidate.id, provider, modelId })) : void 0)?.api ?? config?.api; } function hasUnconditionalManifestModelCatalogSuppression(params) { const provider = normalizeProviderId(params.provider); const modelId = params.modelId?.trim(); if (!provider || !modelId) return false; return planManifestModelCatalogSuppressions({ registry: { plugins: [params.plugin] }, providerFilter: provider, modelFilter: modelId }).suppressions.some((suppression) => !suppression.when && normalizeProviderId(suppression.provider) === provider); } function listEligibleManifestModelCatalogAliasPlugins(params) { const normalizedConfig = normalizePluginsConfig(params.cfg?.plugins); return params.plugins.filter((plugin) => { if (!isActivatedManifestOwner({ plugin, normalizedConfig, rootConfig: params.cfg })) return false; return isBundledManifestOwner(plugin) || plugin.origin === "config" || hasExplicitManifestOwnerTrust({ plugin, normalizedConfig }); }); } function resolveManifestAliasTargetApi(params) { const providerCatalog = Object.entries(params.plugin.modelCatalog?.providers ?? {}).find(([provider]) => normalizeProviderId(provider) === params.provider)?.[1]; if (!providerCatalog) return; const modelId = params.modelId?.trim(); return (modelId ? providerCatalog.models.find((candidate) => staticModelIdMatches({ candidateId: candidate.id, provider: params.provider, modelId })) : void 0)?.api ?? providerCatalog.api; } function resolveManifestModelCatalogProviderAlias(params) { const provider = normalizeProviderId(params.provider); if (!provider) return { kind: "none" }; const claims = []; const plugins = listEligibleManifestModelCatalogAliasPlugins({ cfg: params.cfg, plugins: params.plugins }); for (const plugin of plugins) for (const [rawAlias, alias] of Object.entries(plugin.modelCatalog?.aliases ?? {})) { const normalizedAlias = normalizeProviderId(rawAlias); const normalizedTarget = normalizeProviderId(alias.provider); if (normalizedAlias !== provider || !normalizedTarget || !plugin.providers.some((providerId) => normalizeProviderId(providerId) === normalizedTarget)) continue; const hasApplicableSuppression = Boolean(params.modelId?.trim()) && hasUnconditionalManifestModelCatalogSuppression({ provider, modelId: params.modelId, plugin }); const hasEndpointSurface = hasModelCatalogAliasEndpointSurface(alias) || hasConfiguredModelCatalogProviderEndpointSurface({ provider, modelId: params.modelId, cfg: params.cfg }); const transportApi = resolveConfiguredModelCatalogProviderApi({ provider, modelId: params.modelId, cfg: params.cfg }) ?? alias.api ?? resolveManifestAliasTargetApi({ plugin, provider: normalizedTarget, modelId: params.modelId }); const hasTransportOverride = hasModelCatalogAliasTransportOverride(alias); const retainsTransportAlias = hasTransportOverride && hasEndpointSurface && Boolean(transportApi) && !hasApplicableSuppression; const baseUrl = alias.baseUrl?.trim(); claims.push({ incompleteTransport: hasTransportOverride && hasEndpointSurface && !transportApi && !hasApplicableSuppression, targetProvider: normalizedTarget, retainsTransportAlias, transport: { ...transportApi ? { api: transportApi } : {}, ...baseUrl ? { baseUrl } : {} } }); } if (claims.length === 0) return { kind: "none" }; if (claims.length > 1) return { kind: "conflict" }; const claim = claims[0]; if (!claim) return { kind: "none" }; if (claim.incompleteTransport) return { kind: "incomplete-transport" }; if (claim.retainsTransportAlias) return { kind: "transport", transport: claim.transport }; return { kind: "canonical", provider: claim.targetProvider }; } function resolveManifestModelCatalogProviderAliasMetadata(params) { const provider = normalizeProviderId(params.provider); if (!provider) return { provider: params.provider }; const env = params.env ?? process.env; const plugins = (env === process.env ? getCurrentPluginMetadataSnapshot({ config: params.cfg, workspaceDir: params.workspaceDir, env, ...params.cfg === void 0 ? { requireDefaultDiscoveryContext: true } : {} })?.plugins : void 0) ?? loadPluginManifestRegistryCore({ config: params.cfg, workspaceDir: params.workspaceDir, env }).plugins; const resolved = resolveManifestModelCatalogProviderAlias({ provider, modelId: params.modelId, cfg: params.cfg, plugins }); switch (resolved.kind) { case "canonical": return { provider: resolved.provider }; case "transport": return { provider: params.provider, transport: resolved.transport }; case "conflict": case "incomplete-transport": return { provider: params.provider, ambiguous: true }; case "none": return { provider: params.provider }; default: return resolved; } } //#endregion //#region src/agents/embedded-agent-runner/model.static-catalog.ts /** * Resolves bundled static catalog rows for embedded-agent model selection. */ /** * Resolves bundled plugin static model-catalog rows into runtime model records. */ function rowMatchesModel(params) { return params.matchesStaticModelId({ candidateId: params.row.id, provider: params.provider, modelId: params.modelId, rowProvider: params.row.provider }); } function normalizeStaticCatalogInput(input) { const normalizedInput = (input ?? []).filter((item) => item === "text" || item === "image"); return normalizedInput.length > 0 ? normalizedInput : ["text"]; } /** Converts a normalized catalog row into the provider runtime model shape. */ function modelFromStaticCatalogRow(row) { return { id: row.id, name: row.name || row.id, provider: row.provider, api: row.api ?? "openai-responses", baseUrl: row.baseUrl ?? "", reasoning: row.reasoning, input: normalizeStaticCatalogInput(row.input), cost: normalizeResolvedPricing(row.cost ?? {}), contextWindow: row.contextWindow ?? 2e5, contextWindows: row.contextWindows?.map((option) => ({ ...option })), contextWindowDefault: row.contextWindowDefault, contextTokens: row.contextTokens, maxTokens: row.maxTokens ?? 2e5, thinkingLevelMap: row.thinkingLevelMap ? { ...row.thinkingLevelMap } : void 0, headers: row.headers, compat: row.compat, mediaInput: row.mediaInput }; } function completeProviderStaticCatalogModel(model, providerConfig) { return { ...model, name: model.name || model.id, api: model.api ?? providerConfig.api ?? "openai-responses", baseUrl: model.baseUrl ?? "", reasoning: model.reasoning ?? false, input: normalizeStaticCatalogInput(model.input), cost: model.cost ?? normalizeResolvedPricing({}), contextWindow: model.contextWindow ?? 2e5, contextTokens: model.contextTokens, maxTokens: model.maxTokens ?? 2e5, ...providerConfig.authHeader !== void 0 ? { authHeader: providerConfig.authHeader } : {} }; } const defaultBundledStaticCatalogConfig = {}; function resolveBundledStaticCatalogMetadataSnapshot(params) { if (params.metadataSnapshot) return params.metadataSnapshot; const gatewaySnapshot = getGatewayPluginMetadataSnapshot(); if (gatewaySnapshot) return gatewaySnapshot; if (params.env !== process.env) return; return getCurrentPluginMetadataSnapshot({ config: params.cfg, env: params.env, workspaceDir: params.workspaceDir, ...params.workspaceDir === void 0 ? { allowWorkspaceScopedSnapshot: true } : {}, ...params.cfg === void 0 ? { requireDefaultDiscoveryContext: true } : {} }); } function listBundledStaticCatalogPlugins(params, metadataSnapshot) { const normalizedConfig = normalizePluginsConfig(params.cfg?.plugins); return (metadataSnapshot ? metadataSnapshot.plugins.filter((plugin) => plugin.origin === "bundled").map(({ id, providers, modelCatalog }) => ({ id, providers, modelCatalog })) : listOpenClawPluginManifestMetadata(params.env).flatMap((record) => { if (record.origin !== "bundled") return []; const loaded = loadPluginManifest(record.pluginDir); return loaded.ok ? [{ id: loaded.manifest.id, providers: loaded.manifest.providers, modelCatalog: loaded.manifest.modelCatalog }] : []; })).filter((plugin) => Boolean(plugin.modelCatalog) && passesManifestOwnerBasePolicy({ plugin, normalizedConfig })); } function resolveBundledStaticCatalogState(params, metadataSnapshot) { const bundledStaticCatalogStatesByOwner = (metadataSnapshot ? getPluginMetadataSnapshotCache(metadataSnapshot) : getPluginCache()).metadata.staticCatalogStates; const owner = metadataSnapshot ?? params.env; let states = bundledStaticCatalogStatesByOwner.get(owner); if (!states) { states = /* @__PURE__ */ new WeakMap(); bundledStaticCatalogStatesByOwner.set(owner, states); } const config = params.cfg ?? defaultBundledStaticCatalogConfig; const cached = states.get(config); if (cached) return cached; const state = { plugins: listBundledStaticCatalogPlugins(params, metadataSnapshot), plans: /* @__PURE__ */ new Map() }; states.set(config, state); return state; } /** * Prepares a process-stable bundled manifest catalog lookup. * Manifest discovery runs once; provider-specific plans are cached on demand. */ function createBundledStaticCatalogModelResolver(params) { const catalogParams = { cfg: params?.cfg, env: params?.env ?? process.env, ...params?.metadataSnapshot ? { metadataSnapshot: params.metadataSnapshot } : {}, workspaceDir: params?.workspaceDir }; const matchesStaticModelId = params?.metadataSnapshot ? createStaticModelIdMatcher({ manifestPlugins: params.metadataSnapshot }) : staticModelIdMatches; return (lookup) => { const provider = normalizeProviderId(lookup.provider); if (!provider || !lookup.modelId.trim()) return; const metadataSnapshot = resolveBundledStaticCatalogMetadataSnapshot(catalogParams); const state = resolveBundledStaticCatalogState(catalogParams, metadataSnapshot); if (state.plugins.length === 0) return; let plan = state.plans.get(provider); if (!plan) { plan = planEffectiveModelCatalogRows({ registry: { plugins: state.plugins }, config: params?.cfg ?? {}, providerFilter: provider }); state.plans.set(provider, plan); } for (const entry of plan.entries) { if (entry.discovery !== "static" && !(params?.includeRuntimeDiscovery && (entry.discovery === "runtime" || entry.discovery === "refreshable"))) continue; const row = entry.rows.find((candidate) => rowMatchesModel({ row: candidate, provider, modelId: lookup.modelId, matchesStaticModelId })); if (row) return modelFromStaticCatalogRow(row); } }; } /** Resolves one bundled static-catalog model row for provider/model lookup. */ function resolveBundledStaticCatalogModel(params) { return createBundledStaticCatalogModelResolver({ cfg: params.cfg, ...params.env ? { env: params.env } : {}, ...params.includeRuntimeDiscovery !== void 0 ? { includeRuntimeDiscovery: params.includeRuntimeDiscovery } : {}, ...params.metadataSnapshot ? { metadataSnapshot: params.metadataSnapshot } : {}, ...params.workspaceDir !== void 0 ? { workspaceDir: params.workspaceDir } : {} })(params); } function resolveBundledProviderStaticCatalogPluginIds(params) { const pluginIds = resolveOwningPluginIdsForProviderRef({ provider: params.provider, config: params.cfg, workspaceDir: params.workspaceDir, env: params.env, ...params.metadataSnapshot ? { metadataSnapshot: params.metadataSnapshot } : {} }); if (!pluginIds || pluginIds.length === 0) return []; const activatablePluginIds = resolveActivatableProviderOwnerPluginIds({ pluginIds, config: params.cfg, workspaceDir: params.workspaceDir, env: params.env, ...params.metadataSnapshot ? { registry: params.metadataSnapshot.index, manifestRegistry: params.metadataSnapshot.manifestRegistry } : {} }); if (activatablePluginIds.length === 0) return []; const bundledPluginIds = new Set(resolveBundledProviderCompatPluginIds({ config: params.cfg, workspaceDir: params.workspaceDir, env: params.env, ...params.metadataSnapshot ? { manifestRegistry: params.metadataSnapshot.manifestRegistry } : {} })); return activatablePluginIds.filter((pluginId) => bundledPluginIds.has(pluginId)).toSorted(); } async function loadBundledProviderStaticCatalogModels(params) { const pluginIds = new Set(params.pluginIds); const preparedProviders = (params.preparedStaticProviderCatalog?.providers ?? []).filter((provider) => provider.pluginId !== void 0 && pluginIds.has(provider.pluginId)); const preparedPluginIds = new Set(preparedProviders.flatMap((provider) => provider.pluginId ? [provider.pluginId] : [])); const missingPluginIds = params.pluginIds.filter((pluginId) => !preparedPluginIds.has(pluginId)); const discoveredProviders = missingPluginIds.length === 0 ? [] : await resolveRuntimePluginDiscoveryProviders({ config: params.cfg, workspaceDir: params.workspaceDir, env: params.env, onlyPluginIds: missingPluginIds, includeUntrustedWorkspacePlugins: false, requireCompleteDiscoveryEntryCoverage: true, discoveryEntriesOnly: true, includeManifestModelCatalogProviders: false, ...params.pluginMetadataSnapshot ? { pluginMetadataSnapshot: params.pluginMetadataSnapshot } : {} }); const providers = [...preparedProviders, ...discoveredProviders]; const preparedEntries = params.preparedStaticProviderCatalog?.entries.filter(({ provider }) => provider.pluginId !== void 0 && pluginIds.has(provider.pluginId)); const preparedResults = preparedEntries ? new Map(preparedEntries.map(({ provider, result }) => [`${provider.pluginId ?? ""}\0${normalizeProviderId(provider.id)}`, result])) : void 0; const modelsByProvider = /* @__PURE__ */ new Map(); for (const catalogProvider of providers) { const preparedResultKey = `${catalogProvider.pluginId ?? ""}\0${normalizeProviderId(catalogProvider.id)}`; const result = preparedResults?.has(preparedResultKey) ? preparedResults.get(preparedResultKey) : await runProviderStaticCatalog({ provider: catalogProvider }); const normalized = normalizePluginDiscoveryResult({ provider: catalogProvider, result }); for (const [providerIdRaw, providerConfig] of Object.entries(normalized)) { const provider = normalizeProviderId(providerIdRaw); if (!provider || !Array.isArray(providerConfig.models) || providerConfig.models.length === 0) continue; const models = modelsByProvider.get(provider) ?? []; models.push(...buildInlineProviderModels({ [provider]: providerConfig }, { providerMetadataOwners: params.providerMetadataOwners }).map((model) => completeProviderStaticCatalogModel(model, providerConfig))); modelsByProvider.set(provider, models); } } return modelsByProvider; } /** Loads all enabled bundled provider static-catalog rows without live discovery or writes. */ async function loadBundledProviderStaticCatalogContextModels(params = {}) { const env = params.env ?? process.env; const metadataSnapshot = resolveBundledStaticCatalogMetadataSnapshot({ cfg: params.cfg, env, ...params.metadataSnapshot ? { metadataSnapshot: params.metadataSnapshot } : {}, workspaceDir: params.workspaceDir }); const discoveryEntryPluginIds = new Set((metadataSnapshot?.manifestRegistry?.plugins ?? loadPluginManifestRegistryCore({ config: params.cfg, workspaceDir: params.workspaceDir, env }).plugins).flatMap((plugin) => plugin.origin === "bundled" && plugin.providerDiscoverySource ? [plugin.id] : [])); const providerScopedPluginIds = params.providerIds?.flatMap((provider) => resolveBundledProviderStaticCatalogPluginIds({ provider, cfg: params.cfg, workspaceDir: params.workspaceDir, env, ...metadataSnapshot ? { metadataSnapshot } : {} })); const candidatePluginIds = providerScopedPluginIds === void 0 ? resolveBundledProviderCompatPluginIds({ config: params.cfg, workspaceDir: params.workspaceDir, env, ...metadataSnapshot ? { manifestRegistry: metadataSnapshot.manifestRegistry } : {} }) : providerScopedPluginIds; const pluginIds = [...new Set(candidatePluginIds)].filter((pluginId) => discoveryEntryPluginIds.has(pluginId)).toSorted((left, right) => left.localeCompare(right)); if (pluginIds.length === 0) return []; return (await Promise.allSettled(pluginIds.map(async (pluginId) => await loadBundledProviderStaticCatalogModels({ pluginIds: [pluginId], cfg: params.cfg, workspaceDir: params.workspaceDir, env, ...params.preparedStaticProviderCatalog ? { preparedStaticProviderCatalog: params.preparedStaticProviderCatalog } : {}, ...metadataSnapshot ? { providerMetadataOwners: metadataSnapshot.owners } : {}, ...metadataSnapshot ? { pluginMetadataSnapshot: metadataSnapshot } : {} })))).flatMap((result) => result.status === "fulfilled" ? [...result.value.values()].flat() : []); } function createScopedBundledProviderStaticCatalogModelResolver(params = {}) { const env = params.env ?? process.env; const matchesStaticModelId = params.metadataSnapshot ? createStaticModelIdMatcher({ manifestPlugins: params.metadataSnapshot }) : staticModelIdMatches; const pluginCatalogs = /* @__PURE__ */ new Map(); const providerPluginIds = /* @__PURE__ */ new Map(); return async (lookup, scopedPluginIds) => { const provider = normalizeProviderId(lookup.provider); if (!provider || !lookup.modelId.trim()) return; let pluginIds = scopedPluginIds; if (!pluginIds) pluginIds = providerPluginIds.get(provider); if (!pluginIds) { pluginIds = resolveBundledProviderStaticCatalogPluginIds({ provider, cfg: params.cfg, workspaceDir: params.workspaceDir, env, ...params.metadataSnapshot ? { metadataSnapshot: params.metadataSnapshot } : {} }); providerPluginIds.set(provider, pluginIds); } if (pluginIds.length === 0) return; const catalogKey = pluginIds.join("\0"); let catalog = pluginCatalogs.get(catalogKey); if (!catalog) { catalog = loadBundledProviderStaticCatalogModels({ pluginIds, cfg: params.cfg, workspaceDir: params.workspaceDir, env, ...params.preparedStaticProviderCatalog ? { preparedStaticProviderCatalog: params.preparedStaticProviderCatalog } : {}, ...params.metadataSnapshot ? { providerMetadataOwners: params.metadataSnapshot.owners, pluginMetadataSnapshot: params.metadataSnapshot } : {} }); pluginCatalogs.set(catalogKey, catalog); } return ((await catalog).get(provider) ?? []).find((candidate) => matchesStaticModelId({ candidateId: candidate.id, provider, modelId: lookup.modelId })); }; } function resolveOwnedNestedProviderLookup(params) { const provider = normalizeProviderId(params.lookup.provider); const modelId = params.lookup.modelId.trim(); const slash = modelId.indexOf("/"); if (!provider || slash <= 0 || slash >= modelId.length - 1) return; const nestedProvider = normalizeProviderId(modelId.slice(0, slash)); const nestedModelId = modelId.slice(slash + 1).trim(); if (!nestedProvider || nestedProvider === provider || !nestedModelId) return; const resolveBundledOwners = (candidateProvider) => resolveBundledProviderStaticCatalogPluginIds({ provider: candidateProvider, cfg: params.resolverParams.cfg, workspaceDir: params.resolverParams.workspaceDir, env: params.env, ...params.resolverParams.metadataSnapshot ? { metadataSnapshot: params.resolverParams.metadataSnapshot } : {} }); const nestedProviderOwners = new Set(resolveBundledOwners(nestedProvider)); const sharedPluginIds = resolveBundledOwners(provider).filter((pluginId) => nestedProviderOwners.has(pluginId)); if (sharedPluginIds.length === 0) return; return { lookup: { provider: nestedProvider, modelId: nestedModelId }, pluginIds: sharedPluginIds }; } /** * Prepares context-only provider catalog lookup. * Nested provider refs may reuse metadata only when both providers have the same plugin owner. */ function createBundledProviderStaticCatalogContextResolver(params = {}) { const env = params.env ?? process.env; const resolveModel = createScopedBundledProviderStaticCatalogModelResolver(params); return async (lookup) => { const exactModel = await resolveModel(lookup); const nested = exactModel ? void 0 : resolveOwnedNestedProviderLookup({ lookup, resolverParams: params, env }); const model = exactModel ?? (nested ? await resolveModel(nested.lookup, nested.pluginIds) : void 0); if (!model) return; return { ...typeof model.contextWindow === "number" && model.contextWindow > 0 ? { contextWindow: model.contextWindow } : {}, ...typeof model.contextTokens === "number" && model.contextTokens > 0 ? { contextTokens: model.contextTokens } : {} }; }; } /** * Resolves one bundled provider static-catalog model row for provider/model lookup. * * Some bundled providers expose their canonical offline rows through * `providerCatalogEntry` instead of manifest `modelCatalog`. This keeps the * skip-discovery fallback aligned with model list/inspect without running live * discovery or untrusted workspace plugins. */ async function resolveBundledProviderStaticCatalogModel(params) { return createScopedBundledProviderStaticCatalogModelResolver(params)(params); } //#endregion export { resolveBundledStaticCatalogModel as a, staticModelIdMatches as c, resolveBundledProviderStaticCatalogModel as i, createBundledStaticCatalogModelResolver as n, resolveManifestModelCatalogProviderAliasMetadata as o, loadBundledProviderStaticCatalogContextModels as r, createStaticModelIdMatcher as s, createBundledProviderStaticCatalogContextResolver as t };