


























@@ -24,7 +24,11 @@ import {
2424resolveProviderTextTransforms,
2525transformProviderSystemPrompt,
2626} from "../../plugins/provider-runtime.js";
27-import { isCronSessionKey, isSubagentSessionKey } from "../../routing/session-key.js";
27+import {
28+isCronSessionKey,
29+isSubagentSessionKey,
30+parseAgentSessionKey,
31+} from "../../routing/session-key.js";
2832import { resolveSkillsPromptForRun } from "../../skills/loading/workspace.js";
2933import { resolveEmbeddedRunSkillEntries } from "../../skills/runtime/embedded-run-entries.js";
3034import {
@@ -41,6 +45,7 @@ import {
4145setCompactionSafeguardCancelReason,
4246} from "../agent-hooks/compaction-safeguard-runtime.js";
4347import { createPreparedEmbeddedAgentSettingsManager } from "../agent-project-settings.js";
48+import { isDefaultAgentRuntimeId } from "../agent-runtime-id.js";
4449import {
4550resolveAgentDir,
4651resolveRunModelFallbacksOverride,
@@ -87,7 +92,6 @@ import {
8792import { isFallbackSummaryError, runWithModelFallback } from "../model-fallback.js";
8893import { supportsModelTools } from "../model-tool-support.js";
8994import { ensureOpenClawModelsJson } from "../models-config.js";
90-import { resolveContextConfigProviderForRuntime } from "../openai-codex-routing.js";
9195import { wrapStreamFnTextTransforms } from "../plugin-text-transforms.js";
9296import { resolveAgentPromptSurfaceForSessionKey } from "../prompt-surface.js";
9397import { registerProviderStreamForModel } from "../provider-stream.js";
@@ -489,20 +493,67 @@ async function compactEmbeddedAgentSessionDirectOnce(
489493workspaceDir: resolvedWorkspace,
490494allowGatewaySubagentBinding: params.allowGatewaySubagentBinding,
491495});
496+const earlyAgentIds = resolveSessionAgentIds({
497+sessionKey: params.sessionKey,
498+config: params.config,
499+agentId: params.agentId,
500+});
501+const agentDir =
502+params.agentDir ?? resolveAgentDir(params.config ?? {}, earlyAgentIds.sessionAgentId);
503+const runtimePolicySessionKey = params.sandboxSessionKey ?? params.sessionKey;
504+const runtimePolicyAgentId =
505+params.sandboxSessionKey && parseAgentSessionKey(params.sandboxSessionKey)
506+ ? undefined
507+ : params.agentId;
508+const policyCompactionTarget = resolveEmbeddedCompactionTarget({
509+config: params.config,
510+provider: params.provider,
511+modelId: params.model,
512+authProfileId: params.authProfileId,
513+defaultProvider: DEFAULT_PROVIDER,
514+defaultModel: DEFAULT_MODEL,
515+});
516+const configuredHarnessPolicy = resolveAgentHarnessPolicy({
517+provider: policyCompactionTarget.provider ?? DEFAULT_PROVIDER,
518+modelId: policyCompactionTarget.model ?? DEFAULT_MODEL,
519+config: params.config,
520+agentId: runtimePolicyAgentId,
521+sessionKey: runtimePolicySessionKey,
522+});
523+const configuredHarnessRuntime =
524+configuredHarnessPolicy.runtimeSource &&
525+configuredHarnessPolicy.runtimeSource !== "implicit" &&
526+!isDefaultAgentRuntimeId(configuredHarnessPolicy.runtime)
527+ ? configuredHarnessPolicy.runtime
528+ : undefined;
529+const selectedHarnessRuntime = params.agentHarnessId ?? configuredHarnessRuntime;
492530const resolvedCompactionTarget = resolveEmbeddedCompactionTarget({
493531config: params.config,
494532provider: params.provider,
495533modelId: params.model,
496534authProfileId: params.authProfileId,
535+harnessRuntime: selectedHarnessRuntime,
497536defaultProvider: DEFAULT_PROVIDER,
498537defaultModel: DEFAULT_MODEL,
499538});
500539// Keep the configured provider for harness policy, while auth/model loading below can
501540// route OpenAI compaction through Codex OAuth when that runtime owns the session credentials.
502541const provider = resolvedCompactionTarget.provider ?? DEFAULT_PROVIDER;
503542const runtimeProvider = resolvedCompactionTarget.runtimeProvider ?? provider;
543+const contextConfigProvider = resolvedCompactionTarget.contextProvider ?? provider;
504544const modelId = resolvedCompactionTarget.model ?? DEFAULT_MODEL;
505545const authProfileId = resolvedCompactionTarget.authProfileId;
546+if (runtimeProvider !== provider || selectedHarnessRuntime) {
547+await ensureSelectedAgentHarnessPlugin({
548+config: params.config,
549+ provider,
550+ modelId,
551+agentId: runtimePolicyAgentId,
552+sessionKey: runtimePolicySessionKey,
553+agentHarnessRuntimeOverride: selectedHarnessRuntime,
554+workspaceDir: resolvedWorkspace,
555+});
556+}
506557let thinkLevel: ThinkLevel = params.thinkLevel ?? "off";
507558const attemptedThinking = new Set<ThinkLevel>();
508559const fail = (reason: string, err?: unknown): EmbeddedAgentCompactResult => {
@@ -531,13 +582,6 @@ async function compactEmbeddedAgentSessionDirectOnce(
531582 : undefined,
532583};
533584};
534-const earlyAgentIds = resolveSessionAgentIds({
535-sessionKey: params.sessionKey,
536-config: params.config,
537-agentId: params.agentId,
538-});
539-const agentDir =
540-params.agentDir ?? resolveAgentDir(params.config ?? {}, earlyAgentIds.sessionAgentId);
541585await ensureOpenClawModelsJson(params.config, agentDir, {
542586workspaceDir: resolvedWorkspace,
543587});
@@ -627,11 +671,7 @@ async function compactEmbeddedAgentSessionDirectOnce(
627671sessionId: params.sessionId,
628672cwd: effectiveCwd,
629673});
630-const { sessionAgentId: effectiveSkillAgentId } = resolveSessionAgentIds({
631-sessionKey: params.sessionKey,
632-config: params.config,
633-agentId: params.agentId,
634-});
674+const { sessionAgentId: effectiveSkillAgentId } = earlyAgentIds;
635675636676let restoreSkillEnv: (() => void) | undefined;
637677let compactionSessionManager: unknown = null;
@@ -683,19 +723,9 @@ async function compactEmbeddedAgentSessionDirectOnce(
683723// Apply contextTokens cap to model so session runtime's auto-compaction
684724// threshold uses the effective limit, not the native context window.
685725const runtimeModelWithContext = runtimeModel as ProviderRuntimeModel;
686-const runtimeHarnessPolicy = resolveAgentHarnessPolicy({
687- provider,
688- modelId,
689-config: params.config,
690-agentId: effectiveSkillAgentId,
691-sessionKey: params.sessionKey,
692-});
693726const ctxInfo = resolveContextWindowInfo({
694727cfg: params.config,
695-provider: resolveContextConfigProviderForRuntime({
696- provider,
697-runtimeId: params.agentHarnessId ?? runtimeHarnessPolicy.runtime,
698-}),
728+provider: contextConfigProvider,
699729 modelId,
700730modelContextTokens: readAgentModelContextTokens(runtimeModel),
701731modelContextWindow: runtimeModelWithContext.contextWindow,
@@ -731,7 +761,7 @@ async function compactEmbeddedAgentSessionDirectOnce(
731761model: effectiveModel,
732762modelApi: effectiveModel.api,
733763harnessId: params.agentHarnessId,
734-harnessRuntime: runtimeHarnessPolicy.runtime,
764+harnessRuntime: selectedHarnessRuntime,
735765authProfileProvider: authProfileId?.split(":", 1)[0],
736766sessionAuthProfileId: authProfileId,
737767config: params.config,
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。