From fcfa9bce374aa78383f34d8ea1c4c284e64c2bd2 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Mon, 5 Jan 2026 12:37:38 +0000 Subject: [PATCH 01/11] implementing different a2a transport --- lib/crewai/src/crewai/a2a/config.py | 5 +++++ lib/crewai/src/crewai/a2a/utils.py | 8 ++++++-- lib/crewai/src/crewai/a2a/wrapper.py | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index c536028825..f2c15fa3f0 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -7,6 +7,7 @@ from typing import Annotated +from a2a.types import TransportProtocol from pydantic import ( BaseModel, BeforeValidator, @@ -62,3 +63,7 @@ class A2AConfig(BaseModel): default=False, description='If True, return the A2A agent\'s result directly when status is "completed" without asking the server agent to respond. If False, always ask the server agent to respond, allowing it to potentially delegate again.', ) + transport_protocol: TransportProtocol | None = Field( + default=None, + description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", + ) diff --git a/lib/crewai/src/crewai/a2a/utils.py b/lib/crewai/src/crewai/a2a/utils.py index 4bbadc00c5..af9c63c6a3 100644 --- a/lib/crewai/src/crewai/a2a/utils.py +++ b/lib/crewai/src/crewai/a2a/utils.py @@ -235,6 +235,7 @@ def execute_a2a_delegation( agent_branch: Any | None = None, response_model: type[BaseModel] | None = None, turn_number: int | None = None, + transport_protocol: TransportProtocol | None = None, ) -> dict[str, Any]: """Execute a task delegation to a remote A2A agent with multi-turn support. @@ -262,7 +263,7 @@ def execute_a2a_delegation( agent_branch: Optional agent tree branch for logging response_model: Optional Pydantic model for structured outputs turn_number: Optional turn number for multi-turn conversations - + transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) Returns: Dictionary with: - status: "completed", "input_required", "failed", etc. @@ -311,6 +312,7 @@ def execute_a2a_delegation( agent_id=agent_id, agent_role=agent_role, response_model=response_model, + transport_protocol=transport_protocol, ) ) @@ -347,6 +349,7 @@ async def _execute_a2a_delegation_async( agent_id: str | None = None, agent_role: str | None = None, response_model: type[BaseModel] | None = None, + transport_protocol: TransportProtocol | None = None, ) -> dict[str, Any]: """Async implementation of A2A delegation with multi-turn support. @@ -368,6 +371,7 @@ async def _execute_a2a_delegation_async( agent_id: Agent identifier for logging agent_role: Agent role for logging response_model: Optional Pydantic model for structured outputs + transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) Returns: Dictionary with status, result/error, and new history @@ -446,7 +450,7 @@ async def _execute_a2a_delegation_async( extensions=extensions, ) - transport_protocol = TransportProtocol("JSONRPC") + transport_protocol = transport_protocol or TransportProtocol("JSONRPC") new_messages: list[Message] = [*conversation_history, message] crewai_event_bus.emit( None, diff --git a/lib/crewai/src/crewai/a2a/wrapper.py b/lib/crewai/src/crewai/a2a/wrapper.py index 4c98e6f30d..9e56d3136a 100644 --- a/lib/crewai/src/crewai/a2a/wrapper.py +++ b/lib/crewai/src/crewai/a2a/wrapper.py @@ -568,6 +568,7 @@ def _delegate_to_a2a( agent_branch=agent_branch, response_model=agent_config.response_model, turn_number=turn_num + 1, + transport_protocol=agent_config.transport_protocol, ) conversation_history = a2a_result.get("history", []) From 6db8f73dbb7e796c44c4279164f08db7d953ba91 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Tue, 6 Jan 2026 14:40:01 +0000 Subject: [PATCH 02/11] defaulting the transport protocol to JSONRPC by default --- lib/crewai/src/crewai/a2a/config.py | 4 ++-- lib/crewai/src/crewai/a2a/utils.py | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index f2c15fa3f0..e76990bbae 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -63,7 +63,7 @@ class A2AConfig(BaseModel): default=False, description='If True, return the A2A agent\'s result directly when status is "completed" without asking the server agent to respond. If False, always ask the server agent to respond, allowing it to potentially delegate again.', ) - transport_protocol: TransportProtocol | None = Field( - default=None, + transport_protocol: TransportProtocol = Field( + default=TransportProtocol("JSONRPC"), description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", ) diff --git a/lib/crewai/src/crewai/a2a/utils.py b/lib/crewai/src/crewai/a2a/utils.py index af9c63c6a3..e45c5fdc3d 100644 --- a/lib/crewai/src/crewai/a2a/utils.py +++ b/lib/crewai/src/crewai/a2a/utils.py @@ -450,7 +450,6 @@ async def _execute_a2a_delegation_async( extensions=extensions, ) - transport_protocol = transport_protocol or TransportProtocol("JSONRPC") new_messages: list[Message] = [*conversation_history, message] crewai_event_bus.emit( None, From 4207386ce66031783c9223fb1455e5e071a87c19 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Tue, 6 Jan 2026 17:15:54 +0000 Subject: [PATCH 03/11] removing the optional transport_protocol --- lib/crewai/src/crewai/a2a/utils.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/utils.py b/lib/crewai/src/crewai/a2a/utils.py index e45c5fdc3d..59d689f008 100644 --- a/lib/crewai/src/crewai/a2a/utils.py +++ b/lib/crewai/src/crewai/a2a/utils.py @@ -220,6 +220,7 @@ async def _fetch_agent_card_request() -> httpx.Response: def execute_a2a_delegation( endpoint: str, + transport_protocol: TransportProtocol, auth: AuthScheme | None, timeout: int, task_description: str, @@ -235,7 +236,6 @@ def execute_a2a_delegation( agent_branch: Any | None = None, response_model: type[BaseModel] | None = None, turn_number: int | None = None, - transport_protocol: TransportProtocol | None = None, ) -> dict[str, Any]: """Execute a task delegation to a remote A2A agent with multi-turn support. @@ -248,6 +248,7 @@ def execute_a2a_delegation( Args: endpoint: A2A agent endpoint URL (AgentCard URL) + transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) auth: Optional AuthScheme for authentication (Bearer, OAuth2, API Key, HTTP Basic/Digest) timeout: Request timeout in seconds task_description: The task to delegate @@ -263,7 +264,6 @@ def execute_a2a_delegation( agent_branch: Optional agent tree branch for logging response_model: Optional Pydantic model for structured outputs turn_number: Optional turn number for multi-turn conversations - transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) Returns: Dictionary with: - status: "completed", "input_required", "failed", etc. @@ -333,6 +333,7 @@ def execute_a2a_delegation( async def _execute_a2a_delegation_async( endpoint: str, + transport_protocol: TransportProtocol, auth: AuthScheme | None, timeout: int, task_description: str, @@ -349,12 +350,12 @@ async def _execute_a2a_delegation_async( agent_id: str | None = None, agent_role: str | None = None, response_model: type[BaseModel] | None = None, - transport_protocol: TransportProtocol | None = None, ) -> dict[str, Any]: """Async implementation of A2A delegation with multi-turn support. Args: endpoint: A2A agent endpoint URL + transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) auth: Optional AuthScheme for authentication timeout: Request timeout in seconds task_description: Task to delegate @@ -371,7 +372,6 @@ async def _execute_a2a_delegation_async( agent_id: Agent identifier for logging agent_role: Agent role for logging response_model: Optional Pydantic model for structured outputs - transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json) Returns: Dictionary with status, result/error, and new history From df30c90c86b90052c46628a62482046af7c7b461 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Wed, 7 Jan 2026 19:46:45 +0000 Subject: [PATCH 04/11] instead of default moving to default_factory for transport_protocol --- lib/crewai/src/crewai/a2a/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index e76990bbae..644a9a3853 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -64,6 +64,6 @@ class A2AConfig(BaseModel): description='If True, return the A2A agent\'s result directly when status is "completed" without asking the server agent to respond. If False, always ask the server agent to respond, allowing it to potentially delegate again.', ) transport_protocol: TransportProtocol = Field( - default=TransportProtocol("JSONRPC"), + default_factory=TransportProtocol("JSONRPC"), description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", ) From bcdd4a0511941547dec5839a26027c88e2569fb0 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Wed, 7 Jan 2026 20:02:42 +0000 Subject: [PATCH 05/11] fixing cursor comments --- lib/crewai/src/crewai/a2a/config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 644a9a3853..9aaa6b5f50 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -64,6 +64,6 @@ class A2AConfig(BaseModel): description='If True, return the A2A agent\'s result directly when status is "completed" without asking the server agent to respond. If False, always ask the server agent to respond, allowing it to potentially delegate again.', ) transport_protocol: TransportProtocol = Field( - default_factory=TransportProtocol("JSONRPC"), + default_factory=lambda: TransportProtocol("JSONRPC"), description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", ) From a0839c8bb1cf3ef8e7498a07c98281f80d9da12e Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Wed, 7 Jan 2026 20:41:04 +0000 Subject: [PATCH 06/11] fixing cursor comments --- lib/crewai/src/crewai/a2a/config.py | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 9aaa6b5f50..0eb5bfa51d 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -5,9 +5,15 @@ from __future__ import annotations -from typing import Annotated +from typing import TYPE_CHECKING, Annotated, Any + +if TYPE_CHECKING: + from a2a.types import TransportProtocol +else: + # At runtime, use Any as fallback when a2a-sdk is not installed + # The actual import will happen in _default_transport_protocol() when needed + TransportProtocol = Any # type: ignore[misc,assignment] -from a2a.types import TransportProtocol from pydantic import ( BaseModel, BeforeValidator, @@ -19,6 +25,18 @@ from crewai.a2a.auth.schemas import AuthScheme +def _default_transport_protocol() -> Any: + """Get default transport protocol, handling optional a2a-sdk dependency.""" + try: + from a2a.types import TransportProtocol + + return TransportProtocol("JSONRPC") + except ImportError: + # Fallback to string when a2a-sdk is not installed + # This will be validated when A2A functionality is actually used + return "JSONRPC" + + http_url_adapter = TypeAdapter(HttpUrl) Url = Annotated[ @@ -64,6 +82,6 @@ class A2AConfig(BaseModel): description='If True, return the A2A agent\'s result directly when status is "completed" without asking the server agent to respond. If False, always ask the server agent to respond, allowing it to potentially delegate again.', ) transport_protocol: TransportProtocol = Field( - default_factory=lambda: TransportProtocol("JSONRPC"), + default_factory=_default_transport_protocol, description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", ) From 3c17e836f2c82e07796a78369ddf301838de7c40 Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Thu, 8 Jan 2026 06:34:32 +0000 Subject: [PATCH 07/11] fixing cursor comments --- lib/crewai/src/crewai/a2a/config.py | 4 ++-- lib/crewai/src/crewai/a2a/utils.py | 2 ++ lib/crewai/src/crewai/a2a/wrapper.py | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 4abb2a5c3a..24e968352e 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -5,7 +5,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Annotated, Any +from typing import TYPE_CHECKING, Annotated, Any, ClassVar if TYPE_CHECKING: from a2a.types import TransportProtocol @@ -13,7 +13,6 @@ # At runtime, use Any as fallback when a2a-sdk is not installed # The actual import will happen in _default_transport_protocol() when needed TransportProtocol = Any # type: ignore[misc,assignment] -from typing import Annotated, Any, ClassVar from pydantic import ( BaseModel, @@ -71,6 +70,7 @@ class A2AConfig(BaseModel): fail_fast: If True, raise error when agent unreachable; if False, skip and continue. trust_remote_completion_status: If True, return A2A agent's result directly when completed. updates: Update mechanism config. + transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json). """ model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") diff --git a/lib/crewai/src/crewai/a2a/utils.py b/lib/crewai/src/crewai/a2a/utils.py index 212b99f6f1..0436c97ae2 100644 --- a/lib/crewai/src/crewai/a2a/utils.py +++ b/lib/crewai/src/crewai/a2a/utils.py @@ -452,6 +452,7 @@ async def aexecute_a2a_delegation( agent_role=agent_role, response_model=response_model, updates=updates, + transport_protocol=transport_protocol, ) crewai_event_bus.emit( @@ -469,6 +470,7 @@ async def aexecute_a2a_delegation( async def _aexecute_a2a_delegation_impl( endpoint: str, + transport_protocol: TransportProtocol, auth: AuthScheme | None, timeout: int, task_description: str, diff --git a/lib/crewai/src/crewai/a2a/wrapper.py b/lib/crewai/src/crewai/a2a/wrapper.py index 75947029f0..7d52e85b82 100644 --- a/lib/crewai/src/crewai/a2a/wrapper.py +++ b/lib/crewai/src/crewai/a2a/wrapper.py @@ -771,6 +771,7 @@ def _delegate_to_a2a( response_model=agent_config.response_model, turn_number=turn_num + 1, updates=agent_config.updates, + transport_protocol=agent_config.transport_protocol, ) conversation_history = a2a_result.get("history", []) From a40da9cb95cb7c7127d13c72ee6936656f2d275c Mon Sep 17 00:00:00 2001 From: Koushiv Sadhukhan Date: Thu, 8 Jan 2026 07:00:20 +0000 Subject: [PATCH 08/11] fixing cursor comments --- lib/crewai/src/crewai/a2a/config.py | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 24e968352e..6dcc41eb76 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -26,6 +26,21 @@ from crewai.a2a.auth.schemas import AuthScheme +class _FallbackTransportProtocol: + """Lightweight fallback with a .value attribute for compatibility. + + This is used only when a2a-sdk is not installed, so that downstream + code accessing ``transport_protocol.value`` continues to work without + raising AttributeError. Actual A2A usage will still require a2a-sdk. + """ + + def __init__(self, value: str) -> None: + self.value = value + + def __str__(self) -> str: + return self.value + + def _default_transport_protocol() -> Any: """Get default transport protocol, handling optional a2a-sdk dependency.""" try: @@ -33,9 +48,9 @@ def _default_transport_protocol() -> Any: return TransportProtocol("JSONRPC") except ImportError: - # Fallback to string when a2a-sdk is not installed - # This will be validated when A2A functionality is actually used - return "JSONRPC" + # Fallback to an object with a .value attribute when a2a-sdk is not installed. + # This avoids AttributeError in downstream code that expects TransportProtocol. + return _FallbackTransportProtocol("JSONRPC") try: from crewai.a2a.updates import UpdateConfig except ImportError: From 40cc5c1365d985e7a7571fac97b2868669763d0a Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Fri, 9 Jan 2026 09:45:12 -0500 Subject: [PATCH 09/11] chore: use redefined type instead of optional dep --- lib/crewai/src/crewai/a2a/config.py | 40 +++-------------------------- 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 6dcc41eb76..0aa7bd4c9e 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -5,14 +5,7 @@ from __future__ import annotations -from typing import TYPE_CHECKING, Annotated, Any, ClassVar - -if TYPE_CHECKING: - from a2a.types import TransportProtocol -else: - # At runtime, use Any as fallback when a2a-sdk is not installed - # The actual import will happen in _default_transport_protocol() when needed - TransportProtocol = Any # type: ignore[misc,assignment] +from typing import Annotated, Any, ClassVar, Literal from pydantic import ( BaseModel, @@ -26,31 +19,6 @@ from crewai.a2a.auth.schemas import AuthScheme -class _FallbackTransportProtocol: - """Lightweight fallback with a .value attribute for compatibility. - - This is used only when a2a-sdk is not installed, so that downstream - code accessing ``transport_protocol.value`` continues to work without - raising AttributeError. Actual A2A usage will still require a2a-sdk. - """ - - def __init__(self, value: str) -> None: - self.value = value - - def __str__(self) -> str: - return self.value - - -def _default_transport_protocol() -> Any: - """Get default transport protocol, handling optional a2a-sdk dependency.""" - try: - from a2a.types import TransportProtocol - - return TransportProtocol("JSONRPC") - except ImportError: - # Fallback to an object with a .value attribute when a2a-sdk is not installed. - # This avoids AttributeError in downstream code that expects TransportProtocol. - return _FallbackTransportProtocol("JSONRPC") try: from crewai.a2a.updates import UpdateConfig except ImportError: @@ -115,7 +83,7 @@ class A2AConfig(BaseModel): default_factory=_get_default_update_config, description="Update mechanism config", ) - transport_protocol: TransportProtocol = Field( - default_factory=_default_transport_protocol, - description="Optional A2A transport protocol (grpc, jsonrpc, http+json)", + transport_protocol: Literal["JSONRPC", "GRPC", "HTTP+JSON"] = Field( + default="JSONRPC", + description="Specified mode of A2A transport protocol", ) From 2cafbbf255a2e0fb7d4805ffb408dbb09d29a26f Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Mon, 12 Jan 2026 10:50:40 -0500 Subject: [PATCH 10/11] fix: ensure proper typing throughout execution chain --- lib/crewai/src/crewai/a2a/config.py | 2 +- lib/crewai/src/crewai/a2a/utils.py | 14 ++++++-------- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/lib/crewai/src/crewai/a2a/config.py b/lib/crewai/src/crewai/a2a/config.py index 0aa7bd4c9e..535db971fc 100644 --- a/lib/crewai/src/crewai/a2a/config.py +++ b/lib/crewai/src/crewai/a2a/config.py @@ -53,7 +53,7 @@ class A2AConfig(BaseModel): fail_fast: If True, raise error when agent unreachable; if False, skip and continue. trust_remote_completion_status: If True, return A2A agent's result directly when completed. updates: Update mechanism config. - transport_protocol: Optional A2A transport protocol (grpc, jsonrpc, http+json). + transport_protocol: A2A transport protocol (grpc, jsonrpc, http+json). """ model_config: ClassVar[ConfigDict] = ConfigDict(extra="forbid") diff --git a/lib/crewai/src/crewai/a2a/utils.py b/lib/crewai/src/crewai/a2a/utils.py index 0436c97ae2..93aee5215b 100644 --- a/lib/crewai/src/crewai/a2a/utils.py +++ b/lib/crewai/src/crewai/a2a/utils.py @@ -7,7 +7,7 @@ from contextlib import asynccontextmanager from functools import lru_cache import time -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Literal import uuid from a2a.client import A2AClientHTTPError, Client, ClientConfig, ClientFactory @@ -18,7 +18,6 @@ PushNotificationConfig as A2APushNotificationConfig, Role, TextPart, - TransportProtocol, ) from aiocache import cached # type: ignore[import-untyped] from aiocache.serializers import PickleSerializer # type: ignore[import-untyped] @@ -259,7 +258,7 @@ async def _fetch_agent_card_request() -> httpx.Response: def execute_a2a_delegation( endpoint: str, - transport_protocol: TransportProtocol, + transport_protocol: Literal["JSONRPC", "GRPC", "HTTP+JSON"], auth: AuthScheme | None, timeout: int, task_description: str, @@ -352,7 +351,7 @@ def execute_a2a_delegation( async def aexecute_a2a_delegation( endpoint: str, - transport_protocol: TransportProtocol, + transport_protocol: Literal["JSONRPC", "GRPC", "HTTP+JSON"], auth: AuthScheme | None, timeout: int, task_description: str, @@ -388,7 +387,6 @@ async def aexecute_a2a_delegation( metadata: Additional metadata extensions: Protocol extensions conversation_history: Previous Message objects - is_multiturn: Whether this is a multi-turn conversation turn_number: Current turn number agent_branch: Agent tree branch for logging agent_id: Agent identifier for logging @@ -470,7 +468,7 @@ async def aexecute_a2a_delegation( async def _aexecute_a2a_delegation_impl( endpoint: str, - transport_protocol: TransportProtocol, + transport_protocol: Literal["JSONRPC", "GRPC", "HTTP+JSON"], auth: AuthScheme | None, timeout: int, task_description: str, @@ -635,7 +633,7 @@ async def _aexecute_a2a_delegation_impl( @asynccontextmanager async def _create_a2a_client( agent_card: AgentCard, - transport_protocol: TransportProtocol, + transport_protocol: Literal["JSONRPC", "GRPC", "HTTP+JSON"], timeout: int, headers: MutableMapping[str, str], streaming: bool, @@ -679,7 +677,7 @@ async def _create_a2a_client( config = ClientConfig( httpx_client=httpx_client, - supported_transports=[str(transport_protocol.value)], + supported_transports=[transport_protocol], streaming=streaming and not use_polling, polling=use_polling, accepted_output_modes=["application/json"], From e4798bf0da26b61ee26e61f4fc67564a0e438336 Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Mon, 12 Jan 2026 10:53:00 -0500 Subject: [PATCH 11/11] chore: update docs --- docs/en/learn/a2a-agent-delegation.mdx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/en/learn/a2a-agent-delegation.mdx b/docs/en/learn/a2a-agent-delegation.mdx index e4c9f8228a..174939e3da 100644 --- a/docs/en/learn/a2a-agent-delegation.mdx +++ b/docs/en/learn/a2a-agent-delegation.mdx @@ -91,6 +91,10 @@ The `A2AConfig` class accepts the following parameters: Update mechanism for receiving task status. Options: `StreamingConfig`, `PollingConfig`, or `PushNotificationConfig`. + + Transport protocol for A2A communication. Options: `JSONRPC` (default), `GRPC`, or `HTTP+JSON`. + + ## Authentication For A2A agents that require authentication, use one of the provided auth schemes: