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:
- v1.0 data model — Update structs for v1.0 fields (AgentCard, Part, Message, Task, etc.) while keeping v0.3 wire format working
- v1.0 JSON-RPC method names — Accept both PascalCase and legacy method names on server; client sends v1.0 names
- v1.0 error types — Add
ExtensionSupportRequiredError (-32008) and VersionNotSupportedError (-32009)
- Extension mechanism —
A2A-Extensions header negotiation on server and client
- A2A-Version header — Version validation with
VersionNotSupportedError
- Push notification CRUD — Full implementation of set/get/list/delete with webhook sender behaviour
- 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
A2A v1.0 Protocol Support
This is a tracking issue for adding A2A v1.0 protocol support to
a2a-elixir. The work comes fromzeroasterisk/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-python1.0-devbranch) introduces breaking changes from v0.3:SendMessageinstead ofmessage/send)Partstructure (replaces discriminatedTextPart/FilePart/DataPart)SCREAMING_SNAKE_CASEenums (TASK_STATE_WORKINGinstead ofworking)supportedInterfaces[],documentation_url,signatures,icon_url)A2A-Extensionsheader negotiation)A2A-Versionheader validation)ExtensionSupportRequiredError,VersionNotSupportedError)ListTaskPushNotificationConfigs,DeleteTaskPushNotificationConfig,GetExtendedAgentCard)Proposed PR Series
Each PR is self-contained with tests and backward compatibility:
ExtensionSupportRequiredError(-32008) andVersionNotSupportedError(-32009)A2A-Extensionsheader negotiation on server and clientVersionNotSupportedError/:tenant/:agent/routing with per-tenant task isolation (optional Plug)Approach
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