agentic-qe 2.5.9 → 2.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/qe-code-intelligence.md +359 -0
- package/CHANGELOG.md +136 -0
- package/README.md +4 -3
- package/dist/agents/BaseAgent.d.ts +167 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +414 -0
- package/dist/agents/BaseAgent.js.map +1 -1
- package/dist/agents/CodeIntelligenceAgent.d.ts +133 -0
- package/dist/agents/CodeIntelligenceAgent.d.ts.map +1 -0
- package/dist/agents/CodeIntelligenceAgent.js +473 -0
- package/dist/agents/CodeIntelligenceAgent.js.map +1 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts +15 -0
- package/dist/agents/FlakyTestHunterAgent.d.ts.map +1 -1
- package/dist/agents/FlakyTestHunterAgent.js +93 -0
- package/dist/agents/FlakyTestHunterAgent.js.map +1 -1
- package/dist/agents/SecurityScannerAgent.d.ts +19 -0
- package/dist/agents/SecurityScannerAgent.d.ts.map +1 -1
- package/dist/agents/SecurityScannerAgent.js +137 -0
- package/dist/agents/SecurityScannerAgent.js.map +1 -1
- package/dist/agents/context/ContextCache.d.ts +105 -0
- package/dist/agents/context/ContextCache.d.ts.map +1 -0
- package/dist/agents/context/ContextCache.js +235 -0
- package/dist/agents/context/ContextCache.js.map +1 -0
- package/dist/agents/context/ContextFormatter.d.ts +92 -0
- package/dist/agents/context/ContextFormatter.d.ts.map +1 -0
- package/dist/agents/context/ContextFormatter.js +338 -0
- package/dist/agents/context/ContextFormatter.js.map +1 -0
- package/dist/agents/context/GraphExpander.d.ts +87 -0
- package/dist/agents/context/GraphExpander.d.ts.map +1 -0
- package/dist/agents/context/GraphExpander.js +215 -0
- package/dist/agents/context/GraphExpander.js.map +1 -0
- package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts +160 -0
- package/dist/agents/context/KnowledgeGraphContextBuilder.d.ts.map +1 -0
- package/dist/agents/context/KnowledgeGraphContextBuilder.js +300 -0
- package/dist/agents/context/KnowledgeGraphContextBuilder.js.map +1 -0
- package/dist/agents/context/index.d.ts +15 -0
- package/dist/agents/context/index.d.ts.map +1 -0
- package/dist/agents/context/index.js +18 -0
- package/dist/agents/context/index.js.map +1 -0
- package/dist/agents/index.d.ts +1 -0
- package/dist/agents/index.d.ts.map +1 -1
- package/dist/agents/index.js +67 -3
- package/dist/agents/index.js.map +1 -1
- package/dist/cli/commands/knowledge-graph.d.ts +112 -0
- package/dist/cli/commands/knowledge-graph.d.ts.map +1 -0
- package/dist/cli/commands/knowledge-graph.js +466 -0
- package/dist/cli/commands/knowledge-graph.js.map +1 -0
- package/dist/cli/commands/ruvector/index.d.ts +13 -0
- package/dist/cli/commands/ruvector/index.d.ts.map +1 -0
- package/dist/cli/commands/ruvector/index.js +308 -0
- package/dist/cli/commands/ruvector/index.js.map +1 -0
- package/dist/cli/formatters/KGOutputFormatter.d.ts +50 -0
- package/dist/cli/formatters/KGOutputFormatter.d.ts.map +1 -0
- package/dist/cli/formatters/KGOutputFormatter.js +237 -0
- package/dist/cli/formatters/KGOutputFormatter.js.map +1 -0
- package/dist/cli/index-working.js +138 -0
- package/dist/cli/index-working.js.map +1 -1
- package/dist/cli/index.js +5 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/claude-config.d.ts +13 -1
- package/dist/cli/init/claude-config.d.ts.map +1 -1
- package/dist/cli/init/claude-config.js +70 -8
- package/dist/cli/init/claude-config.js.map +1 -1
- package/dist/cli/init/code-intelligence-init.d.ts +52 -0
- package/dist/cli/init/code-intelligence-init.d.ts.map +1 -0
- package/dist/cli/init/code-intelligence-init.js +250 -0
- package/dist/cli/init/code-intelligence-init.js.map +1 -0
- package/dist/cli/init/index.d.ts +2 -2
- package/dist/cli/init/index.d.ts.map +1 -1
- package/dist/cli/init/index.js +21 -1
- package/dist/cli/init/index.js.map +1 -1
- package/dist/code-intelligence/chunking/ASTChunker.d.ts +64 -0
- package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -0
- package/dist/code-intelligence/chunking/ASTChunker.js +344 -0
- package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -0
- package/dist/code-intelligence/chunking/ChunkSplitter.d.ts +48 -0
- package/dist/code-intelligence/chunking/ChunkSplitter.d.ts.map +1 -0
- package/dist/code-intelligence/chunking/ChunkSplitter.js +278 -0
- package/dist/code-intelligence/chunking/ChunkSplitter.js.map +1 -0
- package/dist/code-intelligence/chunking/index.d.ts +8 -0
- package/dist/code-intelligence/chunking/index.d.ts.map +1 -0
- package/dist/code-intelligence/chunking/index.js +13 -0
- package/dist/code-intelligence/chunking/index.js.map +1 -0
- package/dist/code-intelligence/chunking/types.d.ts +52 -0
- package/dist/code-intelligence/chunking/types.d.ts.map +1 -0
- package/dist/code-intelligence/chunking/types.js +6 -0
- package/dist/code-intelligence/chunking/types.js.map +1 -0
- package/dist/code-intelligence/config/database-schema.d.ts +245 -0
- package/dist/code-intelligence/config/database-schema.d.ts.map +1 -0
- package/dist/code-intelligence/config/database-schema.js +110 -0
- package/dist/code-intelligence/config/database-schema.js.map +1 -0
- package/dist/code-intelligence/config/environment.d.ts +53 -0
- package/dist/code-intelligence/config/environment.d.ts.map +1 -0
- package/dist/code-intelligence/config/environment.js +86 -0
- package/dist/code-intelligence/config/environment.js.map +1 -0
- package/dist/code-intelligence/config/index.d.ts +10 -0
- package/dist/code-intelligence/config/index.d.ts.map +1 -0
- package/dist/code-intelligence/config/index.js +36 -0
- package/dist/code-intelligence/config/index.js.map +1 -0
- package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts +81 -0
- package/dist/code-intelligence/embeddings/EmbeddingCache.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/EmbeddingCache.js +168 -0
- package/dist/code-intelligence/embeddings/EmbeddingCache.js.map +1 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts +82 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.js +233 -0
- package/dist/code-intelligence/embeddings/NomicEmbedder.js.map +1 -0
- package/dist/code-intelligence/embeddings/OllamaClient.d.ts +42 -0
- package/dist/code-intelligence/embeddings/OllamaClient.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/OllamaClient.js +142 -0
- package/dist/code-intelligence/embeddings/OllamaClient.js.map +1 -0
- package/dist/code-intelligence/embeddings/index.d.ts +33 -0
- package/dist/code-intelligence/embeddings/index.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/index.js +39 -0
- package/dist/code-intelligence/embeddings/index.js.map +1 -0
- package/dist/code-intelligence/embeddings/types.d.ts +84 -0
- package/dist/code-intelligence/embeddings/types.d.ts.map +1 -0
- package/dist/code-intelligence/embeddings/types.js +19 -0
- package/dist/code-intelligence/embeddings/types.js.map +1 -0
- package/dist/code-intelligence/graph/GraphBuilder.d.ts +126 -0
- package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/graph/GraphBuilder.js +416 -0
- package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -0
- package/dist/code-intelligence/graph/ImportParser.d.ts +72 -0
- package/dist/code-intelligence/graph/ImportParser.d.ts.map +1 -0
- package/dist/code-intelligence/graph/ImportParser.js +422 -0
- package/dist/code-intelligence/graph/ImportParser.js.map +1 -0
- package/dist/code-intelligence/graph/RelationshipExtractor.d.ts +74 -0
- package/dist/code-intelligence/graph/RelationshipExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/graph/RelationshipExtractor.js +310 -0
- package/dist/code-intelligence/graph/RelationshipExtractor.js.map +1 -0
- package/dist/code-intelligence/graph/TestMapper.d.ts +99 -0
- package/dist/code-intelligence/graph/TestMapper.d.ts.map +1 -0
- package/dist/code-intelligence/graph/TestMapper.js +335 -0
- package/dist/code-intelligence/graph/TestMapper.js.map +1 -0
- package/dist/code-intelligence/graph/index.d.ts +14 -0
- package/dist/code-intelligence/graph/index.d.ts.map +1 -0
- package/dist/code-intelligence/graph/index.js +19 -0
- package/dist/code-intelligence/graph/index.js.map +1 -0
- package/dist/code-intelligence/graph/types.d.ts +141 -0
- package/dist/code-intelligence/graph/types.d.ts.map +1 -0
- package/dist/code-intelligence/graph/types.js +18 -0
- package/dist/code-intelligence/graph/types.js.map +1 -0
- package/dist/code-intelligence/indexing/FileWatcher.d.ts +90 -0
- package/dist/code-intelligence/indexing/FileWatcher.d.ts.map +1 -0
- package/dist/code-intelligence/indexing/FileWatcher.js +304 -0
- package/dist/code-intelligence/indexing/FileWatcher.js.map +1 -0
- package/dist/code-intelligence/indexing/GitChangeDetector.d.ts +76 -0
- package/dist/code-intelligence/indexing/GitChangeDetector.d.ts.map +1 -0
- package/dist/code-intelligence/indexing/GitChangeDetector.js +347 -0
- package/dist/code-intelligence/indexing/GitChangeDetector.js.map +1 -0
- package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts +108 -0
- package/dist/code-intelligence/indexing/IncrementalIndexer.d.ts.map +1 -0
- package/dist/code-intelligence/indexing/IncrementalIndexer.js +269 -0
- package/dist/code-intelligence/indexing/IncrementalIndexer.js.map +1 -0
- package/dist/code-intelligence/indexing/index.d.ts +11 -0
- package/dist/code-intelligence/indexing/index.d.ts.map +1 -0
- package/dist/code-intelligence/indexing/index.js +18 -0
- package/dist/code-intelligence/indexing/index.js.map +1 -0
- package/dist/code-intelligence/indexing/types.d.ts +133 -0
- package/dist/code-intelligence/indexing/types.d.ts.map +1 -0
- package/dist/code-intelligence/indexing/types.js +27 -0
- package/dist/code-intelligence/indexing/types.js.map +1 -0
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts +150 -0
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -0
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +806 -0
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -0
- package/dist/code-intelligence/orchestrator/index.d.ts +8 -0
- package/dist/code-intelligence/orchestrator/index.d.ts.map +1 -0
- package/dist/code-intelligence/orchestrator/index.js +24 -0
- package/dist/code-intelligence/orchestrator/index.js.map +1 -0
- package/dist/code-intelligence/orchestrator/types.d.ts +164 -0
- package/dist/code-intelligence/orchestrator/types.d.ts.map +1 -0
- package/dist/code-intelligence/orchestrator/types.js +18 -0
- package/dist/code-intelligence/orchestrator/types.js.map +1 -0
- package/dist/code-intelligence/parser/LanguageRegistry.d.ts +13 -0
- package/dist/code-intelligence/parser/LanguageRegistry.d.ts.map +1 -0
- package/dist/code-intelligence/parser/LanguageRegistry.js +150 -0
- package/dist/code-intelligence/parser/LanguageRegistry.js.map +1 -0
- package/dist/code-intelligence/parser/TreeSitterParser.d.ts +98 -0
- package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +1 -0
- package/dist/code-intelligence/parser/TreeSitterParser.js +530 -0
- package/dist/code-intelligence/parser/TreeSitterParser.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +36 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js +31 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +21 -0
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/GoExtractor.js +249 -0
- package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +21 -0
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +217 -0
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +20 -0
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js +237 -0
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +21 -0
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/RustExtractor.js +234 -0
- package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +23 -0
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +247 -0
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/index.d.ts +7 -0
- package/dist/code-intelligence/parser/extractors/index.d.ts.map +1 -0
- package/dist/code-intelligence/parser/extractors/index.js +16 -0
- package/dist/code-intelligence/parser/extractors/index.js.map +1 -0
- package/dist/code-intelligence/parser/index.d.ts +8 -0
- package/dist/code-intelligence/parser/index.d.ts.map +1 -0
- package/dist/code-intelligence/parser/index.js +12 -0
- package/dist/code-intelligence/parser/index.js.map +1 -0
- package/dist/code-intelligence/parser/types.d.ts +60 -0
- package/dist/code-intelligence/parser/types.d.ts.map +1 -0
- package/dist/code-intelligence/parser/types.js +6 -0
- package/dist/code-intelligence/parser/types.js.map +1 -0
- package/dist/code-intelligence/rag/ContextBuilder.d.ts +82 -0
- package/dist/code-intelligence/rag/ContextBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/rag/ContextBuilder.js +242 -0
- package/dist/code-intelligence/rag/ContextBuilder.js.map +1 -0
- package/dist/code-intelligence/rag/GraphExpander.d.ts +95 -0
- package/dist/code-intelligence/rag/GraphExpander.d.ts.map +1 -0
- package/dist/code-intelligence/rag/GraphExpander.js +250 -0
- package/dist/code-intelligence/rag/GraphExpander.js.map +1 -0
- package/dist/code-intelligence/rag/index.d.ts +9 -0
- package/dist/code-intelligence/rag/index.d.ts.map +1 -0
- package/dist/code-intelligence/rag/index.js +25 -0
- package/dist/code-intelligence/rag/index.js.map +1 -0
- package/dist/code-intelligence/rag/types.d.ts +121 -0
- package/dist/code-intelligence/rag/types.d.ts.map +1 -0
- package/dist/code-intelligence/rag/types.js +50 -0
- package/dist/code-intelligence/rag/types.js.map +1 -0
- package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts +62 -0
- package/dist/code-intelligence/retrieval/SemanticRetriever.d.ts.map +1 -0
- package/dist/code-intelligence/retrieval/SemanticRetriever.js +174 -0
- package/dist/code-intelligence/retrieval/SemanticRetriever.js.map +1 -0
- package/dist/code-intelligence/retrieval/index.d.ts +9 -0
- package/dist/code-intelligence/retrieval/index.d.ts.map +1 -0
- package/dist/code-intelligence/retrieval/index.js +16 -0
- package/dist/code-intelligence/retrieval/index.js.map +1 -0
- package/dist/code-intelligence/retrieval/types.d.ts +118 -0
- package/dist/code-intelligence/retrieval/types.d.ts.map +1 -0
- package/dist/code-intelligence/retrieval/types.js +46 -0
- package/dist/code-intelligence/retrieval/types.js.map +1 -0
- package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts +167 -0
- package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.d.ts.map +1 -0
- package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js +365 -0
- package/dist/code-intelligence/router/CodeIntelligenceHybridRouter.js.map +1 -0
- package/dist/code-intelligence/router/index.d.ts +7 -0
- package/dist/code-intelligence/router/index.d.ts.map +1 -0
- package/dist/code-intelligence/router/index.js +14 -0
- package/dist/code-intelligence/router/index.js.map +1 -0
- package/dist/code-intelligence/search/BM25Search.d.ts +74 -0
- package/dist/code-intelligence/search/BM25Search.d.ts.map +1 -0
- package/dist/code-intelligence/search/BM25Search.js +233 -0
- package/dist/code-intelligence/search/BM25Search.js.map +1 -0
- package/dist/code-intelligence/search/HybridSearchEngine.d.ts +94 -0
- package/dist/code-intelligence/search/HybridSearchEngine.d.ts.map +1 -0
- package/dist/code-intelligence/search/HybridSearchEngine.js +168 -0
- package/dist/code-intelligence/search/HybridSearchEngine.js.map +1 -0
- package/dist/code-intelligence/search/RRFFusion.d.ts +46 -0
- package/dist/code-intelligence/search/RRFFusion.d.ts.map +1 -0
- package/dist/code-intelligence/search/RRFFusion.js +223 -0
- package/dist/code-intelligence/search/RRFFusion.js.map +1 -0
- package/dist/code-intelligence/search/VectorSearch.d.ts +157 -0
- package/dist/code-intelligence/search/VectorSearch.d.ts.map +1 -0
- package/dist/code-intelligence/search/VectorSearch.js +301 -0
- package/dist/code-intelligence/search/VectorSearch.js.map +1 -0
- package/dist/code-intelligence/search/index.d.ts +14 -0
- package/dist/code-intelligence/search/index.d.ts.map +1 -0
- package/dist/code-intelligence/search/index.js +23 -0
- package/dist/code-intelligence/search/index.js.map +1 -0
- package/dist/code-intelligence/search/types.d.ts +201 -0
- package/dist/code-intelligence/search/types.d.ts.map +1 -0
- package/dist/code-intelligence/search/types.js +35 -0
- package/dist/code-intelligence/search/types.js.map +1 -0
- package/dist/code-intelligence/service/CodeIntelligenceService.d.ts +171 -0
- package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -0
- package/dist/code-intelligence/service/CodeIntelligenceService.js +325 -0
- package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -0
- package/dist/code-intelligence/service/index.d.ts +7 -0
- package/dist/code-intelligence/service/index.d.ts.map +1 -0
- package/dist/code-intelligence/service/index.js +14 -0
- package/dist/code-intelligence/service/index.js.map +1 -0
- package/dist/code-intelligence/storage/CodeChunkStore.d.ts +213 -0
- package/dist/code-intelligence/storage/CodeChunkStore.d.ts.map +1 -0
- package/dist/code-intelligence/storage/CodeChunkStore.js +542 -0
- package/dist/code-intelligence/storage/CodeChunkStore.js.map +1 -0
- package/dist/code-intelligence/storage/index.d.ts +7 -0
- package/dist/code-intelligence/storage/index.d.ts.map +1 -0
- package/dist/code-intelligence/storage/index.js +13 -0
- package/dist/code-intelligence/storage/index.js.map +1 -0
- package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts +51 -0
- package/dist/code-intelligence/visualization/ClassDiagramBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/ClassDiagramBuilder.js +180 -0
- package/dist/code-intelligence/visualization/ClassDiagramBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts +66 -0
- package/dist/code-intelligence/visualization/DependencyGraphBuilder.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/DependencyGraphBuilder.js +203 -0
- package/dist/code-intelligence/visualization/DependencyGraphBuilder.js.map +1 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts +76 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.js +368 -0
- package/dist/code-intelligence/visualization/MermaidGenerator.js.map +1 -0
- package/dist/code-intelligence/visualization/index.d.ts +9 -0
- package/dist/code-intelligence/visualization/index.d.ts.map +1 -0
- package/dist/code-intelligence/visualization/index.js +15 -0
- package/dist/code-intelligence/visualization/index.js.map +1 -0
- package/dist/core/FleetManager.d.ts +27 -0
- package/dist/core/FleetManager.d.ts.map +1 -1
- package/dist/core/FleetManager.js +84 -0
- package/dist/core/FleetManager.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/memory/RuVectorPatternStore.d.ts +258 -0
- package/dist/memory/RuVectorPatternStore.d.ts.map +1 -0
- package/dist/memory/RuVectorPatternStore.js +525 -0
- package/dist/memory/RuVectorPatternStore.js.map +1 -0
- package/dist/providers/RuVectorPostgresAdapter.d.ts +134 -0
- package/dist/providers/RuVectorPostgresAdapter.d.ts.map +1 -0
- package/dist/providers/RuVectorPostgresAdapter.js +504 -0
- package/dist/providers/RuVectorPostgresAdapter.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +7 -1
- package/dist/providers/index.js.map +1 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +2 -0
- package/dist/types/index.js.map +1 -1
- package/docs/reference/agents.md +44 -1
- package/package.json +15 -2
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* KnowledgeGraphContextBuilder
|
|
3
|
+
*
|
|
4
|
+
* Enriches agent context using the code intelligence knowledge graph.
|
|
5
|
+
* Achieves 80% token reduction (from 10K to 2K) through:
|
|
6
|
+
* - Hybrid search for relevant code
|
|
7
|
+
* - Graph-based relationship expansion (2-hop)
|
|
8
|
+
* - Intelligent caching (70-80% cache hit rate)
|
|
9
|
+
* - Smart formatting and truncation
|
|
10
|
+
*
|
|
11
|
+
* Architecture:
|
|
12
|
+
* 1. HybridSearchEngine: Find relevant code chunks (BM25 + Vector)
|
|
13
|
+
* 2. GraphExpander: Traverse relationships (imports, calls, tests)
|
|
14
|
+
* 3. ContextFormatter: Format for LLM with metadata
|
|
15
|
+
* 4. ContextCache: Cache similar queries for reuse
|
|
16
|
+
*
|
|
17
|
+
* Integration:
|
|
18
|
+
* - Used by BaseAgent for task context enrichment
|
|
19
|
+
* - Integrates with CodeIntelligenceOrchestrator
|
|
20
|
+
* - Supports agent-specific context options
|
|
21
|
+
*/
|
|
22
|
+
import { HybridSearchEngine } from '../../code-intelligence/search/HybridSearchEngine.js';
|
|
23
|
+
import { GraphBuilder } from '../../code-intelligence/graph/GraphBuilder.js';
|
|
24
|
+
import { FormattingOptions } from './ContextFormatter.js';
|
|
25
|
+
import type { SearchResult } from '../../code-intelligence/search/types.js';
|
|
26
|
+
import type { ExpandedNode } from './GraphExpander.js';
|
|
27
|
+
import type { FormattedContext } from './ContextFormatter.js';
|
|
28
|
+
export interface ContextQuery {
|
|
29
|
+
/** Natural language query describing the context needed */
|
|
30
|
+
query: string;
|
|
31
|
+
/** Agent type making the query (for cache namespacing) */
|
|
32
|
+
agentType?: string;
|
|
33
|
+
/** File path to focus on (optional) */
|
|
34
|
+
filePath?: string;
|
|
35
|
+
/** Entity name to focus on (optional) */
|
|
36
|
+
entityName?: string;
|
|
37
|
+
/** Additional filter criteria */
|
|
38
|
+
filters?: {
|
|
39
|
+
filePattern?: string;
|
|
40
|
+
entityType?: string;
|
|
41
|
+
language?: string;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface ContextOptions {
|
|
45
|
+
/** Number of search results to retrieve (default: 5) */
|
|
46
|
+
topK?: number;
|
|
47
|
+
/** Maximum graph expansion depth (default: 2) */
|
|
48
|
+
graphDepth?: number;
|
|
49
|
+
/** Maximum nodes from graph expansion (default: 10) */
|
|
50
|
+
maxGraphNodes?: number;
|
|
51
|
+
/** Include imports (default: true) */
|
|
52
|
+
includeImports?: boolean;
|
|
53
|
+
/** Include tests (default: true) */
|
|
54
|
+
includeTests?: boolean;
|
|
55
|
+
/** Include call relationships (default: false) */
|
|
56
|
+
includeCalls?: boolean;
|
|
57
|
+
/** Maximum lines per code block (default: 50) */
|
|
58
|
+
maxLinesPerBlock?: number;
|
|
59
|
+
/** Use cache (default: true) */
|
|
60
|
+
useCache?: boolean;
|
|
61
|
+
/** Cache TTL in milliseconds (default: 5 minutes) */
|
|
62
|
+
cacheTTL?: number;
|
|
63
|
+
/** Formatting options */
|
|
64
|
+
formatting?: Partial<FormattingOptions>;
|
|
65
|
+
}
|
|
66
|
+
export interface EnrichedContext {
|
|
67
|
+
/** Formatted context ready for LLM */
|
|
68
|
+
formatted: FormattedContext;
|
|
69
|
+
/** Raw search results */
|
|
70
|
+
searchResults: SearchResult[];
|
|
71
|
+
/** Expanded graph nodes */
|
|
72
|
+
expandedNodes: ExpandedNode[];
|
|
73
|
+
/** Query metadata */
|
|
74
|
+
metadata: {
|
|
75
|
+
query: string;
|
|
76
|
+
agentType?: string;
|
|
77
|
+
cacheHit: boolean;
|
|
78
|
+
searchTimeMs: number;
|
|
79
|
+
expansionTimeMs: number;
|
|
80
|
+
formattingTimeMs: number;
|
|
81
|
+
totalTimeMs: number;
|
|
82
|
+
tokenEstimate: number;
|
|
83
|
+
tokenReduction?: number;
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
export interface ContextBuilderConfig {
|
|
87
|
+
/** HybridSearchEngine instance */
|
|
88
|
+
searchEngine: HybridSearchEngine;
|
|
89
|
+
/** GraphBuilder instance */
|
|
90
|
+
graphBuilder: GraphBuilder;
|
|
91
|
+
/** Enable caching (default: true) */
|
|
92
|
+
enableCache?: boolean;
|
|
93
|
+
/** Cache size (default: 1000) */
|
|
94
|
+
cacheSize?: number;
|
|
95
|
+
/** Default cache TTL (default: 5 minutes) */
|
|
96
|
+
defaultCacheTTL?: number;
|
|
97
|
+
/** Default context options */
|
|
98
|
+
defaultOptions?: Partial<ContextOptions>;
|
|
99
|
+
/** Baseline token count for reduction calculation (default: 10000) */
|
|
100
|
+
baselineTokens?: number;
|
|
101
|
+
}
|
|
102
|
+
export declare class KnowledgeGraphContextBuilder {
|
|
103
|
+
private searchEngine;
|
|
104
|
+
private graphBuilder;
|
|
105
|
+
private graphExpander;
|
|
106
|
+
private formatter;
|
|
107
|
+
private cache;
|
|
108
|
+
private config;
|
|
109
|
+
private baselineTokens;
|
|
110
|
+
constructor(config: ContextBuilderConfig);
|
|
111
|
+
/**
|
|
112
|
+
* Build enriched context for an agent task.
|
|
113
|
+
*/
|
|
114
|
+
buildContext(query: ContextQuery, options?: Partial<ContextOptions>): Promise<EnrichedContext>;
|
|
115
|
+
/**
|
|
116
|
+
* Build context for a specific file.
|
|
117
|
+
*/
|
|
118
|
+
buildFileContext(filePath: string, options?: Partial<ContextOptions>): Promise<EnrichedContext>;
|
|
119
|
+
/**
|
|
120
|
+
* Build context for a specific entity (function, class, etc.).
|
|
121
|
+
*/
|
|
122
|
+
buildEntityContext(filePath: string, entityName: string, options?: Partial<ContextOptions>): Promise<EnrichedContext>;
|
|
123
|
+
/**
|
|
124
|
+
* Build context for testing (includes test files and source).
|
|
125
|
+
*/
|
|
126
|
+
buildTestContext(sourceFilePath: string, options?: Partial<ContextOptions>): Promise<EnrichedContext>;
|
|
127
|
+
/**
|
|
128
|
+
* Get cache statistics.
|
|
129
|
+
*/
|
|
130
|
+
getCacheStats(): import("./ContextCache.js").CacheStats;
|
|
131
|
+
/**
|
|
132
|
+
* Clear cache.
|
|
133
|
+
*/
|
|
134
|
+
clearCache(): void;
|
|
135
|
+
/**
|
|
136
|
+
* Update configuration.
|
|
137
|
+
*/
|
|
138
|
+
updateConfig(config: Partial<Omit<ContextBuilderConfig, 'searchEngine' | 'graphBuilder'>>): void;
|
|
139
|
+
/**
|
|
140
|
+
* Shutdown (cleanup resources).
|
|
141
|
+
*/
|
|
142
|
+
shutdown(): void;
|
|
143
|
+
/**
|
|
144
|
+
* Perform hybrid search.
|
|
145
|
+
*/
|
|
146
|
+
private performSearch;
|
|
147
|
+
/**
|
|
148
|
+
* Expand context using graph relationships.
|
|
149
|
+
*/
|
|
150
|
+
private expandContext;
|
|
151
|
+
/**
|
|
152
|
+
* Get file basename from path.
|
|
153
|
+
*/
|
|
154
|
+
private getFileBasename;
|
|
155
|
+
/**
|
|
156
|
+
* Get file extension for language.
|
|
157
|
+
*/
|
|
158
|
+
private getLanguageExtension;
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=KnowledgeGraphContextBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnowledgeGraphContextBuilder.d.ts","sourceRoot":"","sources":["../../../src/agents/context/KnowledgeGraphContextBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* KnowledgeGraphContextBuilder
|
|
4
|
+
*
|
|
5
|
+
* Enriches agent context using the code intelligence knowledge graph.
|
|
6
|
+
* Achieves 80% token reduction (from 10K to 2K) through:
|
|
7
|
+
* - Hybrid search for relevant code
|
|
8
|
+
* - Graph-based relationship expansion (2-hop)
|
|
9
|
+
* - Intelligent caching (70-80% cache hit rate)
|
|
10
|
+
* - Smart formatting and truncation
|
|
11
|
+
*
|
|
12
|
+
* Architecture:
|
|
13
|
+
* 1. HybridSearchEngine: Find relevant code chunks (BM25 + Vector)
|
|
14
|
+
* 2. GraphExpander: Traverse relationships (imports, calls, tests)
|
|
15
|
+
* 3. ContextFormatter: Format for LLM with metadata
|
|
16
|
+
* 4. ContextCache: Cache similar queries for reuse
|
|
17
|
+
*
|
|
18
|
+
* Integration:
|
|
19
|
+
* - Used by BaseAgent for task context enrichment
|
|
20
|
+
* - Integrates with CodeIntelligenceOrchestrator
|
|
21
|
+
* - Supports agent-specific context options
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.KnowledgeGraphContextBuilder = void 0;
|
|
25
|
+
const GraphExpander_js_1 = require("./GraphExpander.js");
|
|
26
|
+
const ContextFormatter_js_1 = require("./ContextFormatter.js");
|
|
27
|
+
const ContextCache_js_1 = require("./ContextCache.js");
|
|
28
|
+
const DEFAULT_OPTIONS = {
|
|
29
|
+
topK: 5,
|
|
30
|
+
graphDepth: 2,
|
|
31
|
+
maxGraphNodes: 10,
|
|
32
|
+
includeImports: true,
|
|
33
|
+
includeTests: true,
|
|
34
|
+
includeCalls: false,
|
|
35
|
+
maxLinesPerBlock: 50,
|
|
36
|
+
useCache: true,
|
|
37
|
+
cacheTTL: 5 * 60 * 1000, // 5 minutes
|
|
38
|
+
};
|
|
39
|
+
class KnowledgeGraphContextBuilder {
|
|
40
|
+
constructor(config) {
|
|
41
|
+
this.searchEngine = config.searchEngine;
|
|
42
|
+
this.graphBuilder = config.graphBuilder;
|
|
43
|
+
this.config = {
|
|
44
|
+
enableCache: config.enableCache ?? true,
|
|
45
|
+
cacheSize: config.cacheSize ?? 1000,
|
|
46
|
+
defaultCacheTTL: config.defaultCacheTTL ?? 5 * 60 * 1000,
|
|
47
|
+
defaultOptions: config.defaultOptions ?? {},
|
|
48
|
+
baselineTokens: config.baselineTokens ?? 10000,
|
|
49
|
+
};
|
|
50
|
+
this.baselineTokens = this.config.baselineTokens;
|
|
51
|
+
// Initialize components
|
|
52
|
+
this.graphExpander = new GraphExpander_js_1.GraphExpander(this.graphBuilder);
|
|
53
|
+
this.formatter = new ContextFormatter_js_1.ContextFormatter();
|
|
54
|
+
this.cache = new ContextCache_js_1.ContextCache({
|
|
55
|
+
maxSize: this.config.cacheSize,
|
|
56
|
+
defaultTTL: this.config.defaultCacheTTL,
|
|
57
|
+
enableCleanup: true,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Build enriched context for an agent task.
|
|
62
|
+
*/
|
|
63
|
+
async buildContext(query, options) {
|
|
64
|
+
const startTime = Date.now();
|
|
65
|
+
const opts = { ...DEFAULT_OPTIONS, ...this.config.defaultOptions, ...options };
|
|
66
|
+
// Check cache
|
|
67
|
+
let cacheHit = false;
|
|
68
|
+
if (opts.useCache && this.config.enableCache) {
|
|
69
|
+
const cacheKey = this.cache.generateKey(query.query, {
|
|
70
|
+
agentType: query.agentType,
|
|
71
|
+
filePath: query.filePath,
|
|
72
|
+
entityName: query.entityName,
|
|
73
|
+
...opts,
|
|
74
|
+
});
|
|
75
|
+
const cached = this.cache.get(cacheKey);
|
|
76
|
+
if (cached) {
|
|
77
|
+
cacheHit = true;
|
|
78
|
+
// Update timing metadata
|
|
79
|
+
cached.metadata.cacheHit = true;
|
|
80
|
+
cached.metadata.totalTimeMs = Date.now() - startTime;
|
|
81
|
+
return cached;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// Phase 1: Search for relevant code
|
|
85
|
+
const searchStart = Date.now();
|
|
86
|
+
const searchResults = await this.performSearch(query, opts);
|
|
87
|
+
const searchTimeMs = Date.now() - searchStart;
|
|
88
|
+
// Phase 2: Expand with graph relationships
|
|
89
|
+
const expansionStart = Date.now();
|
|
90
|
+
const expandedNodes = await this.expandContext(searchResults, query, opts);
|
|
91
|
+
const expansionTimeMs = Date.now() - expansionStart;
|
|
92
|
+
// Phase 3: Format for LLM
|
|
93
|
+
const formattingStart = Date.now();
|
|
94
|
+
const formatted = this.formatter.format(searchResults, expandedNodes, opts.formatting);
|
|
95
|
+
const formattingTimeMs = Date.now() - formattingStart;
|
|
96
|
+
// Calculate token reduction
|
|
97
|
+
const tokenReduction = this.baselineTokens > 0
|
|
98
|
+
? ((this.baselineTokens - formatted.metadata.totalTokensEstimate) / this.baselineTokens) * 100
|
|
99
|
+
: undefined;
|
|
100
|
+
const result = {
|
|
101
|
+
formatted,
|
|
102
|
+
searchResults,
|
|
103
|
+
expandedNodes,
|
|
104
|
+
metadata: {
|
|
105
|
+
query: query.query,
|
|
106
|
+
agentType: query.agentType,
|
|
107
|
+
cacheHit,
|
|
108
|
+
searchTimeMs,
|
|
109
|
+
expansionTimeMs,
|
|
110
|
+
formattingTimeMs,
|
|
111
|
+
totalTimeMs: Date.now() - startTime,
|
|
112
|
+
tokenEstimate: formatted.metadata.totalTokensEstimate,
|
|
113
|
+
tokenReduction,
|
|
114
|
+
},
|
|
115
|
+
};
|
|
116
|
+
// Store in cache
|
|
117
|
+
if (opts.useCache && this.config.enableCache) {
|
|
118
|
+
const cacheKey = this.cache.generateKey(query.query, {
|
|
119
|
+
agentType: query.agentType,
|
|
120
|
+
filePath: query.filePath,
|
|
121
|
+
entityName: query.entityName,
|
|
122
|
+
...opts,
|
|
123
|
+
});
|
|
124
|
+
this.cache.set(cacheKey, result, opts.cacheTTL);
|
|
125
|
+
}
|
|
126
|
+
return result;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Build context for a specific file.
|
|
130
|
+
*/
|
|
131
|
+
async buildFileContext(filePath, options) {
|
|
132
|
+
return this.buildContext({
|
|
133
|
+
query: `code in ${filePath}`,
|
|
134
|
+
filePath,
|
|
135
|
+
}, {
|
|
136
|
+
...options,
|
|
137
|
+
includeImports: true,
|
|
138
|
+
includeTests: true,
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Build context for a specific entity (function, class, etc.).
|
|
143
|
+
*/
|
|
144
|
+
async buildEntityContext(filePath, entityName, options) {
|
|
145
|
+
return this.buildContext({
|
|
146
|
+
query: `${entityName} in ${filePath}`,
|
|
147
|
+
filePath,
|
|
148
|
+
entityName,
|
|
149
|
+
}, {
|
|
150
|
+
...options,
|
|
151
|
+
includeImports: true,
|
|
152
|
+
includeCalls: true,
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Build context for testing (includes test files and source).
|
|
157
|
+
*/
|
|
158
|
+
async buildTestContext(sourceFilePath, options) {
|
|
159
|
+
return this.buildContext({
|
|
160
|
+
query: `tests for ${sourceFilePath}`,
|
|
161
|
+
filePath: sourceFilePath,
|
|
162
|
+
}, {
|
|
163
|
+
...options,
|
|
164
|
+
includeTests: true,
|
|
165
|
+
includeImports: true,
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Get cache statistics.
|
|
170
|
+
*/
|
|
171
|
+
getCacheStats() {
|
|
172
|
+
return this.cache.getStats();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Clear cache.
|
|
176
|
+
*/
|
|
177
|
+
clearCache() {
|
|
178
|
+
this.cache.clear();
|
|
179
|
+
}
|
|
180
|
+
/**
|
|
181
|
+
* Update configuration.
|
|
182
|
+
*/
|
|
183
|
+
updateConfig(config) {
|
|
184
|
+
if (config.defaultOptions) {
|
|
185
|
+
this.config.defaultOptions = { ...this.config.defaultOptions, ...config.defaultOptions };
|
|
186
|
+
}
|
|
187
|
+
if (config.baselineTokens !== undefined) {
|
|
188
|
+
this.baselineTokens = config.baselineTokens;
|
|
189
|
+
this.config.baselineTokens = config.baselineTokens;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* Shutdown (cleanup resources).
|
|
194
|
+
*/
|
|
195
|
+
shutdown() {
|
|
196
|
+
this.cache.shutdown();
|
|
197
|
+
}
|
|
198
|
+
// === Private Methods ===
|
|
199
|
+
/**
|
|
200
|
+
* Perform hybrid search.
|
|
201
|
+
*/
|
|
202
|
+
async performSearch(query, options) {
|
|
203
|
+
const searchResponse = await this.searchEngine.search(query.query, {
|
|
204
|
+
topK: options.topK,
|
|
205
|
+
});
|
|
206
|
+
let results = searchResponse.results;
|
|
207
|
+
// Apply filters
|
|
208
|
+
if (query.filePath) {
|
|
209
|
+
results = results.filter(r => r.filePath === query.filePath);
|
|
210
|
+
}
|
|
211
|
+
if (query.entityName) {
|
|
212
|
+
results = results.filter(r => r.entityName === query.entityName);
|
|
213
|
+
}
|
|
214
|
+
if (query.filters?.filePattern) {
|
|
215
|
+
const pattern = new RegExp(query.filters.filePattern);
|
|
216
|
+
results = results.filter(r => pattern.test(r.filePath));
|
|
217
|
+
}
|
|
218
|
+
if (query.filters?.entityType) {
|
|
219
|
+
results = results.filter(r => r.entityType === query.filters.entityType);
|
|
220
|
+
}
|
|
221
|
+
if (query.filters?.language) {
|
|
222
|
+
// Would need language info in SearchResult
|
|
223
|
+
// For now, filter by file extension
|
|
224
|
+
const ext = this.getLanguageExtension(query.filters.language);
|
|
225
|
+
if (ext) {
|
|
226
|
+
results = results.filter(r => r.filePath.endsWith(ext));
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
return results.slice(0, options.topK);
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Expand context using graph relationships.
|
|
233
|
+
*/
|
|
234
|
+
async expandContext(searchResults, query, options) {
|
|
235
|
+
const expandedNodes = [];
|
|
236
|
+
const seenNodeIds = new Set();
|
|
237
|
+
// Find graph nodes for search results
|
|
238
|
+
const startNodeIds = [];
|
|
239
|
+
for (const result of searchResults) {
|
|
240
|
+
// Try to find corresponding graph node
|
|
241
|
+
let node = query.entityName
|
|
242
|
+
? this.graphBuilder.findNode(query.entityName, result.filePath)
|
|
243
|
+
: this.graphBuilder.findNode(this.getFileBasename(result.filePath), result.filePath, 'file');
|
|
244
|
+
// Fallback: find any node in the file
|
|
245
|
+
if (!node) {
|
|
246
|
+
const nodesInFile = this.graphBuilder.findNodesInFile(result.filePath);
|
|
247
|
+
node = nodesInFile[0];
|
|
248
|
+
}
|
|
249
|
+
if (node && !seenNodeIds.has(node.id)) {
|
|
250
|
+
startNodeIds.push(node.id);
|
|
251
|
+
seenNodeIds.add(node.id);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
if (startNodeIds.length === 0) {
|
|
255
|
+
return expandedNodes;
|
|
256
|
+
}
|
|
257
|
+
// Determine which edge types to include
|
|
258
|
+
const edgeTypes = [];
|
|
259
|
+
if (options.includeImports)
|
|
260
|
+
edgeTypes.push('imports');
|
|
261
|
+
if (options.includeTests)
|
|
262
|
+
edgeTypes.push('tests');
|
|
263
|
+
if (options.includeCalls)
|
|
264
|
+
edgeTypes.push('calls');
|
|
265
|
+
// Expand from starting nodes
|
|
266
|
+
const expansionConfig = {
|
|
267
|
+
maxDepth: options.graphDepth,
|
|
268
|
+
maxNodes: options.maxGraphNodes,
|
|
269
|
+
edgeTypes: edgeTypes.length > 0 ? edgeTypes : undefined,
|
|
270
|
+
direction: 'both',
|
|
271
|
+
};
|
|
272
|
+
const expansionResult = this.graphExpander.expandMultiple(startNodeIds, expansionConfig);
|
|
273
|
+
return expansionResult.nodes;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Get file basename from path.
|
|
277
|
+
*/
|
|
278
|
+
getFileBasename(filePath) {
|
|
279
|
+
const parts = filePath.split('/');
|
|
280
|
+
return parts[parts.length - 1];
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Get file extension for language.
|
|
284
|
+
*/
|
|
285
|
+
getLanguageExtension(language) {
|
|
286
|
+
const extMap = {
|
|
287
|
+
typescript: '.ts',
|
|
288
|
+
javascript: '.js',
|
|
289
|
+
python: '.py',
|
|
290
|
+
go: '.go',
|
|
291
|
+
rust: '.rs',
|
|
292
|
+
java: '.java',
|
|
293
|
+
c: '.c',
|
|
294
|
+
cpp: '.cpp',
|
|
295
|
+
};
|
|
296
|
+
return extMap[language.toLowerCase()] || null;
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.KnowledgeGraphContextBuilder = KnowledgeGraphContextBuilder;
|
|
300
|
+
//# sourceMappingURL=KnowledgeGraphContextBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KnowledgeGraphContextBuilder.js","sourceRoot":"","sources":["../../../src/agents/context/KnowledgeGraphContextBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Context Module
|
|
3
|
+
*
|
|
4
|
+
* Knowledge graph-based context enrichment for agents.
|
|
5
|
+
* Reduces LLM token usage by 80% through intelligent search and caching.
|
|
6
|
+
*/
|
|
7
|
+
export { ContextCache } from './ContextCache.js';
|
|
8
|
+
export type { CacheEntry, CacheStats, ContextCacheConfig } from './ContextCache.js';
|
|
9
|
+
export { GraphExpander } from './GraphExpander.js';
|
|
10
|
+
export type { ExpansionConfig, ExpandedNode, ExpansionResult, } from './GraphExpander.js';
|
|
11
|
+
export { ContextFormatter } from './ContextFormatter.js';
|
|
12
|
+
export type { FormattingOptions, FormattedContext, } from './ContextFormatter.js';
|
|
13
|
+
export { KnowledgeGraphContextBuilder } from './KnowledgeGraphContextBuilder.js';
|
|
14
|
+
export type { ContextQuery, ContextOptions, EnrichedContext, ContextBuilderConfig, } from './KnowledgeGraphContextBuilder.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/agents/context/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEpF,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EACV,eAAe,EACf,YAAY,EACZ,eAAe,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EACV,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,4BAA4B,EAAE,MAAM,mCAAmC,CAAC;AACjF,YAAY,EACV,YAAY,EACZ,cAAc,EACd,eAAe,EACf,oBAAoB,GACrB,MAAM,mCAAmC,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Agent Context Module
|
|
4
|
+
*
|
|
5
|
+
* Knowledge graph-based context enrichment for agents.
|
|
6
|
+
* Reduces LLM token usage by 80% through intelligent search and caching.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.KnowledgeGraphContextBuilder = exports.ContextFormatter = exports.GraphExpander = exports.ContextCache = void 0;
|
|
10
|
+
var ContextCache_js_1 = require("./ContextCache.js");
|
|
11
|
+
Object.defineProperty(exports, "ContextCache", { enumerable: true, get: function () { return ContextCache_js_1.ContextCache; } });
|
|
12
|
+
var GraphExpander_js_1 = require("./GraphExpander.js");
|
|
13
|
+
Object.defineProperty(exports, "GraphExpander", { enumerable: true, get: function () { return GraphExpander_js_1.GraphExpander; } });
|
|
14
|
+
var ContextFormatter_js_1 = require("./ContextFormatter.js");
|
|
15
|
+
Object.defineProperty(exports, "ContextFormatter", { enumerable: true, get: function () { return ContextFormatter_js_1.ContextFormatter; } });
|
|
16
|
+
var KnowledgeGraphContextBuilder_js_1 = require("./KnowledgeGraphContextBuilder.js");
|
|
17
|
+
Object.defineProperty(exports, "KnowledgeGraphContextBuilder", { enumerable: true, get: function () { return KnowledgeGraphContextBuilder_js_1.KnowledgeGraphContextBuilder; } });
|
|
18
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/agents/context/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEH,qDAAiD;AAAxC,+GAAA,YAAY,OAAA;AAGrB,uDAAmD;AAA1C,iHAAA,aAAa,OAAA;AAOtB,6DAAyD;AAAhD,uHAAA,gBAAgB,OAAA;AAMzB,qFAAiF;AAAxE,+IAAA,4BAA4B,OAAA"}
|
package/dist/agents/index.d.ts
CHANGED
|
@@ -20,6 +20,7 @@ export { TestDataArchitectAgent } from './TestDataArchitectAgent';
|
|
|
20
20
|
export { FlakyTestHunterAgent } from './FlakyTestHunterAgent';
|
|
21
21
|
export { QXPartnerAgent } from './QXPartnerAgent';
|
|
22
22
|
export { AccessibilityAllyAgent, AccessibilityAllyConfig } from './AccessibilityAllyAgent';
|
|
23
|
+
export { CodeIntelligenceAgent, CodeIntelligenceAgentConfig, createCodeIntelligenceAgent } from './CodeIntelligenceAgent';
|
|
23
24
|
import { BaseAgent } from './BaseAgent';
|
|
24
25
|
import { EventBus } from '../core/EventBus';
|
|
25
26
|
import { MemoryManager } from '../core/MemoryManager';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agents/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAC1E,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAG5E,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAC5E,OAAO,EAAE,yBAAyB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAG9D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,0BAA0B,CAAC;AAG3F,OAAO,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,MAAM,yBAAyB,CAAC;AAG1H,OAAO,EAAE,SAAS,EAAmB,MAAM,aAAa,CAAC;AACzD,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAkChE,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,QAAQ,CAAC;IACnB,WAAW,EAAE,aAAa,CAAC;IAC3B,OAAO,EAAE,YAAY,CAAC;CACvB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuB;gBAElC,MAAM,EAAE,oBAAoB;IAIxC;;OAEG;IACH,OAAO,CAAC,eAAe;IAIvB;;OAEG;IACG,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,SAAS,CAAC;IAoXzE;;OAEG;IACH,iBAAiB,IAAI,WAAW,EAAE;IA8BlC;;OAEG;IACH,OAAO,CAAC,sBAAsB;CAif/B;AAGD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,CAQ/G;AAGD,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,cAAc,EACd,6BAA6B,GAC9B,MAAM,mBAAmB,CAAC;AAC3B,YAAY,EACV,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,oBAAoB,EACpB,uBAAuB,EACvB,yBAAyB,EACzB,0BAA0B,GAC3B,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,mBAAmB,EACnB,gBAAgB,EAChB,sBAAsB,GACvB,MAAM,wBAAwB,CAAC"}
|
package/dist/agents/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* Based on SPARC Phase 2 Pseudocode patterns
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.createSONALifecycleManager = exports.resetSONALifecycleManager = exports.getSONALifecycleManager = exports.SONALifecycleManager = exports.createLearningStrategyFactory = exports.quickStartSONA = exports.getRecommendedConfig = exports.isSONAAvailable = exports.withSONALearning = exports.createSONAContext = exports.QEAgentFactory = exports.AccessibilityAllyAgent = exports.QXPartnerAgent = exports.FlakyTestHunterAgent = exports.TestDataArchitectAgent = exports.ApiContractValidatorAgent = exports.RegressionRiskAnalyzerAgent = exports.SecurityScannerAgent = exports.PerformanceTesterAgent = exports.DeploymentReadinessAgent = exports.ProductionIntelligenceAgent = exports.RequirementsValidatorAgent = exports.FleetCommanderAgent = exports.QualityAnalyzerAgent = exports.QualityGateAgent = exports.CoverageAnalyzerAgent = exports.TestExecutorAgent = exports.TestGeneratorAgent = exports.BaseAgentFactory = exports.BaseAgent = void 0;
|
|
7
|
+
exports.createSONALifecycleManager = exports.resetSONALifecycleManager = exports.getSONALifecycleManager = exports.SONALifecycleManager = exports.createLearningStrategyFactory = exports.quickStartSONA = exports.getRecommendedConfig = exports.isSONAAvailable = exports.withSONALearning = exports.createSONAContext = exports.QEAgentFactory = exports.createCodeIntelligenceAgent = exports.CodeIntelligenceAgent = exports.AccessibilityAllyAgent = exports.QXPartnerAgent = exports.FlakyTestHunterAgent = exports.TestDataArchitectAgent = exports.ApiContractValidatorAgent = exports.RegressionRiskAnalyzerAgent = exports.SecurityScannerAgent = exports.PerformanceTesterAgent = exports.DeploymentReadinessAgent = exports.ProductionIntelligenceAgent = exports.RequirementsValidatorAgent = exports.FleetCommanderAgent = exports.QualityAnalyzerAgent = exports.QualityGateAgent = exports.CoverageAnalyzerAgent = exports.TestExecutorAgent = exports.TestGeneratorAgent = exports.BaseAgentFactory = exports.BaseAgent = void 0;
|
|
8
8
|
exports.createAgent = createAgent;
|
|
9
9
|
// Export all agent implementations
|
|
10
10
|
var BaseAgent_1 = require("./BaseAgent");
|
|
@@ -48,6 +48,10 @@ Object.defineProperty(exports, "QXPartnerAgent", { enumerable: true, get: functi
|
|
|
48
48
|
// Accessibility Testing Agent
|
|
49
49
|
var AccessibilityAllyAgent_1 = require("./AccessibilityAllyAgent");
|
|
50
50
|
Object.defineProperty(exports, "AccessibilityAllyAgent", { enumerable: true, get: function () { return AccessibilityAllyAgent_1.AccessibilityAllyAgent; } });
|
|
51
|
+
// Code Intelligence Agent (Wave 6)
|
|
52
|
+
var CodeIntelligenceAgent_1 = require("./CodeIntelligenceAgent");
|
|
53
|
+
Object.defineProperty(exports, "CodeIntelligenceAgent", { enumerable: true, get: function () { return CodeIntelligenceAgent_1.CodeIntelligenceAgent; } });
|
|
54
|
+
Object.defineProperty(exports, "createCodeIntelligenceAgent", { enumerable: true, get: function () { return CodeIntelligenceAgent_1.createCodeIntelligenceAgent; } });
|
|
51
55
|
const types_1 = require("../types");
|
|
52
56
|
const TestGeneratorAgent_2 = require("./TestGeneratorAgent");
|
|
53
57
|
const TestExecutorAgent_2 = require("./TestExecutorAgent");
|
|
@@ -66,6 +70,7 @@ const TestDataArchitectAgent_2 = require("./TestDataArchitectAgent");
|
|
|
66
70
|
const FlakyTestHunterAgent_2 = require("./FlakyTestHunterAgent");
|
|
67
71
|
const QXPartnerAgent_2 = require("./QXPartnerAgent");
|
|
68
72
|
const AccessibilityAllyAgent_2 = require("./AccessibilityAllyAgent");
|
|
73
|
+
const CodeIntelligenceAgent_2 = require("./CodeIntelligenceAgent");
|
|
69
74
|
const SecureRandom_js_1 = require("../utils/SecureRandom.js");
|
|
70
75
|
class QEAgentFactory {
|
|
71
76
|
constructor(config) {
|
|
@@ -413,6 +418,25 @@ class QEAgentFactory {
|
|
|
413
418
|
};
|
|
414
419
|
return new AccessibilityAllyAgent_2.AccessibilityAllyAgent(a11yConfig);
|
|
415
420
|
}
|
|
421
|
+
case types_1.QEAgentType.CODE_INTELLIGENCE: {
|
|
422
|
+
const codeIntelConfig = {
|
|
423
|
+
...baseConfig,
|
|
424
|
+
rootDir: agentConfig?.rootDir || process.cwd(),
|
|
425
|
+
ollamaUrl: agentConfig?.ollamaUrl || 'http://localhost:11434',
|
|
426
|
+
database: agentConfig?.database || {
|
|
427
|
+
enabled: true,
|
|
428
|
+
host: process.env.PGHOST || 'localhost',
|
|
429
|
+
port: parseInt(process.env.PGPORT || '5432'),
|
|
430
|
+
database: process.env.PGDATABASE || 'ruvector_db',
|
|
431
|
+
user: process.env.PGUSER || 'ruvector',
|
|
432
|
+
password: process.env.PGPASSWORD || 'ruvector',
|
|
433
|
+
},
|
|
434
|
+
includePatterns: agentConfig?.includePatterns,
|
|
435
|
+
excludePatterns: agentConfig?.excludePatterns,
|
|
436
|
+
incrementalIndexing: agentConfig?.incrementalIndexing ?? true,
|
|
437
|
+
};
|
|
438
|
+
return new CodeIntelligenceAgent_2.CodeIntelligenceAgent(codeIntelConfig);
|
|
439
|
+
}
|
|
416
440
|
default:
|
|
417
441
|
throw new Error(`Unknown agent type: ${type}`);
|
|
418
442
|
}
|
|
@@ -444,7 +468,9 @@ class QEAgentFactory {
|
|
|
444
468
|
// Quality Experience (QX) Agent
|
|
445
469
|
types_1.QEAgentType.QX_PARTNER,
|
|
446
470
|
// Accessibility Testing Agent
|
|
447
|
-
types_1.QEAgentType.ACCESSIBILITY_ALLY
|
|
471
|
+
types_1.QEAgentType.ACCESSIBILITY_ALLY,
|
|
472
|
+
// Code Intelligence Agent (Wave 6)
|
|
473
|
+
types_1.QEAgentType.CODE_INTELLIGENCE
|
|
448
474
|
];
|
|
449
475
|
}
|
|
450
476
|
/**
|
|
@@ -898,7 +924,45 @@ class QEAgentFactory {
|
|
|
898
924
|
],
|
|
899
925
|
// Other core agents (placeholder capabilities - future implementation)
|
|
900
926
|
[types_1.QEAgentType.CHAOS_ENGINEER]: [],
|
|
901
|
-
[types_1.QEAgentType.VISUAL_TESTER]: []
|
|
927
|
+
[types_1.QEAgentType.VISUAL_TESTER]: [],
|
|
928
|
+
// Code Intelligence Agent (Wave 6)
|
|
929
|
+
[types_1.QEAgentType.CODE_INTELLIGENCE]: [
|
|
930
|
+
{
|
|
931
|
+
name: 'tree-sitter-parsing',
|
|
932
|
+
version: '1.0.0',
|
|
933
|
+
description: 'Multi-language AST parsing with Tree-sitter (TypeScript, Python, Go, Rust, JavaScript)'
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
name: 'semantic-embeddings',
|
|
937
|
+
version: '1.0.0',
|
|
938
|
+
description: 'Ollama nomic-embed-text embeddings (768 dimensions, 8192 context)'
|
|
939
|
+
},
|
|
940
|
+
{
|
|
941
|
+
name: 'hybrid-search',
|
|
942
|
+
version: '1.0.0',
|
|
943
|
+
description: 'BM25 + Vector search with RRF fusion for accurate code retrieval'
|
|
944
|
+
},
|
|
945
|
+
{
|
|
946
|
+
name: 'knowledge-graph',
|
|
947
|
+
version: '1.0.0',
|
|
948
|
+
description: 'Entity relationships (imports, extends, calls) with graph traversal'
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
name: 'context-building',
|
|
952
|
+
version: '1.0.0',
|
|
953
|
+
description: '80% token reduction through intelligent code context generation'
|
|
954
|
+
},
|
|
955
|
+
{
|
|
956
|
+
name: 'visualization',
|
|
957
|
+
version: '1.0.0',
|
|
958
|
+
description: 'Mermaid class diagrams and dependency graphs'
|
|
959
|
+
},
|
|
960
|
+
{
|
|
961
|
+
name: 'incremental-indexing',
|
|
962
|
+
version: '1.0.0',
|
|
963
|
+
description: 'Git change detection for efficient incremental updates'
|
|
964
|
+
}
|
|
965
|
+
]
|
|
902
966
|
};
|
|
903
967
|
return capabilityMap[type] || [];
|
|
904
968
|
}
|