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.
- package/CHANGELOG.md +52 -0
- package/README.md +1 -1
- package/dist/agents/CoverageAnalyzerAgent.d.ts +31 -0
- package/dist/agents/CoverageAnalyzerAgent.d.ts.map +1 -1
- package/dist/agents/CoverageAnalyzerAgent.js +159 -0
- package/dist/agents/CoverageAnalyzerAgent.js.map +1 -1
- package/dist/agents/FleetCommanderAgent.d.ts +36 -0
- package/dist/agents/FleetCommanderAgent.d.ts.map +1 -1
- package/dist/agents/FleetCommanderAgent.js +226 -0
- package/dist/agents/FleetCommanderAgent.js.map +1 -1
- package/dist/cli/commands/kg/mincut.d.ts +50 -0
- package/dist/cli/commands/kg/mincut.d.ts.map +1 -0
- package/dist/cli/commands/kg/mincut.js +372 -0
- package/dist/cli/commands/kg/mincut.js.map +1 -0
- package/dist/cli/index.js +91 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/claude-config.js +2 -2
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts +148 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js +393 -0
- package/dist/code-intelligence/analysis/mincut/CircularDependencyDetector.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts +169 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.js +335 -0
- package/dist/code-intelligence/analysis/mincut/GraphAdapter.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts +55 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.js +265 -0
- package/dist/code-intelligence/analysis/mincut/JsMinCut.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts +92 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js +200 -0
- package/dist/code-intelligence/analysis/mincut/MinCutAnalyzer.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts +157 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js +434 -0
- package/dist/code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/index.d.ts +12 -0
- package/dist/code-intelligence/analysis/mincut/index.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/index.js +20 -0
- package/dist/code-intelligence/analysis/mincut/index.js.map +1 -0
- package/dist/code-intelligence/analysis/mincut/types.d.ts +145 -0
- package/dist/code-intelligence/analysis/mincut/types.d.ts.map +1 -0
- package/dist/code-intelligence/analysis/mincut/types.js +16 -0
- package/dist/code-intelligence/analysis/mincut/types.js.map +1 -0
- package/dist/code-intelligence/chunking/ASTChunker.d.ts +1 -1
- package/dist/code-intelligence/chunking/ASTChunker.d.ts.map +1 -1
- package/dist/code-intelligence/chunking/ASTChunker.js +4 -4
- package/dist/code-intelligence/chunking/ASTChunker.js.map +1 -1
- package/dist/code-intelligence/graph/GraphBuilder.d.ts +120 -0
- package/dist/code-intelligence/graph/GraphBuilder.d.ts.map +1 -1
- package/dist/code-intelligence/graph/GraphBuilder.js +517 -0
- package/dist/code-intelligence/graph/GraphBuilder.js.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.d.ts.map +1 -1
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js +3 -3
- package/dist/code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js.map +1 -1
- package/dist/code-intelligence/parser/{TreeSitterParser.d.ts → WebTreeSitterParser.d.ts} +45 -10
- package/dist/code-intelligence/parser/WebTreeSitterParser.d.ts.map +1 -0
- package/dist/code-intelligence/parser/{TreeSitterParser.js → WebTreeSitterParser.js} +147 -54
- package/dist/code-intelligence/parser/WebTreeSitterParser.js.map +1 -0
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts +12 -10
- package/dist/code-intelligence/parser/extractors/BaseExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js +7 -3
- package/dist/code-intelligence/parser/extractors/BaseExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/GoExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/GoExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/GoExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/JavaScriptExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/PythonExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/PythonExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/RustExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/RustExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/RustExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts +7 -5
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.d.ts.map +1 -1
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js +2 -2
- package/dist/code-intelligence/parser/extractors/TypeScriptExtractor.js.map +1 -1
- package/dist/code-intelligence/parser/index.d.ts +7 -1
- package/dist/code-intelligence/parser/index.d.ts.map +1 -1
- package/dist/code-intelligence/parser/index.js +11 -3
- package/dist/code-intelligence/parser/index.js.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.d.ts.map +1 -1
- package/dist/code-intelligence/service/CodeIntelligenceService.js +7 -5
- package/dist/code-intelligence/service/CodeIntelligenceService.js.map +1 -1
- package/dist/core/memory/HNSWVectorMemory.js +1 -1
- package/dist/coverage/CriticalPathDetector.d.ts +240 -0
- package/dist/coverage/CriticalPathDetector.d.ts.map +1 -0
- package/dist/coverage/CriticalPathDetector.js +388 -0
- package/dist/coverage/CriticalPathDetector.js.map +1 -0
- package/dist/coverage/index.d.ts +13 -0
- package/dist/coverage/index.d.ts.map +1 -0
- package/dist/coverage/index.js +16 -0
- package/dist/coverage/index.js.map +1 -0
- package/dist/fleet/topology/SPOFMonitor.d.ts +181 -0
- package/dist/fleet/topology/SPOFMonitor.d.ts.map +1 -0
- package/dist/fleet/topology/SPOFMonitor.js +286 -0
- package/dist/fleet/topology/SPOFMonitor.js.map +1 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts +87 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.d.ts.map +1 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.js +472 -0
- package/dist/fleet/topology/TopologyMinCutAnalyzer.js.map +1 -0
- package/dist/fleet/topology/index.d.ts +13 -0
- package/dist/fleet/topology/index.d.ts.map +1 -0
- package/dist/fleet/topology/index.js +20 -0
- package/dist/fleet/topology/index.js.map +1 -0
- package/dist/fleet/topology/types.d.ts +139 -0
- package/dist/fleet/topology/types.d.ts.map +1 -0
- package/dist/fleet/topology/types.js +19 -0
- package/dist/fleet/topology/types.js.map +1 -0
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts +34 -3
- package/dist/mcp/handlers/test/test-execute-parallel.d.ts.map +1 -1
- package/dist/mcp/handlers/test/test-execute-parallel.js +120 -5
- package/dist/mcp/handlers/test/test-execute-parallel.js.map +1 -1
- package/dist/mcp/server-instructions.d.ts +2 -2
- package/dist/mcp/server-instructions.d.ts.map +1 -1
- package/dist/mcp/server-instructions.js +2 -2
- package/dist/test/partition/MinCutPartitioner.d.ts +97 -0
- package/dist/test/partition/MinCutPartitioner.d.ts.map +1 -0
- package/dist/test/partition/MinCutPartitioner.js +459 -0
- package/dist/test/partition/MinCutPartitioner.js.map +1 -0
- package/dist/test/partition/RealTestExecutor.d.ts +86 -0
- package/dist/test/partition/RealTestExecutor.d.ts.map +1 -0
- package/dist/test/partition/RealTestExecutor.js +279 -0
- package/dist/test/partition/RealTestExecutor.js.map +1 -0
- package/dist/test/partition/TestDependencyAnalyzer.d.ts +75 -0
- package/dist/test/partition/TestDependencyAnalyzer.d.ts.map +1 -0
- package/dist/test/partition/TestDependencyAnalyzer.js +297 -0
- package/dist/test/partition/TestDependencyAnalyzer.js.map +1 -0
- package/dist/test/partition/index.d.ts +10 -0
- package/dist/test/partition/index.d.ts.map +1 -0
- package/dist/test/partition/index.js +26 -0
- package/dist/test/partition/index.js.map +1 -0
- package/dist/test/partition/types.d.ts +120 -0
- package/dist/test/partition/types.d.ts.map +1 -0
- package/dist/test/partition/types.js +21 -0
- package/dist/test/partition/types.js.map +1 -0
- package/package.json +4 -7
- package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +0 -1
- 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"}
|