fix(compaction): bound checkpoint inputs - #37
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Prevents checkpoint compaction requests from embedding inline media and file payloads, and adds bounded retention for tool results and summary prompts. Durable attachment references and recent tool context remain available without allowing historical payloads to dominate the request.
Motivation
Compaction previously serialized provider-native image data into a JSON text prompt. Large historical images could therefore make the checkpoint request exceed the model context window even when the normal conversation was only at the automatic 80% threshold.
Impact
Compaction is more resilient for long and attachment-heavy sessions. Historical tool results are reduced to 512 bytes, while the three newest results retain up to 8 KB each; inline historical attachment payloads are represented by placeholders during summarization. This behavior ships with the
0.1.99patch version.Technical details
Attachment projection
Summary rendering replaces inline media and file data with bounded descriptions while preserving URI and artifact-handle references. The same projection covers attachments nested in tool outputs, and the original transcript remains canonical if compaction fails.
Layered budgets
Each rendered transcript item has a fixed byte cap. The complete conversation prompt uses at most half of the provider-reported context window, capped at 256 KB, with a conservative fallback when usage metadata is unavailable. Middle truncation retains the initial objective and newest conversation state while budgeting the prior checkpoint separately.