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:
189
prometheus/tests/tools/test_graph_traversal.py
Normal file
189
prometheus/tests/tools/test_graph_traversal.py
Normal file
@@ -0,0 +1,189 @@
|
||||
import pytest
|
||||
|
||||
from prometheus.graph.knowledge_graph import KnowledgeGraph
|
||||
from prometheus.tools.graph_traversal import GraphTraversalTool
|
||||
from tests.test_utils import test_project_paths
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
async def knowledge_graph_fixture():
|
||||
kg = KnowledgeGraph(1000, 100, 10, 0)
|
||||
await kg.build_graph(test_project_paths.TEST_PROJECT_PATH)
|
||||
return kg
|
||||
|
||||
|
||||
@pytest.fixture(scope="function")
|
||||
def graph_traversal_tool(knowledge_graph_fixture):
|
||||
graph_traversal_tool = GraphTraversalTool(knowledge_graph_fixture)
|
||||
return graph_traversal_tool
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_file_node_with_basename(graph_traversal_tool):
|
||||
result = graph_traversal_tool.find_file_node_with_basename(test_project_paths.PYTHON_FILE.name)
|
||||
|
||||
basename = test_project_paths.PYTHON_FILE.name
|
||||
relative_path = str(
|
||||
test_project_paths.PYTHON_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
|
||||
)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) == 1
|
||||
assert "FileNode" in result_data[0]
|
||||
assert result_data[0]["FileNode"].get("basename", "") == basename
|
||||
assert result_data[0]["FileNode"].get("relative_path", "") == relative_path
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_file_node_with_relative_path(graph_traversal_tool):
|
||||
relative_path = str(
|
||||
test_project_paths.MD_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
|
||||
)
|
||||
result = graph_traversal_tool.find_file_node_with_relative_path(relative_path)
|
||||
|
||||
basename = test_project_paths.MD_FILE.name
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) == 1
|
||||
assert "FileNode" in result_data[0]
|
||||
assert result_data[0]["FileNode"].get("basename", "") == basename
|
||||
assert result_data[0]["FileNode"].get("relative_path", "") == relative_path
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_ast_node_with_text_in_file_with_basename(graph_traversal_tool):
|
||||
basename = test_project_paths.PYTHON_FILE.name
|
||||
result = graph_traversal_tool.find_ast_node_with_text_in_file_with_basename(
|
||||
"Hello world!", basename
|
||||
)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "ASTNode" in result_row
|
||||
assert "Hello world!" in result_row["ASTNode"].get("text", "")
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("basename", "") == basename
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_ast_node_with_text_in_file_with_relative_path(graph_traversal_tool):
|
||||
relative_path = str(
|
||||
test_project_paths.C_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
|
||||
)
|
||||
result = graph_traversal_tool.find_ast_node_with_text_in_file_with_relative_path(
|
||||
"Hello world!", relative_path
|
||||
)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "ASTNode" in result_row
|
||||
assert "Hello world!" in result_row["ASTNode"].get("text", "")
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("relative_path", "") == relative_path
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_ast_node_with_type_in_file_with_basename(graph_traversal_tool):
|
||||
basename = test_project_paths.C_FILE.name
|
||||
node_type = "function_definition"
|
||||
result = graph_traversal_tool.find_ast_node_with_type_in_file_with_basename(node_type, basename)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "ASTNode" in result_row
|
||||
assert result_row["ASTNode"].get("type", "") == node_type
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("basename", "") == basename
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_ast_node_with_type_in_file_with_relative_path(graph_traversal_tool):
|
||||
relative_path = str(
|
||||
test_project_paths.JAVA_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
|
||||
)
|
||||
node_type = "string_literal"
|
||||
result = graph_traversal_tool.find_ast_node_with_type_in_file_with_relative_path(
|
||||
node_type, relative_path
|
||||
)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "ASTNode" in result_row
|
||||
assert result_row["ASTNode"].get("type", "") == node_type
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("relative_path", "") == relative_path
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_text_node_with_text(graph_traversal_tool):
|
||||
text = "Text under header C"
|
||||
result = graph_traversal_tool.find_text_node_with_text(text)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "TextNode" in result_row
|
||||
assert text in result_row["TextNode"].get("text", "")
|
||||
assert "start_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["start_line"] == 1
|
||||
assert "end_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["end_line"] == 13
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("relative_path", "") == "foo/test.md"
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_find_text_node_with_text_in_file(graph_traversal_tool):
|
||||
basename = test_project_paths.MD_FILE.name
|
||||
text = "Text under header B"
|
||||
result = graph_traversal_tool.find_text_node_with_text_in_file(text, basename)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "TextNode" in result_row
|
||||
assert text in result_row["TextNode"].get("text", "")
|
||||
assert "start_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["start_line"] == 1
|
||||
assert "end_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["end_line"] == 13
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("basename", "") == basename
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_get_next_text_node_with_node_id(graph_traversal_tool):
|
||||
node_id = 34
|
||||
result = graph_traversal_tool.get_next_text_node_with_node_id(node_id)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "TextNode" in result_row
|
||||
assert "Text under header D" in result_row["TextNode"].get("text", "")
|
||||
assert "start_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["start_line"] == 13
|
||||
assert "end_line" in result_row["TextNode"]
|
||||
assert result_row["TextNode"]["end_line"] == 15
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("relative_path", "") == "foo/test.md"
|
||||
|
||||
|
||||
@pytest.mark.slow
|
||||
async def test_read_code_with_relative_path(graph_traversal_tool):
|
||||
relative_path = str(
|
||||
test_project_paths.C_FILE.relative_to(test_project_paths.TEST_PROJECT_PATH).as_posix()
|
||||
)
|
||||
result = graph_traversal_tool.read_code_with_relative_path(relative_path, 5, 6)
|
||||
|
||||
result_data = result[1]
|
||||
assert len(result_data) > 0
|
||||
for result_row in result_data:
|
||||
assert "SelectedLines" in result_row
|
||||
assert "return 0;" in result_row["SelectedLines"].get("text", "")
|
||||
assert "FileNode" in result_row
|
||||
assert result_row["FileNode"].get("relative_path", "") == relative_path
|
||||
Reference in New Issue
Block a user