agentic-qe 2.6.5 → 2.6.6

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 (146) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +1 -1
  3. package/dist/agents/CoverageAnalyzerAgent.d.ts +31 -0
  4. package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
  5. package/dist/agents/CoverageAnalyzerAgent.js +159 -0
  6. package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
  7. package/dist/agents/FleetCommanderAgent.d.ts +36 -0
  8. package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
  9. package/dist/agents/FleetCommanderAgent.js +226 -0
  10. package/dist/agents/FleetCommanderAgent.js.map +1 -1
  11. package/dist/cli/commands/kg/mincut.d.ts +50 -0
  12. package/dist/cli/commands/kg/mincut.d.ts.map +1 -0
  13. package/dist/cli/commands/kg/mincut.js +372 -0
  14. package/dist/cli/commands/kg/mincut.js.map +1 -0
  15. package/dist/cli/index.js +91 -0
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/cli/init/claude-config.js +2 -2
  18. package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts +148 -0
  19. package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts.map +1 -0
  20. package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js +393 -0
  21. package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js.map +1 -0
  22. package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts +169 -0
  23. package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts.map +1 -0
  24. package/dist/code-intelligence/analysis/mincut/GraphAdapter.js +335 -0
  25. package/dist/code-intelligence/analysis/mincut/GraphAdapter.js.map +1 -0
  26. package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts +55 -0
  27. package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts.map +1 -0
  28. package/dist/code-intelligence/analysis/mincut/JsMinCut.js +265 -0
  29. package/dist/code-intelligence/analysis/mincut/JsMinCut.js.map +1 -0
  30. package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts +92 -0
  31. package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts.map +1 -0
  32. package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js +200 -0
  33. package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js.map +1 -0
  34. package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts +157 -0
  35. package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts.map +1 -0
  36. package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js +434 -0
  37. package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js.map +1 -0
  38. package/dist/code-intelligence/analysis/mincut/index.d.ts +12 -0
  39. package/dist/code-intelligence/analysis/mincut/index.d.ts.map +1 -0
  40. package/dist/code-intelligence/analysis/mincut/index.js +20 -0
  41. package/dist/code-intelligence/analysis/mincut/index.js.map +1 -0
  42. package/dist/code-intelligence/analysis/mincut/types.d.ts +145 -0
  43. package/dist/code-intelligence/analysis/mincut/types.d.ts.map +1 -0
  44. package/dist/code-intelligence/analysis/mincut/types.js +16 -0
  45. package/dist/code-intelligence/analysis/mincut/types.js.map +1 -0
  46. package/dist/code-intelligence/chunking/ASTChunker.d.ts +1 -1
  47. package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -1
  48. package/dist/code-intelligence/chunking/ASTChunker.js +4 -4
  49. package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -1
  50. package/dist/code-intelligence/graph/GraphBuilder.d.ts +120 -0
  51. package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -1
  52. package/dist/code-intelligence/graph/GraphBuilder.js +517 -0
  53. package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -1
  54. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
  55. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +3 -3
  56. package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
  57. package/dist/code-intelligence/parser/{TreeSitterParser.d.ts → WebTreeSitterParser.d.ts} +45 -10
  58. package/dist/code-intelligence/parser/WebTreeSitterParser.d.ts.map +1 -0
  59. package/dist/code-intelligence/parser/{TreeSitterParser.js → WebTreeSitterParser.js} +147 -54
  60. package/dist/code-intelligence/parser/WebTreeSitterParser.js.map +1 -0
  61. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +12 -10
  62. package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -1
  63. package/dist/code-intelligence/parser/extractors/BaseExtractor.js +7 -3
  64. package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -1
  65. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +7 -5
  66. package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -1
  67. package/dist/code-intelligence/parser/extractors/GoExtractor.js +2 -2
  68. package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -1
  69. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +7 -5
  70. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -1
  71. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +2 -2
  72. package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -1
  73. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +7 -5
  74. package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -1
  75. package/dist/code-intelligence/parser/extractors/PythonExtractor.js +2 -2
  76. package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -1
  77. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +7 -5
  78. package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -1
  79. package/dist/code-intelligence/parser/extractors/RustExtractor.js +2 -2
  80. package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -1
  81. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +7 -5
  82. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -1
  83. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +2 -2
  84. package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -1
  85. package/dist/code-intelligence/parser/index.d.ts +7 -1
  86. package/dist/code-intelligence/parser/index.d.ts.map +1 -1
  87. package/dist/code-intelligence/parser/index.js +11 -3
  88. package/dist/code-intelligence/parser/index.js.map +1 -1
  89. package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -1
  90. package/dist/code-intelligence/service/CodeIntelligenceService.js +7 -5
  91. package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
  92. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  93. package/dist/coverage/CriticalPathDetector.d.ts +240 -0
  94. package/dist/coverage/CriticalPathDetector.d.ts.map +1 -0
  95. package/dist/coverage/CriticalPathDetector.js +388 -0
  96. package/dist/coverage/CriticalPathDetector.js.map +1 -0
  97. package/dist/coverage/index.d.ts +13 -0
  98. package/dist/coverage/index.d.ts.map +1 -0
  99. package/dist/coverage/index.js +16 -0
  100. package/dist/coverage/index.js.map +1 -0
  101. package/dist/fleet/topology/SPOFMonitor.d.ts +181 -0
  102. package/dist/fleet/topology/SPOFMonitor.d.ts.map +1 -0
  103. package/dist/fleet/topology/SPOFMonitor.js +286 -0
  104. package/dist/fleet/topology/SPOFMonitor.js.map +1 -0
  105. package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts +87 -0
  106. package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts.map +1 -0
  107. package/dist/fleet/topology/TopologyMinCutAnalyzer.js +472 -0
  108. package/dist/fleet/topology/TopologyMinCutAnalyzer.js.map +1 -0
  109. package/dist/fleet/topology/index.d.ts +13 -0
  110. package/dist/fleet/topology/index.d.ts.map +1 -0
  111. package/dist/fleet/topology/index.js +20 -0
  112. package/dist/fleet/topology/index.js.map +1 -0
  113. package/dist/fleet/topology/types.d.ts +139 -0
  114. package/dist/fleet/topology/types.d.ts.map +1 -0
  115. package/dist/fleet/topology/types.js +19 -0
  116. package/dist/fleet/topology/types.js.map +1 -0
  117. package/dist/mcp/handlers/test/test-execute-parallel.d.ts +34 -3
  118. package/dist/mcp/handlers/test/test-execute-parallel.d.ts.map +1 -1
  119. package/dist/mcp/handlers/test/test-execute-parallel.js +120 -5
  120. package/dist/mcp/handlers/test/test-execute-parallel.js.map +1 -1
  121. package/dist/mcp/server-instructions.d.ts +2 -2
  122. package/dist/mcp/server-instructions.d.ts.map +1 -1
  123. package/dist/mcp/server-instructions.js +2 -2
  124. package/dist/test/partition/MinCutPartitioner.d.ts +97 -0
  125. package/dist/test/partition/MinCutPartitioner.d.ts.map +1 -0
  126. package/dist/test/partition/MinCutPartitioner.js +459 -0
  127. package/dist/test/partition/MinCutPartitioner.js.map +1 -0
  128. package/dist/test/partition/RealTestExecutor.d.ts +86 -0
  129. package/dist/test/partition/RealTestExecutor.d.ts.map +1 -0
  130. package/dist/test/partition/RealTestExecutor.js +279 -0
  131. package/dist/test/partition/RealTestExecutor.js.map +1 -0
  132. package/dist/test/partition/TestDependencyAnalyzer.d.ts +75 -0
  133. package/dist/test/partition/TestDependencyAnalyzer.d.ts.map +1 -0
  134. package/dist/test/partition/TestDependencyAnalyzer.js +297 -0
  135. package/dist/test/partition/TestDependencyAnalyzer.js.map +1 -0
  136. package/dist/test/partition/index.d.ts +10 -0
  137. package/dist/test/partition/index.d.ts.map +1 -0
  138. package/dist/test/partition/index.js +26 -0
  139. package/dist/test/partition/index.js.map +1 -0
  140. package/dist/test/partition/types.d.ts +120 -0
  141. package/dist/test/partition/types.d.ts.map +1 -0
  142. package/dist/test/partition/types.js +21 -0
  143. package/dist/test/partition/types.js.map +1 -0
  144. package/package.json +4 -7
  145. package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +0 -1
  146. package/dist/code-intelligence/parser/TreeSitterParser.js.map +0 -1
