UNPKG

openclaw

Version:

Multi-channel AI gateway with extensible messaging integrations

231 lines (230 loc) 10.7 kB
import { l as normalizeOptionalString } from "./string-coerce-CIXf7egm.js"; import { r as normalizeProviderId } from "./provider-id-DMd-TDFp.js"; import { a as resolveMergedModelProviderModels, r as resolveMergedModelProviderConfig, t as createModelProviderRouteOverrideResolver } from "./model-provider-config-DX4Bzd5F.js"; import { t as projectConfigOntoRuntimeSourceSnapshot } from "./runtime-source-projection-DOHmC11j.js"; import { r as resolveProviderModelRoutes } from "./provider-model-routes-jLTliGaX.js"; import { a as normalizeOptionalAgentRuntimeId, r as isDefaultAgentRuntimeId } from "./agent-runtime-id-BpfvnoN1.js"; import { y as resolveSessionAgentIds } from "./agent-scope-DbtJyKUL.js"; import { t as canonicalizeProviderModelId } from "./provider-model-route-zfHlXKpI.js"; import { f as hasAuthoredProviderRequestParams } from "./openai-routing-Ex_3E9TF.js"; import { t as resolveAgentHarnessPolicy } from "./policy-D9i1QMuw.js"; import { n as getRegisteredAgentHarness, r as listRegisteredAgentHarnesses } from "./registry-D1_C7waJ.js"; import { t as resolveAgentHarnessAutoSelectionHint } from "./auto-selection-Br-mlD8Y.js"; //#region src/agents/harness/support.ts /** Projects one prepared auth attempt into a secret-free native-runtime support fact. */ function resolveAgentHarnessPreparedAuthSupport(params) { const plan = params.plan; if (!plan) return; return { source: params.source ?? (plan.forwardedAuthProfileId ? "profile" : plan.selectedAuthMode ? "direct" : plan.harnessAuthProvider ? "harness" : "none"), ...plan.selectedAuthMode ? { mode: plan.selectedAuthMode } : {}, ...plan.modelRoute ? { requirement: plan.modelRoute.authRequirement } : {} }; } /** Projects the concrete or deferred prepared route into native-runtime support facts. */ function resolveAgentHarnessPreparedRouteSupport(plan) { const support = plan?.modelRoute ?? plan?.deferredRouteSupport; return support ? { requestTransportOverrides: support.requestTransportOverrides, runtimePolicy: support.runtimePolicy } : {}; } /** Projects one prepared compaction attempt into secret-free harness support facts. */ function projectPreparedModelProvider(params) { const route = params.plan?.modelRoute; return { api: route?.api ?? params.model?.api, baseUrl: route?.baseUrl ?? params.model?.baseUrl, ...resolveAgentHarnessPreparedRouteSupport(params.plan), ...params.plan ? { preparedAuth: resolveAgentHarnessPreparedAuthSupport({ plan: params.plan, source: params.attemptKind === "implicit" ? void 0 : params.attemptKind }) } : {} }; } /** Builds the provider/model facts passed to registered harness support probes. */ function buildAgentHarnessSupportContext(params) { const providerConfig = resolveMergedModelProviderConfig(params.config, params.provider); const authoredConfig = params.config ? projectConfigOntoRuntimeSourceSnapshot(params.config) : void 0; const modelId = params.modelId ? normalizeModelId(params.provider, params.modelId) : void 0; const modelConfig = modelId ? resolveMergedModelProviderModels({ models: providerConfig?.models, normalizeModelId: (configuredModelId) => normalizeModelId(params.provider, configuredModelId) }).get(modelId) : void 0; const agentId = params.config && (params.agentId?.trim() || params.sessionKey?.trim()) ? resolveSessionAgentIds({ config: params.config, agentId: params.agentId, sessionKey: params.sessionKey }).sessionAgentId : params.agentId; const hasConfiguredProviderRequestParams = hasAuthoredProviderRequestParams({ config: params.config, provider: params.provider, modelId: params.modelId, agentId }); const configuredModelProvider = providerConfig ? { api: modelConfig?.api ?? providerConfig.api ?? "openai-responses", baseUrl: modelConfig?.baseUrl ?? providerConfig.baseUrl, azureApiVersion: normalizeOptionalString(modelConfig?.params?.azureApiVersion ?? providerConfig.params?.azureApiVersion), request: providerConfig.request, requestTransportOverrides: createModelProviderRouteOverrideResolver({ provider: params.provider, authoredConfig, canonicalizeModelId: (configuredModelId) => canonicalizeProviderModelId(params.provider, configuredModelId) })(params.modelId) } : void 0; const requestTransportOverrides = params.modelProvider?.requestTransportOverrides === "present" || configuredModelProvider?.requestTransportOverrides === "present" || hasConfiguredProviderRequestParams ? "present" : "none"; const modelProviderFacts = params.modelProvider || configuredModelProvider || hasConfiguredProviderRequestParams ? { api: params.modelProvider?.api ?? configuredModelProvider?.api, baseUrl: params.modelProvider?.baseUrl ?? configuredModelProvider?.baseUrl, azureApiVersion: params.modelProvider?.azureApiVersion ?? configuredModelProvider?.azureApiVersion, request: params.modelProvider?.request ?? configuredModelProvider?.request, preparedAuth: params.modelProvider?.preparedAuth, requestTransportOverrides } : void 0; const routeRuntimeContract = params.modelProvider?.runtimePolicy ? { owned: true, policy: params.modelProvider.runtimePolicy } : params.preparedModelProvider ? { owned: true } : resolveHarnessRouteRuntimePolicy({ provider: params.provider, modelId: params.modelId, modelProvider: modelProviderFacts, config: params.config }); const modelProvider = modelProviderFacts || routeRuntimeContract.owned ? { ...modelProviderFacts, runtimePolicy: params.modelProvider?.runtimePolicy ?? routeRuntimeContract.policy } : void 0; return { provider: params.provider, modelId: params.modelId, modelProvider, requestedRuntime: params.requestedRuntime, ...params.providerOwnership ? { providerOwnerStatus: params.providerOwnership.status, providerOwnerPluginIds: params.providerOwnership.status === "unowned" ? [] : params.providerOwnership.pluginIds } : {} }; } function resolveHarnessRouteRuntimePolicy(params) { const resolution = resolveProviderModelRoutes({ provider: params.provider, modelId: params.modelId, api: params.modelProvider?.api, baseUrl: params.modelProvider?.baseUrl, config: params.config, requestTransportOverrides: params.modelProvider?.requestTransportOverrides }); if (!resolution) return { owned: false }; if (resolution.kind !== "routes") return { owned: true }; const policies = resolution.routes.map((route) => route.runtimePolicy); const first = policies[0]; if (!first || policies.some((policy) => !policy)) return { owned: true }; return { owned: true, policy: { compatibleIds: first.compatibleIds.filter((id, index, ids) => ids.indexOf(id) === index && policies.every((policy) => policy?.compatibleIds.includes(id))) } }; } /** Resolves the registered plugin harness that auto selection would choose. */ function resolveAutoAgentHarnessId(params) { const registeredHarnesses = listRegisteredAgentHarnesses(); if (registeredHarnesses.length === 0) return; const candidates = registeredHarnesses.map(({ harness }) => ({ harness, support: resolveAgentHarnessAutoSelectionHint({ harness, provider: params.provider }) })); if (candidates.every((entry) => entry.support !== void 0)) return; const supportContext = buildAgentHarnessSupportContext({ ...params, requestedRuntime: "auto" }); return candidates.map(({ harness, support }) => ({ harness, support: support ?? harness.supports(supportContext) })).filter(isSupportedHarness).toSorted(compareHarnessSupport)[0]?.harness.id; } function compareHarnessSupport(left, right) { const priorityDelta = (right.support.priority ?? 0) - (left.support.priority ?? 0); return priorityDelta !== 0 ? priorityDelta : left.harness.id.localeCompare(right.harness.id); } function isSupportedHarness(entry) { return entry.support.supported; } function normalizeModelId(provider, modelId) { const trimmed = modelId.trim(); const slashIndex = trimmed.indexOf("/"); const unqualified = slashIndex > 0 && normalizeProviderId(trimmed.slice(0, slashIndex)) === normalizeProviderId(provider) ? trimmed.slice(slashIndex + 1).trim() : trimmed; return canonicalizeProviderModelId(provider, unqualified); } //#endregion //#region src/agents/harness/availability.ts /** Lightweight runtime availability shared by execution and next-turn projections. */ function resolveAvailableAgentHarnessPolicy(params) { return resolveAgentHarnessAvailabilityDecision(params).policy; } function resolveAgentHarnessAvailabilityDecision(params) { const configured = resolveAgentHarnessPolicy({ ...params, modelApi: params.modelProvider?.api ?? params.modelApi, modelBaseUrl: params.modelProvider?.baseUrl ?? params.modelBaseUrl, requestTransportOverrides: params.modelProvider?.requestTransportOverrides ?? params.requestTransportOverrides }); const pinnedHarnessId = normalizeOptionalAgentRuntimeId(params.agentHarnessId); const runtimeOverride = pinnedHarnessId ?? normalizeOptionalAgentRuntimeId(params.agentHarnessRuntimeOverride); const policy = runtimeOverride && !isDefaultAgentRuntimeId(runtimeOverride) ? { ...configured, runtime: runtimeOverride, runtimeSource: "model" } : configured; const implicit = policy.runtime === "codex" && policy.runtimeSource === "implicit"; if (policy.runtime === "auto" || policy.runtime === "openclaw") return { kind: "available", policy }; const registered = getRegisteredAgentHarness(policy.runtime); if (!registered) return implicit && params.mode !== "projection" ? { kind: "implicit-unavailable", policy: { ...policy, runtime: "openclaw" } } : { kind: "available", policy }; if (pinnedHarnessId === policy.runtime && !params.preparedModelProvider) return { kind: "available", policy }; const provider = params.provider?.trim() ?? ""; if (params.provider === void 0) return { kind: "available", policy }; const support = registered.harness.supports(buildAgentHarnessSupportContext({ ...params, provider, requestedRuntime: policy.runtime, providerOwnership: params.resolveProviderOwnership?.() })); if (!support.supported && !policy.forcedByEnvironment) { if (implicit || support.fallbackRuntime === "openclaw") return { kind: implicit ? "implicit-unsupported" : "declared-fallback", policy: { ...policy, runtime: "openclaw" }, support }; } return { kind: "available", policy, support }; } //#endregion export { projectPreparedModelProvider as a, resolveAutoAgentHarnessId as c, compareHarnessSupport as i, resolveAvailableAgentHarnessPolicy as n, resolveAgentHarnessPreparedAuthSupport as o, buildAgentHarnessSupportContext as r, resolveAgentHarnessPreparedRouteSupport as s, resolveAgentHarnessAvailabilityDecision as t };