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

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions