



























@@ -13,6 +13,7 @@ import {
1313applyAgentAutoCompactionGuard as applyAgentAutoCompactionGuardImpl,
1414resolveEffectiveCompactionMode,
1515} from "../agent-settings.js";
16+import { classifyCompactionReason } from "../embedded-agent-runner/compact-reasons.js";
1617import { buildEmbeddedCompactionRuntimeContext } from "../embedded-agent-runner/compaction-runtime-context.js";
1718import {
1819compactContextEngineWithSafetyTimeout,
@@ -28,7 +29,10 @@ import { ensureSelectedAgentHarnessPlugin as ensureSelectedAgentHarnessPluginImp
2829import { maybeCompactAgentHarnessSession as maybeCompactAgentHarnessSessionImpl } from "../harness/selection.js";
2930import type { AgentMessage } from "../runtime/index.js";
3031import { SessionManager } from "../sessions/session-manager.js";
31-import { recordCliCompactionInStore as recordCliCompactionInStoreImpl } from "./session-store.js";
32+import {
33+clearCliSessionInStore as clearCliSessionInStoreImpl,
34+recordCliCompactionInStore as recordCliCompactionInStoreImpl,
35+} from "./session-store.js";
32363337const CODEX_APP_SERVER_OWNS_AUTO_COMPACTION_REASON = "codex app-server owns automatic compaction";
3438@@ -64,13 +68,15 @@ type CliCompactionDeps = {
6468runContextEngineMaintenance: typeof runContextEngineMaintenanceImpl;
6569ensureSelectedAgentHarnessPlugin: typeof ensureSelectedAgentHarnessPluginImpl;
6670maybeCompactAgentHarnessSession: typeof maybeCompactAgentHarnessSessionImpl;
71+clearCliSessionInStore: typeof clearCliSessionInStoreImpl;
6772recordCliCompactionInStore: typeof recordCliCompactionInStoreImpl;
6873};
69747075type NativeHarnessCliCompactionOutcome = {
7176compacted: boolean;
7277result?: EmbeddedAgentCompactResult;
7378fallbackToContextEngine?: boolean;
79+clearCliSessionBinding?: boolean;
7480failureReason?: string;
7581};
7682type CliTranscriptCompactionOutcome = {
@@ -109,6 +115,7 @@ const cliCompactionDeps: CliCompactionDeps = {
109115runContextEngineMaintenance: runContextEngineMaintenanceImpl,
110116ensureSelectedAgentHarnessPlugin: ensureSelectedAgentHarnessPluginImpl,
111117maybeCompactAgentHarnessSession: maybeCompactAgentHarnessSessionImpl,
118+clearCliSessionInStore: clearCliSessionInStoreImpl,
112119recordCliCompactionInStore: recordCliCompactionInStoreImpl,
113120};
114121@@ -128,6 +135,7 @@ export function resetCliCompactionTestDeps(): void {
128135runContextEngineMaintenance: runContextEngineMaintenanceImpl,
129136ensureSelectedAgentHarnessPlugin: ensureSelectedAgentHarnessPluginImpl,
130137maybeCompactAgentHarnessSession: maybeCompactAgentHarnessSessionImpl,
138+clearCliSessionInStore: clearCliSessionInStoreImpl,
131139recordCliCompactionInStore: recordCliCompactionInStoreImpl,
132140});
133141}
@@ -177,6 +185,10 @@ function isUnsupportedNativeHarnessCompaction(
177185return result?.ok === false && result.failure?.reason === "unsupported_harness_compaction";
178186}
179187188+function isBelowCompactionTargetReason(reason: string | undefined): boolean {
189+return classifyCompactionReason(reason) === "below_threshold";
190+}
191+180192function isIntentionalNativeAutoCompactionSkip(
181193result: EmbeddedAgentCompactResult | undefined,
182194): boolean {
@@ -285,8 +297,15 @@ async function compactCliTranscript(params: {
285297}
286298287299if (!compactResult.compacted) {
300+const reason = compactResult.reason ?? "nothing to compact";
301+if (isBelowCompactionTargetReason(reason)) {
302+log.info(
303+`CLI transcript compaction skipped for ${params.provider}/${params.model}: ${reason}`,
304+);
305+return { compacted: false };
306+}
288307log.warn(
289-`CLI transcript compaction did not reduce context for ${params.provider}/${params.model}: ${compactResult.reason ?? "nothing to compact"}`,
308+`CLI transcript compaction did not reduce context for ${params.provider}/${params.model}: ${reason}`,
290309);
291310return {
292311compacted: false,
@@ -412,22 +431,30 @@ async function compactNativeHarnessCliTranscript(params: {
412431}
413432414433if (!result?.compacted) {
434+const reason = result?.reason ?? "nothing to compact";
435+if (isBelowCompactionTargetReason(reason)) {
436+log.info(
437+`CLI native harness compaction skipped for ${params.provider}/${params.model}: ${reason}`,
438+);
439+return { compacted: false };
440+}
415441if (isIntentionalNativeAutoCompactionSkip(result)) {
416442return {
417443compacted: false,
418444fallbackToContextEngine: true,
419445failureReason: CODEX_APP_SERVER_OWNS_AUTO_COMPACTION_REASON,
420446};
421447}
448+const recoverableBindingFailure = isRecoverableNativeHarnessBindingFailure(result);
422449const fallbackToContextEngine =
423-isUnsupportedNativeHarnessCompaction(result) ||
424-isRecoverableNativeHarnessBindingFailure(result);
450+isUnsupportedNativeHarnessCompaction(result) || recoverableBindingFailure;
425451log.warn(
426-`CLI native harness compaction did not reduce context for ${params.provider}/${params.model}: ${result?.reason ?? "nothing to compact"}`,
452+`CLI native harness compaction did not reduce context for ${params.provider}/${params.model}: ${reason}`,
427453);
428454return {
429455compacted: false,
430456 fallbackToContextEngine,
457+clearCliSessionBinding: recoverableBindingFailure,
431458failureReason: result?.reason ?? "native harness compaction did not reduce context",
432459};
433460}
@@ -496,6 +523,7 @@ export async function runCliTurnCompactionLifecycle(params: {
496523let nativeCompactionResult: EmbeddedAgentCompactResult | undefined;
497524let useContextEngineCompaction = true;
498525let nativeFallbackToContextEngine = false;
526+let nativeFallbackNeedsBindingClear = false;
499527let resolvedContextEngine: ContextEngine | undefined;
500528let autoCompactionGuardApplied = false;
501529const applyAutoCompactionGuard = async (contextEngine: ContextEngine): Promise<void> => {
@@ -539,14 +567,17 @@ export async function runCliTurnCompactionLifecycle(params: {
539567compacted = true;
540568nativeCompactionResult = nativeOutcome.result;
541569useContextEngineCompaction = false;
542-} else if (!nativeOutcome.fallbackToContextEngine) {
570+} else if (nativeOutcome.fallbackToContextEngine) {
571+nativeFallbackToContextEngine = true;
572+nativeFallbackNeedsBindingClear = nativeOutcome.clearCliSessionBinding === true;
573+} else if (nativeOutcome.failureReason) {
543574throw new Error(
544575`CLI native harness compaction failed for ${params.provider}/${params.model}: ${
545576 nativeOutcome.failureReason ?? "compaction did not reduce context"
546577 }`,
547578);
548579} else {
549-nativeFallbackToContextEngine = true;
580+useContextEngineCompaction = false;
550581}
551582}
552583@@ -581,7 +612,7 @@ export async function runCliTurnCompactionLifecycle(params: {
581612bestEffortMaintenance: nativeFallbackToContextEngine,
582613});
583614compacted = contextOutcome.compacted;
584-if (!compacted) {
615+if (!compacted && contextOutcome.failureReason) {
585616throw new Error(
586617`CLI transcript compaction failed for ${params.provider}/${params.model}: ${
587618 contextOutcome.failureReason ?? "compaction did not reduce context"
@@ -590,6 +621,17 @@ export async function runCliTurnCompactionLifecycle(params: {
590621}
591622}
592623624+if (nativeFallbackNeedsBindingClear && !compacted && params.sessionStore && params.storePath) {
625+return (
626+(await cliCompactionDeps.clearCliSessionInStore({
627+provider: params.provider,
628+sessionKey: params.sessionKey,
629+sessionStore: params.sessionStore,
630+storePath: params.storePath,
631+})) ?? params.sessionEntry
632+);
633+}
634+593635if (!compacted || !params.sessionStore || !params.storePath) {
594636return params.sessionEntry;
595637}
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。