Skip to content

A2A v1.0 Protocol Support #13

@zeroasterisk

Description

@zeroasterisk

A2A v1.0 Protocol Support

This is a tracking issue for adding A2A v1.0 protocol support to a2a-elixir. The work comes from zeroasterisk/a2a-elixir, which implemented the full v1.0 spec as a standalone SDK. Rather than maintain two competing Elixir A2A packages, we'd like to contribute that work here as a series of focused PRs.

Context

The A2A v1.0 spec (currently in alpha on a2aproject/a2a-python 1.0-dev branch) introduces breaking changes from v0.3:

  • PascalCase JSON-RPC method names (e.g., SendMessage instead of message/send)
  • Flat Part structure (replaces discriminated TextPart/FilePart/DataPart)
  • SCREAMING_SNAKE_CASE enums (TASK_STATE_WORKING instead of working)
  • New fields on AgentCard (supportedInterfaces[], documentation_url, signatures, icon_url)
  • Extension mechanism (A2A-Extensions header negotiation)
  • Version header support (A2A-Version header validation)
  • New error types (ExtensionSupportRequiredError, VersionNotSupportedError)
  • New methods (ListTaskPushNotificationConfigs, DeleteTaskPushNotificationConfig, GetExtendedAgentCard)
  • Push notification CRUD (full implementation, not just stubs)
  • Multi-tenant server support

Proposed PR Series

Each PR is self-contained with tests and backward compatibility:

  1. v1.0 data model — Update structs for v1.0 fields (AgentCard, Part, Message, Task, etc.) while keeping v0.3 wire format working
  2. v1.0 JSON-RPC method names — Accept both PascalCase and legacy method names on server; client sends v1.0 names
  3. v1.0 error types — Add ExtensionSupportRequiredError (-32008) and VersionNotSupportedError (-32009)
  4. Extension mechanismA2A-Extensions header negotiation on server and client
  5. A2A-Version header — Version validation with VersionNotSupportedError
  6. Push notification CRUD — Full implementation of set/get/list/delete with webhook sender behaviour
  7. Multi-tenant server — Path-based /:tenant/:agent/ routing with per-tenant task isolation (optional Plug)

Approach

  • All PRs maintain backward compatibility with v0.3 clients
  • Server accepts both v0.3 and v1.0 method names/formats
  • Each PR includes tests
  • Builds on the existing architecture (Agent behaviour, TaskStore, Plug, etc.)

We admire the TCK integration, agent runtime, and overall ergonomics of this library — it's the right foundation for the Elixir A2A ecosystem.

cc @zeroasterisk

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions