code-auditor-mcp 1.20.0 → 2.0.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.
Files changed (180) hide show
  1. package/dist/adapters/GoAdapter.d.ts +53 -0
  2. package/dist/adapters/GoAdapter.d.ts.map +1 -0
  3. package/dist/adapters/GoAdapter.js +602 -0
  4. package/dist/adapters/GoAdapter.js.map +1 -0
  5. package/dist/adapters/GoConfig.d.ts +35 -0
  6. package/dist/adapters/GoConfig.d.ts.map +1 -0
  7. package/dist/adapters/GoConfig.js +155 -0
  8. package/dist/adapters/GoConfig.js.map +1 -0
  9. package/dist/adapters/LanguageAdapter.d.ts +135 -0
  10. package/dist/adapters/LanguageAdapter.d.ts.map +1 -0
  11. package/dist/adapters/LanguageAdapter.js +47 -0
  12. package/dist/adapters/LanguageAdapter.js.map +1 -0
  13. package/dist/adapters/TypeScriptAdapter.d.ts +43 -0
  14. package/dist/adapters/TypeScriptAdapter.d.ts.map +1 -0
  15. package/dist/adapters/TypeScriptAdapter.js +386 -0
  16. package/dist/adapters/TypeScriptAdapter.js.map +1 -0
  17. package/dist/adapters/UniversalAnalyzer.d.ts +42 -0
  18. package/dist/adapters/UniversalAnalyzer.d.ts.map +1 -0
  19. package/dist/adapters/UniversalAnalyzer.js +103 -0
  20. package/dist/adapters/UniversalAnalyzer.js.map +1 -0
  21. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts +48 -0
  22. package/dist/adapters/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  23. package/dist/adapters/UniversalSOLIDAnalyzer.js +178 -0
  24. package/dist/adapters/UniversalSOLIDAnalyzer.js.map +1 -0
  25. package/dist/adapters/solidAnalyzerCompat.d.ts +21 -0
  26. package/dist/adapters/solidAnalyzerCompat.d.ts.map +1 -0
  27. package/dist/adapters/solidAnalyzerCompat.js +78 -0
  28. package/dist/adapters/solidAnalyzerCompat.js.map +1 -0
  29. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +103 -0
  30. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -0
  31. package/dist/analyzers/cross-language/APIContractAnalyzer.js +425 -0
  32. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -0
  33. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts +117 -0
  34. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.d.ts.map +1 -0
  35. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js +618 -0
  36. package/dist/analyzers/cross-language/CrossLanguageSOLIDAnalyzer.js.map +1 -0
  37. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +129 -0
  38. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -0
  39. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +473 -0
  40. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -0
  41. package/dist/analyzers/cross-language/SchemaValidator.d.ts +126 -0
  42. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -0
  43. package/dist/analyzers/cross-language/SchemaValidator.js +522 -0
  44. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -0
  45. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts +20 -0
  46. package/dist/analyzers/dataAccessAnalyzerCompat.d.ts.map +1 -0
  47. package/dist/analyzers/dataAccessAnalyzerCompat.js +59 -0
  48. package/dist/analyzers/dataAccessAnalyzerCompat.js.map +1 -0
  49. package/dist/analyzers/documentationAnalyzerCompat.d.ts +20 -0
  50. package/dist/analyzers/documentationAnalyzerCompat.d.ts.map +1 -0
  51. package/dist/analyzers/documentationAnalyzerCompat.js +52 -0
  52. package/dist/analyzers/documentationAnalyzerCompat.js.map +1 -0
  53. package/dist/analyzers/dryAnalyzerCompat.d.ts +20 -0
  54. package/dist/analyzers/dryAnalyzerCompat.d.ts.map +1 -0
  55. package/dist/analyzers/dryAnalyzerCompat.js +44 -0
  56. package/dist/analyzers/dryAnalyzerCompat.js.map +1 -0
  57. package/dist/analyzers/schemaAnalyzer.d.ts +21 -0
  58. package/dist/analyzers/schemaAnalyzer.d.ts.map +1 -0
  59. package/dist/analyzers/schemaAnalyzer.js +405 -0
  60. package/dist/analyzers/schemaAnalyzer.js.map +1 -0
  61. package/dist/analyzers/schemaAnalyzerCompat.d.ts +20 -0
  62. package/dist/analyzers/schemaAnalyzerCompat.d.ts.map +1 -0
  63. package/dist/analyzers/schemaAnalyzerCompat.js +69 -0
  64. package/dist/analyzers/schemaAnalyzerCompat.js.map +1 -0
  65. package/dist/analyzers/solidAnalyzerCompat.d.ts +20 -0
  66. package/dist/analyzers/solidAnalyzerCompat.d.ts.map +1 -0
  67. package/dist/analyzers/solidAnalyzerCompat.js +78 -0
  68. package/dist/analyzers/solidAnalyzerCompat.js.map +1 -0
  69. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +71 -0
  70. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -0
  71. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +276 -0
  72. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -0
  73. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +82 -0
  74. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -0
  75. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +489 -0
  76. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -0
  77. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +48 -0
  78. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -0
  79. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +175 -0
  80. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -0
  81. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +64 -0
  82. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -0
  83. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +286 -0
  84. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -0
  85. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +119 -0
  86. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -0
  87. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +812 -0
  88. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -0
  89. package/dist/auditRunner.d.ts.map +1 -1
  90. package/dist/auditRunner.js +23 -7
  91. package/dist/auditRunner.js.map +1 -1
  92. package/dist/codeIndexDB-enhanced.d.ts +80 -0
  93. package/dist/codeIndexDB-enhanced.d.ts.map +1 -0
  94. package/dist/codeIndexDB-enhanced.js +488 -0
  95. package/dist/codeIndexDB-enhanced.js.map +1 -0
  96. package/dist/codeIndexDb.d.ts +70 -1
  97. package/dist/codeIndexDb.d.ts.map +1 -1
  98. package/dist/codeIndexDb.js +199 -2
  99. package/dist/codeIndexDb.js.map +1 -1
  100. package/dist/config/defaults.js +1 -1
  101. package/dist/config/defaults.js.map +1 -1
  102. package/dist/languages/LanguageOrchestrator.d.ts +181 -0
  103. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -0
  104. package/dist/languages/LanguageOrchestrator.js +365 -0
  105. package/dist/languages/LanguageOrchestrator.js.map +1 -0
  106. package/dist/languages/LanguageRegistry.d.ts +43 -0
  107. package/dist/languages/LanguageRegistry.d.ts.map +1 -0
  108. package/dist/languages/LanguageRegistry.js +86 -0
  109. package/dist/languages/LanguageRegistry.js.map +1 -0
  110. package/dist/languages/RuntimeManager.d.ts +181 -0
  111. package/dist/languages/RuntimeManager.d.ts.map +1 -0
  112. package/dist/languages/RuntimeManager.js +841 -0
  113. package/dist/languages/RuntimeManager.js.map +1 -0
  114. package/dist/languages/UniversalAnalyzer.d.ts +37 -0
  115. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -0
  116. package/dist/languages/UniversalAnalyzer.js +101 -0
  117. package/dist/languages/UniversalAnalyzer.js.map +1 -0
  118. package/dist/languages/go/GoAdapter.d.ts +57 -0
  119. package/dist/languages/go/GoAdapter.d.ts.map +1 -0
  120. package/dist/languages/go/GoAdapter.js +360 -0
  121. package/dist/languages/go/GoAdapter.js.map +1 -0
  122. package/dist/languages/index.d.ts +13 -0
  123. package/dist/languages/index.d.ts.map +1 -0
  124. package/dist/languages/index.js +23 -0
  125. package/dist/languages/index.js.map +1 -0
  126. package/dist/languages/types.d.ts +182 -0
  127. package/dist/languages/types.d.ts.map +1 -0
  128. package/dist/languages/types.js +5 -0
  129. package/dist/languages/types.js.map +1 -0
  130. package/dist/languages/typescript/TypeScriptAdapter.d.ts +108 -0
  131. package/dist/languages/typescript/TypeScriptAdapter.d.ts.map +1 -0
  132. package/dist/languages/typescript/TypeScriptAdapter.js +567 -0
  133. package/dist/languages/typescript/TypeScriptAdapter.js.map +1 -0
  134. package/dist/languages/typescript/test-extraction.d.ts +2 -0
  135. package/dist/languages/typescript/test-extraction.d.ts.map +1 -0
  136. package/dist/languages/typescript/test-extraction.js +36 -0
  137. package/dist/languages/typescript/test-extraction.js.map +1 -0
  138. package/dist/mcp-hybrid.d.ts +10 -0
  139. package/dist/mcp-hybrid.d.ts.map +1 -0
  140. package/dist/mcp-hybrid.js +41 -0
  141. package/dist/mcp-hybrid.js.map +1 -0
  142. package/dist/mcp-index.d.ts +11 -0
  143. package/dist/mcp-index.d.ts.map +1 -0
  144. package/dist/mcp-index.js +101 -0
  145. package/dist/mcp-index.js.map +1 -0
  146. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  147. package/dist/mcp-tools/workflowGuide.js +67 -10
  148. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  149. package/dist/mcp-tools-shared.d.ts +49 -0
  150. package/dist/mcp-tools-shared.d.ts.map +1 -0
  151. package/dist/mcp-tools-shared.js +1282 -0
  152. package/dist/mcp-tools-shared.js.map +1 -0
  153. package/dist/mcp-ui-server.d.ts +27 -0
  154. package/dist/mcp-ui-server.d.ts.map +1 -0
  155. package/dist/mcp-ui-server.js +484 -0
  156. package/dist/mcp-ui-server.js.map +1 -0
  157. package/dist/mcp-ui-simple.d.ts +27 -0
  158. package/dist/mcp-ui-simple.d.ts.map +1 -0
  159. package/dist/mcp-ui-simple.js +425 -0
  160. package/dist/mcp-ui-simple.js.map +1 -0
  161. package/dist/mcp.js +7 -4
  162. package/dist/mcp.js.map +1 -1
  163. package/dist/services/SchemaParser.d.ts +89 -0
  164. package/dist/services/SchemaParser.d.ts.map +1 -0
  165. package/dist/services/SchemaParser.js +434 -0
  166. package/dist/services/SchemaParser.js.map +1 -0
  167. package/dist/types/crossLanguage.d.ts +267 -0
  168. package/dist/types/crossLanguage.d.ts.map +1 -0
  169. package/dist/types/crossLanguage.js +6 -0
  170. package/dist/types/crossLanguage.js.map +1 -0
  171. package/dist/types.d.ts +128 -0
  172. package/dist/types.d.ts.map +1 -1
  173. package/dist/types.js.map +1 -1
  174. package/dist/utils/fileDiscovery.d.ts +6 -0
  175. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  176. package/dist/utils/fileDiscovery.js +12 -1
  177. package/dist/utils/fileDiscovery.js.map +1 -1
  178. package/examples/schema-example.json +364 -0
  179. package/examples/schema-example.yaml +137 -0
  180. package/package.json +10 -3
@@ -0,0 +1,129 @@
1
+ /**
2
+ * Cross-Language Dependency Graph Builder
3
+ * Creates dependency graphs that span multiple programming languages
4
+ */
5
+ import { DependencyGraph, CrossLanguageEntity, CrossReference } from '../../types/crossLanguage.js';
6
+ export interface GraphBuilderOptions {
7
+ includeInternalDependencies?: boolean;
8
+ includeExternalDependencies?: boolean;
9
+ maxDepth?: number;
10
+ excludeLanguages?: string[];
11
+ includeTestFiles?: boolean;
12
+ clusterByPackage?: boolean;
13
+ }
14
+ export declare class DependencyGraphBuilder {
15
+ private entities;
16
+ private references;
17
+ private options;
18
+ constructor(options?: GraphBuilderOptions);
19
+ /**
20
+ * Build a comprehensive dependency graph
21
+ */
22
+ buildGraph(entities: CrossLanguageEntity[], references: CrossReference[]): Promise<DependencyGraph>;
23
+ /**
24
+ * Build a focused subgraph around specific entities
25
+ */
26
+ buildSubgraph(targetEntityIds: string[], entities: CrossLanguageEntity[], references: CrossReference[], depth?: number): Promise<DependencyGraph>;
27
+ /**
28
+ * Analyze dependency health and suggest improvements
29
+ */
30
+ analyzeDependencyHealth(graph: DependencyGraph): Promise<{
31
+ healthScore: number;
32
+ issues: DependencyIssue[];
33
+ suggestions: DependencySuggestion[];
34
+ }>;
35
+ /**
36
+ * Filter entities based on options
37
+ */
38
+ private filterEntities;
39
+ /**
40
+ * Create graph nodes from entities
41
+ */
42
+ private createNodes;
43
+ /**
44
+ * Create graph edges from references
45
+ */
46
+ private createEdges;
47
+ /**
48
+ * Detect circular dependencies using DFS
49
+ */
50
+ private detectCycles;
51
+ /**
52
+ * Calculate various graph metrics
53
+ */
54
+ private calculateMetrics;
55
+ /**
56
+ * Find entities reachable within specified depth
57
+ */
58
+ private findReachableEntities;
59
+ /**
60
+ * Apply package-based clustering to nodes
61
+ */
62
+ private applyPackageClustering;
63
+ /**
64
+ * Calculate node weight based on various factors
65
+ */
66
+ private calculateNodeWeight;
67
+ /**
68
+ * Determine cluster for an entity
69
+ */
70
+ private determineCluster;
71
+ /**
72
+ * Extract package/module name from file path
73
+ */
74
+ private extractPackageFromFile;
75
+ /**
76
+ * Build adjacency list from edges
77
+ */
78
+ private buildAdjacencyList;
79
+ /**
80
+ * Build adjacency list from references
81
+ */
82
+ private buildAdjacencyListFromReferences;
83
+ /**
84
+ * Calculate maximum depth from a node
85
+ */
86
+ private calculateMaxDepth;
87
+ /**
88
+ * Count strongly connected components (simplified)
89
+ */
90
+ private countStronglyConnectedComponents;
91
+ /**
92
+ * Find tightly coupled clusters
93
+ */
94
+ private findTightlyCoupledClusters;
95
+ /**
96
+ * Find hub nodes with too many dependencies
97
+ */
98
+ private findHubNodes;
99
+ /**
100
+ * Find orphaned nodes with no dependencies
101
+ */
102
+ private findOrphanedNodes;
103
+ /**
104
+ * Calculate overall health score
105
+ */
106
+ private calculateHealthScore;
107
+ /**
108
+ * Generate suggestion for breaking cycles
109
+ */
110
+ private generateCycleSuggestion;
111
+ /**
112
+ * Check if a file is a test file
113
+ */
114
+ private isTestFile;
115
+ }
116
+ export interface DependencyIssue {
117
+ type: 'circular-dependency' | 'tight-coupling' | 'hub-nodes' | 'orphaned-nodes';
118
+ severity: 'critical' | 'warning' | 'suggestion';
119
+ description: string;
120
+ affectedNodes: string[];
121
+ impact: 'high' | 'medium' | 'low';
122
+ }
123
+ export interface DependencySuggestion {
124
+ type: 'break-cycles' | 'reduce-coupling' | 'split-responsibilities' | 'review-orphans';
125
+ priority: 'high' | 'medium' | 'low';
126
+ description: string;
127
+ implementation: string;
128
+ }
129
+ //# sourceMappingURL=DependencyGraphBuilder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraphBuilder.d.ts","sourceRoot":"","sources":["../../../src/analyzers/cross-language/DependencyGraphBuilder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,eAAe,EAKf,mBAAmB,EACnB,cAAc,EACf,MAAM,8BAA8B,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,2BAA2B,CAAC,EAAE,OAAO,CAAC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,QAAQ,CAA6B;IAC7C,OAAO,CAAC,UAAU,CAAwB;IAC1C,OAAO,CAAC,OAAO,CAAsB;gBAEzB,OAAO,GAAE,mBAAwB;IAW7C;;OAEG;IACG,UAAU,CACd,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,UAAU,EAAE,cAAc,EAAE,GAC3B,OAAO,CAAC,eAAe,CAAC;IAqC3B;;OAEG;IACG,aAAa,CACjB,eAAe,EAAE,MAAM,EAAE,EACzB,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,UAAU,EAAE,cAAc,EAAE,EAC5B,KAAK,GAAE,MAAU,GAChB,OAAO,CAAC,eAAe,CAAC;IAa3B;;OAEG;IACG,uBAAuB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC;QAC7D,WAAW,EAAE,MAAM,CAAC;QACpB,MAAM,EAAE,eAAe,EAAE,CAAC;QAC1B,WAAW,EAAE,oBAAoB,EAAE,CAAC;KACrC,CAAC;IAyFF;;OAEG;IACH,OAAO,CAAC,cAAc;IAoBtB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwCpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IA8B7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAQ9B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqB3B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAaxC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAoBzB;;OAEG;IACH,OAAO,CAAC,gCAAgC;IAKxC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IA6BlC;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IA6B5B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAU/B;;OAEG;IACH,OAAO,CAAC,UAAU;CAUnB;AAID,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,qBAAqB,GAAG,gBAAgB,GAAG,WAAW,GAAG,gBAAgB,CAAC;IAChF,QAAQ,EAAE,UAAU,GAAG,SAAS,GAAG,YAAY,CAAC;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACnC;AAED,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,cAAc,GAAG,iBAAiB,GAAG,wBAAwB,GAAG,gBAAgB,CAAC;IACvF,QAAQ,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;CACxB"}
@@ -0,0 +1,473 @@
1
+ /**
2
+ * Cross-Language Dependency Graph Builder
3
+ * Creates dependency graphs that span multiple programming languages
4
+ */
5
+ export class DependencyGraphBuilder {
6
+ entities = [];
7
+ references = [];
8
+ options;
9
+ constructor(options = {}) {
10
+ this.options = {
11
+ includeInternalDependencies: true,
12
+ includeExternalDependencies: true,
13
+ maxDepth: 10,
14
+ includeTestFiles: false,
15
+ clusterByPackage: true,
16
+ ...options
17
+ };
18
+ }
19
+ /**
20
+ * Build a comprehensive dependency graph
21
+ */
22
+ async buildGraph(entities, references) {
23
+ this.entities = entities;
24
+ this.references = references;
25
+ console.log(`[DependencyGraphBuilder] Building graph from ${entities.length} entities and ${references.length} references`);
26
+ // Filter entities based on options
27
+ const filteredEntities = this.filterEntities(entities);
28
+ // Create nodes
29
+ const nodes = this.createNodes(filteredEntities);
30
+ // Create edges from references
31
+ const edges = this.createEdges(references, nodes);
32
+ // Detect cycles
33
+ const cycles = this.detectCycles(nodes, edges);
34
+ // Calculate metrics
35
+ const metrics = this.calculateMetrics(nodes, edges, cycles);
36
+ // Apply clustering if enabled
37
+ if (this.options.clusterByPackage) {
38
+ this.applyPackageClustering(nodes);
39
+ }
40
+ const graph = {
41
+ nodes,
42
+ edges,
43
+ cycles,
44
+ metrics
45
+ };
46
+ console.log(`[DependencyGraphBuilder] Generated graph with ${nodes.length} nodes, ${edges.length} edges, ${cycles.length} cycles`);
47
+ return graph;
48
+ }
49
+ /**
50
+ * Build a focused subgraph around specific entities
51
+ */
52
+ async buildSubgraph(targetEntityIds, entities, references, depth = 2) {
53
+ console.log(`[DependencyGraphBuilder] Building subgraph for ${targetEntityIds.length} target entities with depth ${depth}`);
54
+ // Find all entities within the specified depth
55
+ const reachableEntities = this.findReachableEntities(targetEntityIds, entities, references, depth);
56
+ // Build graph with only reachable entities
57
+ return this.buildGraph(reachableEntities, references.filter(ref => reachableEntities.some(e => e.id === ref.sourceId) &&
58
+ reachableEntities.some(e => e.id === ref.targetId)));
59
+ }
60
+ /**
61
+ * Analyze dependency health and suggest improvements
62
+ */
63
+ async analyzeDependencyHealth(graph) {
64
+ const issues = [];
65
+ const suggestions = [];
66
+ // Check for circular dependencies
67
+ if (graph.cycles.length > 0) {
68
+ issues.push({
69
+ type: 'circular-dependency',
70
+ severity: 'critical',
71
+ description: `Found ${graph.cycles.length} circular dependencies`,
72
+ affectedNodes: graph.cycles.flatMap(cycle => cycle.nodes),
73
+ impact: 'high'
74
+ });
75
+ suggestions.push({
76
+ type: 'break-cycles',
77
+ priority: 'high',
78
+ description: 'Break circular dependencies by introducing interfaces or dependency injection',
79
+ implementation: 'Consider using dependency inversion principle to break cycles'
80
+ });
81
+ }
82
+ // Check for tightly coupled clusters
83
+ const tightlyCoupledClusters = this.findTightlyCoupledClusters(graph);
84
+ if (tightlyCoupledClusters.length > 0) {
85
+ issues.push({
86
+ type: 'tight-coupling',
87
+ severity: 'warning',
88
+ description: `Found ${tightlyCoupledClusters.length} tightly coupled clusters`,
89
+ affectedNodes: tightlyCoupledClusters.flatMap(cluster => cluster.nodes),
90
+ impact: 'medium'
91
+ });
92
+ suggestions.push({
93
+ type: 'reduce-coupling',
94
+ priority: 'medium',
95
+ description: 'Reduce coupling between modules using interfaces and abstractions',
96
+ implementation: 'Extract common interfaces and use dependency injection'
97
+ });
98
+ }
99
+ // Check for hub nodes (too many dependencies)
100
+ const hubNodes = this.findHubNodes(graph);
101
+ if (hubNodes.length > 0) {
102
+ issues.push({
103
+ type: 'hub-nodes',
104
+ severity: 'warning',
105
+ description: `Found ${hubNodes.length} hub nodes with excessive dependencies`,
106
+ affectedNodes: hubNodes.map(node => node.id),
107
+ impact: 'medium'
108
+ });
109
+ suggestions.push({
110
+ type: 'split-responsibilities',
111
+ priority: 'medium',
112
+ description: 'Split large modules to reduce their dependency burden',
113
+ implementation: 'Apply Single Responsibility Principle to break down large modules'
114
+ });
115
+ }
116
+ // Check for orphaned nodes
117
+ const orphanedNodes = this.findOrphanedNodes(graph);
118
+ if (orphanedNodes.length > 0) {
119
+ issues.push({
120
+ type: 'orphaned-nodes',
121
+ severity: 'suggestion',
122
+ description: `Found ${orphanedNodes.length} orphaned nodes with no dependencies`,
123
+ affectedNodes: orphanedNodes.map(node => node.id),
124
+ impact: 'low'
125
+ });
126
+ suggestions.push({
127
+ type: 'review-orphans',
128
+ priority: 'low',
129
+ description: 'Review orphaned nodes to ensure they are still needed',
130
+ implementation: 'Consider removing unused code or integrating orphaned modules'
131
+ });
132
+ }
133
+ // Calculate health score
134
+ const healthScore = this.calculateHealthScore(graph, issues);
135
+ return {
136
+ healthScore,
137
+ issues,
138
+ suggestions
139
+ };
140
+ }
141
+ /**
142
+ * Filter entities based on options
143
+ */
144
+ filterEntities(entities) {
145
+ let filtered = entities;
146
+ // Filter by language
147
+ if (this.options.excludeLanguages?.length) {
148
+ filtered = filtered.filter(entity => !this.options.excludeLanguages.includes(entity.language));
149
+ }
150
+ // Filter test files
151
+ if (!this.options.includeTestFiles) {
152
+ filtered = filtered.filter(entity => !this.isTestFile(entity.file));
153
+ }
154
+ return filtered;
155
+ }
156
+ /**
157
+ * Create graph nodes from entities
158
+ */
159
+ createNodes(entities) {
160
+ return entities.map(entity => ({
161
+ id: entity.id,
162
+ name: entity.name,
163
+ language: entity.language,
164
+ type: entity.type,
165
+ file: entity.file,
166
+ weight: this.calculateNodeWeight(entity),
167
+ cluster: this.determineCluster(entity)
168
+ }));
169
+ }
170
+ /**
171
+ * Create graph edges from references
172
+ */
173
+ createEdges(references, nodes) {
174
+ const nodeIds = new Set(nodes.map(node => node.id));
175
+ return references
176
+ .filter(ref => nodeIds.has(ref.sourceId) && nodeIds.has(ref.targetId))
177
+ .map(ref => ({
178
+ from: ref.sourceId,
179
+ to: ref.targetId,
180
+ type: ref.type,
181
+ weight: ref.confidence,
182
+ protocol: ref.protocol
183
+ }));
184
+ }
185
+ /**
186
+ * Detect circular dependencies using DFS
187
+ */
188
+ detectCycles(nodes, edges) {
189
+ const cycles = [];
190
+ const visited = new Set();
191
+ const recursionStack = new Set();
192
+ const adjList = this.buildAdjacencyList(edges);
193
+ const dfs = (nodeId, path) => {
194
+ visited.add(nodeId);
195
+ recursionStack.add(nodeId);
196
+ path.push(nodeId);
197
+ const neighbors = adjList.get(nodeId) || [];
198
+ for (const neighbor of neighbors) {
199
+ if (!visited.has(neighbor)) {
200
+ dfs(neighbor, [...path]);
201
+ }
202
+ else if (recursionStack.has(neighbor)) {
203
+ // Found a cycle
204
+ const cycleStart = path.indexOf(neighbor);
205
+ const cycleNodes = path.slice(cycleStart);
206
+ cycles.push({
207
+ nodes: cycleNodes,
208
+ severity: cycleNodes.length > 5 ? 'critical' : 'warning',
209
+ suggestion: this.generateCycleSuggestion(cycleNodes)
210
+ });
211
+ }
212
+ }
213
+ recursionStack.delete(nodeId);
214
+ };
215
+ for (const node of nodes) {
216
+ if (!visited.has(node.id)) {
217
+ dfs(node.id, []);
218
+ }
219
+ }
220
+ return cycles;
221
+ }
222
+ /**
223
+ * Calculate various graph metrics
224
+ */
225
+ calculateMetrics(nodes, edges, cycles) {
226
+ const adjList = this.buildAdjacencyList(edges);
227
+ // Calculate depths from each node
228
+ const depths = nodes.map(node => this.calculateMaxDepth(node.id, adjList));
229
+ return {
230
+ totalNodes: nodes.length,
231
+ totalEdges: edges.length,
232
+ cycleCount: cycles.length,
233
+ averageDepth: depths.reduce((sum, depth) => sum + depth, 0) / depths.length,
234
+ maxDepth: Math.max(...depths),
235
+ stronglyConnectedComponents: this.countStronglyConnectedComponents(nodes, edges)
236
+ };
237
+ }
238
+ /**
239
+ * Find entities reachable within specified depth
240
+ */
241
+ findReachableEntities(startIds, entities, references, maxDepth) {
242
+ const reachable = new Set(startIds);
243
+ const adjList = this.buildAdjacencyListFromReferences(references);
244
+ let currentLevel = new Set(startIds);
245
+ for (let depth = 0; depth < maxDepth && currentLevel.size > 0; depth++) {
246
+ const nextLevel = new Set();
247
+ for (const nodeId of currentLevel) {
248
+ const neighbors = adjList.get(nodeId) || [];
249
+ for (const neighbor of neighbors) {
250
+ if (!reachable.has(neighbor)) {
251
+ reachable.add(neighbor);
252
+ nextLevel.add(neighbor);
253
+ }
254
+ }
255
+ }
256
+ currentLevel = nextLevel;
257
+ }
258
+ return entities.filter(entity => reachable.has(entity.id));
259
+ }
260
+ /**
261
+ * Apply package-based clustering to nodes
262
+ */
263
+ applyPackageClustering(nodes) {
264
+ for (const node of nodes) {
265
+ if (!node.cluster) {
266
+ node.cluster = this.extractPackageFromFile(node.file, node.language);
267
+ }
268
+ }
269
+ }
270
+ /**
271
+ * Calculate node weight based on various factors
272
+ */
273
+ calculateNodeWeight(entity) {
274
+ let weight = 1;
275
+ // Increase weight for exported/public entities
276
+ if (entity.visibility === 'public' || entity.metadata?.isExported) {
277
+ weight += 2;
278
+ }
279
+ // Increase weight for complex entities
280
+ if (entity.complexity && entity.complexity > 5) {
281
+ weight += Math.floor(entity.complexity / 5);
282
+ }
283
+ // Increase weight for interfaces and services
284
+ if (entity.type === 'interface' || entity.type === 'service') {
285
+ weight += 3;
286
+ }
287
+ return weight;
288
+ }
289
+ /**
290
+ * Determine cluster for an entity
291
+ */
292
+ determineCluster(entity) {
293
+ if (this.options.clusterByPackage) {
294
+ return this.extractPackageFromFile(entity.file, entity.language);
295
+ }
296
+ return entity.language;
297
+ }
298
+ /**
299
+ * Extract package/module name from file path
300
+ */
301
+ extractPackageFromFile(filePath, language) {
302
+ const parts = filePath.split('/');
303
+ switch (language) {
304
+ case 'go':
305
+ // For Go, use the last directory as package
306
+ return parts[parts.length - 2] || 'main';
307
+ case 'typescript':
308
+ case 'javascript':
309
+ // For TS/JS, look for common structure patterns
310
+ if (parts.includes('src')) {
311
+ const srcIndex = parts.indexOf('src');
312
+ return parts[srcIndex + 1] || 'src';
313
+ }
314
+ return parts[parts.length - 2] || 'root';
315
+ case 'python':
316
+ // For Python, use directory structure
317
+ return parts[parts.length - 2] || 'main';
318
+ default:
319
+ return 'unknown';
320
+ }
321
+ }
322
+ /**
323
+ * Build adjacency list from edges
324
+ */
325
+ buildAdjacencyList(edges) {
326
+ const adjList = new Map();
327
+ for (const edge of edges) {
328
+ if (!adjList.has(edge.from)) {
329
+ adjList.set(edge.from, []);
330
+ }
331
+ adjList.get(edge.from).push(edge.to);
332
+ }
333
+ return adjList;
334
+ }
335
+ /**
336
+ * Build adjacency list from references
337
+ */
338
+ buildAdjacencyListFromReferences(references) {
339
+ const adjList = new Map();
340
+ for (const ref of references) {
341
+ if (!adjList.has(ref.sourceId)) {
342
+ adjList.set(ref.sourceId, []);
343
+ }
344
+ adjList.get(ref.sourceId).push(ref.targetId);
345
+ }
346
+ return adjList;
347
+ }
348
+ /**
349
+ * Calculate maximum depth from a node
350
+ */
351
+ calculateMaxDepth(nodeId, adjList) {
352
+ const visited = new Set();
353
+ const dfs = (currentId) => {
354
+ if (visited.has(currentId))
355
+ return 0; // Avoid cycles
356
+ visited.add(currentId);
357
+ const neighbors = adjList.get(currentId) || [];
358
+ if (neighbors.length === 0)
359
+ return 1;
360
+ const maxChildDepth = Math.max(...neighbors.map(neighbor => dfs(neighbor)));
361
+ visited.delete(currentId);
362
+ return 1 + maxChildDepth;
363
+ };
364
+ return dfs(nodeId);
365
+ }
366
+ /**
367
+ * Count strongly connected components (simplified)
368
+ */
369
+ countStronglyConnectedComponents(nodes, edges) {
370
+ // Simplified implementation - would use Tarjan's algorithm in practice
371
+ return Math.ceil(nodes.length / 10); // Rough estimate
372
+ }
373
+ /**
374
+ * Find tightly coupled clusters
375
+ */
376
+ findTightlyCoupledClusters(graph) {
377
+ const clusters = new Map();
378
+ // Group nodes by cluster
379
+ for (const node of graph.nodes) {
380
+ const cluster = node.cluster || 'default';
381
+ if (!clusters.has(cluster)) {
382
+ clusters.set(cluster, []);
383
+ }
384
+ clusters.get(cluster).push(node.id);
385
+ }
386
+ const tightlyCoupled = [];
387
+ for (const [clusterName, nodeIds] of clusters) {
388
+ const internalEdges = graph.edges.filter(edge => nodeIds.includes(edge.from) && nodeIds.includes(edge.to));
389
+ const coupling = internalEdges.length / (nodeIds.length * (nodeIds.length - 1));
390
+ if (coupling > 0.7) { // High coupling threshold
391
+ tightlyCoupled.push({ nodes: nodeIds, coupling });
392
+ }
393
+ }
394
+ return tightlyCoupled;
395
+ }
396
+ /**
397
+ * Find hub nodes with too many dependencies
398
+ */
399
+ findHubNodes(graph) {
400
+ const dependencyCounts = new Map();
401
+ for (const edge of graph.edges) {
402
+ dependencyCounts.set(edge.from, (dependencyCounts.get(edge.from) || 0) + 1);
403
+ }
404
+ const threshold = Math.max(5, graph.nodes.length * 0.1); // 10% of nodes or minimum 5
405
+ return graph.nodes.filter(node => (dependencyCounts.get(node.id) || 0) > threshold);
406
+ }
407
+ /**
408
+ * Find orphaned nodes with no dependencies
409
+ */
410
+ findOrphanedNodes(graph) {
411
+ const connectedNodes = new Set();
412
+ for (const edge of graph.edges) {
413
+ connectedNodes.add(edge.from);
414
+ connectedNodes.add(edge.to);
415
+ }
416
+ return graph.nodes.filter(node => !connectedNodes.has(node.id));
417
+ }
418
+ /**
419
+ * Calculate overall health score
420
+ */
421
+ calculateHealthScore(graph, issues) {
422
+ let score = 100;
423
+ for (const issue of issues) {
424
+ switch (issue.severity) {
425
+ case 'critical':
426
+ score -= 20;
427
+ break;
428
+ case 'warning':
429
+ score -= 10;
430
+ break;
431
+ case 'suggestion':
432
+ score -= 5;
433
+ break;
434
+ }
435
+ }
436
+ // Additional penalties
437
+ if (graph.cycles.length > 0) {
438
+ score -= graph.cycles.length * 5;
439
+ }
440
+ if (graph.metrics.maxDepth > 15) {
441
+ score -= 10;
442
+ }
443
+ return Math.max(0, score);
444
+ }
445
+ /**
446
+ * Generate suggestion for breaking cycles
447
+ */
448
+ generateCycleSuggestion(cycleNodes) {
449
+ if (cycleNodes.length === 2) {
450
+ return 'Consider using dependency injection or extracting a common interface';
451
+ }
452
+ else if (cycleNodes.length <= 5) {
453
+ return 'Consider introducing a mediator pattern or event-driven architecture';
454
+ }
455
+ else {
456
+ return 'This is a complex cycle - consider major refactoring to break it down into smaller modules';
457
+ }
458
+ }
459
+ /**
460
+ * Check if a file is a test file
461
+ */
462
+ isTestFile(filePath) {
463
+ return filePath.includes('test') ||
464
+ filePath.includes('spec') ||
465
+ filePath.includes('__tests__') ||
466
+ filePath.endsWith('.test.ts') ||
467
+ filePath.endsWith('.test.js') ||
468
+ filePath.endsWith('.spec.ts') ||
469
+ filePath.endsWith('.spec.js') ||
470
+ filePath.endsWith('_test.go');
471
+ }
472
+ }
473
+ //# sourceMappingURL=DependencyGraphBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DependencyGraphBuilder.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/DependencyGraphBuilder.ts"],"names":[],"mappings":"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"}