@@ -0,0 +1,472 @@
1
+ "use strict";
2
+ /**
3
+ * TopologyMinCutAnalyzer
4
+ *
5
+ * Analyzes fleet topology using min-cut algorithms for:
6
+ * - Single Point of Failure (SPOF) detection
7
+ * - Topology resilience scoring
8
+ * - Connectivity analysis
9
+ * - Optimization recommendations
10
+ *
11
+ * Uses the code-intelligence MinCutAnalyzer internally.
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.TopologyMinCutAnalyzer = void 0;
15
+ const index_js_1 = require("../../code-intelligence/analysis/mincut/index.js");
16
+ const Logger_js_1 = require("../../utils/Logger.js");
17
+ const types_js_1 = require("./types.js");
18
+ const logger = Logger_js_1.Logger.getInstance();
19
+ /**
20
+ * Analyzes fleet topology for vulnerabilities and resilience
21
+ */
22
+ class TopologyMinCutAnalyzer {
23
+ constructor(config = {}) {
24
+ this.config = { ...types_js_1.DEFAULT_TOPOLOGY_ANALYSIS_CONFIG, ...config };
25
+ this.minCutAnalyzer = new index_js_1.MinCutAnalyzer({
26
+ algorithm: 'auto',
27
+ timeout: this.config.timeout,
28
+ maxNodes: 500, // Fleet size limit
29
+ });
30
+ logger.info('TopologyMinCutAnalyzer initialized', { config: this.config });
31
+ }
32
+ /**
33
+ * Analyze fleet topology for resilience and SPOFs
34
+ *
35
+ * @param topology - Fleet topology to analyze
36
+ * @returns Comprehensive resilience analysis result
37
+ */
38
+ async analyzeResilience(topology) {
39
+ const startTime = performance.now();
40
+ // Convert topology to min-cut graph format
41
+ const graph = this.topologyToGraph(topology);
42
+ // Detect all SPOFs
43
+ const spofs = await this.detectSpofs(topology, graph);
44
+ // Calculate min-cut value
45
+ let minCutValue = Infinity;
46
+ let vulnerablePartitions = [];
47
+ if (graph.nodes.length >= 2 && graph.edges.length > 0) {
48
+ try {
49
+ const minCutResult = await this.minCutAnalyzer.computeMinCut(graph);
50
+ minCutValue = minCutResult.cutValue;
51
+ vulnerablePartitions = [minCutResult.partition1, minCutResult.partition2];
52
+ }
53
+ catch (error) {
54
+ logger.warn('Min-cut computation failed', { error });
55
+ minCutValue = 0;
56
+ }
57
+ }
58
+ // Calculate resilience score
59
+ const score = this.calculateResilienceScore(topology, spofs, minCutValue);
60
+ // Get critical SPOFs
61
+ const criticalSpofs = spofs.filter(s => s.severity === 'critical');
62
+ // Generate recommendations
63
+ const recommendations = this.generateRecommendations(topology, spofs, minCutValue);
64
+ // Calculate grade
65
+ const grade = this.calculateGrade(score, criticalSpofs.length);
66
+ // Calculate average path redundancy
67
+ const avgPathRedundancy = this.calculatePathRedundancy(topology);
68
+ const computationTimeMs = performance.now() - startTime;
69
+ return {
70
+ score,
71
+ minCutValue,
72
+ avgPathRedundancy,
73
+ spofs,
74
+ criticalSpofs,
75
+ vulnerablePartitions,
76
+ grade,
77
+ recommendations,
78
+ computationTimeMs,
79
+ };
80
+ }
81
+ /**
82
+ * Detect Single Points of Failure in the topology
83
+ *
84
+ * A SPOF is a node whose removal disconnects part of the graph.
85
+ *
86
+ * @param topology - Fleet topology
87
+ * @param graph - Graph representation (optional, will be computed if not provided)
88
+ * @returns Array of SPOF results
89
+ */
90
+ async detectSpofs(topology, graph) {
91
+ const graphInput = graph || this.topologyToGraph(topology);
92
+ const spofs = [];
93
+ const totalNodes = topology.nodes.length;
94
+ // For each node, check if removing it disconnects the graph
95
+ for (const node of topology.nodes) {
96
+ // Skip if not analyzing all SPOFs and node is not a coordinator
97
+ if (!this.config.analyzeAllSpofs && node.role !== 'coordinator') {
98
+ continue;
99
+ }
100
+ // Create graph without this node
101
+ const reducedGraph = this.removeNodeFromGraph(graphInput, node.id);
102
+ // Skip if graph becomes too small
103
+ if (reducedGraph.nodes.length < 2) {
104
+ continue;
105
+ }
106
+ // Check connectivity by computing min-cut
107
+ const isConnected = await this.isGraphConnected(reducedGraph);
108
+ if (!isConnected) {
109
+ // This node is a SPOF - find affected agents
110
+ const components = this.findConnectedComponents(reducedGraph);
111
+ const largestComponent = components.reduce((a, b) => (a.length > b.length ? a : b), []);
112
+ const disconnectedAgents = topology.nodes
113
+ .filter(n => n.id !== node.id && !largestComponent.includes(n.id))
114
+ .map(n => n.id);
115
+ const affectedAgents = disconnectedAgents.length;
116
+ const impactPercentage = (affectedAgents / totalNodes) * 100;
117
+ // Determine severity
118
+ const severity = this.determineSPOFSeverity(node, affectedAgents, totalNodes);
119
+ spofs.push({
120
+ agentId: node.id,
121
+ agentType: node.type,
122
+ severity,
123
+ affectedAgents,
124
+ impactPercentage,
125
+ disconnectedAgents,
126
+ recommendations: this.generateSPOFRecommendations(node, affectedAgents),
127
+ });
128
+ }
129
+ }
130
+ // Sort by severity and impact
131
+ return spofs.sort((a, b) => {
132
+ const severityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
133
+ const severityDiff = severityOrder[b.severity] - severityOrder[a.severity];
134
+ if (severityDiff !== 0)
135
+ return severityDiff;
136
+ return b.affectedAgents - a.affectedAgents;
137
+ });
138
+ }
139
+ /**
140
+ * Get topology optimization suggestions
141
+ *
142
+ * @param topology - Current fleet topology
143
+ * @param resilienceResult - Optional pre-computed resilience result
144
+ * @returns Array of optimization suggestions
145
+ */
146
+ async suggestOptimizations(topology, resilienceResult) {
147
+ const result = resilienceResult || await this.analyzeResilience(topology);
148
+ const optimizations = [];
149
+ // Add redundant connections for critical SPOFs
150
+ for (const spof of result.criticalSpofs) {
151
+ const spofNode = topology.nodes.find(n => n.id === spof.agentId);
152
+ if (!spofNode)
153
+ continue;
154
+ // Find potential backup coordinators
155
+ const potentialBackups = topology.nodes.filter(n => n.id !== spof.agentId &&
156
+ n.role !== 'observer' &&
157
+ n.status === 'active' &&
158
+ !spof.disconnectedAgents.includes(n.id));
159
+ if (potentialBackups.length > 0) {
160
+ const backup = potentialBackups[0];
161
+ // Suggest adding direct connections from disconnected agents to backup
162
+ for (const disconnectedId of spof.disconnectedAgents.slice(0, 3)) {
163
+ optimizations.push({
164
+ type: 'add-edge',
165
+ description: `Add backup connection from ${disconnectedId} to ${backup.id} to prevent ${spof.agentId} from being a SPOF`,
166
+ expectedImprovement: 0.15,
167
+ effort: 'low',
168
+ priority: 'critical',
169
+ implementation: {
170
+ sourceId: disconnectedId,
171
+ targetId: backup.id,
172
+ connectionType: 'coordination',
173
+ },
174
+ });
175
+ }
176
+ }
177
+ }
178
+ // Suggest mesh connections for hierarchical topologies with low resilience
179
+ if (topology.mode === 'hierarchical' && result.score < 0.5) {
180
+ optimizations.push({
181
+ type: 'restructure',
182
+ description: 'Consider switching to hybrid topology for better resilience',
183
+ expectedImprovement: 0.25,
184
+ effort: 'high',
185
+ priority: 'high',
186
+ });
187
+ }
188
+ // Suggest adding backup coordinators if only one exists
189
+ const coordinators = topology.nodes.filter(n => n.role === 'coordinator');
190
+ if (coordinators.length === 1) {
191
+ optimizations.push({
192
+ type: 'add-node',
193
+ description: 'Add a backup coordinator to eliminate single coordinator SPOF',
194
+ expectedImprovement: 0.3,
195
+ effort: 'medium',
196
+ priority: 'critical',
197
+ });
198
+ }
199
+ // Sort by priority and expected improvement
200
+ return optimizations.sort((a, b) => {
201
+ const priorityOrder = { critical: 4, high: 3, medium: 2, low: 1 };
202
+ const priorityDiff = priorityOrder[b.priority] - priorityOrder[a.priority];
203
+ if (priorityDiff !== 0)
204
+ return priorityDiff;
205
+ return b.expectedImprovement - a.expectedImprovement;
206
+ });
207
+ }
208
+ /**
209
+ * Convert fleet topology to min-cut graph format
210
+ */
211
+ topologyToGraph(topology) {
212
+ const nodes = topology.nodes
213
+ .filter(n => n.status !== 'failed')
214
+ .map(n => ({
215
+ id: n.id,
216
+ label: `${n.type}:${n.role}`,
217
+ properties: {
218
+ type: n.type,
219
+ role: n.role,
220
+ status: n.status,
221
+ priority: n.priority,
222
+ },
223
+ }));
224
+ const nodeIds = new Set(nodes.map(n => n.id));
225
+ const edges = topology.edges
226
+ .filter(e => nodeIds.has(e.sourceId) &&
227
+ nodeIds.has(e.targetId) &&
228
+ this.config.connectionTypes.includes(e.connectionType))
229
+ .map(e => ({
230
+ source: e.sourceId,
231
+ target: e.targetId,
232
+ weight: e.weight,
233
+ }));
234
+ // For bidirectional edges, add reverse direction
235
+ const bidirectionalEdges = [];
236
+ for (const e of topology.edges) {
237
+ if (e.bidirectional &&
238
+ nodeIds.has(e.sourceId) &&
239
+ nodeIds.has(e.targetId)) {
240
+ bidirectionalEdges.push({
241
+ source: e.targetId,
242
+ target: e.sourceId,
243
+ weight: e.weight,
244
+ });
245
+ }
246
+ }
247
+ return {
248
+ nodes,
249
+ edges: [...edges, ...bidirectionalEdges],
250
+ directed: false, // Min-cut works on undirected graphs
251
+ };
252
+ }
253
+ /**
254
+ * Remove a node from the graph
255
+ */
256
+ removeNodeFromGraph(graph, nodeId) {
257
+ return {
258
+ nodes: graph.nodes.filter(n => n.id !== nodeId),
259
+ edges: graph.edges.filter(e => e.source !== nodeId && e.target !== nodeId),
260
+ directed: graph.directed,
261
+ };
262
+ }
263
+ /**
264
+ * Check if graph is connected using BFS
265
+ */
266
+ async isGraphConnected(graph) {
267
+ if (graph.nodes.length === 0)
268
+ return true;
269
+ if (graph.nodes.length === 1)
270
+ return true;
271
+ // Build adjacency list
272
+ const adj = new Map();
273
+ for (const node of graph.nodes) {
274
+ adj.set(node.id, new Set());
275
+ }
276
+ for (const edge of graph.edges) {
277
+ adj.get(edge.source)?.add(edge.target);
278
+ adj.get(edge.target)?.add(edge.source);
279
+ }
280
+ // BFS from first node
281
+ const visited = new Set();
282
+ const queue = [graph.nodes[0].id];
283
+ visited.add(graph.nodes[0].id);
284
+ while (queue.length > 0) {
285
+ const current = queue.shift();
286
+ const neighbors = adj.get(current) || new Set();
287
+ for (const neighbor of neighbors) {
288
+ if (!visited.has(neighbor)) {
289
+ visited.add(neighbor);
290
+ queue.push(neighbor);
291
+ }
292
+ }
293
+ }
294
+ return visited.size === graph.nodes.length;
295
+ }
296
+ /**
297
+ * Find connected components in the graph
298
+ */
299
+ findConnectedComponents(graph) {
300
+ const components = [];
301
+ const visited = new Set();
302
+ // Build adjacency list
303
+ const adj = new Map();
304
+ for (const node of graph.nodes) {
305
+ adj.set(node.id, new Set());
306
+ }
307
+ for (const edge of graph.edges) {
308
+ adj.get(edge.source)?.add(edge.target);
309
+ adj.get(edge.target)?.add(edge.source);
310
+ }
311
+ for (const node of graph.nodes) {
312
+ if (visited.has(node.id))
313
+ continue;
314
+ const component = [];
315
+ const queue = [node.id];
316
+ visited.add(node.id);
317
+ while (queue.length > 0) {
318
+ const current = queue.shift();
319
+ component.push(current);
320
+ const neighbors = adj.get(current) || new Set();
321
+ for (const neighbor of neighbors) {
322
+ if (!visited.has(neighbor)) {
323
+ visited.add(neighbor);
324
+ queue.push(neighbor);
325
+ }
326
+ }
327
+ }
328
+ components.push(component);
329
+ }
330
+ return components;
331
+ }
332
+ /**
333
+ * Calculate resilience score (0-1)
334
+ */
335
+ calculateResilienceScore(topology, spofs, minCutValue) {
336
+ const n = topology.nodes.length;
337
+ if (n === 0)
338
+ return 1;
339
+ if (n === 1)
340
+ return 1;
341
+ // Factors that contribute to resilience:
342
+ // 1. Min-cut value relative to node count (edge connectivity)
343
+ const edgeConnectivity = Math.min(minCutValue / n, 1);
344
+ // 2. Inverse of SPOF count
345
+ const criticalSpofs = spofs.filter(s => s.severity === 'critical').length;
346
+ const spofPenalty = Math.max(0, 1 - criticalSpofs * 0.2);
347
+ // 3. Average SPOF impact
348
+ const avgImpact = spofs.length > 0
349
+ ? spofs.reduce((sum, s) => sum + s.impactPercentage, 0) / spofs.length / 100
350
+ : 0;
351
+ const impactScore = 1 - avgImpact;
352
+ // 4. Coordinator redundancy
353
+ const coordinators = topology.nodes.filter(n => n.role === 'coordinator');
354
+ const coordinatorRedundancy = Math.min(coordinators.length / 2, 1);
355
+ // Weighted average
356
+ const score = edgeConnectivity * 0.3 +
357
+ spofPenalty * 0.3 +
358
+ impactScore * 0.2 +
359
+ coordinatorRedundancy * 0.2;
360
+ return Math.max(0, Math.min(1, score));
361
+ }
362
+ /**
363
+ * Calculate average path redundancy
364
+ */
365
+ calculatePathRedundancy(topology) {
366
+ const n = topology.nodes.length;
367
+ if (n < 2)
368
+ return 1;
369
+ // Count edges per node (degree)
370
+ const degrees = new Map();
371
+ for (const node of topology.nodes) {
372
+ degrees.set(node.id, 0);
373
+ }
374
+ for (const edge of topology.edges) {
375
+ degrees.set(edge.sourceId, (degrees.get(edge.sourceId) || 0) + 1);
376
+ if (edge.bidirectional) {
377
+ degrees.set(edge.targetId, (degrees.get(edge.targetId) || 0) + 1);
378
+ }
379
+ }
380
+ // Average degree
381
+ const totalDegree = Array.from(degrees.values()).reduce((a, b) => a + b, 0);
382
+ const avgDegree = totalDegree / n;
383
+ // Path redundancy approximation: avg degree / 2 (for undirected)
384
+ return avgDegree / 2;
385
+ }
386
+ /**
387
+ * Determine SPOF severity
388
+ */
389
+ determineSPOFSeverity(node, affectedAgents, totalNodes) {
390
+ const impactRatio = affectedAgents / totalNodes;
391
+ // Coordinators have higher severity
392
+ const isCoordinator = node.role === 'coordinator';
393
+ const isCriticalPriority = node.priority === 'critical';
394
+ if (impactRatio > 0.5 || (isCoordinator && impactRatio > 0.3)) {
395
+ return 'critical';
396
+ }
397
+ if (impactRatio > 0.3 || (isCoordinator && impactRatio > 0.1)) {
398
+ return 'high';
399
+ }
400
+ if (impactRatio > 0.1 || isCriticalPriority) {
401
+ return 'medium';
402
+ }
403
+ return 'low';
404
+ }
405
+ /**
406
+ * Generate recommendations for overall topology
407
+ */
408
+ generateRecommendations(topology, spofs, minCutValue) {
409
+ const recommendations = [];
410
+ // Critical SPOF recommendations
411
+ const criticalSpofs = spofs.filter(s => s.severity === 'critical');
412
+ if (criticalSpofs.length > 0) {
413
+ recommendations.push(`CRITICAL: ${criticalSpofs.length} critical SPOF(s) detected. ` +
414
+ `Add redundant connections to mitigate: ${criticalSpofs.map(s => s.agentId).join(', ')}`);
415
+ }
416
+ // Low min-cut value
417
+ if (minCutValue < 2 && topology.nodes.length > 3) {
418
+ recommendations.push('Edge connectivity is low. Consider adding cross-connections between agent clusters.');
419
+ }
420
+ // Single coordinator
421
+ const coordinators = topology.nodes.filter(n => n.role === 'coordinator');
422
+ if (coordinators.length === 1) {
423
+ recommendations.push('Only one coordinator exists. Add a backup coordinator for fault tolerance.');
424
+ }
425
+ // Hierarchical topology with many agents
426
+ if (topology.mode === 'hierarchical' && topology.nodes.length > 20) {
427
+ recommendations.push('Hierarchical topology with >20 agents may have scalability issues. ' +
428
+ 'Consider hybrid or mesh topology.');
429
+ }
430
+ // High number of workers per coordinator
431
+ const workers = topology.nodes.filter(n => n.role === 'worker');
432
+ if (coordinators.length > 0 && workers.length / coordinators.length > 15) {
433
+ recommendations.push(`High worker-to-coordinator ratio (${(workers.length / coordinators.length).toFixed(1)}:1). ` +
434
+ 'Consider adding more coordinators.');
435
+ }
436
+ return recommendations;
437
+ }
438
+ /**
439
+ * Generate recommendations for specific SPOF
440
+ */
441
+ generateSPOFRecommendations(node, affectedAgents) {
442
+ const recommendations = [];
443
+ if (node.role === 'coordinator') {
444
+ recommendations.push('Add a backup coordinator that can take over if this one fails.');
445
+ recommendations.push('Implement leader election protocol for automatic failover.');
446
+ }
447
+ if (affectedAgents > 5) {
448
+ recommendations.push(`Add direct connections from affected agents to alternative coordinators.`);
449
+ }
450
+ recommendations.push(`Consider implementing heartbeat monitoring for ${node.id} with automatic recovery.`);
451
+ return recommendations;
452
+ }
453
+ /**
454
+ * Calculate topology grade (A-F)
455
+ */
456
+ calculateGrade(score, criticalSpofs) {
457
+ if (criticalSpofs > 0) {
458
+ return criticalSpofs >= 3 ? 'F' : 'D';
459
+ }
460
+ if (score >= 0.9)
461
+ return 'A';
462
+ if (score >= 0.75)
463
+ return 'B';
464
+ if (score >= 0.6)
465
+ return 'C';
466
+ if (score >= 0.4)
467
+ return 'D';
468
+ return 'F';
469
+ }
470
+ }
471
+ exports.TopologyMinCutAnalyzer = TopologyMinCutAnalyzer;
472
+ //# sourceMappingURL=TopologyMinCutAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TopologyMinCutAnalyzer.js","sourceRoot":"","sources":["../../../src/fleet/topology/TopologyMinCutAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Fleet Topology Module
3
+ *
4
+ * Provides fleet topology analysis using min-cut algorithms for:
5
+ * - Single Point of Failure (SPOF) detection
6
+ * - Resilience scoring
7
+ * - Topology optimization suggestions
8
+ * - Real-time SPOF monitoring
9
+ */
10
+ export { TopologyMinCutAnalyzer } from './TopologyMinCutAnalyzer.js';
11
+ export { SPOFMonitor, SPOFMonitorConfig, DEFAULT_SPOF_MONITOR_CONFIG, SPOFMonitorEvents, } from './SPOFMonitor.js';
12
+ export { TopologyMode, TopologyNode, TopologyEdge, FleetTopology, SPOFResult, ResilienceResult, TopologyAnalysisConfig, DEFAULT_TOPOLOGY_ANALYSIS_CONFIG, TopologyOptimization, } from './types.js';
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fleet/topology/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,2BAA2B,EAC3B,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,UAAU,EACV,gBAAgB,EAChB,sBAAsB,EACtB,gCAAgC,EAChC,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ /**
3
+ * Fleet Topology Module
4
+ *
5
+ * Provides fleet topology analysis using min-cut algorithms for:
6
+ * - Single Point of Failure (SPOF) detection
7
+ * - Resilience scoring
8
+ * - Topology optimization suggestions
9
+ * - Real-time SPOF monitoring
10
+ */
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.DEFAULT_TOPOLOGY_ANALYSIS_CONFIG = exports.DEFAULT_SPOF_MONITOR_CONFIG = exports.SPOFMonitor = exports.TopologyMinCutAnalyzer = void 0;
13
+ var TopologyMinCutAnalyzer_js_1 = require("./TopologyMinCutAnalyzer.js");
14
+ Object.defineProperty(exports, "TopologyMinCutAnalyzer", { enumerable: true, get: function () { return TopologyMinCutAnalyzer_js_1.TopologyMinCutAnalyzer; } });
15
+ var SPOFMonitor_js_1 = require("./SPOFMonitor.js");
16
+ Object.defineProperty(exports, "SPOFMonitor", { enumerable: true, get: function () { return SPOFMonitor_js_1.SPOFMonitor; } });
17
+ Object.defineProperty(exports, "DEFAULT_SPOF_MONITOR_CONFIG", { enumerable: true, get: function () { return SPOFMonitor_js_1.DEFAULT_SPOF_MONITOR_CONFIG; } });
18
+ var types_js_1 = require("./types.js");
19
+ Object.defineProperty(exports, "DEFAULT_TOPOLOGY_ANALYSIS_CONFIG", { enumerable: true, get: function () { return types_js_1.DEFAULT_TOPOLOGY_ANALYSIS_CONFIG; } });
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/fleet/topology/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,yEAAqE;AAA5D,mIAAA,sBAAsB,OAAA;AAC/B,mDAK0B;AAJxB,6GAAA,WAAW,OAAA;AAEX,6HAAA,2BAA2B,OAAA;AAG7B,uCAUoB;AAFlB,4HAAA,gCAAgC,OAAA"}