agentic-qe 2.6.4 → 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 +95 -0
- package/README.md +26 -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/commands/providers/index.d.ts +20 -0
- package/dist/cli/commands/providers/index.d.ts.map +1 -0
- package/dist/cli/commands/providers/index.js +143 -0
- package/dist/cli/commands/providers/index.js.map +1 -0
- package/dist/cli/commands/providers/status.d.ts +117 -0
- package/dist/cli/commands/providers/status.d.ts.map +1 -0
- package/dist/cli/commands/providers/status.js +368 -0
- package/dist/cli/commands/providers/status.js.map +1 -0
- package/dist/cli/index.js +99 -62
- 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/monitoring/ProviderHealthMonitor.d.ts +195 -0
- package/dist/monitoring/ProviderHealthMonitor.d.ts.map +1 -0
- package/dist/monitoring/ProviderHealthMonitor.js +431 -0
- package/dist/monitoring/ProviderHealthMonitor.js.map +1 -0
- package/dist/monitoring/QuotaManager.d.ts +122 -0
- package/dist/monitoring/QuotaManager.d.ts.map +1 -0
- package/dist/monitoring/QuotaManager.js +351 -0
- package/dist/monitoring/QuotaManager.js.map +1 -0
- package/dist/providers/GitHubModelsProvider.d.ts +117 -0
- package/dist/providers/GitHubModelsProvider.d.ts.map +1 -0
- package/dist/providers/GitHubModelsProvider.js +464 -0
- package/dist/providers/GitHubModelsProvider.js.map +1 -0
- package/dist/providers/GroqProvider.d.ts +115 -0
- package/dist/providers/GroqProvider.d.ts.map +1 -0
- package/dist/providers/GroqProvider.js +443 -0
- package/dist/providers/GroqProvider.js.map +1 -0
- package/dist/providers/HybridRouterHealthIntegration.d.ts +191 -0
- package/dist/providers/HybridRouterHealthIntegration.d.ts.map +1 -0
- package/dist/providers/HybridRouterHealthIntegration.js +439 -0
- package/dist/providers/HybridRouterHealthIntegration.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +12 -1
- package/dist/providers/index.js.map +1 -1
- 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 +5 -8
- package/dist/cli/commands/providers.d.ts +0 -50
- package/dist/cli/commands/providers.d.ts.map +0 -1
- package/dist/cli/commands/providers.js +0 -403
- package/dist/cli/commands/providers.js.map +0 -1
- package/dist/code-intelligence/parser/TreeSitterParser.d.ts.map +0 -1
- package/dist/code-intelligence/parser/TreeSitterParser.js.map +0 -1
|
@@ -0,0 +1,372 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* MinCut Analysis CLI Commands
|
|
4
|
+
*
|
|
5
|
+
* Provides CLI interface for module coupling analysis using MinCut algorithms:
|
|
6
|
+
* - coupling: Analyze coupling between two modules
|
|
7
|
+
* - coupling-all: Find all highly coupled module pairs
|
|
8
|
+
* - circular: Detect circular dependencies
|
|
9
|
+
* - boundaries: Suggest optimal module boundaries
|
|
10
|
+
* - overview: Get coupling overview for entire codebase
|
|
11
|
+
*/
|
|
12
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
13
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
14
|
+
};
|
|
15
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
|
+
exports.analyzeCoupling = analyzeCoupling;
|
|
17
|
+
exports.findHighlyCoupledModules = findHighlyCoupledModules;
|
|
18
|
+
exports.detectCircularDependencies = detectCircularDependencies;
|
|
19
|
+
exports.suggestModuleBoundaries = suggestModuleBoundaries;
|
|
20
|
+
exports.getCouplingOverview = getCouplingOverview;
|
|
21
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
22
|
+
const ora_1 = __importDefault(require("ora"));
|
|
23
|
+
const CodeIntelligenceOrchestrator_js_1 = require("../../../code-intelligence/orchestrator/CodeIntelligenceOrchestrator.js");
|
|
24
|
+
const ModuleCouplingAnalyzer_js_1 = require("../../../code-intelligence/analysis/mincut/ModuleCouplingAnalyzer.js");
|
|
25
|
+
const CircularDependencyDetector_js_1 = require("../../../code-intelligence/analysis/mincut/CircularDependencyDetector.js");
|
|
26
|
+
/**
|
|
27
|
+
* Load code graph from knowledge graph
|
|
28
|
+
*/
|
|
29
|
+
async function loadCodeGraph() {
|
|
30
|
+
const spinner = (0, ora_1.default)('Loading code graph from knowledge graph...').start();
|
|
31
|
+
try {
|
|
32
|
+
// Initialize orchestrator
|
|
33
|
+
const orchestrator = new CodeIntelligenceOrchestrator_js_1.CodeIntelligenceOrchestrator({
|
|
34
|
+
rootDir: process.cwd(),
|
|
35
|
+
database: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
host: 'localhost',
|
|
38
|
+
port: 5432,
|
|
39
|
+
database: 'ruvector_dev',
|
|
40
|
+
user: 'postgres',
|
|
41
|
+
password: 'postgres'
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
await orchestrator.initialize();
|
|
45
|
+
// Get graph builder
|
|
46
|
+
const graphBuilder = orchestrator.getGraphBuilder();
|
|
47
|
+
const graph = graphBuilder.exportGraph();
|
|
48
|
+
if (!graph || graph.nodes.length === 0) {
|
|
49
|
+
spinner.fail('No code graph found');
|
|
50
|
+
console.log(chalk_1.default.yellow('Run "aqe kg index" to index your codebase first.'));
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
spinner.succeed(`Code graph loaded: ${graph.nodes.length} nodes, ${graph.edges.length} edges`);
|
|
54
|
+
return graph;
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
spinner.fail('Failed to load code graph');
|
|
58
|
+
if (error.message?.includes('connect')) {
|
|
59
|
+
console.error(chalk_1.default.red('❌ Database connection failed.'));
|
|
60
|
+
console.log(chalk_1.default.yellow('Make sure PostgreSQL is running and accessible.'));
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
64
|
+
}
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Format coupling strength with color
|
|
70
|
+
*/
|
|
71
|
+
function formatCoupling(strength) {
|
|
72
|
+
const percentage = (strength * 100).toFixed(0);
|
|
73
|
+
if (strength >= 0.8) {
|
|
74
|
+
return chalk_1.default.red(`${percentage}% (Very High)`);
|
|
75
|
+
}
|
|
76
|
+
if (strength >= 0.6) {
|
|
77
|
+
return chalk_1.default.yellow(`${percentage}% (High)`);
|
|
78
|
+
}
|
|
79
|
+
if (strength >= 0.4) {
|
|
80
|
+
return chalk_1.default.blue(`${percentage}% (Moderate)`);
|
|
81
|
+
}
|
|
82
|
+
return chalk_1.default.green(`${percentage}% (Low)`);
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Display coupling analysis result
|
|
86
|
+
*/
|
|
87
|
+
function displayCouplingResult(result, json) {
|
|
88
|
+
if (json) {
|
|
89
|
+
console.log(JSON.stringify(result, null, 2));
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log(chalk_1.default.bold.cyan(`\n📊 Coupling Analysis: ${result.module1} ↔ ${result.module2}\n`));
|
|
93
|
+
console.log(`Coupling Strength: ${formatCoupling(result.couplingStrength)}`);
|
|
94
|
+
console.log(`Circular Dependency: ${result.circularDependency ? chalk_1.default.red('Yes ⚠️') : chalk_1.default.green('No ✓')}`);
|
|
95
|
+
if (result.sharedDependencies.length > 0) {
|
|
96
|
+
console.log(chalk_1.default.gray(`\nShared Dependencies (${result.sharedDependencies.length}):`));
|
|
97
|
+
result.sharedDependencies.slice(0, 5).forEach(dep => {
|
|
98
|
+
console.log(chalk_1.default.gray(` • ${dep}`));
|
|
99
|
+
});
|
|
100
|
+
if (result.sharedDependencies.length > 5) {
|
|
101
|
+
console.log(chalk_1.default.gray(` ... and ${result.sharedDependencies.length - 5} more`));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (result.cutEdges.length > 0) {
|
|
105
|
+
console.log(chalk_1.default.gray(`\nKey Dependencies (${result.cutEdges.length}):`));
|
|
106
|
+
result.cutEdges.slice(0, 5).forEach(edge => {
|
|
107
|
+
console.log(chalk_1.default.gray(` • ${edge.source} → ${edge.target}`));
|
|
108
|
+
});
|
|
109
|
+
if (result.cutEdges.length > 5) {
|
|
110
|
+
console.log(chalk_1.default.gray(` ... and ${result.cutEdges.length - 5} more`));
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
if (result.recommendations.length > 0) {
|
|
114
|
+
console.log(chalk_1.default.yellow('\n💡 Recommendations:'));
|
|
115
|
+
result.recommendations.forEach(r => {
|
|
116
|
+
console.log(` ${r}`);
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
console.log(); // Empty line
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Analyze coupling between two modules
|
|
123
|
+
*/
|
|
124
|
+
async function analyzeCoupling(module1, module2, options) {
|
|
125
|
+
const graph = await loadCodeGraph();
|
|
126
|
+
const threshold = options.threshold ? parseFloat(options.threshold) : 0.3;
|
|
127
|
+
const spinner = (0, ora_1.default)('Analyzing module coupling...').start();
|
|
128
|
+
try {
|
|
129
|
+
// Convert graph to CodeGraph format
|
|
130
|
+
const codeGraph = {
|
|
131
|
+
nodes: new Map(graph.nodes.map(n => [n.id, n])),
|
|
132
|
+
edges: new Map(graph.edges.map(e => [e.id, e])),
|
|
133
|
+
fileNodes: new Map(),
|
|
134
|
+
outgoingEdges: new Map(),
|
|
135
|
+
incomingEdges: new Map()
|
|
136
|
+
};
|
|
137
|
+
// Build index maps
|
|
138
|
+
for (const node of graph.nodes) {
|
|
139
|
+
const fileNodes = codeGraph.fileNodes.get(node.filePath) || [];
|
|
140
|
+
fileNodes.push(node.id);
|
|
141
|
+
codeGraph.fileNodes.set(node.filePath, fileNodes);
|
|
142
|
+
codeGraph.outgoingEdges.set(node.id, []);
|
|
143
|
+
codeGraph.incomingEdges.set(node.id, []);
|
|
144
|
+
}
|
|
145
|
+
for (const edge of graph.edges) {
|
|
146
|
+
const outgoing = codeGraph.outgoingEdges.get(edge.source) || [];
|
|
147
|
+
outgoing.push(edge.id);
|
|
148
|
+
codeGraph.outgoingEdges.set(edge.source, outgoing);
|
|
149
|
+
const incoming = codeGraph.incomingEdges.get(edge.target) || [];
|
|
150
|
+
incoming.push(edge.id);
|
|
151
|
+
codeGraph.incomingEdges.set(edge.target, incoming);
|
|
152
|
+
}
|
|
153
|
+
const analyzer = new ModuleCouplingAnalyzer_js_1.ModuleCouplingAnalyzer(codeGraph, {
|
|
154
|
+
minCouplingThreshold: threshold
|
|
155
|
+
});
|
|
156
|
+
const result = await analyzer.analyzeCoupling(module1, module2);
|
|
157
|
+
spinner.succeed('Analysis complete');
|
|
158
|
+
displayCouplingResult(result, options.json || false);
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
spinner.fail('Analysis failed');
|
|
162
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
163
|
+
process.exit(1);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Find all highly coupled module pairs
|
|
168
|
+
*/
|
|
169
|
+
async function findHighlyCoupledModules(options) {
|
|
170
|
+
const graph = await loadCodeGraph();
|
|
171
|
+
const threshold = options.threshold ? parseFloat(options.threshold) : 0.5;
|
|
172
|
+
const limit = options.limit ? parseInt(options.limit) : 10;
|
|
173
|
+
const spinner = (0, ora_1.default)('Finding highly coupled modules...').start();
|
|
174
|
+
try {
|
|
175
|
+
// Convert graph to CodeGraph format
|
|
176
|
+
const codeGraph = {
|
|
177
|
+
nodes: new Map(graph.nodes.map(n => [n.id, n])),
|
|
178
|
+
edges: new Map(graph.edges.map(e => [e.id, e])),
|
|
179
|
+
fileNodes: new Map(),
|
|
180
|
+
outgoingEdges: new Map(),
|
|
181
|
+
incomingEdges: new Map()
|
|
182
|
+
};
|
|
183
|
+
// Build index maps
|
|
184
|
+
for (const node of graph.nodes) {
|
|
185
|
+
const fileNodes = codeGraph.fileNodes.get(node.filePath) || [];
|
|
186
|
+
fileNodes.push(node.id);
|
|
187
|
+
codeGraph.fileNodes.set(node.filePath, fileNodes);
|
|
188
|
+
codeGraph.outgoingEdges.set(node.id, []);
|
|
189
|
+
codeGraph.incomingEdges.set(node.id, []);
|
|
190
|
+
}
|
|
191
|
+
for (const edge of graph.edges) {
|
|
192
|
+
const outgoing = codeGraph.outgoingEdges.get(edge.source) || [];
|
|
193
|
+
outgoing.push(edge.id);
|
|
194
|
+
codeGraph.outgoingEdges.set(edge.source, outgoing);
|
|
195
|
+
const incoming = codeGraph.incomingEdges.get(edge.target) || [];
|
|
196
|
+
incoming.push(edge.id);
|
|
197
|
+
codeGraph.incomingEdges.set(edge.target, incoming);
|
|
198
|
+
}
|
|
199
|
+
const analyzer = new ModuleCouplingAnalyzer_js_1.ModuleCouplingAnalyzer(codeGraph);
|
|
200
|
+
const results = await analyzer.findHighlyCoupledModules(threshold);
|
|
201
|
+
const limitedResults = results.slice(0, limit);
|
|
202
|
+
spinner.succeed(`Found ${results.length} highly coupled module pairs`);
|
|
203
|
+
if (options.json) {
|
|
204
|
+
console.log(JSON.stringify(limitedResults, null, 2));
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
if (limitedResults.length === 0) {
|
|
208
|
+
console.log(chalk_1.default.green('\n✓ No highly coupled modules found (threshold: ' + (threshold * 100).toFixed(0) + '%)'));
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
console.log(chalk_1.default.bold.cyan(`\n🔗 Highly Coupled Modules (showing ${limitedResults.length} of ${results.length}):\n`));
|
|
212
|
+
for (const result of limitedResults) {
|
|
213
|
+
console.log(`${formatCoupling(result.couplingStrength)} ${chalk_1.default.bold(result.module1)} ↔ ${chalk_1.default.bold(result.module2)}`);
|
|
214
|
+
if (result.circularDependency) {
|
|
215
|
+
console.log(chalk_1.default.red(' ⚠️ Circular dependency detected'));
|
|
216
|
+
}
|
|
217
|
+
console.log();
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
catch (error) {
|
|
221
|
+
spinner.fail('Analysis failed');
|
|
222
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
223
|
+
process.exit(1);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Detect circular dependencies
|
|
228
|
+
*/
|
|
229
|
+
async function detectCircularDependencies(options) {
|
|
230
|
+
const graph = await loadCodeGraph();
|
|
231
|
+
const spinner = (0, ora_1.default)('Detecting circular dependencies...').start();
|
|
232
|
+
try {
|
|
233
|
+
// Convert graph to CodeGraph format
|
|
234
|
+
const codeGraph = {
|
|
235
|
+
nodes: new Map(graph.nodes.map(n => [n.id, n])),
|
|
236
|
+
edges: new Map(graph.edges.map(e => [e.id, e])),
|
|
237
|
+
fileNodes: new Map(),
|
|
238
|
+
outgoingEdges: new Map(),
|
|
239
|
+
incomingEdges: new Map()
|
|
240
|
+
};
|
|
241
|
+
// Build index maps
|
|
242
|
+
for (const node of graph.nodes) {
|
|
243
|
+
const fileNodes = codeGraph.fileNodes.get(node.filePath) || [];
|
|
244
|
+
fileNodes.push(node.id);
|
|
245
|
+
codeGraph.fileNodes.set(node.filePath, fileNodes);
|
|
246
|
+
codeGraph.outgoingEdges.set(node.id, []);
|
|
247
|
+
codeGraph.incomingEdges.set(node.id, []);
|
|
248
|
+
}
|
|
249
|
+
for (const edge of graph.edges) {
|
|
250
|
+
const outgoing = codeGraph.outgoingEdges.get(edge.source) || [];
|
|
251
|
+
outgoing.push(edge.id);
|
|
252
|
+
codeGraph.outgoingEdges.set(edge.source, outgoing);
|
|
253
|
+
const incoming = codeGraph.incomingEdges.get(edge.target) || [];
|
|
254
|
+
incoming.push(edge.id);
|
|
255
|
+
codeGraph.incomingEdges.set(edge.target, incoming);
|
|
256
|
+
}
|
|
257
|
+
const detector = new CircularDependencyDetector_js_1.CircularDependencyDetector(codeGraph);
|
|
258
|
+
const cycles = await detector.detectAll();
|
|
259
|
+
// Filter by severity if specified
|
|
260
|
+
const filteredCycles = options.severity
|
|
261
|
+
? cycles.filter(c => {
|
|
262
|
+
const severityOrder = { low: 1, medium: 2, high: 3 };
|
|
263
|
+
return severityOrder[c.severity] >= severityOrder[options.severity];
|
|
264
|
+
})
|
|
265
|
+
: cycles;
|
|
266
|
+
spinner.succeed(`Detected ${cycles.length} circular dependencies`);
|
|
267
|
+
if (options.json) {
|
|
268
|
+
console.log(JSON.stringify(filteredCycles, null, 2));
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
if (filteredCycles.length === 0) {
|
|
272
|
+
console.log(chalk_1.default.green('\n✓ No circular dependencies found'));
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
console.log(chalk_1.default.bold.red(`\n🔄 Circular Dependencies Found: ${filteredCycles.length}\n`));
|
|
276
|
+
for (const cycle of filteredCycles) {
|
|
277
|
+
const severityIcon = {
|
|
278
|
+
high: '🔴',
|
|
279
|
+
medium: '🟡',
|
|
280
|
+
low: '🟢'
|
|
281
|
+
}[cycle.severity];
|
|
282
|
+
console.log(`${severityIcon} ${chalk_1.default.bold(cycle.severity.toUpperCase())}: ${cycle.cycle.join(' → ')}`);
|
|
283
|
+
if (cycle.breakPoints.length > 0) {
|
|
284
|
+
console.log(chalk_1.default.gray(' Break points:'));
|
|
285
|
+
for (const bp of cycle.breakPoints.slice(0, 3)) {
|
|
286
|
+
console.log(chalk_1.default.gray(` • ${bp.source} → ${bp.target} (${bp.effort} effort)`));
|
|
287
|
+
}
|
|
288
|
+
if (cycle.breakPoints.length > 3) {
|
|
289
|
+
console.log(chalk_1.default.gray(` ... and ${cycle.breakPoints.length - 3} more`));
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
console.log();
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (error) {
|
|
296
|
+
spinner.fail('Detection failed');
|
|
297
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Suggest optimal module boundaries
|
|
303
|
+
*/
|
|
304
|
+
async function suggestModuleBoundaries(count, options) {
|
|
305
|
+
const graph = await loadCodeGraph();
|
|
306
|
+
const moduleCount = parseInt(count);
|
|
307
|
+
if (isNaN(moduleCount) || moduleCount < 2) {
|
|
308
|
+
console.error(chalk_1.default.red('❌ Invalid module count. Must be >= 2'));
|
|
309
|
+
process.exit(1);
|
|
310
|
+
}
|
|
311
|
+
console.log(chalk_1.default.yellow(`\n⚠️ Module boundary suggestion is not yet implemented.`));
|
|
312
|
+
console.log(chalk_1.default.gray('This feature will analyze the code graph and suggest optimal module boundaries'));
|
|
313
|
+
console.log(chalk_1.default.gray(`to partition the codebase into ${moduleCount} modules with minimal coupling.\n`));
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get coupling overview for entire codebase
|
|
317
|
+
*/
|
|
318
|
+
async function getCouplingOverview(options) {
|
|
319
|
+
const graph = await loadCodeGraph();
|
|
320
|
+
const spinner = (0, ora_1.default)('Computing coupling overview...').start();
|
|
321
|
+
try {
|
|
322
|
+
// Convert graph to CodeGraph format
|
|
323
|
+
const codeGraph = {
|
|
324
|
+
nodes: new Map(graph.nodes.map(n => [n.id, n])),
|
|
325
|
+
edges: new Map(graph.edges.map(e => [e.id, e])),
|
|
326
|
+
fileNodes: new Map(),
|
|
327
|
+
outgoingEdges: new Map(),
|
|
328
|
+
incomingEdges: new Map()
|
|
329
|
+
};
|
|
330
|
+
// Build index maps
|
|
331
|
+
for (const node of graph.nodes) {
|
|
332
|
+
const fileNodes = codeGraph.fileNodes.get(node.filePath) || [];
|
|
333
|
+
fileNodes.push(node.id);
|
|
334
|
+
codeGraph.fileNodes.set(node.filePath, fileNodes);
|
|
335
|
+
codeGraph.outgoingEdges.set(node.id, []);
|
|
336
|
+
codeGraph.incomingEdges.set(node.id, []);
|
|
337
|
+
}
|
|
338
|
+
for (const edge of graph.edges) {
|
|
339
|
+
const outgoing = codeGraph.outgoingEdges.get(edge.source) || [];
|
|
340
|
+
outgoing.push(edge.id);
|
|
341
|
+
codeGraph.outgoingEdges.set(edge.source, outgoing);
|
|
342
|
+
const incoming = codeGraph.incomingEdges.get(edge.target) || [];
|
|
343
|
+
incoming.push(edge.id);
|
|
344
|
+
codeGraph.incomingEdges.set(edge.target, incoming);
|
|
345
|
+
}
|
|
346
|
+
const analyzer = new ModuleCouplingAnalyzer_js_1.ModuleCouplingAnalyzer(codeGraph);
|
|
347
|
+
const overview = await analyzer.getCouplingOverview();
|
|
348
|
+
spinner.succeed('Overview computed');
|
|
349
|
+
if (options.json) {
|
|
350
|
+
console.log(JSON.stringify(overview, null, 2));
|
|
351
|
+
return;
|
|
352
|
+
}
|
|
353
|
+
console.log(chalk_1.default.bold.cyan('\n📊 Coupling Overview\n'));
|
|
354
|
+
console.log(`Average Coupling: ${formatCoupling(overview.averageCoupling)}`);
|
|
355
|
+
console.log(`Maximum Coupling: ${formatCoupling(overview.maxCoupling)}`);
|
|
356
|
+
console.log(`Highly Coupled Pairs: ${chalk_1.default.yellow(overview.highlyCoupledPairs)}`);
|
|
357
|
+
console.log(`Circular Dependencies: ${overview.circularDependencies > 0 ? chalk_1.default.red(overview.circularDependencies) : chalk_1.default.green(overview.circularDependencies)}`);
|
|
358
|
+
if (overview.recommendations.length > 0) {
|
|
359
|
+
console.log(chalk_1.default.yellow('\n💡 Recommendations:'));
|
|
360
|
+
overview.recommendations.forEach(r => {
|
|
361
|
+
console.log(` ${r}`);
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
console.log();
|
|
365
|
+
}
|
|
366
|
+
catch (error) {
|
|
367
|
+
spinner.fail('Overview computation failed');
|
|
368
|
+
console.error(chalk_1.default.red(`❌ Error: ${error.message}`));
|
|
369
|
+
process.exit(1);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
//# sourceMappingURL=mincut.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mincut.js","sourceRoot":"","sources":["../../../../src/cli/commands/kg/mincut.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provider Commands - LLM Provider management CLI
|
|
3
|
+
*
|
|
4
|
+
* Commands for monitoring, configuring, and managing LLM providers.
|
|
5
|
+
*
|
|
6
|
+
* Available commands:
|
|
7
|
+
* aqe providers status - Show provider health dashboard
|
|
8
|
+
* aqe providers list - List all registered providers
|
|
9
|
+
* aqe providers quota - Show quota usage for all providers
|
|
10
|
+
* aqe providers test - Test connectivity to a provider
|
|
11
|
+
* aqe providers switch - Switch the default provider
|
|
12
|
+
*
|
|
13
|
+
* @module cli/commands/providers
|
|
14
|
+
* @version 1.0.0
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from 'commander';
|
|
17
|
+
export declare function createProvidersCommand(): Command;
|
|
18
|
+
export { ProviderStatusCommand } from './status';
|
|
19
|
+
export type { ProviderStatusOptions, ProviderStatusReport, ProviderHealthInfo } from './status';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/providers/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,sBAAsB,IAAI,OAAO,CAuHhD;AAGD,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Provider Commands - LLM Provider management CLI
|
|
4
|
+
*
|
|
5
|
+
* Commands for monitoring, configuring, and managing LLM providers.
|
|
6
|
+
*
|
|
7
|
+
* Available commands:
|
|
8
|
+
* aqe providers status - Show provider health dashboard
|
|
9
|
+
* aqe providers list - List all registered providers
|
|
10
|
+
* aqe providers quota - Show quota usage for all providers
|
|
11
|
+
* aqe providers test - Test connectivity to a provider
|
|
12
|
+
* aqe providers switch - Switch the default provider
|
|
13
|
+
*
|
|
14
|
+
* @module cli/commands/providers
|
|
15
|
+
* @version 1.0.0
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.ProviderStatusCommand = void 0;
|
|
22
|
+
exports.createProvidersCommand = createProvidersCommand;
|
|
23
|
+
const commander_1 = require("commander");
|
|
24
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
25
|
+
const status_1 = require("./status");
|
|
26
|
+
function createProvidersCommand() {
|
|
27
|
+
const providers = new commander_1.Command('providers')
|
|
28
|
+
.description('LLM provider management and health monitoring')
|
|
29
|
+
.addHelpText('after', `
|
|
30
|
+
Examples:
|
|
31
|
+
$ aqe providers status Show provider health dashboard
|
|
32
|
+
$ aqe providers status --detailed Show detailed metrics
|
|
33
|
+
$ aqe providers status --json Output in JSON format
|
|
34
|
+
$ aqe providers status --watch Continuously monitor
|
|
35
|
+
$ aqe providers list List all configured providers
|
|
36
|
+
$ aqe providers test groq Test Groq provider connectivity
|
|
37
|
+
$ aqe providers switch claude Switch default to Claude
|
|
38
|
+
`);
|
|
39
|
+
// Status subcommand - primary health dashboard
|
|
40
|
+
providers
|
|
41
|
+
.command('status')
|
|
42
|
+
.description('Show provider health dashboard with real-time metrics')
|
|
43
|
+
.option('-d, --detailed', 'Show detailed metrics for each provider')
|
|
44
|
+
.option('-j, --json', 'Output in JSON format')
|
|
45
|
+
.option('-f, --format <format>', 'Output format (json, table)', 'table')
|
|
46
|
+
.option('-v, --verbose', 'Show verbose output (alias for --detailed)')
|
|
47
|
+
.option('-w, --watch', 'Continuously monitor provider health')
|
|
48
|
+
.option('-i, --interval <seconds>', 'Watch interval in seconds', '10')
|
|
49
|
+
.action(async (options) => {
|
|
50
|
+
const statusOptions = {
|
|
51
|
+
detailed: options.detailed || options.verbose,
|
|
52
|
+
json: options.json || options.format === 'json',
|
|
53
|
+
watch: options.watch,
|
|
54
|
+
interval: parseInt(options.interval, 10)
|
|
55
|
+
};
|
|
56
|
+
try {
|
|
57
|
+
await status_1.ProviderStatusCommand.execute(statusOptions);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error(chalk_1.default.red(`❌ Provider status failed: ${error.message}`));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
// List subcommand - list all providers
|
|
65
|
+
providers
|
|
66
|
+
.command('list')
|
|
67
|
+
.description('List all configured providers and their status')
|
|
68
|
+
.option('-j, --json', 'Output in JSON format')
|
|
69
|
+
.option('-f, --format <format>', 'Output format (json, table)', 'table')
|
|
70
|
+
.option('-v, --verbose', 'Show detailed information')
|
|
71
|
+
.action(async (options) => {
|
|
72
|
+
try {
|
|
73
|
+
await status_1.ProviderStatusCommand.execute({
|
|
74
|
+
json: options.json || options.format === 'json',
|
|
75
|
+
detailed: options.verbose
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
console.error(chalk_1.default.red(`❌ Provider list failed: ${error.message}`));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
// Quota subcommand - show quota usage
|
|
84
|
+
providers
|
|
85
|
+
.command('quota')
|
|
86
|
+
.description('Show quota usage for all providers')
|
|
87
|
+
.option('-j, --json', 'Output in JSON format')
|
|
88
|
+
.action(async (options) => {
|
|
89
|
+
try {
|
|
90
|
+
await status_1.ProviderStatusCommand.execute({
|
|
91
|
+
detailed: true,
|
|
92
|
+
json: options.json
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
catch (error) {
|
|
96
|
+
console.error(chalk_1.default.red(`❌ Provider quota failed: ${error.message}`));
|
|
97
|
+
process.exit(1);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
// Test subcommand - test provider connectivity
|
|
101
|
+
providers
|
|
102
|
+
.command('test')
|
|
103
|
+
.description('Test connectivity to a specific provider')
|
|
104
|
+
.argument('[provider]', 'Provider name to test (groq, github-models, claude, ollama)')
|
|
105
|
+
.option('-v, --verbose', 'Show detailed error information')
|
|
106
|
+
.action(async (provider, options) => {
|
|
107
|
+
try {
|
|
108
|
+
console.log(chalk_1.default.cyan(`\n🔍 Testing provider: ${provider || 'all'}\n`));
|
|
109
|
+
await status_1.ProviderStatusCommand.execute({
|
|
110
|
+
detailed: options.verbose || true
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
catch (error) {
|
|
114
|
+
console.error(chalk_1.default.red(`❌ Provider test failed: ${error.message}`));
|
|
115
|
+
process.exit(1);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// Switch subcommand - change default provider
|
|
119
|
+
providers
|
|
120
|
+
.command('switch')
|
|
121
|
+
.description('Switch the default provider')
|
|
122
|
+
.argument('<provider>', 'Provider name (groq, github-models, claude, ollama, openrouter)')
|
|
123
|
+
.action(async (provider) => {
|
|
124
|
+
const validProviders = ['groq', 'github-models', 'claude', 'ollama', 'openrouter', 'ruvllm'];
|
|
125
|
+
if (!validProviders.includes(provider.toLowerCase())) {
|
|
126
|
+
console.error(chalk_1.default.red(`❌ Invalid provider: ${provider}`));
|
|
127
|
+
console.log(chalk_1.default.yellow(`Valid providers: ${validProviders.join(', ')}`));
|
|
128
|
+
process.exit(1);
|
|
129
|
+
}
|
|
130
|
+
console.log(chalk_1.default.cyan(`\n🔄 Switching default provider to: ${provider}\n`));
|
|
131
|
+
console.log(chalk_1.default.yellow('To persist this change, update your configuration:'));
|
|
132
|
+
console.log(chalk_1.default.white(` aqe config set providers.default ${provider}`));
|
|
133
|
+
console.log(chalk_1.default.white(` # or edit .aqe/config.json directly\n`));
|
|
134
|
+
// Show current status of the target provider
|
|
135
|
+
console.log(chalk_1.default.cyan('Current status of target provider:'));
|
|
136
|
+
await status_1.ProviderStatusCommand.execute({ detailed: false });
|
|
137
|
+
});
|
|
138
|
+
return providers;
|
|
139
|
+
}
|
|
140
|
+
// Export command components for direct usage
|
|
141
|
+
var status_2 = require("./status");
|
|
142
|
+
Object.defineProperty(exports, "ProviderStatusCommand", { enumerable: true, get: function () { return status_2.ProviderStatusCommand; } });
|
|
143
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cli/commands/providers/index.ts"],"names":[],"mappings":"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"}
|