From bd7175a11e50b50a07208139b3297c837b4acfb4 Mon Sep 17 00:00:00 2001 From: Roo Code Date: Tue, 18 Nov 2025 05:07:50 +0000 Subject: [PATCH] feat: create checkpoints before context compression - Add checkpoint save before manual context compression in condenseContext method - Add checkpoint save before automatic context compression in attemptApiRequest method - Use force=true to ensure checkpoint even without file changes - Use suppressMessage=true for cleaner UI experience Fixes #9334 --- src/core/task/Task.ts | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/core/task/Task.ts b/src/core/task/Task.ts index 56f248a862..303b1bc986 100644 --- a/src/core/task/Task.ts +++ b/src/core/task/Task.ts @@ -1074,6 +1074,12 @@ export class Task extends EventEmitter implements TaskLike { } public async condenseContext(): Promise { + // Create a checkpoint before context compression to allow reverting if needed + // Use force=true to ensure checkpoint even if no file changes, and suppress message for cleaner UI + if (this.enableCheckpoints) { + await this.checkpointSave(true, true) + } + const systemPrompt = await this.getSystemPrompt() // Get condensing configuration @@ -2952,6 +2958,18 @@ export class Task extends EventEmitter implements TaskLike { // Get the current profile ID using the helper method const currentProfileId = this.getCurrentProfileId(state) + // Create a checkpoint before automatic context compression to allow reverting if needed + // Only create checkpoint if compression might actually happen + const contextPercent = (100 * contextTokens) / contextWindow + if ( + autoCondenseContext && + (contextPercent >= autoCondenseContextPercent || contextTokens > contextWindow * 0.9 - (maxTokens || 0)) + ) { + if (this.enableCheckpoints) { + await this.checkpointSave(true, true) + } + } + const truncateResult = await manageContext({ messages: this.apiConversationHistory, totalTokens: contextTokens,