agentic-qe 2.6.3 → 2.6.5

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 (44) hide show
  1. package/CHANGELOG.md +49 -0
  2. package/README.md +26 -1
  3. package/dist/cli/commands/providers/index.d.ts +20 -0
  4. package/dist/cli/commands/providers/index.d.ts.map +1 -0
  5. package/dist/cli/commands/providers/index.js +143 -0
  6. package/dist/cli/commands/providers/index.js.map +1 -0
  7. package/dist/cli/commands/providers/status.d.ts +117 -0
  8. package/dist/cli/commands/providers/status.d.ts.map +1 -0
  9. package/dist/cli/commands/providers/status.js +368 -0
  10. package/dist/cli/commands/providers/status.js.map +1 -0
  11. package/dist/cli/index.js +8 -62
  12. package/dist/cli/index.js.map +1 -1
  13. package/dist/core/memory/HNSWVectorMemory.js +1 -1
  14. package/dist/mcp/server-instructions.d.ts +1 -1
  15. package/dist/mcp/server-instructions.js +1 -1
  16. package/dist/monitoring/ProviderHealthMonitor.d.ts +195 -0
  17. package/dist/monitoring/ProviderHealthMonitor.d.ts.map +1 -0
  18. package/dist/monitoring/ProviderHealthMonitor.js +431 -0
  19. package/dist/monitoring/ProviderHealthMonitor.js.map +1 -0
  20. package/dist/monitoring/QuotaManager.d.ts +122 -0
  21. package/dist/monitoring/QuotaManager.d.ts.map +1 -0
  22. package/dist/monitoring/QuotaManager.js +351 -0
  23. package/dist/monitoring/QuotaManager.js.map +1 -0
  24. package/dist/providers/GitHubModelsProvider.d.ts +117 -0
  25. package/dist/providers/GitHubModelsProvider.d.ts.map +1 -0
  26. package/dist/providers/GitHubModelsProvider.js +464 -0
  27. package/dist/providers/GitHubModelsProvider.js.map +1 -0
  28. package/dist/providers/GroqProvider.d.ts +115 -0
  29. package/dist/providers/GroqProvider.d.ts.map +1 -0
  30. package/dist/providers/GroqProvider.js +443 -0
  31. package/dist/providers/GroqProvider.js.map +1 -0
  32. package/dist/providers/HybridRouterHealthIntegration.d.ts +191 -0
  33. package/dist/providers/HybridRouterHealthIntegration.d.ts.map +1 -0
  34. package/dist/providers/HybridRouterHealthIntegration.js +439 -0
  35. package/dist/providers/HybridRouterHealthIntegration.js.map +1 -0
  36. package/dist/providers/index.d.ts +6 -0
  37. package/dist/providers/index.d.ts.map +1 -1
  38. package/dist/providers/index.js +12 -1
  39. package/dist/providers/index.js.map +1 -1
  40. package/package.json +3 -2
  41. package/dist/cli/commands/providers.d.ts +0 -50
  42. package/dist/cli/commands/providers.d.ts.map +0 -1
  43. package/dist/cli/commands/providers.js +0 -403
  44. package/dist/cli/commands/providers.js.map +0 -1
