From e3bac1ab8c724454fb433cc7e78416b61efe33ee Mon Sep 17 00:00:00 2001 From: George Weale Date: Wed, 17 Dec 2025 11:35:50 -0800 Subject: [PATCH] fix: Built-in agents (names starting with "__") now use in-memory session storage instead of creating .adk folders in the agents directory Co-authored-by: George Weale PiperOrigin-RevId: 845852695 --- src/google/adk/cli/utils/local_storage.py | 12 ++++++++++++ tests/unittests/cli/utils/test_local_storage.py | 12 ++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/google/adk/cli/utils/local_storage.py b/src/google/adk/cli/utils/local_storage.py index 6fb6a83e..12207e80 100644 --- a/src/google/adk/cli/utils/local_storage.py +++ b/src/google/adk/cli/utils/local_storage.py @@ -34,6 +34,8 @@ from .dot_adk_folder import DotAdkFolder logger = logging.getLogger("google_adk." + __name__) +_BUILT_IN_SESSION_SERVICE_KEY = "__adk_built_in_session_service__" + def create_local_database_session_service( *, @@ -124,6 +126,16 @@ class PerAgentDatabaseSessionService(BaseSessionService): async def _get_service(self, app_name: str) -> BaseSessionService: async with self._service_lock: + if app_name.startswith("__"): + service = self._services.get(_BUILT_IN_SESSION_SERVICE_KEY) + if service is not None: + return service + service = create_local_database_session_service( + base_dir=self._agents_root, + ) + self._services[_BUILT_IN_SESSION_SERVICE_KEY] = service + return service + storage_name = self._app_name_to_dir.get(app_name, app_name) service = self._services.get(storage_name) if service is not None: diff --git a/tests/unittests/cli/utils/test_local_storage.py b/tests/unittests/cli/utils/test_local_storage.py index 39bce7a5..bb922a58 100644 --- a/tests/unittests/cli/utils/test_local_storage.py +++ b/tests/unittests/cli/utils/test_local_storage.py @@ -72,6 +72,18 @@ async def test_per_agent_session_service_respects_app_name_alias( assert (tmp_path / folder_name / ".adk" / "session.db").exists() +@pytest.mark.asyncio +async def test_per_agent_session_service_routes_built_in_agents_to_root_dot_adk( + tmp_path: Path, +) -> None: + service = PerAgentDatabaseSessionService(agents_root=tmp_path) + + await service.create_session(app_name="__helper", user_id="user") + + assert not (tmp_path / "__helper").exists() + assert (tmp_path / ".adk" / "session.db").exists() + + def test_create_local_database_session_service_returns_sqlite( tmp_path: Path, ) -> None: