From e9d18abb9701f4e37c06a29eea96a1a39c054a5f Mon Sep 17 00:00:00 2001 From: avneetbansal-aws <284363899+avneetbansal-aws@users.noreply.github.com> Date: Sun, 27 Sep 2026 23:58:15 -0400 Subject: [PATCH] fix(memory): pass boto3 session to MemoryClient in AgentCoreMemorySessionManager AgentCoreMemorySessionManager.__init__ built its MemoryClient without a boto3 session (MemoryClient then created its clients from a default session), before overwriting the clients from the user-provided session. This discarded the session on the MemoryClient itself. Compute the resolved session first and pass it into MemoryClient(boto3_session=...) so it uses the correct session from the start; the subsequent strands-agents user-agent override still applies. Fixes #681. Signed-off-by: avneetbansal-aws <284363899+avneetbansal-aws@users.noreply.github.com> --- .../integrations/strands/session_manager.py | 2 +- .../test_agentcore_memory_session_manager.py | 21 ++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/bedrock_agentcore/memory/integrations/strands/session_manager.py b/src/bedrock_agentcore/memory/integrations/strands/session_manager.py index d6d20ab7..9f0177b8 100644 --- a/src/bedrock_agentcore/memory/integrations/strands/session_manager.py +++ b/src/bedrock_agentcore/memory/integrations/strands/session_manager.py @@ -148,8 +148,8 @@ def __init__( self.converter = converter or AgentCoreMemoryConverter self.config = agentcore_memory_config self.persistence_mode = agentcore_memory_config.persistence_mode - self.memory_client = MemoryClient(region_name=region_name) session = boto_session or boto3.Session(region_name=region_name) + self.memory_client = MemoryClient(region_name=region_name, boto3_session=session) self.has_existing_agent = False # Instance-scoped monotonic-timestamp state. Per-instance so concurrent diff --git a/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py b/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py index 35d3e8b9..226fadc5 100644 --- a/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py +++ b/tests/bedrock_agentcore/memory/integrations/strands/test_agentcore_memory_session_manager.py @@ -140,7 +140,26 @@ def test_init_basic(self, agentcore_config): assert manager.config == agentcore_config assert manager.memory_client == mock_client - mock_client_class.assert_called_once_with(region_name=None) + # MemoryClient must receive the resolved boto3 session so it does not + # build its clients from a different (default) session. + mock_client_class.assert_called_once_with(region_name=None, boto3_session=mock_session) + + def test_init_passes_boto_session_to_memory_client(self, agentcore_config): + """A user-provided boto_session must be passed through to MemoryClient (issue #681).""" + with patch("bedrock_agentcore.memory.integrations.strands.session_manager.MemoryClient") as mock_client_class: + mock_client_class.return_value = Mock() + user_session = Mock() + user_session.region_name = "eu-west-1" + user_session.client.return_value = Mock() + + with patch( + "strands.session.repository_session_manager.RepositorySessionManager.__init__", return_value=None + ): + AgentCoreMemorySessionManager(agentcore_config, boto_session=user_session) + + # The user's session (not a default boto3.Session) must reach MemoryClient. + _, kwargs = mock_client_class.call_args + assert kwargs["boto3_session"] is user_session def test_events_to_messages(self, session_manager): """Test converting Bedrock events to SessionMessages."""