fix(acp): signal QuestionNotSupported instead of resolving empty answers#2507
Open
ayaangazali wants to merge 1 commit into
Open
fix(acp): signal QuestionNotSupported instead of resolving empty answers#2507ayaangazali wants to merge 1 commit into
ayaangazali wants to merge 1 commit into
Conversation
Resolving QuestionRequest with an empty dict is indistinguishable from a real user dismissal, so over ACP the model saw a phantom dismissal and could retry the tool. Raising QuestionNotSupported routes into the existing fallback that tells the model to ask in plain text, matching what the Wire server already does for clients without the supports_question capability.
ayaangazali
force-pushed
the
fix-acp-question-not-supported
branch
from
July 18, 2026 11:30
c2c240f to
58c63c2
Compare
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.
Related Issue
Resolve #2495
Description
In ACP server mode every
QuestionRequestgets resolved with an empty dict (src/kimi_cli/acp/session.pyline 211), which is indistinguishable from the user actually dismissing the question. The model receives "User dismissed the question without answering" even though the ACP client never rendered anything, so it can retry the tool or just give up on getting an answer.This applies the short term fix from the issue: signal
QuestionNotSupportedinstead. It's the same thing the Wire server already does for clients without thesupports_questioncapability (src/kimi_cli/wire/server.pyline 1055), and it routes into the existing fallback in the ask_user tool which tells the model to ask the question in plain text instead. So over ACP (Zed, JetBrains, etc) the question actually reaches the user now, just as regular text.One side effect worth calling out:
EnterPlanMode/ExitPlanModealso sendQuestionRequest, so over ACP they now return their "client does not support plan mode" ToolError instead of a phantom dismissal. That matches how Wire clients without question support already behave, so I think it's the right call, but flagging it in case you see it differently.Follow up ideas from the issue (out of scope here): hide the AskUserQuestion tool in ACP mode like
_sync_ask_user_tool_visibilitydoes for Wire, or map questions ontosession/request_permission. Happy to take a stab at either if there's interest.Test: added
tests/acp/test_session_questions.pywhich runs a prompt turn throughACPSessionwith a fake CLI yielding aQuestionRequestand asserts the request resolves withQuestionNotSupported.Checklist
make gen-changelogto update the changelog. (i updated CHANGELOG.md by hand in the same style, the gen-changelog skill needs a Kimi API setup i don't have)make gen-docsto update the user documentation. (checked docs/, nothing describes ACP question behavior so there was nothing to regenerate)small disclosure: i'm a freshman in college and i talked the logic through with claude code before writing this. the diff is tiny but if i misread how any of this works i would honestly love to know, still learning :)