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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions