emma-hermes/tests/agent/test_system_prompt_shared_k...

94 lines
3.3 KiB
Python

from types import SimpleNamespace
from unittest.mock import patch
from agent.system_prompt import build_system_prompt_parts
from hermes_constants import reset_hermes_home_override, set_hermes_home_override
def _make_agent(**overrides):
base = dict(
load_soul_identity=False,
skip_context_files=False,
valid_tool_names=[],
_task_completion_guidance=False,
_parallel_tool_call_guidance=False,
_tool_use_enforcement=False,
_environment_probe=False,
_kanban_worker_guidance="",
_memory_store=None,
_memory_enabled=False,
_user_profile_enabled=False,
_memory_manager=None,
_platform_hint_overrides={},
_shared_knowledge_enabled=True,
_shared_knowledge_path=None,
_shared_knowledge_max_chars=4000,
model="",
provider="",
platform="telegram",
pass_session_id=False,
session_id="",
)
base.update(overrides)
return SimpleNamespace(**base)
def _build_parts(agent):
with (
patch("run_agent.load_soul_md", return_value=""),
patch("run_agent.build_nous_subscription_prompt", return_value=""),
patch("run_agent.build_environment_hints", return_value=""),
patch("run_agent.build_context_files_prompt", return_value=""),
):
return build_system_prompt_parts(agent)
def test_shared_knowledge_block_is_injected_from_root_even_under_profile_scope(tmp_path, monkeypatch):
root = tmp_path / ".hermes"
profile_home = root / "profiles" / "principal_alpha001"
shared_dir = root / "shared_knowledge"
shared_dir.mkdir(parents=True)
profile_home.mkdir(parents=True)
(shared_dir / "faq.md").write_text("Global FAQ: shipping cutoff is 5pm.", encoding="utf-8")
monkeypatch.setenv("HERMES_HOME", str(root))
token = set_hermes_home_override(profile_home)
try:
parts = _build_parts(_make_agent())
finally:
reset_hermes_home_override(token)
volatile = parts["volatile"]
assert "SHARED KNOWLEDGE" in volatile
assert "Global FAQ: shipping cutoff is 5pm." in volatile
assert str(shared_dir) in volatile
def test_shared_knowledge_is_shared_across_profiles_but_can_be_disabled(tmp_path, monkeypatch):
root = tmp_path / ".hermes"
alpha_home = root / "profiles" / "principal_alpha001"
beta_home = root / "profiles" / "principal_beta0002"
shared_dir = root / "shared_knowledge"
shared_dir.mkdir(parents=True)
alpha_home.mkdir(parents=True)
beta_home.mkdir(parents=True)
(shared_dir / "common.md").write_text("Company FAQ: refund window is 7 days.", encoding="utf-8")
monkeypatch.setenv("HERMES_HOME", str(root))
token_a = set_hermes_home_override(alpha_home)
try:
alpha_parts = _build_parts(_make_agent())
finally:
reset_hermes_home_override(token_a)
token_b = set_hermes_home_override(beta_home)
try:
beta_parts = _build_parts(_make_agent())
disabled_parts = _build_parts(_make_agent(_shared_knowledge_enabled=False))
finally:
reset_hermes_home_override(token_b)
assert "Company FAQ: refund window is 7 days." in alpha_parts["volatile"]
assert "Company FAQ: refund window is 7 days." in beta_parts["volatile"]
assert "SHARED KNOWLEDGE" not in disabled_parts["volatile"]