
























@@ -3,8 +3,10 @@ import fs from "node:fs";
33import type { AgentMessage } from "@earendil-works/pi-agent-core";
44import { resolveBootstrapWarningSignaturesSeen } from "../../agents/bootstrap-budget.js";
55import { estimateMessagesTokens } from "../../agents/compaction.js";
6+import { resolveAgentHarnessPolicy } from "../../agents/harness/policy.js";
67import { runWithModelFallback } from "../../agents/model-fallback.js";
78import { isCliProvider } from "../../agents/model-selection.js";
9+import { resolveContextConfigProviderForRuntime } from "../../agents/openai-codex-routing.js";
810import { resolveSandboxConfigForAgent, resolveSandboxRuntimeStatus } from "../../agents/sandbox.js";
911import {
1012derivePromptTokens,
@@ -163,6 +165,50 @@ function resolveMemoryFlushModelFallbackOptions(
163165};
164166}
165167168+function resolveFollowupContextConfigProvider(params: {
169+cfg: OpenClawConfig;
170+followupRun: FollowupRun;
171+sessionEntry?: SessionEntry;
172+sessionKey?: string;
173+runtimePolicySessionKey?: string;
174+}): string {
175+const provider = params.followupRun.run.provider;
176+const matchingSessionEntry =
177+params.sessionEntry?.sessionId === params.followupRun.run.sessionId
178+ ? params.sessionEntry
179+ : undefined;
180+const persistedRuntimeOverride = normalizeOptionalString(
181+matchingSessionEntry?.agentRuntimeOverride,
182+);
183+const persistedRuntimeId =
184+persistedRuntimeOverride &&
185+persistedRuntimeOverride !== "auto" &&
186+persistedRuntimeOverride !== "default"
187+ ? persistedRuntimeOverride
188+ : matchingSessionEntry?.agentHarnessId;
189+if (persistedRuntimeId) {
190+return resolveContextConfigProviderForRuntime({
191+ provider,
192+runtimeId: persistedRuntimeId,
193+});
194+}
195+const harnessPolicy = resolveAgentHarnessPolicy({
196+ provider,
197+modelId: params.followupRun.run.model,
198+config: params.cfg,
199+agentId: params.followupRun.run.agentId,
200+sessionKey:
201+params.runtimePolicySessionKey ??
202+params.sessionKey ??
203+params.followupRun.run.runtimePolicySessionKey ??
204+params.followupRun.run.sessionKey,
205+});
206+return resolveContextConfigProviderForRuntime({
207+ provider,
208+runtimeId: harnessPolicy.runtime,
209+});
210+}
211+166212function resolveVisibleMemoryFlushErrorPayloads(payloads?: ReplyPayload[]): ReplyPayload[] {
167213return (payloads ?? []).filter(
168214(payload) => payload.isError === true && isRenderablePayload(payload),
@@ -514,7 +560,13 @@ export async function runPreflightCompactionIfNeeded(params: {
514560515561const contextWindowTokens = resolveMemoryFlushContextWindowTokens({
516562cfg: params.cfg,
517-provider: params.followupRun.run.provider,
563+provider: resolveFollowupContextConfigProvider({
564+cfg: params.cfg,
565+followupRun: params.followupRun,
566+sessionEntry: entry,
567+sessionKey: params.sessionKey,
568+runtimePolicySessionKey: params.runtimePolicySessionKey,
569+}),
518570modelId: params.followupRun.run.model ?? params.defaultModel,
519571agentCfgContextTokens: params.agentCfgContextTokens,
520572});
@@ -749,7 +801,13 @@ export async function runMemoryFlushIfNeeded(params: {
749801(params.sessionKey ? params.sessionStore?.[params.sessionKey] : undefined);
750802const contextWindowTokens = resolveMemoryFlushContextWindowTokens({
751803cfg: params.cfg,
752-provider: params.followupRun.run.provider,
804+provider: resolveFollowupContextConfigProvider({
805+cfg: params.cfg,
806+followupRun: params.followupRun,
807+sessionEntry: entry,
808+sessionKey: params.sessionKey,
809+runtimePolicySessionKey: params.runtimePolicySessionKey,
810+}),
753811modelId: params.followupRun.run.model ?? params.defaultModel,
754812agentCfgContextTokens: params.agentCfgContextTokens,
755813});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。