openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
231 lines (230 loc) • 10.7 kB
JavaScript
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 };