personal memory agent
at main 129 lines 4.7 kB view raw
1# SPDX-License-Identifier: AGPL-3.0-only 2# Copyright (c) 2026 sol pbc 3 4"""Tests for entity detection and review agent configurations.""" 5 6import os 7 8import pytest 9 10from think.talent import get_agent 11 12 13@pytest.fixture 14def fixture_journal(): 15 """Set _SOLSTONE_JOURNAL_OVERRIDE to tests/fixtures/journal for testing.""" 16 os.environ["_SOLSTONE_JOURNAL_OVERRIDE"] = "tests/fixtures/journal" 17 yield 18 # No cleanup needed - just testing reads 19 20 21def test_entities_agent_config(fixture_journal): 22 """Test detection agent configuration loads correctly.""" 23 # Entity agents are in apps/entities/talent/ so use app-qualified name 24 config = get_agent("entities:entities") 25 26 # Verify required fields 27 assert config["name"] == "entities:entities" 28 assert "user_instruction" in config 29 assert len(config["user_instruction"]) > 0 30 31 # Verify JSON metadata fields from entities.json 32 assert config.get("title") == "Entity Detector" 33 assert config.get("schedule") == "daily" 34 assert config.get("priority") == 55 35 assert config.get("multi_facet") is True 36 37 38def test_entities_review_agent_config(fixture_journal): 39 """Test review agent configuration loads correctly.""" 40 # Entity agents are in apps/entities/talent/ so use app-qualified name 41 config = get_agent("entities:entities_review") 42 43 # Verify required fields 44 assert config["name"] == "entities:entities_review" 45 assert "user_instruction" in config 46 assert len(config["user_instruction"]) > 0 47 48 # Verify JSON metadata fields from entities_review.json 49 assert config.get("title") == "Entity Reviewer" 50 assert config.get("schedule") == "daily" 51 assert config.get("priority") == 56 52 assert config.get("multi_facet") is True 53 54 55def test_entities_agent_instruction_content(fixture_journal): 56 """Test detection agent instruction contains expected sections.""" 57 config = get_agent("entities:entities") 58 prompt = config["user_instruction"] 59 60 # Check for key sections in the agent prompt 61 assert "Core Mission" in prompt 62 assert "sol call entities detect" in prompt 63 assert "sol call entities list" in prompt 64 assert "Knowledge Graphs" in prompt or "knowledge_graph" in prompt 65 assert "day-specific context" in prompt.lower() 66 67 68def test_entities_review_agent_instruction_content(fixture_journal): 69 """Test review agent instruction contains expected sections.""" 70 config = get_agent("entities:entities_review") 71 prompt = config["user_instruction"] 72 73 # Check for key sections in the agent prompt 74 assert "Core Mission" in prompt 75 assert "sol call entities attach" in prompt 76 assert "sol call entities list" in prompt 77 assert "3+" in prompt or "promotion" in prompt.lower() 78 assert "description" in prompt.lower() 79 80 81def test_agent_context_includes_entities_by_facet(fixture_journal): 82 """Test that agent context includes entities grouped by facet.""" 83 config = get_agent("entities:entities") 84 85 prompt = config["user_instruction"] 86 assert "Available Facets" in prompt 87 88 # Should include facet names in backtick format 89 assert "`test-facet`" in prompt or "`full-featured`" in prompt 90 91 # Should include entities from fixture facets 92 # tests/fixtures/journal/facets/ contains various entities 93 assert "Entities" in prompt 94 95 # Check for some known entities from the fixtures 96 assert "John Smith" in prompt or "Jane Doe" in prompt or "Acme Corp" in prompt 97 98 99def test_agent_context_with_facet_focus(fixture_journal): 100 """Test that get_agent with facet parameter uses focused single-facet context.""" 101 config = get_agent("unified", facet="full-featured") 102 103 prompt = config["user_instruction"] 104 105 # Should have Facet Focus section instead of Available Facets 106 assert "## Facet Focus" in prompt 107 assert "Available Facets" not in prompt 108 109 # Should include the focused facet's details 110 assert "Full Featured Facet" in prompt 111 assert "A facet for testing all features" in prompt 112 113 # Should include entity details from the focused facet (detailed format) 114 assert "## Entities" in prompt 115 assert "Entity 1" in prompt or "First test entity" in prompt 116 117 118def test_agent_priority_ordering(fixture_journal): 119 """Test that entity agents have correct priority ordering.""" 120 detection_config = get_agent("entities:entities") 121 review_config = get_agent("entities:entities_review") 122 123 detection_priority = detection_config["priority"] 124 review_priority = review_config["priority"] 125 126 # Review should run after detection 127 assert review_priority > detection_priority 128 assert detection_priority == 55 129 assert review_priority == 56