Skip to content

transports: Revisions on streamable-http/ws transport request patterns#1064

Merged
benbrandt merged 2 commits into
agentclientprotocol:mainfrom
alexhancock:alexhancock/streamable-http-ws-request-pattern-revisions
Apr 23, 2026
Merged

transports: Revisions on streamable-http/ws transport request patterns#1064
benbrandt merged 2 commits into
agentclientprotocol:mainfrom
alexhancock:alexhancock/streamable-http-ws-request-pattern-revisions

Conversation

@alexhancock
Copy link
Copy Markdown
Contributor

Per discussion in the Transports WG Zulip here is a revision to the request patterns for consideration.

Summary

  • A single Acp-Connection-Id scoped GET stream delivers all server -> client responses and messages within a connection
  • POSTS now return immediately with 202 Accepted
  • We now will require HTTP/2 for multiplexing and using a single TCP connection
  • Websocket implementation is unchanged

cc @anna239 @benbrandt

@alexhancock alexhancock requested a review from a team as a code owner April 23, 2026 14:34
@benbrandt benbrandt enabled auto-merge (squash) April 23, 2026 14:42
auto-merge was automatically disabled April 23, 2026 14:43

Head branch was pushed to by a user without write access

@alexhancock alexhancock force-pushed the alexhancock/streamable-http-ws-request-pattern-revisions branch from 5353b86 to 1d7cb75 Compare April 23, 2026 14:43
@alexhancock
Copy link
Copy Markdown
Contributor Author

(@benbrandt just pushed a one line formatting thing after your approve)

@benbrandt benbrandt enabled auto-merge (squash) April 23, 2026 14:46
auto-merge was automatically disabled April 23, 2026 14:53

Head branch was pushed to by a user without write access

alexhancock added a commit to aaif-goose/goose that referenced this pull request Apr 23, 2026
Implements the 2026-04-23 revision of the Streamable HTTP & WebSocket transport RFD:

agentclientprotocol/agent-client-protocol#1064

- Two-header identity model: Acp-Connection-Id (returned at initialize)
  and Acp-Session-Id (required on session-scoped POSTs).
- Single long-lived GET SSE stream per connection carries all
  server→client messages (responses, notifications, and server-initiated
  requests), demuxed by client via sessionId in the JSON-RPC body.
- POST initialize returns 200 OK with the initialize response JSON body
  and Acp-Connection-Id header. All other POSTs return 202 Accepted
  immediately; the agent's response is delivered on the GET stream.
- Introduces a shared ConnectionRegistry used by both HTTP and WebSocket
  handlers, backed by a broadcast channel for fan-out to SSE/WS sinks.
- WebSocket upgrade on the same /acp endpoint attaches to the same
  connection abstraction.
- DELETE /acp tears down the connection and aborts the agent task.

Signed-off-by: Alex Hancock <alexhancock@block.xyz>
alexhancock added a commit to aaif-goose/goose that referenced this pull request Apr 23, 2026
Implements the 2026-04-23 revision of the Streamable HTTP & WebSocket transport RFD:

agentclientprotocol/agent-client-protocol#1064

- Two-header identity model: Acp-Connection-Id (returned at initialize)
  and Acp-Session-Id (required on session-scoped POSTs).
- Single long-lived GET SSE stream per connection carries all
  server→client messages (responses, notifications, and server-initiated
  requests), demuxed by client via sessionId in the JSON-RPC body.
- POST initialize returns 200 OK with the initialize response JSON body
  and Acp-Connection-Id header. All other POSTs return 202 Accepted
  immediately; the agent's response is delivered on the GET stream.
- Introduces a shared ConnectionRegistry used by both HTTP and WebSocket
  handlers, backed by a broadcast channel for fan-out to SSE/WS sinks.
- WebSocket upgrade on the same /acp endpoint attaches to the same
  connection abstraction.
- DELETE /acp tears down the connection and aborts the agent task.

Signed-off-by: Alex Hancock <alexhancock@block.xyz>
alexhancock added a commit to aaif-goose/goose that referenced this pull request Apr 23, 2026
Implements the 2026-04-23 revision of the Streamable HTTP & WebSocket transport RFD:

agentclientprotocol/agent-client-protocol#1064

- Two-header identity model: Acp-Connection-Id (returned at initialize)
  and Acp-Session-Id (required on session-scoped POSTs).
- Single long-lived GET SSE stream per connection carries all
  server→client messages (responses, notifications, and server-initiated
  requests), demuxed by client via sessionId in the JSON-RPC body.
- POST initialize returns 200 OK with the initialize response JSON body
  and Acp-Connection-Id header. All other POSTs return 202 Accepted
  immediately; the agent's response is delivered on the GET stream.
- Introduces a shared ConnectionRegistry used by both HTTP and WebSocket
  handlers, backed by a broadcast channel for fan-out to SSE/WS sinks.
- WebSocket upgrade on the same /acp endpoint attaches to the same
  connection abstraction.
- DELETE /acp tears down the connection and aborts the agent task.

Signed-off-by: Alex Hancock <alexhancock@block.xyz>
@benbrandt benbrandt merged commit 6f4ef31 into agentclientprotocol:main Apr 23, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants