feat(acp): add elicitation/create JSON-RPC method with capability negotiation - #99
Closed
Million-mo wants to merge 9 commits into
Closed
feat(acp): add elicitation/create JSON-RPC method with capability negotiation#99Million-mo wants to merge 9 commits into
Million-mo wants to merge 9 commits into
Conversation
Remove unused noqa comments, fix import ordering, add missing docstring arg. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add elicitation_create() to Client protocol, ACPRequests, both connection handlers. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
DefaultACPClient auto-accepts with tracking, HeadlessACPClient gates on auto_grant, NoOpClient cancels. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Dual-path in ACPInputProvider: use elicitation_create when client declares capability, fall back to request_permission for legacy clients. Add send_elicitation_complete to ACPNotifications. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Add openspec changes for acp-elicitation and acp-streamable-http-ws-server, plus .claude skills/commands for openspec workflows. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This reverts commit bcc0d06. RFC docs should not have been deleted - they were unrelated working tree pollution from subagents. Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
… async gap - Remove send_elicitation_complete from ACPNotifications: it was sending a ClientNotification (client→agent) in the wrong direction via session/update with type: ignore - Add elicitation/complete handler in agent connection to receive client notifications - Add TODO comment in input_provider explaining URL-mode async completion is deferred Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
- Add elicitation_id field to ElicitationCreateRequest (required for URL mode correlation) - Restructure ElicitationCompleteNotification: Agent→Client direction, only elicitation_id field - Move ElicitationCompleteNotification from ClientNotification to AgentNotification - Add ElicitationItem schema and restructure URLElicitationRequiredError with code -32042 - Add elicitation_complete() to Client protocol and AgentSideConnection - Add send_elicitation_complete() to ACPNotifications with correct RFD structure - Add elicitation/complete handler to ClientSideConnection (receives Agent→Client) - Remove elicitation/complete from _agent_handler (no longer Client→Agent) - Pass elicitation_id in _get_url_elicitation - Add elicitation_complete stubs to all 3 client implementations Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
3 tasks
Owner
Author
|
Owner
Author
|
This was referenced Aug 22, 2026
Closed
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
Add
elicitation/createJSON-RPC method support to agentpool as an ACP server, enabling proper structured user input with backward-compatible fallback torequest_permissionfor legacy clients.Key Changes
Wave 1 — Schema Types (already committed in
6aa2167f9)src/acp/schema/elicitation.pywith 4 types:ElicitationCreateRequest,ElicitationCreateResponse,ElicitationCompleteNotification,URLElicitationRequiredErrorElicitationCapabilities(create: bool)added toClientCapabilitiesAgentRequest,ClientResponse,ClientNotificationunions,ClientMethodliteral, and__init__.pyexportsWave 2 — Protocol & Routing
elicitation_create()method onClientprotocol,ACPRequests, and both connection handlers"elicitation/create"in_handle_client_method()Wave 3 — Server Integration
ACPInputProvider.get_elicitation(): useselicitation_createwhen client declares capability, falls back torequest_permissionhack for legacy clientssend_elicitation_complete()onACPNotifications_map_elicitation_create_response()static method for response mappingAccepted Plan Divergences (ACP Spec Alignment)
The implementation follows the actual ACP RFD specification, which differs from the original plan in these ways:
ElicitationCapabilities.create: boolinstead ofform: bool+url: boolmodefield onElicitationCreateRequest— URL mode determined byurlfield presenceElicitationCompleteNotificationinClientNotification(client→agent direction is correct per ACP spec)ElicitationCompleteNotificationhasaction/contentfollowing ACP response model patternTest plan
uv run mypy src/acp/ src/agentpool_server/acp_server/— 0 new errors (pre-existing in event_converter.py)uv run ruff check src/acp/ src/agentpool_server/acp_server/— 0 new errors (pre-existing in event_converter.py)uv run pytest tests/ -k "acp"— 190 passed, 2 pre-existing failuresacp.schemaaction=acceptaction=cancelACPInputProvider._client_supports_elicitation()checks capability correctlyUltraworked with Sisyphus