Uh oh!
There was an error while loading. Please reload this page.
fix: use assistant turn boundaries for overflow compaction replay point - #20247
fix: use assistant turn boundaries for overflow compaction replay point#20247jphpeete wants to merge 1 commit into
Conversation
The overflow compaction replay-point search only considered user messages when deciding where to split the conversation for summarization. In sessions where the user interacts primarily through tool responses (e.g. the question tool), user messages are rare and the backward walk would skip over all assistant turns, producing an incomplete summary. Add an assistant-turn boundary check before the user-message check. When a finished assistant message is found, its parent user message is used as the replay point and the summary includes all messages up to and including that assistant turn. Fixes#20246
Thanks for updating your PR! It now meets our contributing guidelines. 👍 |
rekram1-node
commented
May 15, 2026
Automated PR Cleanup Thank you for contributing to opencode. Due to the high volume of PRs from users and AI agents, we periodically close older PRs using automated criteria so maintainers can focus review time on the most active and community-supported contributions. This PR was closed because it matched the following cleanup criteria:
PRs created within the last month are not affected by this cleanup. If you believe this PR was closed incorrectly, or if you are still actively working on it, please leave a comment explaining why it should be reopened. A maintainer can review and reopen it if appropriate. Thanks again for taking the time to contribute. |
Issue for this PR
Closes#20246
Related: #19319
Type of change
What does this PR do?
The overflow compaction replay-point search walks backward looking for
role === "user"messages to decide where to split the conversation for summarization. In sessions where the user interacts through tool responses (e.g. the question tool), user messages are rare — the search skips all assistant turns and lands on the first user message, somessages.slice(0, i)produces an empty or tiny array and the summary only covers the start of the session.This adds a check for finished assistant turns before the existing user-message check. When a finished assistant is found first, its parent user message becomes the replay point and the summary includes everything up to that assistant turn. The user-message check remains as a fallback for normal conversations.
This is a targeted fix for compaction; #19319 tracks the broader issue of synthetic user messages being treated as real user history.
How did you verify your code works?
bun typecheck— cleanbun test test/session/compaction.test.ts— 38 pass (2 new), 0 failScreenshots / recordings
Not a UI change.
Checklist