openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
572 lines (571 loc) • 27.4 kB
JavaScript
import { d as getPluginMetadataSnapshotCache, o as getPluginCache } from "./plugin-cache-BABafcXD.mjs";
import { n as findNormalizedProviderValue, r as normalizeProviderId } from "./provider-id-D1VImdKk.mjs";
import { i as getGatewayPluginMetadataSnapshot } from "./current-plugin-metadata-state-CfLPTM0e.mjs";
import { u as normalizePluginsConfig } from "./config-state-DY_WJYue.mjs";
import { r as loadPluginManifest } from "./manifest-BXjFCp0F.mjs";
import { t as loadPluginManifestRegistryCore } from "./manifest-registry-fNbgdLOV.mjs";
import { i as getCurrentPluginMetadataSnapshot } from "./current-plugin-metadata-snapshot-BF6RZfMc.mjs";
import "./defaults-Jag53zwP.mjs";
import { i as projectModelProviderConfig, r as findConfiguredProviderModel } from "./model-provider-config-C5LPYz3z.mjs";
import { n as createStaticProviderModelIdNormalizer, s as normalizeStaticProviderModelId } from "./model-ref-shared-KBg0y299.mjs";
import { i as passesManifestOwnerBasePolicy, n as isActivatedManifestOwner, r as isBundledManifestOwner, t as hasExplicitManifestOwnerTrust } from "./manifest-owner-policy-B2H7kBCF.mjs";
import { n as modelTransportRoutesMatch } from "./model-compat-catalog-Dfj3P1T4.mjs";
import { r as planManifestModelCatalogSuppressions } from "./manifest-planner-C-nOh69Z.mjs";
import { t as listOpenClawPluginManifestMetadata } from "./manifest-metadata-scan-CKbivtze.mjs";
import { n as indexFirstByKey, t as dedupeByKey } from "./dedupe-by-key-DnqEVrst.mjs";
import { r as isProviderCatalogSourceAllowed } from "./provider-config-owner-2NQ6j_Jm.mjs";
import { t as planEffectiveModelCatalogRows } from "./model-catalog-ChjLpeN0.mjs";
import { r as normalizeResolvedPricing } from "./usage-cost-Va5dwVFW.mjs";
import "./src-UF9QYDzr.mjs";
import { f as resolveOwningPluginIdsForProviderRef, n as resolveActivatableProviderOwnerPluginIds, r as resolveBundledProviderCompatPluginIds } from "./providers-VBHtNEs9.mjs";
import { c as runProviderStaticCatalog, n as normalizePluginDiscoveryResult, o as resolveRuntimePluginDiscoveryProviders } from "./provider-discovery-BkPgLJBP.mjs";
import { m as normalizeProviderTransportWithPlugin } from "./provider-runtime-D-Xv0Y4z.mjs";
import { i as resolveProviderModelInput, n as completeInlineProviderModel, r as normalizeResolvedTransportApi, t as buildInlineProviderModels } from "./model.inline-provider-Dp1eODYF.mjs";
import { r as resolveBuiltInModelSuppressionFromManifest } from "./model-suppression-D8cRxvyv.mjs";
//#region src/agents/embedded-agent-runner/model.provider-transport.ts
function resolveProviderTransport(params) {
const normalized = (params.runtimeHooks ?? { normalizeProviderTransportWithPlugin }).normalizeProviderTransportWithPlugin({
provider: params.provider,
...params.modelId ? { modelId: params.modelId } : {},
config: params.cfg,
workspaceDir: params.workspaceDir,
context: {
config: params.cfg,
workspaceDir: params.workspaceDir,
provider: params.provider,
...params.modelId ? { modelId: params.modelId } : {},
api: params.api,
baseUrl: params.baseUrl
}
});
return {
api: normalizeResolvedTransportApi(normalized?.api ?? params.api),
baseUrl: normalized?.baseUrl ?? params.baseUrl
};
}
//#endregion
//#region src/agents/embedded-agent-runner/model.static-catalog-row.ts
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: resolveProviderModelInput({ input: 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
};
}
//#endregion
//#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);
}
function createPreparedConfiguredRuntimeModelLookup(models, metadataSnapshot) {
const normalizeModelId = createStaticProviderModelIdNormalizer({ manifestPlugins: metadataSnapshot });
const exactKey = (provider, modelId) => JSON.stringify([normalizeProviderId(provider), modelId]);
const staticKey = (provider, modelId) => exactKey(provider, normalizeModelId(provider, modelId).trim().toLowerCase());
const exact = indexFirstByKey(models, ({ provider, modelId }) => exactKey(provider, modelId));
const equivalent = indexFirstByKey(models, ({ provider, modelId }) => staticKey(provider, modelId));
return (provider, modelId) => (exact.get(exactKey(provider, modelId)) ?? equivalent.get(staticKey(provider, modelId)))?.model;
}
//#endregion
//#region src/agents/embedded-agent-runner/model.manifest-alias.ts
function resolveConfiguredModelCatalogProviderRoute(params) {
const provider = normalizeProviderId(params.provider);
const config = provider ? findNormalizedProviderValue(params.cfg?.models?.providers, provider) : void 0;
const modelId = params.modelId?.trim() ?? "";
const models = config?.models ?? [];
const matches = (candidate) => Boolean(provider && modelId) && staticModelIdMatches({
candidateId: candidate.id,
provider,
modelId
});
return {
hasEndpoint: Boolean(config?.baseUrl?.trim()) || models.some((model) => Boolean(model.baseUrl?.trim()) && matches(model)),
api: models.find(matches)?.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 resolveManifestAliasTargetApi(params) {
const providerCatalog = findNormalizedProviderValue(params.plugin.modelCatalog?.providers, params.provider);
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 { provider: params.provider };
const claims = [];
const normalizedConfig = normalizePluginsConfig(params.cfg?.plugins);
for (const plugin of params.plugins) {
if (!isActivatedManifestOwner({
plugin,
normalizedConfig,
rootConfig: params.cfg
}) || !(isBundledManifestOwner(plugin) || plugin.origin === "config" || hasExplicitManifestOwnerTrust({
plugin,
normalizedConfig
}))) continue;
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 configuredRoute = resolveConfiguredModelCatalogProviderRoute({
provider,
modelId: params.modelId,
cfg: params.cfg
});
const hasEndpointSurface = Boolean(alias.baseUrl?.trim()) || configuredRoute.hasEndpoint;
const transportApi = configuredRoute.api ?? alias.api ?? resolveManifestAliasTargetApi({
plugin,
provider: normalizedTarget,
modelId: params.modelId
});
if (Boolean(alias.api?.trim() || alias.baseUrl?.trim()) && hasEndpointSurface && !hasApplicableSuppression) {
const baseUrl = alias.baseUrl?.trim();
claims.push(transportApi ? {
provider: params.provider,
transport: {
api: transportApi,
...baseUrl ? { baseUrl } : {}
}
} : {
provider: params.provider,
ambiguous: true
});
} else claims.push({ provider: normalizedTarget });
}
}
return claims.length > 1 ? {
provider: params.provider,
ambiguous: true
} : claims[0] ?? { provider: params.provider };
}
function resolveManifestModelCatalogProviderAliasMetadata(params) {
if (!normalizeProviderId(params.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;
return resolveManifestModelCatalogProviderAlias({
...params,
plugins
});
}
//#endregion
//#region src/agents/embedded-agent-runner/model.static-catalog.ts
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") : listOpenClawPluginManifestMetadata(params.env).flatMap((record) => {
if (record.origin !== "bundled") return [];
const loaded = loadPluginManifest(record.pluginDir);
return loaded.ok ? [loaded.manifest] : [];
})).map(({ id, providers, modelCatalog, providerEndpoints }) => ({
id,
providers,
modelCatalog,
providerEndpoints
})).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(),
donorRows: /* @__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;
const getPlan = (providerFilter) => {
const key = providerFilter ?? "";
let plan = state.plans.get(key);
if (!plan) {
plan = planEffectiveModelCatalogRows({
registry: { plugins: state.plugins },
config: params?.cfg ?? {},
...providerFilter ? { providerFilter } : {}
});
state.plans.set(key, plan);
}
return plan;
};
const acceptsDiscovery = (discovery) => discovery === "static" || params?.includeRuntimeDiscovery && (discovery === "runtime" || discovery === "refreshable");
const plan = getPlan(provider);
for (const entry of plan.entries) {
if (!acceptsDiscovery(entry.discovery)) continue;
const row = entry.rows.find((candidate) => matchesStaticModelId({
candidateId: candidate.id,
provider,
modelId: lookup.modelId,
rowProvider: candidate.provider
}));
if (row) return modelFromStaticCatalogRow(row);
}
const configured = findNormalizedProviderValue(params?.cfg?.models?.providers, provider);
if (!configured?.api || !configured.baseUrl || findConfiguredProviderModel(configured, provider, lookup.modelId) || metadataSnapshot?.owners.providers.has(provider) || state.plugins.some((plugin) => plugin.providers?.some((id) => normalizeProviderId(id) === provider) || findNormalizedProviderValue(plugin.modelCatalog?.providers, provider) || findNormalizedProviderValue(plugin.modelCatalog?.aliases, provider))) return;
const configuredRoute = {
api: configured.api,
baseUrl: configured.baseUrl
};
const donorKey = JSON.stringify([
provider,
lookup.modelId.trim(),
params?.includeRuntimeDiscovery === true
]);
const cachedDonor = state.donorRows.get(donorKey);
if (cachedDonor !== void 0) return cachedDonor ? {
...modelFromStaticCatalogRow(cachedDonor),
provider
} : void 0;
const findDonor = () => {
const donors = getPlan();
let donor;
for (const entry of donors.entries) {
if (!acceptsDiscovery(entry.discovery)) continue;
for (const row of entry.rows) {
if (row.id !== lookup.modelId.trim()) continue;
const route = resolveProviderTransport({
provider: row.provider,
modelId: row.id,
...configuredRoute,
cfg: projectModelProviderConfig(params?.cfg, row.provider, configuredRoute),
workspaceDir: params?.workspaceDir
});
if (!route.baseUrl || !modelTransportRoutesMatch(row, route)) continue;
if (donor || donors.conflicts.some((conflict) => conflict.provider === row.provider && conflict.modelId === row.id) || resolveBuiltInModelSuppressionFromManifest({
provider: row.provider,
id: row.id,
baseUrl: route.baseUrl,
config: projectModelProviderConfig(params?.cfg, row.provider, {
api: row.api,
baseUrl: route.baseUrl
}),
workspaceDir: params?.workspaceDir,
metadataSnapshot
})?.suppress) return;
donor = row;
}
}
return donor;
};
const donor = findDonor();
state.donorRows.set(donorKey, donor ?? null);
return donor ? {
...modelFromStaticCatalogRow(donor),
provider
} : void 0;
};
}
/** Resolves one bundled static-catalog model row for provider/model lookup. */
function resolveBundledStaticCatalogModel(params) {
return createBundledStaticCatalogModelResolver(params)(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.metadataSnapshot ? { pluginMetadataSnapshot: params.metadataSnapshot } : {}
});
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, providerConfigs }) => [`${provider.pluginId ?? ""}\0${normalizeProviderId(provider.id)}`, providerConfigs])) : void 0;
const modelsByProvider = /* @__PURE__ */ new Map();
for (const catalogProvider of providers) {
const plugin = params.metadataSnapshot?.manifestRegistry.plugins.find((candidate) => candidate.id === (catalogProvider.pluginId ?? catalogProvider.id));
const includeProvider = (provider) => isProviderCatalogSourceAllowed({
provider,
plugin,
config: params.cfg
});
const soleStaticCatalog = providers.filter((candidate) => (candidate.pluginId ?? normalizeProviderId(candidate.id)) === (catalogProvider.pluginId ?? normalizeProviderId(catalogProvider.id)) && candidate.staticCatalog).length === 1;
if (![
catalogProvider.id,
...catalogProvider.aliases ?? [],
...catalogProvider.hookAliases ?? [],
...soleStaticCatalog ? plugin?.providers ?? [] : []
].some(includeProvider)) continue;
const preparedResultKey = `${catalogProvider.pluginId ?? ""}\0${normalizeProviderId(catalogProvider.id)}`;
const normalized = preparedResults?.get(preparedResultKey) ?? normalizePluginDiscoveryResult({
provider: catalogProvider,
result: await runProviderStaticCatalog({ provider: catalogProvider })
});
for (const [providerIdRaw, providerConfig] of Object.entries(normalized)) {
const provider = normalizeProviderId(providerIdRaw);
if (!provider || !includeProvider(provider) || !Array.isArray(providerConfig.models) || providerConfig.models.length === 0) continue;
const models = modelsByProvider.get(provider) ?? [];
models.push(...buildInlineProviderModels({ [provider]: providerConfig }, { providerMetadataOwners: params.metadataSnapshot?.owners }).map((model) => completeInlineProviderModel(model, providerConfig)));
modelsByProvider.set(provider, models);
}
}
return modelsByProvider;
}
/** Reads static rows from discovery entries and captured owners without activating runtimes. */
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 preparedStaticProviderCatalog = {
providers: dedupeByKey([...params.preparedStaticProviderCatalog?.providers ?? [], ...(params.registeredProviders ?? []).map(({ pluginId, provider }) => Object.assign({}, provider, { pluginId }))], (provider) => `${provider.pluginId}\0${provider.id}`),
entries: params.preparedStaticProviderCatalog?.entries ?? []
};
const staticCatalogPluginIds = new Set((metadataSnapshot?.manifestRegistry?.plugins ?? loadPluginManifestRegistryCore({
config: params.cfg,
workspaceDir: params.workspaceDir,
env
}).plugins).flatMap((plugin) => plugin.origin === "bundled" && plugin.providerDiscoverySource ? [plugin.id] : []));
for (const provider of preparedStaticProviderCatalog.providers) if (provider.pluginId && provider.staticCatalog) staticCatalogPluginIds.add(provider.pluginId);
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) => staticCatalogPluginIds.has(pluginId)).toSorted((left, right) => left.localeCompare(right));
if (pluginIds.length === 0) return [];
return (await Promise.allSettled(pluginIds.map((pluginId) => loadBundledProviderStaticCatalogModels({
pluginIds: [pluginId],
...params,
env,
preparedStaticProviderCatalog,
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 ?? 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,
...params,
env
});
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 } : {},
...model.contextWindowSource ? { contextWindowSource: model.contextWindowSource } : {}
};
};
}
/**
* 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, createStaticModelIdMatcher as c, resolveBundledProviderStaticCatalogModel as i, resolveProviderTransport as l, createBundledStaticCatalogModelResolver as n, resolveManifestModelCatalogProviderAliasMetadata as o, loadBundledProviderStaticCatalogContextModels as r, createPreparedConfiguredRuntimeModelLookup as s, createBundledProviderStaticCatalogContextResolver as t };