🤖 fix: add context wrapper to post-compaction follow-up message #1688
+77
−36
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Fixes bug where queued follow-up messages were sent after compaction failed.
Problem:
When compaction fails (e.g., Gemini "completing" without producing a valid summary), the queued follow-up message was still being sent. This caused the follow-up to go into the non-compacted chat, potentially hitting context limits again.
Root cause:
handleCompletion()returnedbooleanwherefalsemeant both "not a compaction stream" (normal) AND "compaction failed" (bad). ThesendQueuedMessages()was called unconditionally on stream-end.Solution:
Introduce
CompactionResultdiscriminated union:"not-compaction": Normal stream end, proceed with queued messages"success": Compaction succeeded, proceed with queued messages"failed": Compaction was attempted but failed - do NOT send queued messagesThis prevents the follow-up from being injected into a non-compacted chat when the model fails to produce a valid summary.
Test Plan
compactionHandler.test.tsassertions to use newCompactionResulttypemake static-checkpassesGenerated with
mux• Model:anthropic:claude-opus-4-5• Thinking:high• Cost:$12.22