openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
265 lines (264 loc) • 10 kB
JavaScript
import { s as projectConfigOntoRuntimeSourceSnapshot } from "./io-Gi7-pyU-.js";
import "./config-C9RxTsn1.js";
import { s as loadManifestMetadataSnapshot } from "./manifest-contract-eligibility-DEeoLRlM.js";
import { d as resolveProviderRuntimePluginHandle, s as resolveProviderFollowupFallbackRoute } from "./provider-hook-runtime-yK6Rr2x1.js";
import { G as transformProviderSystemPrompt, M as resolveProviderSystemPromptContribution, N as resolveProviderTextTransforms } from "./provider-runtime-CJtW0nDR.js";
import { i as isSilentReplyPayloadText } from "./tokens-U6o7_k27.js";
import { a as hasReplyPayloadContent } from "./payload-CZlThETZ.js";
import { a as logProviderToolSchemaDiagnostics, o as normalizeProviderToolSchemas } from "./tool-schema-projection-DRzFBr6V.js";
import { u as resolveTranscriptPolicy } from "./tool-result-middleware-B3Hdp_cV.js";
import { a as resolvePreparedExtraParams } from "./extra-params-CQOwTzpP.js";
import { t as buildAgentRuntimeAuthPlan } from "./auth-DqpwKL8C.js";
import { t as classifyEmbeddedAgentRunResultForModelFallback } from "./result-fallback-classifier-vfh2jCL6.js";
//#region src/agents/runtime-plan/build.ts
function formatResolvedRef(params) {
return `${params.provider}/${params.modelId}`;
}
function asOpenClawConfig(value) {
return value !== null && typeof value === "object" && !Array.isArray(value) ? value : void 0;
}
function asProviderRuntimeModel(value) {
return value !== void 0 ? value : void 0;
}
function asThinkLevel(value) {
return value !== void 0 ? value : void 0;
}
function isProviderRuntimePluginHandle(value) {
return value !== void 0 && "plugin" in value;
}
function resolveProviderRuntimeHandleForPlugins(params) {
if (isProviderRuntimePluginHandle(params.runtimeHandle) && (params.runtimeHandle.plugin || !params.modelId || params.runtimeHandle.modelId === params.modelId)) return params.runtimeHandle;
if (!params.runtimeHandle && !params.resolveWhenMissing) return;
return resolveProviderRuntimePluginHandle({
provider: params.runtimeHandle?.provider ?? params.provider,
modelId: params.modelId,
config: asOpenClawConfig(params.runtimeHandle?.config) ?? params.config,
workspaceDir: params.runtimeHandle?.workspaceDir ?? params.workspaceDir,
env: params.runtimeHandle?.env ?? process.env,
applyAutoEnable: params.runtimeHandle?.applyAutoEnable,
bundledProviderVitestCompat: params.runtimeHandle?.bundledProviderVitestCompat
});
}
/** Build delivery-specific runtime decisions for one provider/model. */
function buildAgentRuntimeDeliveryPlan(params) {
const config = asOpenClawConfig(params.config);
const providerRuntimeHandle = resolveProviderRuntimeHandleForPlugins({
provider: params.provider,
modelId: params.modelId,
config,
workspaceDir: params.workspaceDir,
runtimeHandle: params.providerRuntimeHandle
});
return {
isSilentPayload(payload) {
return isSilentReplyPayloadText(payload.text, "NO_REPLY") && !hasReplyPayloadContent({
...payload,
text: void 0
}, { trimText: true });
},
resolveFollowupRoute(routeParams) {
return resolveProviderFollowupFallbackRoute({
provider: params.provider,
config,
workspaceDir: params.workspaceDir,
runtimeHandle: providerRuntimeHandle,
context: {
config,
agentDir: params.agentDir,
workspaceDir: params.workspaceDir,
provider: params.provider,
modelId: params.modelId,
payload: routeParams.payload,
originatingChannel: routeParams.originatingChannel,
originatingTo: routeParams.originatingTo,
originRoutable: routeParams.originRoutable,
dispatcherAvailable: routeParams.dispatcherAvailable
}
});
}
};
}
/** Build run-outcome classification hooks for model fallback decisions. */
function buildAgentRuntimeOutcomePlan() {
return { classifyRunResult: classifyEmbeddedAgentRunResultForModelFallback };
}
/** Build the complete runtime plan for an embedded agent attempt. */
function buildAgentRuntimePlan(params) {
const config = asOpenClawConfig(params.config);
const model = asProviderRuntimeModel(params.model);
const modelApi = params.modelApi ?? params.model?.api ?? void 0;
const transport = params.resolvedTransport;
const toolPlanningConfig = config ? projectConfigOntoRuntimeSourceSnapshot(config) : void 0;
let toolPlanningMetadataSnapshot;
const loadToolPlanningMetadataSnapshot = () => {
toolPlanningMetadataSnapshot ??= loadManifestMetadataSnapshot({
config: toolPlanningConfig,
...params.workspaceDir ? { workspaceDir: params.workspaceDir } : {},
env: process.env
});
return toolPlanningMetadataSnapshot;
};
const providerRuntimeHandleForPlugins = resolveProviderRuntimeHandleForPlugins({
provider: params.provider,
modelId: params.modelId,
config,
workspaceDir: params.workspaceDir,
runtimeHandle: params.providerRuntimeHandle,
resolveWhenMissing: true
});
const auth = buildAgentRuntimeAuthPlan({
provider: params.provider,
authProfileProvider: params.authProfileProvider,
authProfileMode: params.authProfileMode,
sessionAuthProfileId: params.sessionAuthProfileId,
sessionAuthProfileCandidateIds: params.sessionAuthProfileCandidateIds,
config,
workspaceDir: params.workspaceDir,
harnessId: params.harnessId,
harnessRuntime: params.harnessRuntime,
allowHarnessAuthProfileForwarding: params.allowHarnessAuthProfileForwarding
});
const resolvedRef = {
provider: params.provider,
modelId: params.modelId,
...modelApi ? { modelApi } : {},
...params.harnessId ? { harnessId: params.harnessId } : {},
...transport ? { transport } : {}
};
const toolContext = {
provider: params.provider,
config,
workspaceDir: params.workspaceDir,
env: process.env,
runtimeHandle: providerRuntimeHandleForPlugins,
modelId: params.modelId,
modelApi,
model
};
const resolveToolContext = (overrides) => ({
...toolContext,
...overrides?.workspaceDir !== void 0 ? { workspaceDir: overrides.workspaceDir } : {},
...overrides?.modelApi !== void 0 ? { modelApi: overrides.modelApi } : {},
...overrides?.model !== void 0 ? { model: asProviderRuntimeModel(overrides.model) } : {}
});
const resolveTranscriptRuntimePolicy = (overrides) => resolveTranscriptPolicy({
provider: params.provider,
modelId: params.modelId,
config,
workspaceDir: overrides?.workspaceDir ?? params.workspaceDir,
env: process.env,
runtimeHandle: providerRuntimeHandleForPlugins,
modelApi: overrides?.modelApi ?? modelApi,
model: asProviderRuntimeModel(overrides?.model) ?? model
});
const resolveTransportExtraParams = (overrides = {}) => resolvePreparedExtraParams({
cfg: config,
provider: params.provider,
modelId: params.modelId,
agentDir: params.agentDir,
workspaceDir: overrides.workspaceDir ?? params.workspaceDir,
extraParamsOverride: overrides.extraParamsOverride ?? params.extraParamsOverride,
thinkingLevel: asThinkLevel(overrides.thinkingLevel ?? params.thinkingLevel),
agentId: overrides.agentId ?? params.agentId,
model: asProviderRuntimeModel(overrides.model) ?? model,
resolvedTransport: overrides.resolvedTransport ?? transport,
providerRuntimeHandle: providerRuntimeHandleForPlugins
});
let memoizedTranscriptPolicy;
let memoizedTransportExtraParams;
const resolveDefaultTranscriptPolicy = () => {
memoizedTranscriptPolicy ??= resolveTranscriptRuntimePolicy();
return memoizedTranscriptPolicy;
};
const resolveDefaultTransportExtraParams = () => {
memoizedTransportExtraParams ??= resolveTransportExtraParams();
return memoizedTransportExtraParams;
};
const providerTextTransforms = resolveProviderTextTransforms({
provider: params.provider,
config,
workspaceDir: params.workspaceDir,
env: process.env,
runtimeHandle: providerRuntimeHandleForPlugins
});
return {
resolvedRef,
providerRuntimeHandle: providerRuntimeHandleForPlugins,
auth,
prompt: {
provider: params.provider,
modelId: params.modelId,
textTransforms: providerTextTransforms,
resolveSystemPromptContribution(context) {
return resolveProviderSystemPromptContribution({
provider: params.provider,
config,
workspaceDir: context.workspaceDir ?? params.workspaceDir,
runtimeHandle: providerRuntimeHandleForPlugins,
context: {
...context,
config: asOpenClawConfig(context.config)
}
});
},
transformSystemPrompt(context) {
return transformProviderSystemPrompt({
provider: params.provider,
config,
workspaceDir: context.workspaceDir ?? params.workspaceDir,
runtimeHandle: providerRuntimeHandleForPlugins,
context: {
...context,
config: asOpenClawConfig(context.config)
}
});
}
},
tools: {
preparedPlanning: { loadMetadataSnapshot: loadToolPlanningMetadataSnapshot },
normalize(tools, overrides) {
return normalizeProviderToolSchemas({
...resolveToolContext(overrides),
tools
});
},
logDiagnostics(tools, overrides) {
logProviderToolSchemaDiagnostics({
...resolveToolContext(overrides),
tools
});
}
},
transcript: {
get policy() {
return resolveDefaultTranscriptPolicy();
},
resolvePolicy: resolveTranscriptRuntimePolicy
},
delivery: buildAgentRuntimeDeliveryPlan({
...params,
providerRuntimeHandle: providerRuntimeHandleForPlugins
}),
outcome: buildAgentRuntimeOutcomePlan(),
transport: {
get extraParams() {
return resolveDefaultTransportExtraParams();
},
resolveExtraParams: resolveTransportExtraParams
},
observability: {
resolvedRef: formatResolvedRef({
provider: params.provider,
modelId: params.modelId
}),
provider: params.provider,
modelId: params.modelId,
...modelApi ? { modelApi } : {},
...params.harnessId ? { harnessId: params.harnessId } : {},
...auth.forwardedAuthProfileId ? { authProfileId: auth.forwardedAuthProfileId } : {},
...transport ? { transport } : {}
}
};
}
//#endregion
export { buildAgentRuntimeOutcomePlan as n, buildAgentRuntimePlan as r, buildAgentRuntimeDeliveryPlan as t };