From 4ceea1aab2d8308d8317e76e923e6a58db58939f Mon Sep 17 00:00:00 2001 From: Mariano Belinky Date: Wed, 8 Apr 2026 17:36:20 +0200 Subject: [PATCH] Reply: keep resolved runtime config --- .../reply/agent-runner-runtime-config.test.ts | 43 +++++++++++++++++++ src/auto-reply/reply/agent-runner-utils.ts | 8 ++-- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/auto-reply/reply/agent-runner-runtime-config.test.ts b/src/auto-reply/reply/agent-runner-runtime-config.test.ts index cc9587cbb19..3b1fd5119c2 100644 --- a/src/auto-reply/reply/agent-runner-runtime-config.test.ts +++ b/src/auto-reply/reply/agent-runner-runtime-config.test.ts @@ -80,4 +80,47 @@ describe("buildEmbeddedRunBaseParams runtime config", () => { expect(resolved.config).toBe(runtimeConfig); }); + + it("keeps an already-resolved run config instead of reverting to a stale runtime snapshot", () => { + const staleSnapshot: OpenClawConfig = { + models: { + providers: { + openai: { + baseUrl: "https://api.openai.com/v1", + apiKey: { + source: "env", + provider: "default", + id: "OPENAI_API_KEY", + }, + models: [], + }, + }, + }, + }; + const resolvedRunConfig: OpenClawConfig = { + models: { + providers: { + openai: { + baseUrl: "https://api.openai.com/v1", + apiKey: "resolved-runtime-key", + models: [], + }, + }, + }, + }; + setRuntimeConfigSnapshot(staleSnapshot, staleSnapshot); + + const resolved = buildEmbeddedRunBaseParams({ + run: makeRun(resolvedRunConfig), + provider: "openai", + model: "gpt-4.1-mini", + runId: "run-1", + authProfile: resolveProviderScopedAuthProfile({ + provider: "openai", + primaryProvider: "openai", + }), + }); + + expect(resolved.config).toBe(resolvedRunConfig); + }); }); diff --git a/src/auto-reply/reply/agent-runner-utils.ts b/src/auto-reply/reply/agent-runner-utils.ts index 49e2c68e75f..5e27df7634d 100644 --- a/src/auto-reply/reply/agent-runner-utils.ts +++ b/src/auto-reply/reply/agent-runner-utils.ts @@ -125,14 +125,14 @@ export const resolveEnforceFinalTag = ( (run.skipProviderRuntimeHints ? false : undefined) ?? (run.enforceFinalTag || isReasoningTagProvider(provider, { - config: resolveQueuedReplyRuntimeConfig(run.config), + config: run.config, workspaceDir: run.workspaceDir, modelId: model, })), ); export function resolveModelFallbackOptions(run: FollowupRun["run"]) { - const config = resolveQueuedReplyRuntimeConfig(run.config); + const config = run.config; return { cfg: config, provider: run.provider, @@ -154,7 +154,7 @@ export function buildEmbeddedRunBaseParams(params: { authProfile: ReturnType; allowTransientCooldownProbe?: boolean; }) { - const config = resolveQueuedReplyRuntimeConfig(params.run.config); + const config = params.run.config; return { sessionFile: params.run.sessionFile, workspaceDir: params.run.workspaceDir, @@ -185,7 +185,7 @@ export function buildEmbeddedContextFromTemplate(params: { sessionCtx: TemplateContext; hasRepliedRef: { value: boolean } | undefined; }) { - const config = resolveQueuedReplyRuntimeConfig(params.run.config); + const config = params.run.config; return { sessionId: params.run.sessionId, sessionKey: params.run.sessionKey,