Summary
google-adk[a2a] currently pins a2a-sdk>=0.3.4,<0.4. The a2a-sdk 1.x line (proto-based, A2A 1.0 spec) adds a number of capabilities that ADK's A2A layer (to_a2a, RemoteA2aAgent, A2aAgentExecutor) cannot expose while pinned to 0.3.x. This is a request to move to a 1.x-compatible range so those capabilities become reachable for ADK users.
Motivation — capabilities the current pin blocks
Building an ADK orchestrator that acts as an A2A client (RemoteA2aAgent) delegating to a second ADK agent exposed as an A2A server (to_a2a), the following a2a-sdk 1.x features are unavailable while ADK stays on 0.3.x:
- Multi-transport clients. 1.x ships a real transport abstraction (
a2a.client.transports: jsonrpc, rest, grpc) selectable via ClientConfig.supported_protocol_bindings / grpc_channel_factory. Today ADK's A2A path is effectively JSON-RPC + HTTP/JSON only — no gRPC binding, which matters for high-throughput / streaming agent-to-agent links and for teams standardizing on gRPC service meshes.
- Proto-based types (
a2a.types.a2a_pb2). Cross-language schema parity for AgentCard / Task / Message across Python/Java/Go implementations, and the foundation for the gRPC binding.
- Agent Extensions. The
A2A-Extensions header + AgentExtension on the agent card + with_a2a_extensions let agents advertise and negotiate capabilities beyond the base spec — the intended way to add features without forking the protocol. Not reachable on 0.3.x.
- Richer client architecture.
ClientFactory / Client / ClientConfig with use_client_preference, polling, and per-call push_notification_config.
- Server-side scale features. Push notifications delivered across all owners, multi-tenant support (
tenant_decorator), and DefaultContextBuilder.build_user for custom A2A user resolution — useful for multi-user / multi-tenant orchestrators.
Concrete breakage — mixed environments fail at import
The pin isn't only conservative; it strands anyone who co-installs a modern a2a-sdk. With a2a-sdk 1.1.0 present, both public A2A entry points fail hard at import time (not a graceful degradation):
from google.adk.agents.remote_a2a_agent import RemoteA2aAgent
→ ImportError: cannot import name 'ClientEvent' from 'a2a.client'
from google.adk.a2a.utils.agent_to_a2a import to_a2a
→ ModuleNotFoundError: No module named 'a2a.server.apps'
Cause: the 1.x refactor removed ClientEvent / ClientTaskManager / Consumers from a2a.client, and replaced the A2AStarletteApplication wrapper under a2a.server.apps with route-based endpoints (add_routes_to_app → Starlette routes).
Migration surface (for scoping)
The breaking surface is mostly on the server-construction side:
A2AStarletteApplication wrapper → add_routes_to_app routes (affects to_a2a / A2aAgentExecutor).
- Renames:
push_notification_config plural → singular; removal of ClientEvent / ClientTaskManager / Consumers.
- Well-known path:
/.well-known/agent.json → /.well-known/agent-card.json (RemoteA2aAgent already reads AGENT_CARD_WELL_KNOWN_PATH from the SDK with a fallback, so this is partly absorbed).
Request
- Move the
[a2a] extra to a 1.x-compatible a2a-sdk range so gRPC/REST transports, agent extensions, and proto types become reachable.
- Consider a clearer runtime error when an incompatible
a2a-sdk is installed, so co-installed environments fail with a helpful message instead of a raw ImportError.
Happy to test the [a2a] extra against a real orchestrator ↔ A2A-server ADK setup once the range is updated.
Environment
google-adk 2.3.0 (Requires-Dist: a2a-sdk>=0.3.4,<0.4 ; extra == "a2a")
a2a-sdk 1.1.0 installed
- Python 3.12
Summary
google-adk[a2a]currently pinsa2a-sdk>=0.3.4,<0.4. Thea2a-sdk1.x line (proto-based, A2A 1.0 spec) adds a number of capabilities that ADK's A2A layer (to_a2a,RemoteA2aAgent,A2aAgentExecutor) cannot expose while pinned to 0.3.x. This is a request to move to a 1.x-compatible range so those capabilities become reachable for ADK users.Motivation — capabilities the current pin blocks
Building an ADK orchestrator that acts as an A2A client (
RemoteA2aAgent) delegating to a second ADK agent exposed as an A2A server (to_a2a), the followinga2a-sdk1.x features are unavailable while ADK stays on 0.3.x:a2a.client.transports:jsonrpc,rest,grpc) selectable viaClientConfig.supported_protocol_bindings/grpc_channel_factory. Today ADK's A2A path is effectively JSON-RPC + HTTP/JSON only — no gRPC binding, which matters for high-throughput / streaming agent-to-agent links and for teams standardizing on gRPC service meshes.a2a.types.a2a_pb2). Cross-language schema parity forAgentCard/Task/Messageacross Python/Java/Go implementations, and the foundation for the gRPC binding.A2A-Extensionsheader +AgentExtensionon the agent card +with_a2a_extensionslet agents advertise and negotiate capabilities beyond the base spec — the intended way to add features without forking the protocol. Not reachable on 0.3.x.ClientFactory/Client/ClientConfigwithuse_client_preference,polling, and per-callpush_notification_config.tenant_decorator), andDefaultContextBuilder.build_userfor custom A2A user resolution — useful for multi-user / multi-tenant orchestrators.Concrete breakage — mixed environments fail at import
The pin isn't only conservative; it strands anyone who co-installs a modern
a2a-sdk. Witha2a-sdk 1.1.0present, both public A2A entry points fail hard at import time (not a graceful degradation):Cause: the 1.x refactor removed
ClientEvent/ClientTaskManager/Consumersfroma2a.client, and replaced theA2AStarletteApplicationwrapper undera2a.server.appswith route-based endpoints (add_routes_to_app→ Starlette routes).Migration surface (for scoping)
The breaking surface is mostly on the server-construction side:
A2AStarletteApplicationwrapper →add_routes_to_approutes (affectsto_a2a/A2aAgentExecutor).push_notification_configplural → singular; removal ofClientEvent/ClientTaskManager/Consumers./.well-known/agent.json→/.well-known/agent-card.json(RemoteA2aAgentalready readsAGENT_CARD_WELL_KNOWN_PATHfrom the SDK with a fallback, so this is partly absorbed).Request
[a2a]extra to a 1.x-compatiblea2a-sdkrange so gRPC/REST transports, agent extensions, and proto types become reachable.a2a-sdkis installed, so co-installed environments fail with a helpful message instead of a rawImportError.Happy to test the
[a2a]extra against a real orchestrator ↔ A2A-server ADK setup once the range is updated.Environment
google-adk2.3.0 (Requires-Dist: a2a-sdk>=0.3.4,<0.4 ; extra == "a2a")a2a-sdk1.1.0 installed