diff --git a/sdk/packages/core/src/extensions/context/basic-compaction.ts b/sdk/packages/core/src/extensions/context/basic-compaction.ts index cd8405c989..9858943ffb 100644 --- a/sdk/packages/core/src/extensions/context/basic-compaction.ts +++ b/sdk/packages/core/src/extensions/context/basic-compaction.ts @@ -397,6 +397,9 @@ export function runBasicCompaction(options: { policyIntent: "basic_compaction_projection", estimateMessageTokens: options.estimateMessageTokens, }); + // This final projection owns the hard output budget. Unlike the earlier + // basic candidate passes, it may drop the original first-user message when + // preserving the latest typed prompt and coherent tool closures requires it. if (budgeted.status === "failed") { options.logger?.debug("Basic compaction returned best-effort projection", { budgetWarnings: budgeted.warnings.map((warning) => warning.code), @@ -428,6 +431,7 @@ export function runBasicCompaction(options: { messagesRemoved: options.context.messages.length - resultMessages.length, tokensBefore: beforeTokens, tokensAfter: afterTokens, + budgetStatus: budgeted.status, budgetActions: budgeted.actions.length, budgetWarnings: budgeted.warnings.map((warning) => warning.code), targetTokens,