@@ -0,0 +1,368 @@
1
+ "use strict";
2
+ /**
3
+ * Provider Status Command - Health dashboard for LLM providers
4
+ *
5
+ * Displays real-time health status of all registered LLM providers
6
+ * including circuit breaker states, latency, and availability metrics.
7
+ *
8
+ * Usage:
9
+ * aqe providers status [options]
10
+ *
11
+ * Options:
12
+ * --detailed Show detailed metrics for each provider
13
+ * --json Output in JSON format
14
+ * --watch Continuously monitor provider health
15
+ * --interval Watch interval in seconds (default: 10)
16
+ *
17
+ * @module cli/commands/providers/status
18
+ * @version 1.0.0
19
+ */
20
+ var __importDefault = (this && this.__importDefault) || function (mod) {
21
+ return (mod && mod.__esModule) ? mod : { "default": mod };
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.ProviderStatusCommand = void 0;
25
+ const chalk_1 = __importDefault(require("chalk"));
26
+ const ProviderHealthMonitor_1 = require("../../../monitoring/ProviderHealthMonitor");
27
+ const QuotaManager_1 = require("../../../monitoring/QuotaManager");
28
+ /**
29
+ * Provider Status Command
30
+ */
31
+ class ProviderStatusCommand {
32
+ /**
33
+ * Execute the provider status command
34
+ */
35
+ static async execute(options = {}) {
36
+ // Initialize monitoring components if not already initialized
37
+ await this.initializeMonitoring();
38
+ if (options.watch) {
39
+ return this.startWatchMode(options);
40
+ }
41
+ const report = await this.generateStatusReport(options.detailed);
42
+ if (options.json) {
43
+ console.log(JSON.stringify(report, null, 2));
44
+ }
45
+ else {
46
+ this.displayStatusReport(report, options.detailed);
47
+ }
48
+ return report;
49
+ }
50
+ /**
51
+ * Initialize health monitor and quota manager with default providers
52
+ */
53
+ static async initializeMonitoring() {
54
+ if (!this.healthMonitor) {
55
+ this.healthMonitor = new ProviderHealthMonitor_1.ProviderHealthMonitor({
56
+ checkIntervalMs: 30000,
57
+ timeoutMs: 5000,
58
+ failureThreshold: 3,
59
+ recoveryTimeMs: 60000,
60
+ healthyLatencyThresholdMs: 3000
61
+ });
62
+ }
63
+ if (!this.quotaManager) {
64
+ this.quotaManager = (0, QuotaManager_1.createQuotaManager)();
65
+ }
66
+ // Register default providers for health monitoring if not already registered
67
+ await this.registerDefaultProviders();
68
+ }
69
+ /**
70
+ * Register default providers for monitoring
71
+ */
72
+ static async registerDefaultProviders() {
73
+ const providers = [
74
+ { id: 'groq', name: 'Groq LPU', checkFn: async () => this.checkGroqHealth() },
75
+ { id: 'github-models', name: 'GitHub Models', checkFn: async () => this.checkGitHubModelsHealth() },
76
+ { id: 'ollama', name: 'Ollama (Local)', checkFn: async () => this.checkOllamaHealth() },
77
+ { id: 'claude', name: 'Claude (Anthropic)', checkFn: async () => this.checkClaudeHealth() },
78
+ { id: 'openrouter', name: 'OpenRouter', checkFn: async () => this.checkOpenRouterHealth() }
79
+ ];
80
+ for (const provider of providers) {
81
+ const existing = this.healthMonitor?.getProviderHealth(provider.id);
82
+ if (!existing) {
83
+ this.healthMonitor?.registerProvider(provider.id, provider.checkFn);
84
+ }
85
+ }
86
+ }
87
+ /**
88
+ * Generate status report for all providers
89
+ */
90
+ static async generateStatusReport(detailed) {
91
+ // Perform health checks on all providers
92
+ await this.healthMonitor?.checkAllProviders();
93
+ const allHealth = this.healthMonitor?.getAllProviderHealth() || new Map();
94
+ const providers = [];
95
+ const providerNames = {
96
+ 'groq': 'Groq LPU',
97
+ 'github-models': 'GitHub Models',
98
+ 'ollama': 'Ollama (Local)',
99
+ 'claude': 'Claude (Anthropic)',
100
+ 'openrouter': 'OpenRouter'
101
+ };
102
+ for (const [id, health] of allHealth.entries()) {
103
+ const info = {
104
+ id,
105
+ name: providerNames[id] || id,
106
+ healthy: health.healthy,
107
+ circuitState: health.circuitState,
108
+ latency: health.latency,
109
+ errorRate: health.errorRate,
110
+ availability: health.availability,
111
+ lastCheck: health.lastCheck.toISOString(),
112
+ lastError: health.lastError
113
+ };
114
+ // Add quota info if available
115
+ const quota = this.quotaManager?.getQuotaStatus(id);
116
+ if (quota) {
117
+ info.quota = {
118
+ dailyUsed: quota.dailyUsed,
119
+ dailyLimit: quota.dailyLimit === Infinity ? -1 : quota.dailyLimit,
120
+ minuteUsed: quota.minuteUsed,
121
+ minuteLimit: quota.minuteLimit === Infinity ? -1 : quota.minuteLimit,
122
+ percentageUsed: quota.percentageUsed,
123
+ isExhausted: quota.isExhausted
124
+ };
125
+ }
126
+ providers.push(info);
127
+ }
128
+ // Calculate summary
129
+ const summary = {
130
+ total: providers.length,
131
+ healthy: providers.filter(p => p.healthy && p.circuitState === 'closed').length,
132
+ degraded: providers.filter(p => !p.healthy && p.circuitState === 'closed').length,
133
+ unhealthy: providers.filter(p => !p.healthy && p.circuitState === 'open').length,
134
+ circuitOpen: providers.filter(p => p.circuitState === 'open').length
135
+ };
136
+ // Determine overall health
137
+ let overallHealth;
138
+ if (summary.total === 0) {
139
+ overallHealth = 'unknown';
140
+ }
141
+ else if (summary.healthy === summary.total) {
142
+ overallHealth = 'healthy';
143
+ }
144
+ else if (summary.healthy > 0) {
145
+ overallHealth = 'degraded';
146
+ }
147
+ else {
148
+ overallHealth = 'unhealthy';
149
+ }
150
+ return {
151
+ timestamp: new Date().toISOString(),
152
+ overallHealth,
153
+ providers,
154
+ summary
155
+ };
156
+ }
157
+ /**
158
+ * Display status report in console
159
+ */
160
+ static displayStatusReport(report, detailed) {
161
+ console.log(chalk_1.default.blue.bold('\n🏥 LLM Provider Health Dashboard\n'));
162
+ // Overall status
163
+ const statusColor = this.getHealthColor(report.overallHealth);
164
+ console.log(chalk_1.default.blue('📊 Overall Status:'), statusColor(report.overallHealth.toUpperCase()));
165
+ console.log(chalk_1.default.gray(` Last updated: ${new Date(report.timestamp).toLocaleString()}`));
166
+ // Summary
167
+ console.log(chalk_1.default.blue('\n📈 Summary:'));
168
+ console.log(` Total Providers: ${chalk_1.default.white(report.summary.total)}`);
169
+ console.log(` Healthy: ${chalk_1.default.green(report.summary.healthy)}`);
170
+ if (report.summary.degraded > 0) {
171
+ console.log(` Degraded: ${chalk_1.default.yellow(report.summary.degraded)}`);
172
+ }
173
+ if (report.summary.unhealthy > 0) {
174
+ console.log(` Unhealthy: ${chalk_1.default.red(report.summary.unhealthy)}`);
175
+ }
176
+ if (report.summary.circuitOpen > 0) {
177
+ console.log(` Circuit Open: ${chalk_1.default.red(report.summary.circuitOpen)}`);
178
+ }
179
+ // Provider details
180
+ console.log(chalk_1.default.blue('\n🔌 Provider Status:\n'));
181
+ for (const provider of report.providers) {
182
+ this.displayProviderStatus(provider, detailed);
183
+ }
184
+ // Legend
185
+ console.log(chalk_1.default.gray('\n📖 Legend:'));
186
+ console.log(chalk_1.default.gray(' Circuit: ') + chalk_1.default.green('●') + ' closed ' + chalk_1.default.yellow('●') + ' half-open ' + chalk_1.default.red('●') + ' open');
187
+ console.log(chalk_1.default.gray(' Quota: Unlimited = -1'));
188
+ }
189
+ /**
190
+ * Display individual provider status
191
+ */
192
+ static displayProviderStatus(provider, detailed) {
193
+ const healthIcon = provider.healthy ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
194
+ const circuitIcon = this.getCircuitIcon(provider.circuitState);
195
+ const nameColor = provider.healthy ? chalk_1.default.white : chalk_1.default.red;
196
+ console.log(` ${healthIcon} ${nameColor(provider.name.padEnd(20))} ${circuitIcon}`);
197
+ if (detailed) {
198
+ console.log(chalk_1.default.gray(` Latency: ${provider.latency.toFixed(0)}ms`));
199
+ console.log(chalk_1.default.gray(` Availability: ${(provider.availability * 100).toFixed(1)}%`));
200
+ console.log(chalk_1.default.gray(` Error Rate: ${(provider.errorRate * 100).toFixed(1)}%`));
201
+ if (provider.quota) {
202
+ const quotaBar = this.getQuotaBar(provider.quota.percentageUsed);
203
+ const dailyLimit = provider.quota.dailyLimit === -1 ? '∞' : provider.quota.dailyLimit.toString();
204
+ console.log(chalk_1.default.gray(` Quota: ${provider.quota.dailyUsed}/${dailyLimit} daily ${quotaBar}`));
205
+ if (provider.quota.isExhausted) {
206
+ console.log(chalk_1.default.red(' ⚠ Quota exhausted!'));
207
+ }
208
+ }
209
+ if (provider.lastError) {
210
+ console.log(chalk_1.default.red(` Last Error: ${provider.lastError}`));
211
+ }
212
+ }
213
+ else {
214
+ // Compact view with latency and availability
215
+ const latencyColor = provider.latency < 1000 ? chalk_1.default.green : provider.latency < 3000 ? chalk_1.default.yellow : chalk_1.default.red;
216
+ console.log(chalk_1.default.gray(` Latency: ${latencyColor(provider.latency.toFixed(0) + 'ms')} | Avail: ${(provider.availability * 100).toFixed(0)}%`));
217
+ }
218
+ console.log('');
219
+ }
220
+ /**
221
+ * Start watch mode for continuous monitoring
222
+ */
223
+ static async startWatchMode(options) {
224
+ const intervalMs = (options.interval || 10) * 1000;
225
+ console.log(chalk_1.default.blue.bold('\n🔄 Provider Health Watch Mode'));
226
+ console.log(chalk_1.default.gray(` Refreshing every ${options.interval || 10} seconds. Press Ctrl+C to stop.\n`));
227
+ const display = async () => {
228
+ console.clear();
229
+ const report = await this.generateStatusReport(options.detailed);
230
+ if (options.json) {
231
+ console.log(JSON.stringify(report, null, 2));
232
+ }
233
+ else {
234
+ this.displayStatusReport(report, options.detailed);
235
+ }
236
+ return report;
237
+ };
238
+ // Initial display
239
+ let lastReport = await display();
240
+ // Set up interval
241
+ this.watchIntervalId = setInterval(async () => {
242
+ lastReport = await display();
243
+ }, intervalMs);
244
+ // Handle cleanup
245
+ process.on('SIGINT', () => {
246
+ this.stopWatch();
247
+ process.exit(0);
248
+ });
249
+ return lastReport;
250
+ }
251
+ /**
252
+ * Stop watch mode
253
+ */
254
+ static stopWatch() {
255
+ if (this.watchIntervalId) {
256
+ clearInterval(this.watchIntervalId);
257
+ this.watchIntervalId = undefined;
258
+ console.log(chalk_1.default.yellow('\n\n👋 Watch mode stopped.\n'));
259
+ }
260
+ }
261
+ /**
262
+ * Get color for health status
263
+ */
264
+ static getHealthColor(status) {
265
+ const colors = {
266
+ 'healthy': chalk_1.default.green,
267
+ 'degraded': chalk_1.default.yellow,
268
+ 'unhealthy': chalk_1.default.red,
269
+ 'unknown': chalk_1.default.gray
270
+ };
271
+ return colors[status] || chalk_1.default.white;
272
+ }
273
+ /**
274
+ * Get circuit state icon
275
+ */
276
+ static getCircuitIcon(state) {
277
+ const icons = {
278
+ 'closed': chalk_1.default.green('●') + ' closed',
279
+ 'open': chalk_1.default.red('●') + ' open',
280
+ 'half-open': chalk_1.default.yellow('●') + ' half-open'
281
+ };
282
+ return icons[state] || chalk_1.default.gray('●') + ' unknown';
283
+ }
284
+ /**
285
+ * Get quota usage bar
286
+ */
287
+ static getQuotaBar(percentage) {
288
+ const width = 10;
289
+ const filled = Math.round((percentage / 100) * width);
290
+ const empty = width - filled;
291
+ let color = chalk_1.default.green;
292
+ if (percentage > 80)
293
+ color = chalk_1.default.red;
294
+ else if (percentage > 50)
295
+ color = chalk_1.default.yellow;
296
+ return `[${color('█'.repeat(filled))}${chalk_1.default.gray('░'.repeat(empty))}]`;
297
+ }
298
+ // Health check functions for each provider
299
+ static async checkGroqHealth() {
300
+ // Check GROQ_API_KEY environment variable
301
+ const hasKey = !!process.env.GROQ_API_KEY;
302
+ return {
303
+ healthy: hasKey,
304
+ timestamp: new Date(),
305
+ error: hasKey ? undefined : 'GROQ_API_KEY not set'
306
+ };
307
+ }
308
+ static async checkGitHubModelsHealth() {
309
+ // Check if in Codespaces or GITHUB_TOKEN exists
310
+ const inCodespaces = process.env.CODESPACES === 'true';
311
+ const hasToken = !!process.env.GITHUB_TOKEN;
312
+ const healthy = inCodespaces || hasToken;
313
+ return {
314
+ healthy,
315
+ timestamp: new Date(),
316
+ error: healthy ? undefined : 'Not in Codespaces and GITHUB_TOKEN not set'
317
+ };
318
+ }
319
+ static async checkOllamaHealth() {
320
+ try {
321
+ const response = await fetch('http://localhost:11434/api/version', {
322
+ signal: AbortSignal.timeout(2000)
323
+ });
324
+ return {
325
+ healthy: response.ok,
326
+ timestamp: new Date()
327
+ };
328
+ }
329
+ catch (error) {
330
+ return {
331
+ healthy: false,
332
+ timestamp: new Date(),
333
+ error: 'Ollama not running on localhost:11434'
334
+ };
335
+ }
336
+ }
337
+ static async checkClaudeHealth() {
338
+ const hasKey = !!process.env.ANTHROPIC_API_KEY;
339
+ return {
340
+ healthy: hasKey,
341
+ timestamp: new Date(),
342
+ error: hasKey ? undefined : 'ANTHROPIC_API_KEY not set'
343
+ };
344
+ }
345
+ static async checkOpenRouterHealth() {
346
+ const hasKey = !!process.env.OPENROUTER_API_KEY;
347
+ return {
348
+ healthy: hasKey,
349
+ timestamp: new Date(),
350
+ error: hasKey ? undefined : 'OPENROUTER_API_KEY not set'
351
+ };
352
+ }
353
+ /**
354
+ * Cleanup resources
355
+ */
356
+ static cleanup() {
357
+ this.stopWatch();
358
+ this.healthMonitor?.stopMonitoring();
359
+ this.healthMonitor = undefined;
360
+ // Stop quota manager cleanup interval
361
+ if (this.quotaManager) {
362
+ this.quotaManager.stopCleanup();
363
+ }
364
+ this.quotaManager = undefined;
365
+ }
366
+ }
367
+ exports.ProviderStatusCommand = ProviderStatusCommand;
368
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../../src/cli/commands/providers/status.ts"],"names":[],"mappings":"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"}
package/dist/cli/index.js CHANGED
@@ -58,7 +58,7 @@ const transferCommands = __importStar(require("./commands/transfer/index.js"));
58
58
  const patternsCommands = __importStar(require("./commands/patterns/index.js"));
59
59
  const improveCommands = __importStar(require("./commands/improve/index.js"));
60
60
  const skillsCommands = __importStar(require("./commands/skills/index.js"));
61
- const providersCommands = __importStar(require("./commands/providers"));
61
+ const providers_1 = require("./commands/providers");
62
62
  const init_1 = require("./commands/init");
63
63
  const quantization_1 = require("./commands/quantization");
64
64
  const constitution_1 = require("./commands/constitution");
@@ -1270,67 +1270,8 @@ improveCommand
1270
1270
  process.exit(1);
1271
1271
  }
