From dd19c6e1e4b968386d7f22e3a9ce08c0d6c17a0f Mon Sep 17 00:00:00 2001 From: Hweinstock Date: Fri, 2 Oct 2026 17:53:27 +0000 Subject: [PATCH 1/2] fix(templates): repair A2A Strands template --- .../templates/a2a-python-strands/main.py | 40 ++++++++++++++----- .../a2a-python-strands/pyproject.toml | 8 ++-- .../project/templates/pythonSecurity.test.ts | 11 ++++- 3 files changed, 43 insertions(+), 16 deletions(-) diff --git a/src/assets/templates/a2a-python-strands/main.py b/src/assets/templates/a2a-python-strands/main.py index 649f96411c..eadbbd68e7 100644 --- a/src/assets/templates/a2a-python-strands/main.py +++ b/src/assets/templates/a2a-python-strands/main.py @@ -1,5 +1,6 @@ from strands import Agent, tool from strands.multiagent.a2a.executor import StrandsA2AExecutor +from a2a.types import AgentCapabilities, AgentCard, AgentSkill from bedrock_agentcore.runtime import serve_a2a from model.load import load_model from memory.session import get_memory_session_manager @@ -82,19 +83,36 @@ def list_files(path: str) -> str: {{/each}}{{/if}} """ -# serve_a2a serves one agent instance, so it is bound to a fixed session and -# actor; get_memory_session_manager returns None (in-process history only) until -# the deployed MEMORY_ID env var is set by the CDK. -agent = Agent( +AGENT_DESCRIPTION = "A Bedrock AgentCore agent" +AGENT_CARD = AgentCard( name="{{ name }}", - model=load_model(), - session_manager=get_memory_session_manager("default-session", "default-user"), - system_prompt=SYSTEM_PROMPT, - tools=tools, + description=AGENT_DESCRIPTION, + url="http://localhost:9000/", + version="0.1.0", + capabilities=AgentCapabilities(streaming=True), + skills=[ + AgentSkill( + id="main", + name="{{ name }}", + description=AGENT_DESCRIPTION, + tags=["main"], + ) + ], + default_input_modes=["text"], + default_output_modes=["text"], ) + +def create_agent(context_id: str) -> Agent: + return Agent( + name="{{ name }}", + model=load_model(), + session_manager=get_memory_session_manager(context_id, "default-user"), + system_prompt=SYSTEM_PROMPT, + tools=tools, + ) + # serve_a2a binds 0.0.0.0:9000 in the container (the AgentCore A2A service -# contract) and publishes the agent card at /.well-known/agent-card.json. The -# card is derived by introspecting the executor's agent. +# contract) and publishes the agent card at /.well-known/agent-card.json. if __name__ == "__main__": - serve_a2a(StrandsA2AExecutor(agent)) + serve_a2a(StrandsA2AExecutor(agent_factory=create_agent), agent_card=AGENT_CARD) diff --git a/src/assets/templates/a2a-python-strands/pyproject.toml b/src/assets/templates/a2a-python-strands/pyproject.toml index fe05495bd4..e12be9fe57 100644 --- a/src/assets/templates/a2a-python-strands/pyproject.toml +++ b/src/assets/templates/a2a-python-strands/pyproject.toml @@ -9,11 +9,11 @@ description = "AgentCore A2A Agent using Strands SDK" readme = "README.md" requires-python = ">=3.10" dependencies = [ - "a2a-sdk[all] ~= 0.3.0", + "a2a-sdk[all] ~= 0.3.26", "aws-opentelemetry-distro ~= 0.18.0", - "bedrock-agentcore[a2a,strands-agents] >= 1.18.1, < 2.0.0", - "botocore[crt] ~= 1.43.0", - "strands-agents >= 1.15.0, < 2.0.0", + "bedrock-agentcore[a2a,strands-agents] ~= 1.24.0", + "botocore[crt] ~= 1.43.107", + "strands-agents ~= 1.57.2", ] [tool.hatch.build.targets.wheel] diff --git a/src/core/project/templates/pythonSecurity.test.ts b/src/core/project/templates/pythonSecurity.test.ts index c5ff662258..29e0794120 100644 --- a/src/core/project/templates/pythonSecurity.test.ts +++ b/src/core/project/templates/pythonSecurity.test.ts @@ -8,7 +8,16 @@ const renderer = new HandlebarsTemplateRenderer(); test.each([ ["agent-python-minimal", ["bedrock-agentcore >= 1.18.1, < 2.0.0"]], ["agent-python-strands", ["bedrock-agentcore[strands-agents] >= 1.18.1, < 2.0.0"]], - ["a2a-python-strands", ["bedrock-agentcore[a2a,strands-agents] >= 1.18.1, < 2.0.0"]], + [ + "a2a-python-strands", + [ + "a2a-sdk[all] ~= 0.3.26", + "aws-opentelemetry-distro ~= 0.18.0", + "bedrock-agentcore[a2a,strands-agents] ~= 1.24.0", + "botocore[crt] ~= 1.43.107", + "strands-agents ~= 1.57.2", + ], + ], ["agui-python-strands", ["bedrock-agentcore[strands-agents] >= 1.18.1, < 2.0.0"]], [ "export-harness-python", From dd4450f3780a88228228777ce5945d598a552a8e Mon Sep 17 00:00:00 2001 From: Hweinstock Date: Fri, 2 Oct 2026 19:01:31 +0000 Subject: [PATCH 2/2] fix(templates): rely on AgentCore A2A card generation --- .../templates/a2a-python-strands/main.py | 23 +------------------ 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/src/assets/templates/a2a-python-strands/main.py b/src/assets/templates/a2a-python-strands/main.py index eadbbd68e7..c3182b7a8d 100644 --- a/src/assets/templates/a2a-python-strands/main.py +++ b/src/assets/templates/a2a-python-strands/main.py @@ -1,6 +1,5 @@ from strands import Agent, tool from strands.multiagent.a2a.executor import StrandsA2AExecutor -from a2a.types import AgentCapabilities, AgentCard, AgentSkill from bedrock_agentcore.runtime import serve_a2a from model.load import load_model from memory.session import get_memory_session_manager @@ -83,26 +82,6 @@ def list_files(path: str) -> str: {{/each}}{{/if}} """ -AGENT_DESCRIPTION = "A Bedrock AgentCore agent" -AGENT_CARD = AgentCard( - name="{{ name }}", - description=AGENT_DESCRIPTION, - url="http://localhost:9000/", - version="0.1.0", - capabilities=AgentCapabilities(streaming=True), - skills=[ - AgentSkill( - id="main", - name="{{ name }}", - description=AGENT_DESCRIPTION, - tags=["main"], - ) - ], - default_input_modes=["text"], - default_output_modes=["text"], -) - - def create_agent(context_id: str) -> Agent: return Agent( name="{{ name }}", @@ -115,4 +94,4 @@ def create_agent(context_id: str) -> Agent: # serve_a2a binds 0.0.0.0:9000 in the container (the AgentCore A2A service # contract) and publishes the agent card at /.well-known/agent-card.json. if __name__ == "__main__": - serve_a2a(StrandsA2AExecutor(agent_factory=create_agent), agent_card=AGENT_CARD) + serve_a2a(StrandsA2AExecutor(agent_factory=create_agent))