feat(memory): initialize optional gateway layer

This commit is contained in:
2026-06-15 11:10:28 +08:00
parent 4fd66b29d6
commit 20a717af7a
2 changed files with 111 additions and 1 deletions

View File

@ -0,0 +1,84 @@
from __future__ import annotations
import logging
import pytest
from beaver.engine import EngineLoader
from beaver.foundation.config import BeaverConfig, MemoryConfig, MemoryGatewayConfig
def test_loader_keeps_curated_memory_in_explicit_curated_mode(tmp_path) -> None:
config = BeaverConfig(memory=MemoryConfig(mode="curated", explicit=True))
loaded = EngineLoader(workspace=tmp_path, config=config).load()
try:
assert loaded.memory_gateway_service is None
assert loaded.curated_memory_store is not None
assert loaded.memory_service is not None
assert "memory" in loaded.tools
assert loaded.memory_stores == ["curated"]
finally:
loaded.close()
def test_loader_adds_gateway_service_without_disabling_curated_memory(tmp_path) -> None:
gateway_config = MemoryGatewayConfig(
base_url="http://gateway.test",
user_id="gateway-user",
user_key="uk_secret",
)
config = BeaverConfig(
memory=MemoryConfig(mode="hybrid", explicit=True, gateway=gateway_config)
)
fake_gateway_service = object()
loaded = EngineLoader(
workspace=tmp_path,
config=config,
memory_gateway_service=fake_gateway_service,
).load()
try:
assert loaded.memory_gateway_service is fake_gateway_service
assert loaded.curated_memory_store is not None
assert loaded.memory_service is not None
assert "memory" in loaded.tools
assert loaded.memory_stores == ["curated", "memory_gateway"]
finally:
loaded.close()
def test_loader_implicit_hybrid_without_credentials_warns_and_degrades(
tmp_path,
caplog,
) -> None:
config = BeaverConfig(memory=MemoryConfig(mode="hybrid", explicit=False))
with caplog.at_level(logging.WARNING):
loaded = EngineLoader(workspace=tmp_path, config=config).load()
try:
assert loaded.memory_gateway_service is None
assert loaded.curated_memory_store is not None
assert "memory" in loaded.tools
assert "continuing with curated memory only" in caplog.text
finally:
loaded.close()
def test_loader_explicit_hybrid_without_credentials_fails_without_secret(tmp_path) -> None:
config = BeaverConfig(
memory=MemoryConfig(
mode="hybrid",
explicit=True,
gateway=MemoryGatewayConfig(user_key="uk_super_secret"),
)
)
with pytest.raises(ValueError) as exc_info:
EngineLoader(workspace=tmp_path, config=config).load()
assert "Memory Gateway" in str(exc_info.value)
assert "uk_super_secret" not in str(exc_info.value)