1272
1272
  });
1273
- /**
1274
- * Providers commands
1275
- */
1276
- const providersCommand = program
1277
- .command('providers')
1278
- .description('Manage LLM providers');
1279
- providersCommand
1280
- .command('list')
1281
- .description('List all configured providers and their status')
1282
- .option('-f, --format <format>', 'Output format (json, table)', 'table')
1283
- .option('-v, --verbose', 'Show detailed information')
1284
- .action(async (options) => {
1285
- try {
1286
- await providersCommands.providersList(options);
1287
- }
1288
- catch (error) {
1289
- console.error(chalk_1.default.red('❌ Providers list failed:'), error);
1290
- process.exit(1);
1291
- }
1292
- });
1293
- providersCommand
1294
- .command('status')
1295
- .description('Show current provider status and health')
1296
- .option('-f, --format <format>', 'Output format (json, table)', 'table')
1297
- .option('-v, --verbose', 'Show usage statistics')
1298
- .action(async (options) => {
1299
- try {
1300
- await providersCommands.providersStatus(options);
1301
- }
1302
- catch (error) {
1303
- console.error(chalk_1.default.red('❌ Providers status failed:'), error);
1304
- process.exit(1);
1305
- }
1306
- });
1307
- providersCommand
1308
- .command('switch')
1309
- .description('Switch the default provider')
1310
- .argument('<provider>', 'Provider name (ollama, claude, openrouter, ruvllm)')
1311
- .action(async (provider, options) => {
1312
- try {
1313
- await providersCommands.providersSwitch(provider, options);
1314
- }
1315
- catch (error) {
1316
- console.error(chalk_1.default.red('❌ Providers switch failed:'), error);
1317
- process.exit(1);
1318
- }
1319
- });
1320
- providersCommand
1321
- .command('test')
1322
- .description('Test a specific provider\'s connectivity')
1323
- .argument('[provider]', 'Provider name to test')
1324
- .option('-v, --verbose', 'Show detailed error information')
1325
- .action(async (provider, options) => {
1326
- try {
1327
- await providersCommands.providersTest(provider, { ...options, provider });
1328
- }
1329
- catch (error) {
1330
- console.error(chalk_1.default.red('❌ Provider test failed:'), error);
1331
- process.exit(1);
1332
- }
1333
- });
1273
+ // Providers command - uses createProvidersCommand() pattern
1274
+ // See: program.addCommand(createProvidersCommand()) below
1334
1275
  /**
1335
1276
  * Telemetry commands
1336
1277
  */
@@ -1403,6 +1344,11 @@ program.addCommand((0, constitution_1.createConstitutionCommand)());
1403
1344
  * RuVector Self-Learning commands (Phase 0.5)
1404
1345
  */
1405
1346
  program.addCommand((0, ruvector_1.createRuVectorCommand)());
1347
+ /**
1348
+ * LLM Provider Management commands (Phase 3-4)
1349
+ * Health monitoring, quota tracking, and provider switching
1350
+ */
1351
+ program.addCommand((0, providers_1.createProvidersCommand)());
1406
1352
  /**
1407
1353
  * Knowledge Graph / Code Intelligence commands
1408
1354
  * Natural language code search, indexing, and visualization