



























@@ -10,6 +10,7 @@ import { formatErrorMessage } from "../infra/errors.js";
1010import { prepareProviderRuntimeAuth } from "../plugins/provider-runtime.runtime.js";
1111import { resolveAgentDir, resolveAgentEffectiveModelPrimary } from "./agent-scope.js";
1212import { DEFAULT_PROVIDER } from "./defaults.js";
13+import { resolveAgentHarnessPolicy } from "./harness/policy.js";
1314import {
1415applyLocalNoAuthHeaderOverride,
1516getApiKeyForModel,
@@ -21,6 +22,7 @@ import {
2122resolveDefaultModelForAgent,
2223resolveModelRefFromString,
2324} from "./model-selection.js";
25+import { OPENAI_CODEX_PROVIDER_ID, isOpenAIProvider } from "./openai-codex-routing.js";
2426import { resolveModel, resolveModelAsync } from "./pi-embedded-runner/model.js";
2527import { prepareModelForSimpleCompletion } from "./simple-completion-transport.js";
2628@@ -55,6 +57,8 @@ export type PreparedSimpleCompletionModel =
5557export type AgentSimpleCompletionSelection = {
5658provider: string;
5759modelId: string;
60+/** Provider used for auth/transport when runtime policy redirects the logical model ref. */
61+runtimeProvider?: string;
5862profileId?: string;
5963agentDir: string;
6064};
@@ -102,11 +106,35 @@ export function resolveSimpleCompletionSelectionForAgent(params: {
102106return {
103107 provider,
104108 modelId,
109+ ...resolveSimpleCompletionRuntimeProvider({
110+cfg: params.cfg,
111+agentId: params.agentId,
112+ provider,
113+ modelId,
114+}),
105115profileId: split?.profile || undefined,
106116agentDir: resolveAgentDir(params.cfg, params.agentId),
107117};
108118}
109119120+function resolveSimpleCompletionRuntimeProvider(params: {
121+cfg: OpenClawConfig;
122+agentId: string;
123+provider: string;
124+modelId: string;
125+}): Pick<AgentSimpleCompletionSelection, "runtimeProvider"> {
126+if (!isOpenAIProvider(params.provider)) {
127+return {};
128+}
129+const policy = resolveAgentHarnessPolicy({
130+provider: params.provider,
131+modelId: params.modelId,
132+config: params.cfg,
133+agentId: params.agentId,
134+});
135+return policy.runtime === "codex" ? { runtimeProvider: OPENAI_CODEX_PROVIDER_ID } : {};
136+}
137+110138async function setRuntimeApiKeyForCompletion(params: {
111139authStorage: SimpleCompletionAuthStorage;
112140model: Model<Api>;
@@ -266,7 +294,7 @@ export async function prepareSimpleCompletionModelForAgent(params: {
266294}
267295const prepared = await prepareSimpleCompletionModel({
268296cfg: params.cfg,
269-provider: selection.provider,
297+provider: selection.runtimeProvider ?? selection.provider,
270298modelId: selection.modelId,
271299agentDir: selection.agentDir,
272300profileId: selection.profileId,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。