agentic-qe 2.5.10 → 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 +61 -0
- package/README.md +3 -2
- package/dist/agents/BaseAgent.d.ts +48 -0
- package/dist/agents/BaseAgent.d.ts.map +1 -1
- package/dist/agents/BaseAgent.js +126 -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/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/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/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 +10 -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/core/memory/HNSWVectorMemory.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +1 -1
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +1 -1
- package/dist/mcp/server-instructions.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 +12 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Class Diagram Builder
|
|
4
|
+
*
|
|
5
|
+
* Generates Mermaid class diagrams with inheritance,
|
|
6
|
+
* methods, properties, and visibility markers.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.ClassDiagramBuilder = void 0;
|
|
10
|
+
const MermaidGenerator_js_1 = require("./MermaidGenerator.js");
|
|
11
|
+
class ClassDiagramBuilder {
|
|
12
|
+
/**
|
|
13
|
+
* Build class diagram from graph nodes.
|
|
14
|
+
*/
|
|
15
|
+
static build(nodes, edges, options = {}) {
|
|
16
|
+
const { includeMethods = true, includeProperties = true, showParameters = true, showReturnTypes = true, groupByNamespace = false, maxNodes = 30, } = options;
|
|
17
|
+
// Filter to class/interface nodes
|
|
18
|
+
let classNodes = nodes.filter(n => n.type === 'class' || n.type === 'interface');
|
|
19
|
+
if (classNodes.length > maxNodes) {
|
|
20
|
+
classNodes = classNodes.slice(0, maxNodes);
|
|
21
|
+
}
|
|
22
|
+
// Enrich class nodes with methods and properties
|
|
23
|
+
const enrichedNodes = classNodes.map(node => this.enrichClassNode(node, nodes, {
|
|
24
|
+
includeMethods,
|
|
25
|
+
includeProperties,
|
|
26
|
+
showParameters,
|
|
27
|
+
showReturnTypes,
|
|
28
|
+
}));
|
|
29
|
+
// Filter edges to inheritance/implementation
|
|
30
|
+
const classNodeIds = new Set(classNodes.map(n => n.id));
|
|
31
|
+
const relevantEdges = edges.filter(e => classNodeIds.has(e.source) && classNodeIds.has(e.target) &&
|
|
32
|
+
(e.type === 'extends' || e.type === 'implements' || e.type === 'uses'));
|
|
33
|
+
const diagram = MermaidGenerator_js_1.MermaidGenerator.generate(enrichedNodes, relevantEdges, 'classDiagram', options);
|
|
34
|
+
if (groupByNamespace) {
|
|
35
|
+
return this.addNamespaceGrouping(diagram, enrichedNodes);
|
|
36
|
+
}
|
|
37
|
+
return diagram;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Build inheritance hierarchy for a specific class.
|
|
41
|
+
*/
|
|
42
|
+
static buildHierarchy(rootClassId, nodes, edges, options = {}) {
|
|
43
|
+
const rootNode = nodes.find(n => n.id === rootClassId);
|
|
44
|
+
if (!rootNode) {
|
|
45
|
+
throw new Error(`Class not found: ${rootClassId}`);
|
|
46
|
+
}
|
|
47
|
+
// Traverse up (superclasses) and down (subclasses)
|
|
48
|
+
const hierarchyNodes = new Set([rootClassId]);
|
|
49
|
+
const hierarchyEdges = [];
|
|
50
|
+
// Find superclasses (extends/implements)
|
|
51
|
+
const findSuperclasses = (nodeId) => {
|
|
52
|
+
const extendsEdges = edges.filter(e => e.source === nodeId && (e.type === 'extends' || e.type === 'implements'));
|
|
53
|
+
for (const edge of extendsEdges) {
|
|
54
|
+
if (!hierarchyNodes.has(edge.target)) {
|
|
55
|
+
hierarchyNodes.add(edge.target);
|
|
56
|
+
hierarchyEdges.push(edge);
|
|
57
|
+
findSuperclasses(edge.target);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
// Find subclasses
|
|
62
|
+
const findSubclasses = (nodeId) => {
|
|
63
|
+
const subclassEdges = edges.filter(e => e.target === nodeId && (e.type === 'extends' || e.type === 'implements'));
|
|
64
|
+
for (const edge of subclassEdges) {
|
|
65
|
+
if (!hierarchyNodes.has(edge.source)) {
|
|
66
|
+
hierarchyNodes.add(edge.source);
|
|
67
|
+
hierarchyEdges.push(edge);
|
|
68
|
+
findSubclasses(edge.source);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
findSuperclasses(rootClassId);
|
|
73
|
+
findSubclasses(rootClassId);
|
|
74
|
+
const hierarchyNodeList = nodes.filter(n => hierarchyNodes.has(n.id));
|
|
75
|
+
return this.build(hierarchyNodeList, hierarchyEdges, options);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Enrich class node with methods and properties from child nodes.
|
|
79
|
+
*/
|
|
80
|
+
static enrichClassNode(classNode, allNodes, options) {
|
|
81
|
+
const enriched = { ...classNode };
|
|
82
|
+
if (!enriched.properties) {
|
|
83
|
+
enriched.properties = {};
|
|
84
|
+
}
|
|
85
|
+
// Find methods (child nodes of type 'method')
|
|
86
|
+
if (options.includeMethods) {
|
|
87
|
+
const methods = allNodes.filter(n => n.type === 'method' && n.filePath === classNode.filePath &&
|
|
88
|
+
n.startLine >= classNode.startLine && n.endLine <= classNode.endLine);
|
|
89
|
+
enriched.properties.methods = methods.map(m => ({
|
|
90
|
+
name: m.label,
|
|
91
|
+
visibility: this.inferVisibility(m.label),
|
|
92
|
+
returnType: options.showReturnTypes ? m.properties.returnType : undefined,
|
|
93
|
+
params: options.showParameters ? m.properties.params : undefined,
|
|
94
|
+
}));
|
|
95
|
+
}
|
|
96
|
+
// Find properties (child nodes of type 'variable')
|
|
97
|
+
if (options.includeProperties) {
|
|
98
|
+
const properties = allNodes.filter(n => n.type === 'variable' && n.filePath === classNode.filePath &&
|
|
99
|
+
n.startLine >= classNode.startLine && n.endLine <= classNode.endLine);
|
|
100
|
+
enriched.properties.properties = properties.map(p => ({
|
|
101
|
+
name: p.label,
|
|
102
|
+
visibility: this.inferVisibility(p.label),
|
|
103
|
+
type: p.properties.type,
|
|
104
|
+
}));
|
|
105
|
+
}
|
|
106
|
+
return enriched;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Infer visibility from naming convention.
|
|
110
|
+
*/
|
|
111
|
+
static inferVisibility(name) {
|
|
112
|
+
if (name.startsWith('_'))
|
|
113
|
+
return 'private';
|
|
114
|
+
if (name.startsWith('#'))
|
|
115
|
+
return 'private';
|
|
116
|
+
if (name.startsWith('__'))
|
|
117
|
+
return 'private';
|
|
118
|
+
return 'public';
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Add namespace grouping to diagram.
|
|
122
|
+
*/
|
|
123
|
+
static addNamespaceGrouping(diagram, nodes) {
|
|
124
|
+
const lines = diagram.split('\n');
|
|
125
|
+
const namespaces = new Map();
|
|
126
|
+
// Group nodes by file path (namespace)
|
|
127
|
+
for (const node of nodes) {
|
|
128
|
+
const namespace = this.extractNamespace(node.filePath);
|
|
129
|
+
const existing = namespaces.get(namespace) || [];
|
|
130
|
+
existing.push(MermaidGenerator_js_1.MermaidGenerator['sanitizeMermaidId'](node.label));
|
|
131
|
+
namespaces.set(namespace, existing);
|
|
132
|
+
}
|
|
133
|
+
// Insert namespace declarations after classDiagram header
|
|
134
|
+
const namespaceLines = [];
|
|
135
|
+
for (const [namespace, classes] of namespaces.entries()) {
|
|
136
|
+
namespaceLines.push(` namespace ${namespace} {`);
|
|
137
|
+
for (const className of classes) {
|
|
138
|
+
namespaceLines.push(` class ${className}`);
|
|
139
|
+
}
|
|
140
|
+
namespaceLines.push(' }');
|
|
141
|
+
}
|
|
142
|
+
// Insert after first line
|
|
143
|
+
return [lines[0], ...namespaceLines, ...lines.slice(1)].join('\n');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Extract namespace from file path.
|
|
147
|
+
*/
|
|
148
|
+
static extractNamespace(filePath) {
|
|
149
|
+
const parts = filePath.split('/');
|
|
150
|
+
if (parts.length > 1) {
|
|
151
|
+
// Use parent directory as namespace
|
|
152
|
+
return parts[parts.length - 2].replace(/[^a-zA-Z0-9]/g, '_');
|
|
153
|
+
}
|
|
154
|
+
return 'default';
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Generate interface overview diagram.
|
|
158
|
+
*/
|
|
159
|
+
static buildInterfaceOverview(nodes, edges, options = {}) {
|
|
160
|
+
// Filter to interfaces only
|
|
161
|
+
const interfaceNodes = nodes.filter(n => n.type === 'interface');
|
|
162
|
+
// Find all classes that implement these interfaces
|
|
163
|
+
const implementsEdges = edges.filter(e => e.type === 'implements');
|
|
164
|
+
const relevantNodeIds = new Set(interfaceNodes.map(n => n.id));
|
|
165
|
+
for (const edge of implementsEdges) {
|
|
166
|
+
if (relevantNodeIds.has(edge.target)) {
|
|
167
|
+
relevantNodeIds.add(edge.source);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const relevantNodes = nodes.filter(n => relevantNodeIds.has(n.id));
|
|
171
|
+
const relevantEdges = implementsEdges.filter(e => relevantNodeIds.has(e.source) && relevantNodeIds.has(e.target));
|
|
172
|
+
return this.build(relevantNodes, relevantEdges, {
|
|
173
|
+
...options,
|
|
174
|
+
includeMethods: true,
|
|
175
|
+
includeProperties: false,
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
exports.ClassDiagramBuilder = ClassDiagramBuilder;
|
|
180
|
+
//# sourceMappingURL=ClassDiagramBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ClassDiagramBuilder.js","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/ClassDiagramBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency Graph Builder
|
|
3
|
+
*
|
|
4
|
+
* Generates Mermaid dependency graphs showing module relationships,
|
|
5
|
+
* import chains, and circular dependencies.
|
|
6
|
+
*/
|
|
7
|
+
import { GraphNode, GraphEdge } from '../graph/types.js';
|
|
8
|
+
import { MermaidOptions } from './MermaidGenerator.js';
|
|
9
|
+
export interface DependencyGraphOptions extends MermaidOptions {
|
|
10
|
+
/** Show only direct dependencies */
|
|
11
|
+
directOnly?: boolean;
|
|
12
|
+
/** Maximum depth for dependency tree */
|
|
13
|
+
maxDepth?: number;
|
|
14
|
+
/** Highlight circular dependencies */
|
|
15
|
+
highlightCycles?: boolean;
|
|
16
|
+
/** Group by directory */
|
|
17
|
+
groupByDirectory?: boolean;
|
|
18
|
+
/** Show external dependencies (node_modules) */
|
|
19
|
+
showExternal?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class DependencyGraphBuilder {
|
|
22
|
+
/**
|
|
23
|
+
* Build dependency graph from import relationships.
|
|
24
|
+
*/
|
|
25
|
+
static build(nodes: GraphNode[], edges: GraphEdge[], options?: DependencyGraphOptions): string;
|
|
26
|
+
/**
|
|
27
|
+
* Build dependency tree for a specific file.
|
|
28
|
+
*/
|
|
29
|
+
static buildDependencyTree(rootFileId: string, nodes: GraphNode[], edges: GraphEdge[], options?: DependencyGraphOptions): string;
|
|
30
|
+
/**
|
|
31
|
+
* Build reverse dependency graph (who depends on this file).
|
|
32
|
+
*/
|
|
33
|
+
static buildReverseDependencies(targetFileId: string, nodes: GraphNode[], edges: GraphEdge[], options?: DependencyGraphOptions): string;
|
|
34
|
+
/**
|
|
35
|
+
* Analyze dependency metrics.
|
|
36
|
+
*/
|
|
37
|
+
static analyzeDependencies(nodes: GraphNode[], edges: GraphEdge[]): DependencyMetrics;
|
|
38
|
+
/**
|
|
39
|
+
* Filter to direct dependencies only.
|
|
40
|
+
*/
|
|
41
|
+
private static filterDirectDependencies;
|
|
42
|
+
/**
|
|
43
|
+
* Generate dependency matrix (tabular view).
|
|
44
|
+
*/
|
|
45
|
+
static generateDependencyMatrix(nodes: GraphNode[], edges: GraphEdge[]): string;
|
|
46
|
+
/**
|
|
47
|
+
* Shorten file path for display.
|
|
48
|
+
*/
|
|
49
|
+
private static shortenPath;
|
|
50
|
+
}
|
|
51
|
+
export interface DependencyMetrics {
|
|
52
|
+
totalFiles: number;
|
|
53
|
+
totalDependencies: number;
|
|
54
|
+
avgDependenciesPerFile: number;
|
|
55
|
+
mostImported: Array<{
|
|
56
|
+
file: string;
|
|
57
|
+
imports: number;
|
|
58
|
+
}>;
|
|
59
|
+
mostImporting: Array<{
|
|
60
|
+
file: string;
|
|
61
|
+
dependencies: number;
|
|
62
|
+
}>;
|
|
63
|
+
circularDependencies: number;
|
|
64
|
+
circularDependencyPaths: string[][];
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=DependencyGraphBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyGraphBuilder.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/DependencyGraphBuilder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACzD,OAAO,EAAoB,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEzE,MAAM,WAAW,sBAAuB,SAAQ,cAAc;IAC5D,oCAAoC;IACpC,UAAU,CAAC,EAAE,OAAO,CAAC;IAErB,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,sCAAsC;IACtC,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B,yBAAyB;IACzB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAE3B,gDAAgD;IAChD,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,sBAAsB;IACjC;;OAEG;IACH,MAAM,CAAC,KAAK,CACV,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,GAAE,sBAA2B,GACnC,MAAM;IAwDT;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,GAAE,sBAA2B,GACnC,MAAM;IAgDT;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAC7B,YAAY,EAAE,MAAM,EACpB,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,GAAE,sBAA2B,GACnC,MAAM;IA+BT;;OAEG;IACH,MAAM,CAAC,mBAAmB,CACxB,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,GACjB,iBAAiB;IAmDpB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,wBAAwB;IAgBvC;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,GACjB,MAAM;IAmCT;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;CAO3B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,sBAAsB,EAAE,MAAM,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvD,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uBAAuB,EAAE,MAAM,EAAE,EAAE,CAAC;CACrC"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Dependency Graph Builder
|
|
4
|
+
*
|
|
5
|
+
* Generates Mermaid dependency graphs showing module relationships,
|
|
6
|
+
* import chains, and circular dependencies.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.DependencyGraphBuilder = void 0;
|
|
10
|
+
const MermaidGenerator_js_1 = require("./MermaidGenerator.js");
|
|
11
|
+
class DependencyGraphBuilder {
|
|
12
|
+
/**
|
|
13
|
+
* Build dependency graph from import relationships.
|
|
14
|
+
*/
|
|
15
|
+
static build(nodes, edges, options = {}) {
|
|
16
|
+
const { directOnly = false, maxDepth = 3, highlightCycles = true, showExternal = false, maxNodes = 50, } = options;
|
|
17
|
+
// Filter to file nodes
|
|
18
|
+
let fileNodes = nodes.filter(n => n.type === 'file');
|
|
19
|
+
// Filter out node_modules unless requested
|
|
20
|
+
if (!showExternal) {
|
|
21
|
+
fileNodes = fileNodes.filter(n => !n.filePath.includes('node_modules'));
|
|
22
|
+
}
|
|
23
|
+
if (fileNodes.length > maxNodes) {
|
|
24
|
+
fileNodes = fileNodes.slice(0, maxNodes);
|
|
25
|
+
}
|
|
26
|
+
// Filter to import/export edges
|
|
27
|
+
const fileNodeIds = new Set(fileNodes.map(n => n.id));
|
|
28
|
+
let dependencyEdges = edges.filter(e => fileNodeIds.has(e.source) && fileNodeIds.has(e.target) &&
|
|
29
|
+
(e.type === 'imports' || e.type === 'exports'));
|
|
30
|
+
// If directOnly, filter to depth 1
|
|
31
|
+
if (directOnly) {
|
|
32
|
+
dependencyEdges = this.filterDirectDependencies(fileNodes, dependencyEdges);
|
|
33
|
+
}
|
|
34
|
+
if (highlightCycles) {
|
|
35
|
+
return MermaidGenerator_js_1.MermaidGenerator.generateDependencyGraphWithCycles(fileNodes, dependencyEdges, options);
|
|
36
|
+
}
|
|
37
|
+
return MermaidGenerator_js_1.MermaidGenerator.generate(fileNodes, dependencyEdges, 'graph', {
|
|
38
|
+
...options,
|
|
39
|
+
direction: 'LR',
|
|
40
|
+
edgeTypeFilter: ['imports', 'exports'],
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Build dependency tree for a specific file.
|
|
45
|
+
*/
|
|
46
|
+
static buildDependencyTree(rootFileId, nodes, edges, options = {}) {
|
|
47
|
+
const { maxDepth = 3, highlightCycles = true, } = options;
|
|
48
|
+
const rootNode = nodes.find(n => n.id === rootFileId);
|
|
49
|
+
if (!rootNode) {
|
|
50
|
+
throw new Error(`File not found: ${rootFileId}`);
|
|
51
|
+
}
|
|
52
|
+
const treeNodes = new Set([rootFileId]);
|
|
53
|
+
const treeEdges = [];
|
|
54
|
+
// BFS traversal of dependencies
|
|
55
|
+
const queue = [
|
|
56
|
+
{ nodeId: rootFileId, depth: 0 }
|
|
57
|
+
];
|
|
58
|
+
const visited = new Set([rootFileId]);
|
|
59
|
+
while (queue.length > 0) {
|
|
60
|
+
const { nodeId, depth } = queue.shift();
|
|
61
|
+
if (depth >= maxDepth)
|
|
62
|
+
continue;
|
|
63
|
+
const dependencies = edges.filter(e => e.source === nodeId && (e.type === 'imports' || e.type === 'uses'));
|
|
64
|
+
for (const edge of dependencies) {
|
|
65
|
+
treeNodes.add(edge.target);
|
|
66
|
+
treeEdges.push(edge);
|
|
67
|
+
if (!visited.has(edge.target)) {
|
|
68
|
+
visited.add(edge.target);
|
|
69
|
+
queue.push({ nodeId: edge.target, depth: depth + 1 });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const treeNodeList = nodes.filter(n => treeNodes.has(n.id));
|
|
74
|
+
return this.build(treeNodeList, treeEdges, {
|
|
75
|
+
...options,
|
|
76
|
+
highlightCycles,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Build reverse dependency graph (who depends on this file).
|
|
81
|
+
*/
|
|
82
|
+
static buildReverseDependencies(targetFileId, nodes, edges, options = {}) {
|
|
83
|
+
const targetNode = nodes.find(n => n.id === targetFileId);
|
|
84
|
+
if (!targetNode) {
|
|
85
|
+
throw new Error(`File not found: ${targetFileId}`);
|
|
86
|
+
}
|
|
87
|
+
// Find all nodes that import/use target
|
|
88
|
+
const dependents = new Set([targetFileId]);
|
|
89
|
+
const reverseEdges = [];
|
|
90
|
+
const findDependents = (nodeId) => {
|
|
91
|
+
const incomingEdges = edges.filter(e => e.target === nodeId && (e.type === 'imports' || e.type === 'uses'));
|
|
92
|
+
for (const edge of incomingEdges) {
|
|
93
|
+
if (!dependents.has(edge.source)) {
|
|
94
|
+
dependents.add(edge.source);
|
|
95
|
+
reverseEdges.push(edge);
|
|
96
|
+
findDependents(edge.source);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
findDependents(targetFileId);
|
|
101
|
+
const dependentNodes = nodes.filter(n => dependents.has(n.id));
|
|
102
|
+
return this.build(dependentNodes, reverseEdges, options);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Analyze dependency metrics.
|
|
106
|
+
*/
|
|
107
|
+
static analyzeDependencies(nodes, edges) {
|
|
108
|
+
const fileNodes = nodes.filter(n => n.type === 'file');
|
|
109
|
+
const importEdges = edges.filter(e => e.type === 'imports');
|
|
110
|
+
const inDegree = new Map();
|
|
111
|
+
const outDegree = new Map();
|
|
112
|
+
for (const node of fileNodes) {
|
|
113
|
+
inDegree.set(node.id, 0);
|
|
114
|
+
outDegree.set(node.id, 0);
|
|
115
|
+
}
|
|
116
|
+
for (const edge of importEdges) {
|
|
117
|
+
inDegree.set(edge.target, (inDegree.get(edge.target) || 0) + 1);
|
|
118
|
+
outDegree.set(edge.source, (outDegree.get(edge.source) || 0) + 1);
|
|
119
|
+
}
|
|
120
|
+
// Find most imported (highly coupled)
|
|
121
|
+
const mostImported = Array.from(inDegree.entries())
|
|
122
|
+
.sort((a, b) => b[1] - a[1])
|
|
123
|
+
.slice(0, 10)
|
|
124
|
+
.map(([nodeId, count]) => {
|
|
125
|
+
const node = nodes.find(n => n.id === nodeId);
|
|
126
|
+
return { file: node.label, imports: count };
|
|
127
|
+
});
|
|
128
|
+
// Find most importing (highly dependent)
|
|
129
|
+
const mostImporting = Array.from(outDegree.entries())
|
|
130
|
+
.sort((a, b) => b[1] - a[1])
|
|
131
|
+
.slice(0, 10)
|
|
132
|
+
.map(([nodeId, count]) => {
|
|
133
|
+
const node = nodes.find(n => n.id === nodeId);
|
|
134
|
+
return { file: node.label, dependencies: count };
|
|
135
|
+
});
|
|
136
|
+
// Find circular dependencies
|
|
137
|
+
const cycles = MermaidGenerator_js_1.MermaidGenerator.findCircularDependencies(fileNodes, importEdges);
|
|
138
|
+
return {
|
|
139
|
+
totalFiles: fileNodes.length,
|
|
140
|
+
totalDependencies: importEdges.length,
|
|
141
|
+
avgDependenciesPerFile: fileNodes.length > 0
|
|
142
|
+
? importEdges.length / fileNodes.length
|
|
143
|
+
: 0,
|
|
144
|
+
mostImported,
|
|
145
|
+
mostImporting,
|
|
146
|
+
circularDependencies: cycles.length,
|
|
147
|
+
circularDependencyPaths: cycles,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Filter to direct dependencies only.
|
|
152
|
+
*/
|
|
153
|
+
static filterDirectDependencies(nodes, edges) {
|
|
154
|
+
// For each node, keep only first-level dependencies
|
|
155
|
+
const directEdges = [];
|
|
156
|
+
const nodeIds = new Set(nodes.map(n => n.id));
|
|
157
|
+
for (const nodeId of nodeIds) {
|
|
158
|
+
const outgoing = edges.filter(e => e.source === nodeId);
|
|
159
|
+
directEdges.push(...outgoing);
|
|
160
|
+
}
|
|
161
|
+
return directEdges;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Generate dependency matrix (tabular view).
|
|
165
|
+
*/
|
|
166
|
+
static generateDependencyMatrix(nodes, edges) {
|
|
167
|
+
const fileNodes = nodes.filter(n => n.type === 'file');
|
|
168
|
+
const importEdges = edges.filter(e => e.type === 'imports');
|
|
169
|
+
const matrix = [];
|
|
170
|
+
const header = ['File', ...fileNodes.map(n => this.shortenPath(n.label))];
|
|
171
|
+
matrix.push(header);
|
|
172
|
+
for (const source of fileNodes) {
|
|
173
|
+
const row = [this.shortenPath(source.label)];
|
|
174
|
+
for (const target of fileNodes) {
|
|
175
|
+
const hasEdge = importEdges.some(e => e.source === source.id && e.target === target.id);
|
|
176
|
+
row.push(hasEdge ? 'X' : '');
|
|
177
|
+
}
|
|
178
|
+
matrix.push(row);
|
|
179
|
+
}
|
|
180
|
+
// Format as markdown table
|
|
181
|
+
const lines = [];
|
|
182
|
+
lines.push('## Dependency Matrix');
|
|
183
|
+
lines.push('');
|
|
184
|
+
lines.push(matrix[0].join(' | '));
|
|
185
|
+
lines.push(matrix[0].map(() => '---').join(' | '));
|
|
186
|
+
for (let i = 1; i < matrix.length; i++) {
|
|
187
|
+
lines.push(matrix[i].join(' | '));
|
|
188
|
+
}
|
|
189
|
+
return lines.join('\n');
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Shorten file path for display.
|
|
193
|
+
*/
|
|
194
|
+
static shortenPath(path) {
|
|
195
|
+
const parts = path.split('/');
|
|
196
|
+
if (parts.length > 2) {
|
|
197
|
+
return `.../${parts[parts.length - 1]}`;
|
|
198
|
+
}
|
|
199
|
+
return path;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
exports.DependencyGraphBuilder = DependencyGraphBuilder;
|
|
203
|
+
//# sourceMappingURL=DependencyGraphBuilder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DependencyGraphBuilder.js","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/DependencyGraphBuilder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mermaid Diagram Generator
|
|
3
|
+
*
|
|
4
|
+
* Converts Code Intelligence graph to Mermaid syntax
|
|
5
|
+
* for GitHub-compatible visualization.
|
|
6
|
+
*/
|
|
7
|
+
import { GraphNode, GraphEdge, EdgeType, NodeType } from '../graph/types.js';
|
|
8
|
+
export interface MermaidOptions {
|
|
9
|
+
/** Maximum nodes to include (prevents overwhelming large graphs) */
|
|
10
|
+
maxNodes?: number;
|
|
11
|
+
/** Include legend for relationship types */
|
|
12
|
+
includeLegend?: boolean;
|
|
13
|
+
/** Direction for flowcharts (TB, LR, RL, BT) */
|
|
14
|
+
direction?: 'TB' | 'LR' | 'RL' | 'BT';
|
|
15
|
+
/** Style theme */
|
|
16
|
+
theme?: 'default' | 'dark' | 'forest' | 'neutral';
|
|
17
|
+
/** Filter by node types */
|
|
18
|
+
nodeTypeFilter?: NodeType[];
|
|
19
|
+
/** Filter by edge types */
|
|
20
|
+
edgeTypeFilter?: EdgeType[];
|
|
21
|
+
}
|
|
22
|
+
export declare class MermaidGenerator {
|
|
23
|
+
/**
|
|
24
|
+
* Generate Mermaid diagram from nodes and edges.
|
|
25
|
+
*/
|
|
26
|
+
static generate(nodes: GraphNode[], edges: GraphEdge[], type: 'classDiagram' | 'graph' | 'flowchart', options?: MermaidOptions): string;
|
|
27
|
+
/**
|
|
28
|
+
* Generate class diagram.
|
|
29
|
+
*/
|
|
30
|
+
private static generateClassDiagram;
|
|
31
|
+
/**
|
|
32
|
+
* Generate flowchart/graph diagram.
|
|
33
|
+
*/
|
|
34
|
+
private static generateFlowchart;
|
|
35
|
+
/**
|
|
36
|
+
* Get visibility symbol for class members.
|
|
37
|
+
*/
|
|
38
|
+
private static getVisibilitySymbol;
|
|
39
|
+
/**
|
|
40
|
+
* Get class diagram relationship syntax.
|
|
41
|
+
*/
|
|
42
|
+
private static getClassRelationship;
|
|
43
|
+
/**
|
|
44
|
+
* Get node shape for flowchart.
|
|
45
|
+
*/
|
|
46
|
+
private static getNodeShape;
|
|
47
|
+
/**
|
|
48
|
+
* Get node style CSS.
|
|
49
|
+
*/
|
|
50
|
+
private static getNodeStyle;
|
|
51
|
+
/**
|
|
52
|
+
* Get edge arrow style.
|
|
53
|
+
*/
|
|
54
|
+
private static getEdgeArrow;
|
|
55
|
+
/**
|
|
56
|
+
* Get edge label.
|
|
57
|
+
*/
|
|
58
|
+
private static getEdgeLabel;
|
|
59
|
+
/**
|
|
60
|
+
* Sanitize ID for Mermaid (alphanumeric and underscores only).
|
|
61
|
+
*/
|
|
62
|
+
private static sanitizeMermaidId;
|
|
63
|
+
/**
|
|
64
|
+
* Escape label for Mermaid (handle special characters).
|
|
65
|
+
*/
|
|
66
|
+
private static escapeLabel;
|
|
67
|
+
/**
|
|
68
|
+
* Detect circular dependencies in graph.
|
|
69
|
+
*/
|
|
70
|
+
static findCircularDependencies(nodes: GraphNode[], edges: GraphEdge[]): string[][];
|
|
71
|
+
/**
|
|
72
|
+
* Generate dependency graph with circular dependency highlighting.
|
|
73
|
+
*/
|
|
74
|
+
static generateDependencyGraphWithCycles(nodes: GraphNode[], edges: GraphEdge[], options?: MermaidOptions): string;
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=MermaidGenerator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidGenerator.d.ts","sourceRoot":"","sources":["../../../src/code-intelligence/visualization/MermaidGenerator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7E,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,4CAA4C;IAC5C,aAAa,CAAC,EAAE,OAAO,CAAC;IAExB,gDAAgD;IAChD,SAAS,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAEtC,kBAAkB;IAClB,KAAK,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,QAAQ,GAAG,SAAS,CAAC;IAElD,2BAA2B;IAC3B,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;IAE5B,2BAA2B;IAC3B,cAAc,CAAC,EAAE,QAAQ,EAAE,CAAC;CAC7B;AAED,qBAAa,gBAAgB;IAC3B;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,IAAI,EAAE,cAAc,GAAG,OAAO,GAAG,WAAW,EAC5C,OAAO,GAAE,cAAmB,GAC3B,MAAM;IAyCT;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAkEnC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAkDhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IAgBlC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,oBAAoB;IAenC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAsB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAqB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IAwB3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,YAAY;IA+B3B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,iBAAiB;IAIhC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,WAAW;IAW1B;;OAEG;IACH,MAAM,CAAC,wBAAwB,CAC7B,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,GACjB,MAAM,EAAE,EAAE;IA8Cb;;OAEG;IACH,MAAM,CAAC,iCAAiC,CACtC,KAAK,EAAE,SAAS,EAAE,EAClB,KAAK,EAAE,SAAS,EAAE,EAClB,OAAO,GAAE,cAAmB,GAC3B,MAAM;CAgCV"}
|