fix(acp): serialize session updates to prevent out-of-order messages#21314
Closed
LydiaCai1203 wants to merge 2 commits intoanomalyco:devfrom
Closed
fix(acp): serialize session updates to prevent out-of-order messages#21314LydiaCai1203 wants to merge 2 commits intoanomalyco:devfrom
LydiaCai1203 wants to merge 2 commits intoanomalyco:devfrom
Conversation
All ACP sessionUpdate calls are now routed through a promise chain (`sendUpdate`) that guarantees ordering. After each prompt completes, a reconciliation step fetches the final assistant message and delivers any text/reasoning content that was missed by SSE delta events — fixing a race where streaming events arrive after end_turn. Also adds handling for the `question.asked` event via the ACP permission flow, and updates the question tool to use a two-step async pattern.
Contributor
|
Thanks for your contribution! This PR doesn't have a linked issue. All PRs must reference an existing issue. Please:
See CONTRIBUTING.md for details. |
Contributor
|
This PR doesn't fully meet our contributing guidelines and PR template. What needs to be fixed:
Please edit this PR description to address the above within 2 hours, or it will be automatically closed. If you believe this was flagged incorrectly, please let a maintainer know. |
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.
Type of change
What does this PR do?
Problem: ACP session updates (sessionUpdate calls) can arrive at the client out of order because they are fired
concurrently from different event handlers. This causes garbled streaming output — for example, tool results
appearing before the tool call, or text chunks arriving in the wrong sequence. Additionally, there's a race
condition where SSE delta events haven't all arrived by the time end_turn fires, causing the final assistant message
to be truncated.
Fix:
sendChain), guaranteeing they are delivered in the order they were enqueued. Individual .catch() handlers are
consolidated into the chain.
message from the API and delivers any text/reasoning content that the SSE delta events missed (comparing characters
sent via deltas vs the final message length). A reconciledParts set prevents the delta handler from sending
duplicates for parts already reconciled.
permission flow, with support for multi-question/multi-select responses and "Other" custom text answers.
pattern; adds missing question method to test context.
How did you verify your code works?