feat: Add intelligent auto-router and enhanced integrations
- Add intelligent-router.sh hook for automatic agent routing - Add AUTO-TRIGGER-SUMMARY.md documentation - Add FINAL-INTEGRATION-SUMMARY.md documentation - Complete Prometheus integration (6 commands + 4 tools) - Complete Dexto integration (12 commands + 5 tools) - Enhanced Ralph with access to all agents - Fix /clawd command (removed disable-model-invocation) - Update hooks.json to v5 with intelligent routing - 291 total skills now available - All 21 commands with automatic routing 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
0
prometheus/tests/neo4j/__init__.py
Normal file
0
prometheus/tests/neo4j/__init__.py
Normal file
131
prometheus/tests/neo4j/test_knowledge_graph_handler.py
Normal file
131
prometheus/tests/neo4j/test_knowledge_graph_handler.py
Normal file
@@ -0,0 +1,131 @@
|
||||
import pytest
|
||||
|
||||
from prometheus.app.services.neo4j_service import Neo4jService
|
||||
from prometheus.graph.knowledge_graph import KnowledgeGraph
|
||||
from prometheus.neo4j.knowledge_graph_handler import KnowledgeGraphHandler
|
||||
from tests.test_utils import test_project_paths
|
||||
from tests.test_utils.fixtures import ( # noqa: F401
|
||||
NEO4J_PASSWORD,
|
||||
NEO4J_USERNAME,
|
||||
empty_neo4j_container_fixture,
|
||||
neo4j_container_with_kg_fixture,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def mock_neo4j_service(neo4j_container_with_kg_fixture): # noqa: F811
|
||||
"""Fixture: provide a clean DatabaseService using the Postgres test container."""
|
||||
neo4j_container, kg = neo4j_container_with_kg_fixture
|
||||
service = Neo4jService(neo4j_container.get_connection_url(), NEO4J_USERNAME, NEO4J_PASSWORD)
|
||||
service.start()
|
||||
yield service
|
||||
await service.close()
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
async def mock_empty_neo4j_service(empty_neo4j_container_fixture): # noqa: F811
|
||||
"""Fixture: provide a clean DatabaseService using the Postgres test container."""
|
||||
neo4j_container = empty_neo4j_container_fixture
|
||||
service = Neo4jService(neo4j_container.get_connection_url(), NEO4J_USERNAME, NEO4J_PASSWORD)
|
||||
service.start()
|
||||
yield service
|
||||
await service.close()
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_ast_nodes(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_ast_nodes = await session.execute_read(handler._read_ast_nodes, root_node_id=0)
|
||||
assert len(read_ast_nodes) == 7
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_file_nodes(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_file_nodes = await session.execute_read(handler._read_file_nodes, root_node_id=0)
|
||||
assert len(read_file_nodes) == 7
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_text_nodes(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_text_nodes = await session.execute_read(handler._read_text_nodes, root_node_id=0)
|
||||
assert len(read_text_nodes) == 1
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_parent_of_edges(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_parent_of_edges = await session.execute_read(
|
||||
handler._read_parent_of_edges, root_node_id=0
|
||||
)
|
||||
assert len(read_parent_of_edges) == 4
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_has_file_edges(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_has_file_edges = await session.execute_read(
|
||||
handler._read_has_file_edges, root_node_id=0
|
||||
)
|
||||
assert len(read_has_file_edges) == 6
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_has_ast_edges(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_has_ast_edges = await session.execute_read(handler._read_has_ast_edges, root_node_id=0)
|
||||
assert len(read_has_ast_edges) == 3
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_has_text_edges(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_has_text_edges = await session.execute_read(
|
||||
handler._read_has_text_edges, root_node_id=0
|
||||
)
|
||||
assert len(read_has_text_edges) == 1
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_num_next_chunk_edges(mock_neo4j_service):
|
||||
handler = KnowledgeGraphHandler(mock_neo4j_service.neo4j_driver, 100)
|
||||
|
||||
async with mock_neo4j_service.neo4j_driver.session() as session:
|
||||
read_next_chunk_edges = await session.execute_read(
|
||||
handler._read_next_chunk_edges, root_node_id=0
|
||||
)
|
||||
assert len(read_next_chunk_edges) == 0
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_clear_knowledge_graph(mock_empty_neo4j_service):
|
||||
kg = KnowledgeGraph(1, 1000, 100, 0)
|
||||
await kg.build_graph(test_project_paths.TEST_PROJECT_PATH)
|
||||
|
||||
driver = mock_empty_neo4j_service.neo4j_driver
|
||||
handler = KnowledgeGraphHandler(driver, 100)
|
||||
await handler.write_knowledge_graph(kg)
|
||||
|
||||
await handler.clear_knowledge_graph(0)
|
||||
|
||||
# Verify that the graph is cleared
|
||||
async with driver.session() as session:
|
||||
result = await session.run("MATCH (n) RETURN COUNT(n) AS node_count")
|
||||
record = await result.single()
|
||||
node_count = record["node_count"]
|
||||
assert node_count == 0
|
||||
Reference in New Issue
Block a user