From 209fbec61f08230baad7a9d2f8d2b2cc0a37ece7 Mon Sep 17 00:00:00 2001 From: Greyson LaLonde Date: Wed, 29 Apr 2026 01:17:09 +0800 Subject: [PATCH] fix: route internal a2a imports through crewai_a2a Switch internal references from the crewai.a2a runtime shim to the crewai_a2a package directly so mypy can resolve them, and add the py.typed marker the new package was missing. --- lib/crewai-a2a/src/crewai_a2a/py.typed | 0 lib/crewai/src/crewai/__init__.py | 2 +- lib/crewai/src/crewai/agent/core.py | 4 ++-- lib/crewai/src/crewai/agent/internal/meta.py | 4 ++-- lib/crewai/src/crewai/lite_agent.py | 16 ++++++++-------- 5 files changed, 13 insertions(+), 13 deletions(-) create mode 100644 lib/crewai-a2a/src/crewai_a2a/py.typed diff --git a/lib/crewai-a2a/src/crewai_a2a/py.typed b/lib/crewai-a2a/src/crewai_a2a/py.typed new file mode 100644 index 000000000..e69de29bb diff --git a/lib/crewai/src/crewai/__init__.py b/lib/crewai/src/crewai/__init__.py index b4dee52e2..829a37e4b 100644 --- a/lib/crewai/src/crewai/__init__.py +++ b/lib/crewai/src/crewai/__init__.py @@ -100,7 +100,7 @@ try: _base_namespace["CrewStructuredTool"] = _CrewStructuredTool try: - from crewai.a2a.config import ( + from crewai_a2a.config import ( A2AClientConfig as _A2AClientConfig, A2AConfig as _A2AConfig, A2AServerConfig as _A2AServerConfig, diff --git a/lib/crewai/src/crewai/agent/core.py b/lib/crewai/src/crewai/agent/core.py index 10ebfd38c..16aa10624 100644 --- a/lib/crewai/src/crewai/agent/core.py +++ b/lib/crewai/src/crewai/agent/core.py @@ -113,15 +113,15 @@ from crewai.utilities.training_handler import CrewTrainingHandler try: - from crewai.a2a.types import AgentResponseProtocol + from crewai_a2a.types import AgentResponseProtocol except ImportError: AgentResponseProtocol = None # type: ignore[assignment, misc] if TYPE_CHECKING: + from crewai_a2a.config import A2AClientConfig, A2AConfig, A2AServerConfig from crewai_files import FileInput - from crewai.a2a.config import A2AClientConfig, A2AConfig, A2AServerConfig from crewai.agents.agent_builder.base_agent import PlatformAppOrAction from crewai.mcp.tool_resolver import MCPToolResolver from crewai.task import Task diff --git a/lib/crewai/src/crewai/agent/internal/meta.py b/lib/crewai/src/crewai/agent/internal/meta.py index 7ecea9b35..1a7892f9f 100644 --- a/lib/crewai/src/crewai/agent/internal/meta.py +++ b/lib/crewai/src/crewai/agent/internal/meta.py @@ -58,10 +58,10 @@ class AgentMeta(ModelMetaclass): a2a_value = getattr(self, "a2a", None) if a2a_value is not None: - from crewai.a2a.extensions.registry import ( + from crewai_a2a.extensions.registry import ( create_extension_registry_from_config, ) - from crewai.a2a.wrapper import wrap_agent_with_a2a_instance + from crewai_a2a.wrapper import wrap_agent_with_a2a_instance extension_registry = create_extension_registry_from_config( a2a_value diff --git a/lib/crewai/src/crewai/lite_agent.py b/lib/crewai/src/crewai/lite_agent.py index fbc9cf0b5..7724ed669 100644 --- a/lib/crewai/src/crewai/lite_agent.py +++ b/lib/crewai/src/crewai/lite_agent.py @@ -31,10 +31,9 @@ from typing_extensions import Self, deprecated if TYPE_CHECKING: + from crewai_a2a.config import A2AClientConfig, A2AConfig, A2AServerConfig from crewai_files import FileInput - from crewai.a2a.config import A2AClientConfig, A2AConfig, A2AServerConfig - from crewai.agents.agent_builder.base_agent import BaseAgent from crewai.agents.agent_builder.utilities.base_token_process import TokenProcess from crewai.agents.cache.cache_handler import CacheHandler @@ -120,8 +119,9 @@ def _kickoff_with_a2a_support( Returns: LiteAgentOutput from either local execution or A2A delegation. """ - from crewai.a2a.utils.response_model import get_a2a_agents_and_response_model - from crewai.a2a.wrapper import _execute_task_with_a2a + from crewai_a2a.utils.response_model import get_a2a_agents_and_response_model + from crewai_a2a.wrapper import _execute_task_with_a2a + from crewai.task import Task a2a_agents, agent_response_model = get_a2a_agents_and_response_model(agent.a2a) @@ -313,11 +313,11 @@ class LiteAgent(FlowTrackable, BaseModel): def setup_a2a_support(self) -> Self: """Setup A2A extensions and server methods if a2a config exists.""" if self.a2a: - from crewai.a2a.config import A2AClientConfig, A2AConfig - from crewai.a2a.extensions.registry import ( + from crewai_a2a.config import A2AClientConfig, A2AConfig + from crewai_a2a.extensions.registry import ( create_extension_registry_from_config, ) - from crewai.a2a.utils.agent_card import inject_a2a_server_methods + from crewai_a2a.utils.agent_card import inject_a2a_server_methods configs = self.a2a if isinstance(self.a2a, list) else [self.a2a] client_configs = [ @@ -988,7 +988,7 @@ class LiteAgent(FlowTrackable, BaseModel): try: - from crewai.a2a.config import ( + from crewai_a2a.config import ( A2AClientConfig as _A2AClientConfig, A2AConfig as _A2AConfig, A2AServerConfig as _A2AServerConfig,