UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

223 lines (222 loc) 8.81 kB
import { a as normalizeLowercaseStringOrEmpty, c as normalizeOptionalString, s as normalizeOptionalLowercaseString } from "./string-coerce-mnp54Vah.js"; import { o as isRecord } from "./record-coerce-DHZ4bFlT.js"; import { n as normalizeAgentModelRefForConfig, t as normalizeAgentModelMapForConfig } from "./model-input-B2zxl6MM.js"; import { R as normalizeProviderConfigForConfigDefaults } from "./io-Gi7-pyU-.js"; import { r as normalizeConfiguredProviderCatalogModelId } from "./model-ref-shared-CqcindZs.js"; import { o as normalizeProviderId } from "./model-selection-normalize-roKDxQ9_.js"; import "./model-selection-CA_65iXi.js"; //#region src/plugins/provider-auth-choice-helpers.ts function resolveProviderMatch(providers, rawProvider) { const raw = normalizeOptionalString(rawProvider); if (!raw) return null; const normalized = normalizeProviderId(raw); return providers.find((provider) => normalizeProviderId(provider.id) === normalized) ?? providers.find((provider) => provider.aliases?.some((alias) => normalizeProviderId(alias) === normalized) ?? false) ?? null; } function pickAuthMethod(provider, rawMethod) { const raw = normalizeOptionalString(rawMethod); if (!raw) return null; const normalized = normalizeOptionalLowercaseString(raw); return provider.auth.find((method) => normalizeLowercaseStringOrEmpty(method.id) === normalized) ?? provider.auth.find((method) => normalizeLowercaseStringOrEmpty(method.label) === normalized) ?? null; } const BLOCKED_MERGE_KEYS = new Set([ "__proto__", "prototype", "constructor" ]); function sanitizeConfigPatchValue(value) { if (Array.isArray(value)) return value.map((entry) => sanitizeConfigPatchValue(entry)); if (!isRecord(value)) return value; const next = {}; for (const [key, nestedValue] of Object.entries(value)) { if (BLOCKED_MERGE_KEYS.has(key)) continue; next[key] = sanitizeConfigPatchValue(nestedValue); } return next; } function mergeConfigPatch(base, patch) { if (!isRecord(base) || !isRecord(patch)) return sanitizeConfigPatchValue(patch); const next = { ...base }; for (const [key, value] of Object.entries(patch)) { if (BLOCKED_MERGE_KEYS.has(key)) continue; const existing = next[key]; if (isRecord(existing) && isRecord(value)) next[key] = mergeConfigPatch(existing, value); else next[key] = sanitizeConfigPatchValue(value); } return next; } function deleteUndefinedPatchLeaves(target, patch) { if (!isRecord(target) || !isRecord(patch)) return target; const targetRecord = target; for (const [key, value] of Object.entries(patch)) { if (value === void 0) { delete targetRecord[key]; continue; } deleteUndefinedPatchLeaves(targetRecord[key], value); } return target; } function normalizeAgentModelConfigForWrite(value) { if (typeof value === "string") return normalizeAgentModelRefForConfig(value); if (!isRecord(value)) return value; const next = { ...value }; if (typeof next.primary === "string") next.primary = normalizeAgentModelRefForConfig(next.primary); if (Array.isArray(next.fallbacks)) next.fallbacks = next.fallbacks.map((fallback) => typeof fallback === "string" ? normalizeAgentModelRefForConfig(fallback) : fallback); return next; } function normalizeAgentModelMapForWrite(value) { if (!isRecord(value)) return value; return normalizeAgentModelMapForConfig(value); } function normalizeProviderCatalogModelIdForWrite(provider, modelId) { const trimmed = modelId.trim(); if (!trimmed) return trimmed; return normalizeConfiguredProviderCatalogModelId(normalizeProviderId(provider), trimmed); } function normalizeProviderCatalogModelIdsForWrite(provider, providerConfig) { const models = providerConfig.models; if (!Array.isArray(models) || models.length === 0) return providerConfig; let mutated = false; const nextModels = models.map((model) => { const nextId = normalizeProviderCatalogModelIdForWrite(provider, model.id); if (nextId === model.id) return model; mutated = true; return Object.assign({}, model, { id: nextId }); }); return mutated ? { ...providerConfig, models: nextModels } : providerConfig; } function normalizeModelProviderConfigsForWrite(cfg) { const providers = cfg.models?.providers; if (!providers) return cfg; let mutated = false; const nextProviders = { ...providers }; for (const [provider, providerConfig] of Object.entries(providers)) { const normalizedProviderConfig = normalizeProviderCatalogModelIdsForWrite(provider, normalizeProviderConfigForConfigDefaults({ provider, providerConfig })); if (normalizedProviderConfig === providerConfig) continue; nextProviders[provider] = normalizedProviderConfig; mutated = true; } if (!mutated) return cfg; return { ...cfg, models: { ...cfg.models, providers: nextProviders } }; } function normalizeAgentListForWrite(value) { if (!Array.isArray(value)) return value; let mutated = false; const next = value.map((agent) => { if (!isRecord(agent)) return agent; let nextAgent = agent; if (Object.hasOwn(agent, "model")) { const normalizedModel = normalizeAgentModelConfigForWrite(agent.model); if (normalizedModel !== agent.model) { nextAgent = { ...nextAgent, model: normalizedModel }; mutated = true; } } if (Object.hasOwn(agent, "models")) { const normalizedModels = normalizeAgentModelMapForWrite(agent.models); if (normalizedModels !== agent.models) { nextAgent = { ...nextAgent, models: normalizedModels }; mutated = true; } } return nextAgent; }); return mutated ? next : value; } function normalizeConfigModelRefsForWrite(cfg) { const providerNormalized = normalizeModelProviderConfigsForWrite(cfg); const defaults = providerNormalized.agents?.defaults; const agentsList = providerNormalized.agents?.list; let nextDefaults = defaults; if (defaults) { nextDefaults = { ...defaults }; if (defaults.model !== void 0) nextDefaults.model = normalizeAgentModelConfigForWrite(defaults.model); if (defaults.models !== void 0) nextDefaults.models = normalizeAgentModelMapForWrite(defaults.models); } const nextAgentsList = normalizeAgentListForWrite(agentsList); if (nextDefaults === defaults && nextAgentsList === agentsList) return providerNormalized; return { ...providerNormalized, agents: { ...providerNormalized.agents, ...nextDefaults ? { defaults: nextDefaults } : {}, ...nextAgentsList !== void 0 ? { list: nextAgentsList } : {} } }; } function applyProviderAuthConfigPatch(cfg, patch, options) { const merged = normalizeConfigModelRefsForWrite(deleteUndefinedPatchLeaves(mergeConfigPatch(cfg, patch), patch)); if (!options?.replaceDefaultModels || !isRecord(patch)) return merged; const patchModels = patch.agents?.defaults?.models; if (!isRecord(patchModels)) return merged; return normalizeConfigModelRefsForWrite({ ...merged, agents: { ...merged.agents, defaults: { ...merged.agents?.defaults, models: sanitizeConfigPatchValue(patchModels) } } }); } /** * Restore `agents.defaults.model` after a provider auth config merge when the user did not pass * `--set-default`, so `applyConfig` patches cannot replace the primary without an explicit opt-in. */ function restorePriorAgentsDefaultsModelUnlessOptIn(params) { if (params.setDefault || params.priorAgentsDefaultsModel === void 0) return params.cfg; return { ...params.cfg, agents: { ...params.cfg.agents, defaults: { ...params.cfg.agents?.defaults, model: params.priorAgentsDefaultsModel } } }; } function applyDefaultModel(cfg, model, opts) { const normalizedModel = normalizeAgentModelRefForConfig(model); const models = { ...normalizeAgentModelMapForConfig(cfg.agents?.defaults?.models ?? {}) }; models[normalizedModel] = models[normalizedModel] ?? {}; const existingModel = cfg.agents?.defaults?.model; const existingPrimary = typeof existingModel === "string" ? existingModel : existingModel && typeof existingModel === "object" ? existingModel.primary : void 0; const normalizedExistingPrimary = existingPrimary ? normalizeAgentModelRefForConfig(existingPrimary) : void 0; const existingFallbacks = existingModel && typeof existingModel === "object" && "fallbacks" in existingModel ? existingModel.fallbacks?.map((fallback) => normalizeAgentModelRefForConfig(fallback)) : void 0; return { ...cfg, agents: { ...cfg.agents, defaults: { ...cfg.agents?.defaults, models, model: { ...existingFallbacks ? { fallbacks: existingFallbacks } : void 0, primary: opts?.preserveExistingPrimary === true ? normalizedExistingPrimary ?? normalizedModel : normalizedModel } } } }; } //#endregion export { restorePriorAgentsDefaultsModelUnlessOptIn as a, resolveProviderMatch as i, applyProviderAuthConfigPatch as n, pickAuthMethod as r, applyDefaultModel as t };