From 8241109d6aa68f8b77c8e9112576736d1bd4cae2 Mon Sep 17 00:00:00 2001 From: Prax Lannister Date: Tue, 24 Feb 2026 04:30:29 +0530 Subject: [PATCH] feat(opencode): prune old tool outputs before compaction Add SessionCompaction.prune() calls before both compaction triggers: 1. Proactive overflow check (before LLM call) 2. Reactive compact result (after LLM returns 'compact') Pruning strips old tool outputs first, maximizing context reduction before the compaction summary LLM call. This prevents the summarization itself from hitting context limits. --- packages/opencode/src/session/prompt.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/opencode/src/session/prompt.ts b/packages/opencode/src/session/prompt.ts index 75bd3c9dfac..c8b428acdec 100644 --- a/packages/opencode/src/session/prompt.ts +++ b/packages/opencode/src/session/prompt.ts @@ -538,12 +538,13 @@ export namespace SessionPrompt { continue } - // context overflow, needs compaction + // proactive context management: prune + compact before overflow if ( lastFinished && lastFinished.summary !== true && (await SessionCompaction.isOverflow({ tokens: lastFinished.tokens, model })) ) { + await SessionCompaction.prune({ sessionID }) await SessionCompaction.create({ sessionID, agent: lastUser.agent, @@ -702,6 +703,7 @@ export namespace SessionPrompt { if (result === "stop") break if (result === "compact") { + await SessionCompaction.prune({ sessionID }) await SessionCompaction.create({ sessionID, agent: lastUser.agent,