Skip to content

task: add WebSocket transport binding #14

@muscariello

Description

@muscariello

Type: Task

Summary

Add a WebSocket transport binding so the workspace supports a bidirectional A2A transport alongside the current JSON-RPC over HTTP, REST / HTTP+JSON, gRPC, and SSE streaming support.

Why

The current bindings cover request/response transports plus server-driven streaming. WebSocket support would add a long-lived bidirectional option while still reusing the existing client transport registry, RequestHandler-based server boundary, and shared error and metadata conventions.

Scope / plan

  • Add a WebSocket protocol identifier and agent-card negotiation path
  • Implement a client transport and register it in the client transport/factory layer
  • Implement server wrapper(s) that translate framed WebSocket messages into RequestHandler operations
  • Define framing rules, request correlation, and streaming event shapes over a bidirectional connection
  • Define ServiceParams propagation during connection setup and per-message metadata handling
  • Define A2AError mapping for protocol violations, close conditions, and operation failures
  • Extend the helloworld transport end-to-end coverage and supporting docs as needed

Acceptance criteria

  • Agent cards can advertise WebSocket and the client factory can negotiate it without regressing existing binding selection
  • Unary and streaming operations work over a single documented bidirectional connection
  • Framing, request correlation, metadata propagation, and A2AError mapping are covered by tests
  • End-to-end coverage includes happy-path flows and at least one close or protocol-error path

Parent feature: #12

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No fields configured for Task.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions