Finish Agent Questions (ACP Elicitations) — OpenAPI, Tests, E2E and Live Verification - #89
Closed
lukemarsden wants to merge 7 commits into
Closed
lukemarsden wants to merge 7 commits into
lukemarsden wants to merge 7 commits into
Conversation
…ccept answers Spec-Ref: helix-specs@7f9f3cc63:002731_implement-the-feature
…-end-agent Spec-Ref: helix-specs@5878c07a9:002731_implement-the-feature
Spec-Ref: helix-specs@fad4986b2:002750_finish-agent-questions
Spec-Ref: helix-specs@fad4986b2:002750_finish-agent-questions
Spec-Ref: helix-specs@fad4986b2:002750_finish-agent-questions
…est_id Spec-Ref: helix-specs@fad4986b2:002750_finish-agent-questions
Spec-Ref: helix-specs@b30683e41:002750_finish-agent-questions
|
Bugbot is not enabled for your account, so this pull request was not reviewed. Enable Bugbot in the Cursor dashboard to get automatic reviews on future PRs. |
|
Superseded by the merged transport in #95 and the merged Helix implementation in helixml/helix#3220. Closing to keep one maintained implementation path. |
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.
Finish the feature described below. Most of it is already committed on the branch you are starting on — read it before writing anything.
Finish the agent-questions (ACP elicitation) feature — it is ~70% built already
This continues task 002731, whose sandbox lost its agent connection permanently before the
work could be finished. All of the code that exists is already committed and pushed to
the project git server on the branch
feature/002731-end-to-end-agentin both thehelixand
zedrepos. You are starting on that branch. Do not re-implement any of it; read itfirst, then finish the remaining items.
Run this before anything else, in both repos, and read what is there:
helix:0cc5290ce(design doc) on top of9ddbd5d74"feat(api): record and answeragent questions from ACP elicitations" — 2492 insertions across 23 files.
zed:8fbf40ad92"feat(external_websocket_sync): mirror ACP elicitations to Helix andaccept answers" — 629 insertions across 4 files.
The full design lives in
design/2026-08-11-agent-questions-elicitation.md(committed) andin
design/tasks/002731_*/{requirements,design,tasks}.mdin the helix-specs repo. Thosewere reviewed and approved; follow them.
What the feature is
Claude Code asks the user a question mid-turn via its built-in
AskUserQuestiontool. Theclaude-agent-acpadapter turns that into an ACP form elicitation and blocks the turnuntil the client answers. Helix could not see or answer those questions at all —
crates/external_websocket_sync/droppedAgentThreadEntry::Elicitationon the floor, andgrep -rn elicitation api/returned nothing. The committed work adds: the Zed→Helix syncevents, a
respond_elicitationcommand back to Zed, anagent_elicitationsstore, a RESTendpoint, and a React card that renders the question's options and submits an answer.
The Zed agent panel's own elicitation UI is known-broken and deliberately staying broken
(it draws the card with no option controls and no text field). Helix must work without it.
Do not fix it, do not depend on it, and do not rebase Zed onto upstream.
What is left — this is your whole job
./stack update_openapihas never been run, and the frontend cannot build without it.frontend/src/services/elicitationService.tsimportsTypesElicitationRespondResponseand calls
client.v1SessionsElicitationsRespondCreate/v1SessionsElicitationsDetail,but
grep -c "v1SessionsElicitationsRespondCreate" frontend/src/api/api.tsreturns0.Regenerate and commit the generated files, then confirm
cd frontend && yarn buildisclean.
Go tests. None exist yet. Write them in the
suite.Suite+ gomock style ofapi/pkg/server/websocket_external_agent_sync_test.go, covering: theelicitation_requested/elicitation_resolved/elicitation_resync/elicitation_response_ackhandlers; the REST endpoint's auth and 404/403/409 paths; twoclients answering at once; an answer arriving after cancel; the empty-
request_idfallback; reconnect-does-not-cancel and resync-absence-does-cancel-after-grace; and
TestAutoWake_SkipsInteractionBlockedOnUserQuestion. Run them.E2E phase. Add Phase 17 to
zed/crates/external_websocket_sync/e2e-test/helix-ws-test-server/main.go:elicitation_requested (assert a non-empty schema) →
respond_elicitation→elicitation_resolved(accepted)→message_completedfor the same turn. Drive itthrough the synthetic seam — do not make a CI phase depend on the model choosing to
call a tool; say so in the phase comment. Then run the full dockerized suite
(
./run_docker_e2e.sh) and see it green.CLAUDE.mdis absolute on this: if you touchthe e2e tests you must run them. "It compiles" and "it follows the pattern" are not
evidence.
sandbox-versions.txt— bumpZED_COMMITto your final zed commit.Live end-to-end verification in this inner Helix, with screenshots. This is the part
that actually proves the feature and it has never been done:
AskUserQuestion;second question in the same session works;
answerable.
If any of these fail, fix them or say plainly which ones do not work. Do not report the
feature as done on the strength of unit tests.
Then ship it
Merge order from
CLAUDE.md, exactly: commit in zed (do not push yet) →git rev-parse HEAD→ bump
ZED_COMMITinsandbox-versions.txt→ open the Helix PR first → push the zedbranch and open its PR with
gh pr create --repo helixml/zed→ CI green on both → merge zedfirst, then helix. Rebase if
ZED_COMMIThas moved.Environment warnings, learned the hard way on the last attempt
with it. Commit and push early and often — every meaningful chunk of work, pushed to
the project git server. Do not accumulate hours of uncommitted work.
sleeps (the last attempt sat insleep 540waiting on a build).Poll in a loop with a short interval so you notice a build that finished or died.
go build ./pkg/...andpackage-scoped tests over full-workspace builds where you can.
🔗 Open in Helix
📋 Spec:
🚀 Built with Helix