claude-flow 2.7.0-alpha.6 → 2.7.0-alpha.8

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 (73) hide show
  1. package/README.md +2 -32
  2. package/bin/claude-flow +8 -8
  3. package/dist/src/cli/help-formatter.js +5 -0
  4. package/dist/src/cli/simple-commands/config.js +137 -119
  5. package/dist/src/cli/simple-commands/config.js.map +1 -1
  6. package/dist/src/cli/simple-commands/memory.js +22 -15
  7. package/dist/src/cli/simple-commands/memory.js.map +1 -1
  8. package/dist/src/cli/simple-commands/performance-metrics.js +231 -1
  9. package/dist/src/cli/simple-commands/performance-metrics.js.map +1 -1
  10. package/dist/src/cli/validation-helper.js.map +1 -1
  11. package/dist/src/reasoningbank/reasoningbank-adapter.js.map +1 -1
  12. package/dist/src/utils/key-redactor.js.map +1 -1
  13. package/dist/src/utils/metrics-reader.js +37 -39
  14. package/dist/src/utils/metrics-reader.js.map +1 -1
  15. package/docs/.claude-flow/metrics/agent-metrics.json +1 -0
  16. package/docs/.claude-flow/metrics/performance.json +9 -0
  17. package/docs/.claude-flow/metrics/task-metrics.json +10 -0
  18. package/docs/CLI-MEMORY-COMMANDS-WORKING.md +150 -0
  19. package/docs/INDEX.md +36 -5
  20. package/docs/PERFORMANCE-JSON-IMPROVEMENTS.md +277 -0
  21. package/docs/PERFORMANCE-METRICS-GUIDE.md +259 -0
  22. package/docs/integrations/README.md +61 -0
  23. package/docs/{AGENTIC_FLOW_SECURITY_TEST_REPORT.md → integrations/agentic-flow/AGENTIC_FLOW_SECURITY_TEST_REPORT.md} +7 -7
  24. package/docs/integrations/reasoningbank/MIGRATION-v1.5.13.md +189 -0
  25. package/docs/{REASONINGBANK-STATUS.md → integrations/reasoningbank/REASONINGBANK-STATUS.md} +60 -33
  26. package/docs/reports/README.md +49 -0
  27. package/docs/reports/REASONINGBANK_STATUS_UPDATE_v2_7_0_alpha_7.md +366 -0
  28. package/docs/reports/validation/DOCKER-VALIDATION-REPORT-v2.7.0-alpha.7.md +361 -0
  29. package/docs/reports/validation/DOCKER_SQL_FALLBACK_VALIDATION.md +398 -0
  30. package/docs/{MEMORY_REDACTION_TEST_REPORT.md → reports/validation/MEMORY_REDACTION_TEST_REPORT.md} +7 -7
  31. package/docs/reports/validation/SQL_FALLBACK_VALIDATION_REPORT.md +405 -0
  32. package/docs/reports/validation/VALIDATION-SUMMARY.md +192 -0
  33. package/docs/setup/MCP-SETUP-GUIDE.md +154 -0
  34. package/docs/technical/README.md +36 -0
  35. package/docs/technical/fixes/WASM-ESM-FIX-SUMMARY.md +114 -0
  36. package/package.json +6 -6
  37. package/src/cli/simple-commands/memory.js +27 -17
  38. package/src/cli/simple-commands/performance-metrics.js +268 -2
  39. package/src/reasoningbank/reasoningbank-adapter.js +184 -131
  40. /package/docs/{AGENT-BOOSTER-INTEGRATION.md → integrations/agent-booster/AGENT-BOOSTER-INTEGRATION.md} +0 -0
  41. /package/docs/{AGENTIC-FLOW-INTEGRATION-GUIDE.md → integrations/agentic-flow/AGENTIC-FLOW-INTEGRATION-GUIDE.md} +0 -0
  42. /package/docs/{AGENTIC_FLOW_EXECUTION_FIX_REPORT.md → integrations/agentic-flow/AGENTIC_FLOW_EXECUTION_FIX_REPORT.md} +0 -0
  43. /package/docs/{AGENTIC_FLOW_INTEGRATION_STATUS.md → integrations/agentic-flow/AGENTIC_FLOW_INTEGRATION_STATUS.md} +0 -0
  44. /package/docs/{AGENTIC_FLOW_MVP_COMPLETE.md → integrations/agentic-flow/AGENTIC_FLOW_MVP_COMPLETE.md} +0 -0
  45. /package/docs/{epic-sdk-integration.md → integrations/epic-sdk/epic-sdk-integration.md} +0 -0
  46. /package/docs/{REASONING-AGENTS.md → integrations/reasoningbank/REASONING-AGENTS.md} +0 -0
  47. /package/docs/{REASONINGBANK-AGENT-CREATION-GUIDE.md → integrations/reasoningbank/REASONINGBANK-AGENT-CREATION-GUIDE.md} +0 -0
  48. /package/docs/{REASONINGBANK-ANALYSIS-COMPLETE.md → integrations/reasoningbank/REASONINGBANK-ANALYSIS-COMPLETE.md} +0 -0
  49. /package/docs/{REASONINGBANK-BENCHMARK-RESULTS.md → integrations/reasoningbank/REASONINGBANK-BENCHMARK-RESULTS.md} +0 -0
  50. /package/docs/{REASONINGBANK-BENCHMARK.md → integrations/reasoningbank/REASONINGBANK-BENCHMARK.md} +0 -0
  51. /package/docs/{REASONINGBANK-CLI-INTEGRATION.md → integrations/reasoningbank/REASONINGBANK-CLI-INTEGRATION.md} +0 -0
  52. /package/docs/{REASONINGBANK-CORE-INTEGRATION.md → integrations/reasoningbank/REASONINGBANK-CORE-INTEGRATION.md} +0 -0
  53. /package/docs/{REASONINGBANK-COST-OPTIMIZATION.md → integrations/reasoningbank/REASONINGBANK-COST-OPTIMIZATION.md} +0 -0
  54. /package/docs/{REASONINGBANK-DEMO.md → integrations/reasoningbank/REASONINGBANK-DEMO.md} +0 -0
  55. /package/docs/{REASONINGBANK-INTEGRATION-COMPLETE.md → integrations/reasoningbank/REASONINGBANK-INTEGRATION-COMPLETE.md} +0 -0
  56. /package/docs/{REASONINGBANK-INTEGRATION-STATUS.md → integrations/reasoningbank/REASONINGBANK-INTEGRATION-STATUS.md} +0 -0
  57. /package/docs/{REASONINGBANK-VALIDATION.md → integrations/reasoningbank/REASONINGBANK-VALIDATION.md} +0 -0
  58. /package/docs/{REASONINGBANK_ARCHITECTURE.md → integrations/reasoningbank/REASONINGBANK_ARCHITECTURE.md} +0 -0
  59. /package/docs/{REASONINGBANK_INTEGRATION_COMPLETE.md → integrations/reasoningbank/REASONINGBANK_INTEGRATION_COMPLETE.md} +0 -0
  60. /package/docs/{REASONINGBANK_INTEGRATION_PLAN.md → integrations/reasoningbank/REASONINGBANK_INTEGRATION_PLAN.md} +0 -0
  61. /package/docs/{DEEP_REVIEW_COMPREHENSIVE_REPORT.md → reports/analysis/DEEP_REVIEW_COMPREHENSIVE_REPORT.md} +0 -0
  62. /package/docs/{REGRESSION-ANALYSIS-REPORT.md → reports/analysis/REGRESSION-ANALYSIS-REPORT.md} +0 -0
  63. /package/docs/{COMMIT_SUMMARY.md → reports/releases/COMMIT_SUMMARY.md} +0 -0
  64. /package/docs/{INTEGRATION_COMPLETE.md → reports/releases/INTEGRATION_COMPLETE.md} +0 -0
  65. /package/docs/{PRE_RELEASE_FIXES_REPORT.md → reports/releases/PRE_RELEASE_FIXES_REPORT.md} +0 -0
  66. /package/docs/{RELEASE_v2.6.0-alpha.2.md → reports/releases/RELEASE_v2.6.0-alpha.2.md} +0 -0
  67. /package/docs/{COMMAND-VERIFICATION-REPORT.md → reports/validation/COMMAND-VERIFICATION-REPORT.md} +0 -0
  68. /package/docs/{DOCKER-VALIDATION-REPORT.md → reports/validation/DOCKER-VALIDATION-REPORT.md} +0 -0
  69. /package/docs/{FINAL_PRE_PUBLISH_VALIDATION.md → reports/validation/FINAL_PRE_PUBLISH_VALIDATION.md} +0 -0
  70. /package/docs/{FINAL_VALIDATION_REPORT.md → reports/validation/FINAL_VALIDATION_REPORT.md} +0 -0
  71. /package/docs/{ENV-SETUP-GUIDE.md → setup/ENV-SETUP-GUIDE.md} +0 -0
  72. /package/docs/{HOOKS-V2-MODIFICATION.md → technical/fixes/HOOKS-V2-MODIFICATION.md} +0 -0
  73. /package/docs/{PERFORMANCE-SYSTEMS-STATUS.md → technical/performance/PERFORMANCE-SYSTEMS-STATUS.md} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/cli/simple-commands/performance-metrics.js"],"sourcesContent":["/**\n * Real Performance Metrics Collection System\n * Tracks actual system performance, agent activity, and resource usage\n */\n\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { performance } from 'perf_hooks';\n\n// Metrics storage path\nconst METRICS_DIR = path.join(process.cwd(), '.claude-flow', 'metrics');\nconst PERFORMANCE_FILE = path.join(METRICS_DIR, 'performance.json');\nconst AGENT_METRICS_FILE = path.join(METRICS_DIR, 'agent-metrics.json');\nconst TASK_METRICS_FILE = path.join(METRICS_DIR, 'task-metrics.json');\nconst SYSTEM_METRICS_FILE = path.join(METRICS_DIR, 'system-metrics.json');\n\n// In-memory metrics cache\nlet metricsCache = {\n tasks: [],\n agents: {},\n system: [],\n performance: {\n startTime: Date.now(),\n totalTasks: 0,\n successfulTasks: 0,\n failedTasks: 0,\n totalAgents: 0,\n activeAgents: 0,\n neuralEvents: 0\n }\n};\n\n// Store interval ID for cleanup\nlet systemMonitoringInterval = null;\n\n// Initialize metrics system\nexport async function initializeMetrics(startMonitoring = true) {\n try {\n await fs.mkdir(METRICS_DIR, { recursive: true });\n \n // Load existing metrics if available\n await loadMetricsFromDisk();\n \n // Start system monitoring only if requested\n if (startMonitoring) {\n startSystemMonitoring();\n }\n \n return true;\n } catch (err) {\n console.error('Failed to initialize metrics:', err);\n return false;\n }\n}\n\n// Load metrics from disk\nasync function loadMetricsFromDisk() {\n try {\n // Load performance metrics\n if (await fileExists(PERFORMANCE_FILE)) {\n const data = await fs.readFile(PERFORMANCE_FILE, 'utf8');\n const saved = JSON.parse(data);\n metricsCache.performance = { ...metricsCache.performance, ...saved };\n }\n \n // Load task metrics\n if (await fileExists(TASK_METRICS_FILE)) {\n const data = await fs.readFile(TASK_METRICS_FILE, 'utf8');\n metricsCache.tasks = JSON.parse(data);\n }\n \n // Load agent metrics\n if (await fileExists(AGENT_METRICS_FILE)) {\n const data = await fs.readFile(AGENT_METRICS_FILE, 'utf8');\n metricsCache.agents = JSON.parse(data);\n }\n } catch (err) {\n // Ignore errors, start fresh\n }\n}\n\n// Save metrics to disk\nasync function saveMetricsToDisk() {\n try {\n await fs.writeFile(PERFORMANCE_FILE, JSON.stringify(metricsCache.performance, null, 2));\n await fs.writeFile(TASK_METRICS_FILE, JSON.stringify(metricsCache.tasks, null, 2));\n await fs.writeFile(AGENT_METRICS_FILE, JSON.stringify(metricsCache.agents, null, 2));\n } catch (err) {\n // Ignore save errors\n }\n}\n\n// Track task execution\nexport async function trackTaskExecution(taskId, taskType, success, duration, metadata = {}) {\n const task = {\n id: taskId,\n type: taskType,\n success,\n duration,\n timestamp: Date.now(),\n metadata\n };\n \n metricsCache.tasks.push(task);\n metricsCache.performance.totalTasks++;\n \n if (success) {\n metricsCache.performance.successfulTasks++;\n } else {\n metricsCache.performance.failedTasks++;\n }\n \n // Keep only last 1000 tasks\n if (metricsCache.tasks.length > 1000) {\n metricsCache.tasks = metricsCache.tasks.slice(-1000);\n }\n \n await saveMetricsToDisk();\n}\n\n// Track agent activity\nexport async function trackAgentActivity(agentId, agentType, action, duration, success = true) {\n if (!metricsCache.agents[agentType]) {\n metricsCache.agents[agentType] = {\n total: 0,\n successful: 0,\n failed: 0,\n totalDuration: 0,\n actions: []\n };\n }\n \n const agent = metricsCache.agents[agentType];\n agent.total++;\n agent.totalDuration += duration;\n \n if (success) {\n agent.successful++;\n } else {\n agent.failed++;\n }\n \n agent.actions.push({\n id: agentId,\n action,\n duration,\n success,\n timestamp: Date.now()\n });\n \n // Keep only last 100 actions per agent type\n if (agent.actions.length > 100) {\n agent.actions = agent.actions.slice(-100);\n }\n \n metricsCache.performance.totalAgents = Object.keys(metricsCache.agents).length;\n \n await saveMetricsToDisk();\n}\n\n// Track neural events\nexport async function trackNeuralEvent(eventType, metadata = {}) {\n metricsCache.performance.neuralEvents++;\n \n await saveMetricsToDisk();\n}\n\n// Get performance report data\nexport async function getPerformanceReport(timeframe = '24h') {\n const now = Date.now();\n const timeframeMs = parseTimeframe(timeframe);\n const cutoff = now - timeframeMs;\n \n // Filter tasks within timeframe\n const recentTasks = metricsCache.tasks.filter(task => task.timestamp >= cutoff);\n \n // Calculate metrics\n const totalTasks = recentTasks.length;\n const successfulTasks = recentTasks.filter(t => t.success).length;\n const successRate = totalTasks > 0 ? (successfulTasks / totalTasks) * 100 : 0;\n const avgDuration = totalTasks > 0 \n ? recentTasks.reduce((sum, t) => sum + t.duration, 0) / totalTasks \n : 0;\n \n // Agent metrics\n const agentMetrics = {};\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n const recentActions = data.actions.filter(a => a.timestamp >= cutoff);\n if (recentActions.length > 0) {\n const successCount = recentActions.filter(a => a.success).length;\n const avgDur = recentActions.reduce((sum, a) => sum + a.duration, 0) / recentActions.length;\n \n agentMetrics[type] = {\n total: recentActions.length,\n successRate: (successCount / recentActions.length) * 100,\n avgDuration: avgDur\n };\n }\n });\n \n // System metrics\n const systemMetrics = await getSystemMetrics();\n \n // Calculate trends (compare to previous period)\n const prevCutoff = cutoff - timeframeMs;\n const prevTasks = metricsCache.tasks.filter(t => t.timestamp >= prevCutoff && t.timestamp < cutoff);\n const prevSuccessRate = prevTasks.length > 0 \n ? (prevTasks.filter(t => t.success).length / prevTasks.length) * 100 \n : 0;\n const prevAvgDuration = prevTasks.length > 0\n ? prevTasks.reduce((sum, t) => sum + t.duration, 0) / prevTasks.length\n : 0;\n \n const trends = {\n successRateChange: successRate - prevSuccessRate,\n durationChange: avgDuration - prevAvgDuration,\n taskVolumeChange: totalTasks - prevTasks.length\n };\n \n return {\n timeframe,\n summary: {\n totalTasks,\n successRate,\n avgDuration: avgDuration / 1000, // Convert to seconds\n agentsSpawned: Object.values(agentMetrics).reduce((sum, m) => sum + m.total, 0),\n memoryEfficiency: systemMetrics.memoryEfficiency,\n neuralEvents: metricsCache.performance.neuralEvents\n },\n agentMetrics,\n systemMetrics,\n trends,\n tasks: recentTasks.slice(-20) // Last 20 tasks\n };\n}\n\n// Get bottleneck analysis data\nexport async function getBottleneckAnalysis(scope = 'system', target = 'all') {\n const bottlenecks = [];\n const recommendations = [];\n \n // Analyze task performance\n if (scope === 'system' || scope === 'task') {\n const slowTasks = metricsCache.tasks\n .filter(t => t.duration > 10000) // Tasks taking more than 10s\n .sort((a, b) => b.duration - a.duration)\n .slice(0, 5);\n \n if (slowTasks.length > 0) {\n bottlenecks.push({\n severity: 'warning',\n component: 'Task execution',\n metric: `${slowTasks.length} slow tasks (>10s)`,\n details: slowTasks.map(t => ({\n id: t.id,\n type: t.type,\n duration: t.duration / 1000\n }))\n });\n recommendations.push('Optimize slow task types or break them into smaller subtasks');\n }\n }\n \n // Analyze agent performance\n if (scope === 'system' || scope === 'agent') {\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n const successRate = data.total > 0 ? (data.successful / data.total) * 100 : 100;\n const avgDuration = data.total > 0 ? data.totalDuration / data.total : 0;\n \n if (successRate < 80) {\n bottlenecks.push({\n severity: 'critical',\n component: `${type} agents`,\n metric: `${successRate.toFixed(1)}% success rate`,\n target: type\n });\n recommendations.push(`Investigate ${type} agent failures and improve error handling`);\n }\n \n if (avgDuration > 15000) {\n bottlenecks.push({\n severity: 'warning',\n component: `${type} agents`,\n metric: `${(avgDuration / 1000).toFixed(1)}s avg duration`,\n target: type\n });\n recommendations.push(`Optimize ${type} agent performance or increase parallelization`);\n }\n });\n }\n \n // Analyze system resources\n if (scope === 'system' || scope === 'memory') {\n const systemMetrics = await getSystemMetrics();\n \n if (systemMetrics.memoryUsagePercent > 80) {\n bottlenecks.push({\n severity: 'critical',\n component: 'Memory usage',\n metric: `${systemMetrics.memoryUsagePercent}% utilization`\n });\n recommendations.push('Implement memory optimization or increase system resources');\n }\n \n if (systemMetrics.cpuLoad > 0.8) {\n bottlenecks.push({\n severity: 'warning',\n component: 'CPU usage',\n metric: `${(systemMetrics.cpuLoad * 100).toFixed(1)}% load`\n });\n recommendations.push('Consider horizontal scaling or CPU optimization');\n }\n }\n \n // Add positive indicators\n if (bottlenecks.length === 0) {\n bottlenecks.push({\n severity: 'good',\n component: 'Overall system',\n metric: 'No bottlenecks detected'\n });\n }\n \n return {\n scope,\n target,\n bottlenecks,\n recommendations,\n analysisDuration: performance.now(),\n confidenceScore: 0.85,\n issuesDetected: bottlenecks.filter(b => b.severity !== 'good').length\n };\n}\n\n// System monitoring\nfunction startSystemMonitoring() {\n // Clear any existing interval\n if (systemMonitoringInterval) {\n clearInterval(systemMonitoringInterval);\n }\n \n // Collect system metrics every 30 seconds\n systemMonitoringInterval = setInterval(async () => {\n const metrics = await getSystemMetrics();\n \n // Store system metrics\n if (!metricsCache.system) {\n metricsCache.system = [];\n }\n \n metricsCache.system.push({\n timestamp: Date.now(),\n ...metrics\n });\n \n // Keep only last 24 hours of system metrics\n const dayAgo = Date.now() - (24 * 60 * 60 * 1000);\n metricsCache.system = metricsCache.system.filter(m => m.timestamp > dayAgo);\n \n // Save to disk\n try {\n await fs.writeFile(SYSTEM_METRICS_FILE, JSON.stringify(metricsCache.system, null, 2));\n } catch (err) {\n // Ignore save errors\n }\n }, 30000);\n \n // Allow process to exit even with active interval\n systemMonitoringInterval.unref();\n}\n\n// Stop system monitoring\nexport function stopSystemMonitoring() {\n if (systemMonitoringInterval) {\n clearInterval(systemMonitoringInterval);\n systemMonitoringInterval = null;\n }\n}\n\n// Get current system metrics\nasync function getSystemMetrics() {\n const totalMem = os.totalmem();\n const freeMem = os.freemem();\n const usedMem = totalMem - freeMem;\n const memoryUsagePercent = (usedMem / totalMem) * 100;\n \n const cpuLoad = os.loadavg()[0] / os.cpus().length; // 1-minute load average\n \n return {\n memoryTotal: totalMem,\n memoryUsed: usedMem,\n memoryFree: freeMem,\n memoryUsagePercent,\n memoryEfficiency: 100 - memoryUsagePercent,\n cpuCount: os.cpus().length,\n cpuLoad,\n platform: os.platform(),\n uptime: os.uptime()\n };\n}\n\n// Parse timeframe string to milliseconds\nfunction parseTimeframe(timeframe) {\n const units = {\n 'h': 60 * 60 * 1000,\n 'd': 24 * 60 * 60 * 1000\n };\n \n const match = timeframe.match(/^(\\d+)([hd])$/);\n if (match) {\n const value = parseInt(match[1]);\n const unit = match[2];\n return value * units[unit];\n }\n \n // Default to 24 hours\n return 24 * 60 * 60 * 1000;\n}\n\n// Check if file exists\nasync function fileExists(filepath) {\n try {\n await fs.access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\n// Cleanup function for graceful shutdown\nexport function cleanup() {\n stopSystemMonitoring();\n}\n\n// Export metrics for reporting\nexport async function exportMetrics(format = 'json') {\n const timestamp = Date.now();\n const reportsDir = path.join(process.cwd(), 'analysis-reports');\n \n await fs.mkdir(reportsDir, { recursive: true });\n \n if (format === 'json') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.json`);\n const data = {\n timestamp: new Date().toISOString(),\n performance: metricsCache.performance,\n tasks: metricsCache.tasks.slice(-100), // Last 100 tasks\n agents: metricsCache.agents,\n system: metricsCache.system.slice(-50) // Last 50 system snapshots\n };\n \n await fs.writeFile(reportPath, JSON.stringify(data, null, 2));\n return reportPath;\n }\n \n if (format === 'csv') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.csv`);\n let csv = 'Timestamp,Type,Metric,Value\\n';\n \n // Add performance metrics\n Object.entries(metricsCache.performance).forEach(([key, value]) => {\n csv += `${new Date().toISOString()},performance,${key},${value}\\n`;\n });\n \n // Add agent metrics\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n csv += `${new Date().toISOString()},agent,${type}_total,${data.total}\\n`;\n csv += `${new Date().toISOString()},agent,${type}_success_rate,${data.total > 0 ? (data.successful / data.total) * 100 : 0}\\n`;\n csv += `${new Date().toISOString()},agent,${type}_avg_duration,${data.total > 0 ? data.totalDuration / data.total : 0}\\n`;\n });\n \n await fs.writeFile(reportPath, csv);\n return reportPath;\n }\n \n if (format === 'html') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.html`);\n const report = await getPerformanceReport('24h');\n \n const html = generateHTMLReport(report);\n await fs.writeFile(reportPath, html);\n return reportPath;\n }\n \n throw new Error(`Unsupported format: ${format}`);\n}\n\n// Generate HTML report\nfunction generateHTMLReport(report) {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Claude Flow Performance Report - ${new Date().toISOString()}</title>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }\n .container { max-width: 1200px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }\n h1, h2 { color: #333; }\n .metric { display: inline-block; margin: 10px 20px 10px 0; }\n .metric-label { color: #666; font-size: 14px; }\n .metric-value { font-size: 24px; font-weight: bold; color: #2196F3; }\n .trend { font-size: 14px; margin-left: 10px; }\n .trend.positive { color: #4CAF50; }\n .trend.negative { color: #F44336; }\n table { width: 100%; border-collapse: collapse; margin: 20px 0; }\n th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }\n th { background: #f5f5f5; font-weight: bold; }\n .chart { margin: 20px 0; height: 300px; background: #fafafa; border: 1px solid #ddd; border-radius: 4px; display: flex; align-items: center; justify-content: center; color: #999; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <h1>Claude Flow Performance Report</h1>\n <p>Generated: ${new Date().toISOString()} | Timeframe: ${report.timeframe}</p>\n \n <h2>Summary Metrics</h2>\n <div class=\"metrics\">\n <div class=\"metric\">\n <div class=\"metric-label\">Total Tasks</div>\n <div class=\"metric-value\">${report.summary.totalTasks}</div>\n ${report.trends.taskVolumeChange !== 0 ? `<span class=\"trend ${report.trends.taskVolumeChange > 0 ? 'positive' : 'negative'}\">${report.trends.taskVolumeChange > 0 ? '+' : ''}${report.trends.taskVolumeChange}</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Success Rate</div>\n <div class=\"metric-value\">${report.summary.successRate.toFixed(1)}%</div>\n ${report.trends.successRateChange !== 0 ? `<span class=\"trend ${report.trends.successRateChange > 0 ? 'positive' : 'negative'}\">${report.trends.successRateChange > 0 ? '+' : ''}${report.trends.successRateChange.toFixed(1)}%</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Avg Duration</div>\n <div class=\"metric-value\">${report.summary.avgDuration.toFixed(1)}s</div>\n ${report.trends.durationChange !== 0 ? `<span class=\"trend ${report.trends.durationChange < 0 ? 'positive' : 'negative'}\">${report.trends.durationChange > 0 ? '+' : ''}${(report.trends.durationChange / 1000).toFixed(1)}s</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Memory Efficiency</div>\n <div class=\"metric-value\">${report.summary.memoryEfficiency.toFixed(0)}%</div>\n </div>\n </div>\n \n <h2>Agent Performance</h2>\n <table>\n <thead>\n <tr>\n <th>Agent Type</th>\n <th>Total Actions</th>\n <th>Success Rate</th>\n <th>Avg Duration</th>\n </tr>\n </thead>\n <tbody>\n ${Object.entries(report.agentMetrics).map(([type, metrics]) => `\n <tr>\n <td>${type}</td>\n <td>${metrics.total}</td>\n <td>${metrics.successRate.toFixed(1)}%</td>\n <td>${(metrics.avgDuration / 1000).toFixed(1)}s</td>\n </tr>\n `).join('')}\n </tbody>\n </table>\n \n <h2>Performance Trends</h2>\n <div class=\"chart\">\n <p>Interactive charts would be displayed here</p>\n </div>\n \n <h2>Recent Tasks</h2>\n <table>\n <thead>\n <tr>\n <th>Task ID</th>\n <th>Type</th>\n <th>Status</th>\n <th>Duration</th>\n <th>Timestamp</th>\n </tr>\n </thead>\n <tbody>\n ${report.tasks.slice(-10).reverse().map(task => `\n <tr>\n <td>${task.id}</td>\n <td>${task.type}</td>\n <td>${task.success ? '✅ Success' : '❌ Failed'}</td>\n <td>${(task.duration / 1000).toFixed(2)}s</td>\n <td>${new Date(task.timestamp).toLocaleString()}</td>\n </tr>\n `).join('')}\n </tbody>\n </table>\n </div>\n</body>\n</html>`;\n}"],"names":["promises","fs","path","os","performance","METRICS_DIR","join","process","cwd","PERFORMANCE_FILE","AGENT_METRICS_FILE","TASK_METRICS_FILE","SYSTEM_METRICS_FILE","metricsCache","tasks","agents","system","startTime","Date","now","totalTasks","successfulTasks","failedTasks","totalAgents","activeAgents","neuralEvents","systemMonitoringInterval","initializeMetrics","startMonitoring","mkdir","recursive","loadMetricsFromDisk","startSystemMonitoring","err","console","error","fileExists","data","readFile","saved","JSON","parse","saveMetricsToDisk","writeFile","stringify","trackTaskExecution","taskId","taskType","success","duration","metadata","task","id","type","timestamp","push","length","slice","trackAgentActivity","agentId","agentType","action","total","successful","failed","totalDuration","actions","agent","Object","keys","trackNeuralEvent","eventType","getPerformanceReport","timeframe","timeframeMs","parseTimeframe","cutoff","recentTasks","filter","t","successRate","avgDuration","reduce","sum","agentMetrics","entries","forEach","recentActions","a","successCount","avgDur","systemMetrics","getSystemMetrics","prevCutoff","prevTasks","prevSuccessRate","prevAvgDuration","trends","successRateChange","durationChange","taskVolumeChange","summary","agentsSpawned","values","m","memoryEfficiency","getBottleneckAnalysis","scope","target","bottlenecks","recommendations","slowTasks","sort","b","severity","component","metric","details","map","toFixed","memoryUsagePercent","cpuLoad","analysisDuration","confidenceScore","issuesDetected","clearInterval","setInterval","metrics","dayAgo","unref","stopSystemMonitoring","totalMem","totalmem","freeMem","freemem","usedMem","loadavg","cpus","memoryTotal","memoryUsed","memoryFree","cpuCount","platform","uptime","units","match","value","parseInt","unit","filepath","access","cleanup","exportMetrics","format","reportsDir","reportPath","toISOString","csv","key","report","html","generateHTMLReport","Error","reverse","toLocaleString"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../../src/cli/simple-commands/performance-metrics.js"],"sourcesContent":["/**\n * Real Performance Metrics Collection System\n * Tracks actual system performance, agent activity, and resource usage\n */\n\nimport { promises as fs } from 'fs';\nimport path from 'path';\nimport os from 'os';\nimport { performance } from 'perf_hooks';\n\n// Metrics storage path\nconst METRICS_DIR = path.join(process.cwd(), '.claude-flow', 'metrics');\nconst PERFORMANCE_FILE = path.join(METRICS_DIR, 'performance.json');\nconst AGENT_METRICS_FILE = path.join(METRICS_DIR, 'agent-metrics.json');\nconst TASK_METRICS_FILE = path.join(METRICS_DIR, 'task-metrics.json');\nconst SYSTEM_METRICS_FILE = path.join(METRICS_DIR, 'system-metrics.json');\n\n// In-memory metrics cache\nlet metricsCache = {\n tasks: [],\n agents: {},\n system: [],\n performance: {\n // Session information\n startTime: Date.now(),\n sessionId: `session-${Date.now()}`,\n lastActivity: Date.now(),\n sessionDuration: 0,\n\n // General task metrics\n totalTasks: 0,\n successfulTasks: 0,\n failedTasks: 0,\n totalAgents: 0,\n activeAgents: 0,\n neuralEvents: 0,\n\n // Memory mode tracking\n memoryMode: {\n reasoningbankOperations: 0,\n basicOperations: 0,\n autoModeSelections: 0,\n modeOverrides: 0,\n currentMode: 'auto'\n },\n\n // Operation type breakdown\n operations: {\n store: { count: 0, totalDuration: 0, errors: 0 },\n retrieve: { count: 0, totalDuration: 0, errors: 0 },\n query: { count: 0, totalDuration: 0, errors: 0 },\n list: { count: 0, totalDuration: 0, errors: 0 },\n delete: { count: 0, totalDuration: 0, errors: 0 },\n search: { count: 0, totalDuration: 0, errors: 0 },\n init: { count: 0, totalDuration: 0, errors: 0 }\n },\n\n // Performance statistics\n performance: {\n avgOperationDuration: 0,\n minOperationDuration: null,\n maxOperationDuration: null,\n slowOperations: 0, // Count of operations > 5s\n fastOperations: 0, // Count of operations < 100ms\n totalOperationTime: 0\n },\n\n // Memory storage statistics\n storage: {\n totalEntries: 0,\n reasoningbankEntries: 0,\n basicEntries: 0,\n databaseSize: 0,\n lastBackup: null,\n growthRate: 0\n },\n\n // Error tracking\n errors: {\n total: 0,\n byType: {},\n byOperation: {},\n recent: []\n },\n\n // ReasoningBank specific metrics\n reasoningbank: {\n semanticSearches: 0,\n sqlFallbacks: 0,\n embeddingGenerated: 0,\n consolidations: 0,\n avgQueryTime: 0,\n cacheHits: 0,\n cacheMisses: 0\n }\n }\n};\n\n// Store interval ID for cleanup\nlet systemMonitoringInterval = null;\n\n// Initialize metrics system\nexport async function initializeMetrics(startMonitoring = true) {\n try {\n await fs.mkdir(METRICS_DIR, { recursive: true });\n \n // Load existing metrics if available\n await loadMetricsFromDisk();\n \n // Start system monitoring only if requested\n if (startMonitoring) {\n startSystemMonitoring();\n }\n \n return true;\n } catch (err) {\n console.error('Failed to initialize metrics:', err);\n return false;\n }\n}\n\n// Load metrics from disk\nasync function loadMetricsFromDisk() {\n try {\n // Load performance metrics\n if (await fileExists(PERFORMANCE_FILE)) {\n const data = await fs.readFile(PERFORMANCE_FILE, 'utf8');\n const saved = JSON.parse(data);\n metricsCache.performance = { ...metricsCache.performance, ...saved };\n }\n \n // Load task metrics\n if (await fileExists(TASK_METRICS_FILE)) {\n const data = await fs.readFile(TASK_METRICS_FILE, 'utf8');\n metricsCache.tasks = JSON.parse(data);\n }\n \n // Load agent metrics\n if (await fileExists(AGENT_METRICS_FILE)) {\n const data = await fs.readFile(AGENT_METRICS_FILE, 'utf8');\n metricsCache.agents = JSON.parse(data);\n }\n } catch (err) {\n // Ignore errors, start fresh\n }\n}\n\n// Save metrics to disk\nasync function saveMetricsToDisk() {\n try {\n await fs.writeFile(PERFORMANCE_FILE, JSON.stringify(metricsCache.performance, null, 2));\n await fs.writeFile(TASK_METRICS_FILE, JSON.stringify(metricsCache.tasks, null, 2));\n await fs.writeFile(AGENT_METRICS_FILE, JSON.stringify(metricsCache.agents, null, 2));\n } catch (err) {\n // Ignore save errors\n }\n}\n\n// Track task execution\nexport async function trackTaskExecution(taskId, taskType, success, duration, metadata = {}) {\n const task = {\n id: taskId,\n type: taskType,\n success,\n duration,\n timestamp: Date.now(),\n metadata\n };\n \n metricsCache.tasks.push(task);\n metricsCache.performance.totalTasks++;\n \n if (success) {\n metricsCache.performance.successfulTasks++;\n } else {\n metricsCache.performance.failedTasks++;\n }\n \n // Keep only last 1000 tasks\n if (metricsCache.tasks.length > 1000) {\n metricsCache.tasks = metricsCache.tasks.slice(-1000);\n }\n \n await saveMetricsToDisk();\n}\n\n// Track agent activity\nexport async function trackAgentActivity(agentId, agentType, action, duration, success = true) {\n if (!metricsCache.agents[agentType]) {\n metricsCache.agents[agentType] = {\n total: 0,\n successful: 0,\n failed: 0,\n totalDuration: 0,\n actions: []\n };\n }\n \n const agent = metricsCache.agents[agentType];\n agent.total++;\n agent.totalDuration += duration;\n \n if (success) {\n agent.successful++;\n } else {\n agent.failed++;\n }\n \n agent.actions.push({\n id: agentId,\n action,\n duration,\n success,\n timestamp: Date.now()\n });\n \n // Keep only last 100 actions per agent type\n if (agent.actions.length > 100) {\n agent.actions = agent.actions.slice(-100);\n }\n \n metricsCache.performance.totalAgents = Object.keys(metricsCache.agents).length;\n \n await saveMetricsToDisk();\n}\n\n// Track neural events\nexport async function trackNeuralEvent(eventType, metadata = {}) {\n metricsCache.performance.neuralEvents++;\n\n await saveMetricsToDisk();\n}\n\n// Track memory operations\nexport async function trackMemoryOperation(operationType, mode, duration, success = true, errorType = null) {\n // Update session activity\n metricsCache.performance.lastActivity = Date.now();\n metricsCache.performance.sessionDuration = Date.now() - metricsCache.performance.startTime;\n\n // Track mode usage\n if (mode === 'reasoningbank') {\n metricsCache.performance.memoryMode.reasoningbankOperations++;\n } else if (mode === 'basic') {\n metricsCache.performance.memoryMode.basicOperations++;\n }\n\n // Track operation type\n if (metricsCache.performance.operations[operationType]) {\n const op = metricsCache.performance.operations[operationType];\n op.count++;\n op.totalDuration += duration;\n\n if (!success) {\n op.errors++;\n }\n }\n\n // Update performance statistics\n const perf = metricsCache.performance.performance;\n perf.totalOperationTime += duration;\n\n const totalOps = Object.values(metricsCache.performance.operations)\n .reduce((sum, op) => sum + op.count, 0);\n\n if (totalOps > 0) {\n perf.avgOperationDuration = perf.totalOperationTime / totalOps;\n }\n\n if (perf.minOperationDuration === null || duration < perf.minOperationDuration) {\n perf.minOperationDuration = duration;\n }\n\n if (perf.maxOperationDuration === null || duration > perf.maxOperationDuration) {\n perf.maxOperationDuration = duration;\n }\n\n if (duration > 5000) {\n perf.slowOperations++;\n } else if (duration < 100) {\n perf.fastOperations++;\n }\n\n // Track errors\n if (!success && errorType) {\n metricsCache.performance.errors.total++;\n\n // Track by type\n if (!metricsCache.performance.errors.byType[errorType]) {\n metricsCache.performance.errors.byType[errorType] = 0;\n }\n metricsCache.performance.errors.byType[errorType]++;\n\n // Track by operation\n if (!metricsCache.performance.errors.byOperation[operationType]) {\n metricsCache.performance.errors.byOperation[operationType] = 0;\n }\n metricsCache.performance.errors.byOperation[operationType]++;\n\n // Add to recent errors (keep last 20)\n metricsCache.performance.errors.recent.push({\n operation: operationType,\n type: errorType,\n timestamp: Date.now(),\n mode\n });\n\n if (metricsCache.performance.errors.recent.length > 20) {\n metricsCache.performance.errors.recent = metricsCache.performance.errors.recent.slice(-20);\n }\n }\n\n await saveMetricsToDisk();\n}\n\n// Track mode selection (auto, override)\nexport async function trackModeSelection(selectedMode, wasAutomatic = true) {\n metricsCache.performance.memoryMode.currentMode = selectedMode;\n\n if (wasAutomatic) {\n metricsCache.performance.memoryMode.autoModeSelections++;\n } else {\n metricsCache.performance.memoryMode.modeOverrides++;\n }\n\n await saveMetricsToDisk();\n}\n\n// Track ReasoningBank specific operations\nexport async function trackReasoningBankOperation(operationType, duration, metadata = {}) {\n const rb = metricsCache.performance.reasoningbank;\n\n switch (operationType) {\n case 'semantic_search':\n rb.semanticSearches++;\n break;\n case 'sql_fallback':\n rb.sqlFallbacks++;\n break;\n case 'embedding_generated':\n rb.embeddingGenerated++;\n break;\n case 'consolidation':\n rb.consolidations++;\n break;\n case 'cache_hit':\n rb.cacheHits++;\n break;\n case 'cache_miss':\n rb.cacheMisses++;\n break;\n }\n\n // Update average query time\n const totalQueries = rb.semanticSearches + rb.sqlFallbacks;\n if (totalQueries > 0) {\n rb.avgQueryTime = ((rb.avgQueryTime * (totalQueries - 1)) + duration) / totalQueries;\n }\n\n await saveMetricsToDisk();\n}\n\n// Update storage statistics\nexport async function updateStorageStats(totalEntries, reasoningbankEntries, basicEntries, databaseSize = 0) {\n const storage = metricsCache.performance.storage;\n\n const previousTotal = storage.totalEntries;\n storage.totalEntries = totalEntries;\n storage.reasoningbankEntries = reasoningbankEntries;\n storage.basicEntries = basicEntries;\n storage.databaseSize = databaseSize;\n\n // Calculate growth rate (entries per hour)\n if (previousTotal > 0) {\n const sessionHours = metricsCache.performance.sessionDuration / (1000 * 60 * 60);\n if (sessionHours > 0) {\n storage.growthRate = (totalEntries - previousTotal) / sessionHours;\n }\n }\n\n await saveMetricsToDisk();\n}\n\n// Get memory performance summary\nexport async function getMemoryPerformanceSummary() {\n const perf = metricsCache.performance;\n const totalOps = Object.values(perf.operations).reduce((sum, op) => sum + op.count, 0);\n const totalErrors = Object.values(perf.operations).reduce((sum, op) => sum + op.errors, 0);\n\n return {\n session: {\n sessionId: perf.sessionId,\n duration: perf.sessionDuration,\n startTime: new Date(perf.startTime).toISOString(),\n lastActivity: new Date(perf.lastActivity).toISOString()\n },\n mode: {\n current: perf.memoryMode.currentMode,\n reasoningbankUsage: perf.memoryMode.reasoningbankOperations,\n basicUsage: perf.memoryMode.basicOperations,\n autoSelections: perf.memoryMode.autoModeSelections,\n manualOverrides: perf.memoryMode.modeOverrides\n },\n operations: {\n total: totalOps,\n breakdown: perf.operations,\n errors: totalErrors,\n errorRate: totalOps > 0 ? (totalErrors / totalOps) * 100 : 0\n },\n performance: {\n avgDuration: perf.performance.avgOperationDuration,\n minDuration: perf.performance.minOperationDuration,\n maxDuration: perf.performance.maxOperationDuration,\n slowOps: perf.performance.slowOperations,\n fastOps: perf.performance.fastOperations\n },\n storage: perf.storage,\n reasoningbank: {\n ...perf.reasoningbank,\n fallbackRate: perf.reasoningbank.semanticSearches > 0\n ? (perf.reasoningbank.sqlFallbacks / perf.reasoningbank.semanticSearches) * 100\n : 0,\n cacheHitRate: (perf.reasoningbank.cacheHits + perf.reasoningbank.cacheMisses) > 0\n ? (perf.reasoningbank.cacheHits / (perf.reasoningbank.cacheHits + perf.reasoningbank.cacheMisses)) * 100\n : 0\n },\n errors: {\n total: perf.errors.total,\n byType: perf.errors.byType,\n byOperation: perf.errors.byOperation,\n recent: perf.errors.recent.slice(-5)\n }\n };\n}\n\n// Get performance report data\nexport async function getPerformanceReport(timeframe = '24h') {\n const now = Date.now();\n const timeframeMs = parseTimeframe(timeframe);\n const cutoff = now - timeframeMs;\n \n // Filter tasks within timeframe\n const recentTasks = metricsCache.tasks.filter(task => task.timestamp >= cutoff);\n \n // Calculate metrics\n const totalTasks = recentTasks.length;\n const successfulTasks = recentTasks.filter(t => t.success).length;\n const successRate = totalTasks > 0 ? (successfulTasks / totalTasks) * 100 : 0;\n const avgDuration = totalTasks > 0 \n ? recentTasks.reduce((sum, t) => sum + t.duration, 0) / totalTasks \n : 0;\n \n // Agent metrics\n const agentMetrics = {};\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n const recentActions = data.actions.filter(a => a.timestamp >= cutoff);\n if (recentActions.length > 0) {\n const successCount = recentActions.filter(a => a.success).length;\n const avgDur = recentActions.reduce((sum, a) => sum + a.duration, 0) / recentActions.length;\n \n agentMetrics[type] = {\n total: recentActions.length,\n successRate: (successCount / recentActions.length) * 100,\n avgDuration: avgDur\n };\n }\n });\n \n // System metrics\n const systemMetrics = await getSystemMetrics();\n \n // Calculate trends (compare to previous period)\n const prevCutoff = cutoff - timeframeMs;\n const prevTasks = metricsCache.tasks.filter(t => t.timestamp >= prevCutoff && t.timestamp < cutoff);\n const prevSuccessRate = prevTasks.length > 0 \n ? (prevTasks.filter(t => t.success).length / prevTasks.length) * 100 \n : 0;\n const prevAvgDuration = prevTasks.length > 0\n ? prevTasks.reduce((sum, t) => sum + t.duration, 0) / prevTasks.length\n : 0;\n \n const trends = {\n successRateChange: successRate - prevSuccessRate,\n durationChange: avgDuration - prevAvgDuration,\n taskVolumeChange: totalTasks - prevTasks.length\n };\n \n return {\n timeframe,\n summary: {\n totalTasks,\n successRate,\n avgDuration: avgDuration / 1000, // Convert to seconds\n agentsSpawned: Object.values(agentMetrics).reduce((sum, m) => sum + m.total, 0),\n memoryEfficiency: systemMetrics.memoryEfficiency,\n neuralEvents: metricsCache.performance.neuralEvents\n },\n agentMetrics,\n systemMetrics,\n trends,\n tasks: recentTasks.slice(-20) // Last 20 tasks\n };\n}\n\n// Get bottleneck analysis data\nexport async function getBottleneckAnalysis(scope = 'system', target = 'all') {\n const bottlenecks = [];\n const recommendations = [];\n \n // Analyze task performance\n if (scope === 'system' || scope === 'task') {\n const slowTasks = metricsCache.tasks\n .filter(t => t.duration > 10000) // Tasks taking more than 10s\n .sort((a, b) => b.duration - a.duration)\n .slice(0, 5);\n \n if (slowTasks.length > 0) {\n bottlenecks.push({\n severity: 'warning',\n component: 'Task execution',\n metric: `${slowTasks.length} slow tasks (>10s)`,\n details: slowTasks.map(t => ({\n id: t.id,\n type: t.type,\n duration: t.duration / 1000\n }))\n });\n recommendations.push('Optimize slow task types or break them into smaller subtasks');\n }\n }\n \n // Analyze agent performance\n if (scope === 'system' || scope === 'agent') {\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n const successRate = data.total > 0 ? (data.successful / data.total) * 100 : 100;\n const avgDuration = data.total > 0 ? data.totalDuration / data.total : 0;\n \n if (successRate < 80) {\n bottlenecks.push({\n severity: 'critical',\n component: `${type} agents`,\n metric: `${successRate.toFixed(1)}% success rate`,\n target: type\n });\n recommendations.push(`Investigate ${type} agent failures and improve error handling`);\n }\n \n if (avgDuration > 15000) {\n bottlenecks.push({\n severity: 'warning',\n component: `${type} agents`,\n metric: `${(avgDuration / 1000).toFixed(1)}s avg duration`,\n target: type\n });\n recommendations.push(`Optimize ${type} agent performance or increase parallelization`);\n }\n });\n }\n \n // Analyze system resources\n if (scope === 'system' || scope === 'memory') {\n const systemMetrics = await getSystemMetrics();\n \n if (systemMetrics.memoryUsagePercent > 80) {\n bottlenecks.push({\n severity: 'critical',\n component: 'Memory usage',\n metric: `${systemMetrics.memoryUsagePercent}% utilization`\n });\n recommendations.push('Implement memory optimization or increase system resources');\n }\n \n if (systemMetrics.cpuLoad > 0.8) {\n bottlenecks.push({\n severity: 'warning',\n component: 'CPU usage',\n metric: `${(systemMetrics.cpuLoad * 100).toFixed(1)}% load`\n });\n recommendations.push('Consider horizontal scaling or CPU optimization');\n }\n }\n \n // Add positive indicators\n if (bottlenecks.length === 0) {\n bottlenecks.push({\n severity: 'good',\n component: 'Overall system',\n metric: 'No bottlenecks detected'\n });\n }\n \n return {\n scope,\n target,\n bottlenecks,\n recommendations,\n analysisDuration: performance.now(),\n confidenceScore: 0.85,\n issuesDetected: bottlenecks.filter(b => b.severity !== 'good').length\n };\n}\n\n// System monitoring\nfunction startSystemMonitoring() {\n // Clear any existing interval\n if (systemMonitoringInterval) {\n clearInterval(systemMonitoringInterval);\n }\n \n // Collect system metrics every 30 seconds\n systemMonitoringInterval = setInterval(async () => {\n const metrics = await getSystemMetrics();\n \n // Store system metrics\n if (!metricsCache.system) {\n metricsCache.system = [];\n }\n \n metricsCache.system.push({\n timestamp: Date.now(),\n ...metrics\n });\n \n // Keep only last 24 hours of system metrics\n const dayAgo = Date.now() - (24 * 60 * 60 * 1000);\n metricsCache.system = metricsCache.system.filter(m => m.timestamp > dayAgo);\n \n // Save to disk\n try {\n await fs.writeFile(SYSTEM_METRICS_FILE, JSON.stringify(metricsCache.system, null, 2));\n } catch (err) {\n // Ignore save errors\n }\n }, 30000);\n \n // Allow process to exit even with active interval\n systemMonitoringInterval.unref();\n}\n\n// Stop system monitoring\nexport function stopSystemMonitoring() {\n if (systemMonitoringInterval) {\n clearInterval(systemMonitoringInterval);\n systemMonitoringInterval = null;\n }\n}\n\n// Get current system metrics\nasync function getSystemMetrics() {\n const totalMem = os.totalmem();\n const freeMem = os.freemem();\n const usedMem = totalMem - freeMem;\n const memoryUsagePercent = (usedMem / totalMem) * 100;\n \n const cpuLoad = os.loadavg()[0] / os.cpus().length; // 1-minute load average\n \n return {\n memoryTotal: totalMem,\n memoryUsed: usedMem,\n memoryFree: freeMem,\n memoryUsagePercent,\n memoryEfficiency: 100 - memoryUsagePercent,\n cpuCount: os.cpus().length,\n cpuLoad,\n platform: os.platform(),\n uptime: os.uptime()\n };\n}\n\n// Parse timeframe string to milliseconds\nfunction parseTimeframe(timeframe) {\n const units = {\n 'h': 60 * 60 * 1000,\n 'd': 24 * 60 * 60 * 1000\n };\n \n const match = timeframe.match(/^(\\d+)([hd])$/);\n if (match) {\n const value = parseInt(match[1]);\n const unit = match[2];\n return value * units[unit];\n }\n \n // Default to 24 hours\n return 24 * 60 * 60 * 1000;\n}\n\n// Check if file exists\nasync function fileExists(filepath) {\n try {\n await fs.access(filepath);\n return true;\n } catch {\n return false;\n }\n}\n\n// Cleanup function for graceful shutdown\nexport function cleanup() {\n stopSystemMonitoring();\n}\n\n// Export metrics for reporting\nexport async function exportMetrics(format = 'json') {\n const timestamp = Date.now();\n const reportsDir = path.join(process.cwd(), 'analysis-reports');\n \n await fs.mkdir(reportsDir, { recursive: true });\n \n if (format === 'json') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.json`);\n const data = {\n timestamp: new Date().toISOString(),\n performance: metricsCache.performance,\n tasks: metricsCache.tasks.slice(-100), // Last 100 tasks\n agents: metricsCache.agents,\n system: metricsCache.system.slice(-50) // Last 50 system snapshots\n };\n \n await fs.writeFile(reportPath, JSON.stringify(data, null, 2));\n return reportPath;\n }\n \n if (format === 'csv') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.csv`);\n let csv = 'Timestamp,Type,Metric,Value\\n';\n \n // Add performance metrics\n Object.entries(metricsCache.performance).forEach(([key, value]) => {\n csv += `${new Date().toISOString()},performance,${key},${value}\\n`;\n });\n \n // Add agent metrics\n Object.entries(metricsCache.agents).forEach(([type, data]) => {\n csv += `${new Date().toISOString()},agent,${type}_total,${data.total}\\n`;\n csv += `${new Date().toISOString()},agent,${type}_success_rate,${data.total > 0 ? (data.successful / data.total) * 100 : 0}\\n`;\n csv += `${new Date().toISOString()},agent,${type}_avg_duration,${data.total > 0 ? data.totalDuration / data.total : 0}\\n`;\n });\n \n await fs.writeFile(reportPath, csv);\n return reportPath;\n }\n \n if (format === 'html') {\n const reportPath = path.join(reportsDir, `performance-${timestamp}.html`);\n const report = await getPerformanceReport('24h');\n \n const html = generateHTMLReport(report);\n await fs.writeFile(reportPath, html);\n return reportPath;\n }\n \n throw new Error(`Unsupported format: ${format}`);\n}\n\n// Generate HTML report\nfunction generateHTMLReport(report) {\n return `<!DOCTYPE html>\n<html>\n<head>\n <title>Claude Flow Performance Report - ${new Date().toISOString()}</title>\n <style>\n body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }\n .container { max-width: 1200px; margin: 0 auto; background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); }\n h1, h2 { color: #333; }\n .metric { display: inline-block; margin: 10px 20px 10px 0; }\n .metric-label { color: #666; font-size: 14px; }\n .metric-value { font-size: 24px; font-weight: bold; color: #2196F3; }\n .trend { font-size: 14px; margin-left: 10px; }\n .trend.positive { color: #4CAF50; }\n .trend.negative { color: #F44336; }\n table { width: 100%; border-collapse: collapse; margin: 20px 0; }\n th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }\n th { background: #f5f5f5; font-weight: bold; }\n .chart { margin: 20px 0; height: 300px; background: #fafafa; border: 1px solid #ddd; border-radius: 4px; display: flex; align-items: center; justify-content: center; color: #999; }\n </style>\n</head>\n<body>\n <div class=\"container\">\n <h1>Claude Flow Performance Report</h1>\n <p>Generated: ${new Date().toISOString()} | Timeframe: ${report.timeframe}</p>\n \n <h2>Summary Metrics</h2>\n <div class=\"metrics\">\n <div class=\"metric\">\n <div class=\"metric-label\">Total Tasks</div>\n <div class=\"metric-value\">${report.summary.totalTasks}</div>\n ${report.trends.taskVolumeChange !== 0 ? `<span class=\"trend ${report.trends.taskVolumeChange > 0 ? 'positive' : 'negative'}\">${report.trends.taskVolumeChange > 0 ? '+' : ''}${report.trends.taskVolumeChange}</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Success Rate</div>\n <div class=\"metric-value\">${report.summary.successRate.toFixed(1)}%</div>\n ${report.trends.successRateChange !== 0 ? `<span class=\"trend ${report.trends.successRateChange > 0 ? 'positive' : 'negative'}\">${report.trends.successRateChange > 0 ? '+' : ''}${report.trends.successRateChange.toFixed(1)}%</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Avg Duration</div>\n <div class=\"metric-value\">${report.summary.avgDuration.toFixed(1)}s</div>\n ${report.trends.durationChange !== 0 ? `<span class=\"trend ${report.trends.durationChange < 0 ? 'positive' : 'negative'}\">${report.trends.durationChange > 0 ? '+' : ''}${(report.trends.durationChange / 1000).toFixed(1)}s</span>` : ''}\n </div>\n <div class=\"metric\">\n <div class=\"metric-label\">Memory Efficiency</div>\n <div class=\"metric-value\">${report.summary.memoryEfficiency.toFixed(0)}%</div>\n </div>\n </div>\n \n <h2>Agent Performance</h2>\n <table>\n <thead>\n <tr>\n <th>Agent Type</th>\n <th>Total Actions</th>\n <th>Success Rate</th>\n <th>Avg Duration</th>\n </tr>\n </thead>\n <tbody>\n ${Object.entries(report.agentMetrics).map(([type, metrics]) => `\n <tr>\n <td>${type}</td>\n <td>${metrics.total}</td>\n <td>${metrics.successRate.toFixed(1)}%</td>\n <td>${(metrics.avgDuration / 1000).toFixed(1)}s</td>\n </tr>\n `).join('')}\n </tbody>\n </table>\n \n <h2>Performance Trends</h2>\n <div class=\"chart\">\n <p>Interactive charts would be displayed here</p>\n </div>\n \n <h2>Recent Tasks</h2>\n <table>\n <thead>\n <tr>\n <th>Task ID</th>\n <th>Type</th>\n <th>Status</th>\n <th>Duration</th>\n <th>Timestamp</th>\n </tr>\n </thead>\n <tbody>\n ${report.tasks.slice(-10).reverse().map(task => `\n <tr>\n <td>${task.id}</td>\n <td>${task.type}</td>\n <td>${task.success ? '✅ Success' : '❌ Failed'}</td>\n <td>${(task.duration / 1000).toFixed(2)}s</td>\n <td>${new Date(task.timestamp).toLocaleString()}</td>\n </tr>\n `).join('')}\n </tbody>\n </table>\n </div>\n</body>\n</html>`;\n}"],"names":["promises","fs","path","os","performance","METRICS_DIR","join","process","cwd","PERFORMANCE_FILE","AGENT_METRICS_FILE","TASK_METRICS_FILE","SYSTEM_METRICS_FILE","metricsCache","tasks","agents","system","startTime","Date","now","sessionId","lastActivity","sessionDuration","totalTasks","successfulTasks","failedTasks","totalAgents","activeAgents","neuralEvents","memoryMode","reasoningbankOperations","basicOperations","autoModeSelections","modeOverrides","currentMode","operations","store","count","totalDuration","errors","retrieve","query","list","delete","search","init","avgOperationDuration","minOperationDuration","maxOperationDuration","slowOperations","fastOperations","totalOperationTime","storage","totalEntries","reasoningbankEntries","basicEntries","databaseSize","lastBackup","growthRate","total","byType","byOperation","recent","reasoningbank","semanticSearches","sqlFallbacks","embeddingGenerated","consolidations","avgQueryTime","cacheHits","cacheMisses","systemMonitoringInterval","initializeMetrics","startMonitoring","mkdir","recursive","loadMetricsFromDisk","startSystemMonitoring","err","console","error","fileExists","data","readFile","saved","JSON","parse","saveMetricsToDisk","writeFile","stringify","trackTaskExecution","taskId","taskType","success","duration","metadata","task","id","type","timestamp","push","length","slice","trackAgentActivity","agentId","agentType","action","successful","failed","actions","agent","Object","keys","trackNeuralEvent","eventType","trackMemoryOperation","operationType","mode","errorType","op","perf","totalOps","values","reduce","sum","operation","trackModeSelection","selectedMode","wasAutomatic","trackReasoningBankOperation","rb","totalQueries","updateStorageStats","previousTotal","sessionHours","getMemoryPerformanceSummary","totalErrors","session","toISOString","current","reasoningbankUsage","basicUsage","autoSelections","manualOverrides","breakdown","errorRate","avgDuration","minDuration","maxDuration","slowOps","fastOps","fallbackRate","cacheHitRate","getPerformanceReport","timeframe","timeframeMs","parseTimeframe","cutoff","recentTasks","filter","t","successRate","agentMetrics","entries","forEach","recentActions","a","successCount","avgDur","systemMetrics","getSystemMetrics","prevCutoff","prevTasks","prevSuccessRate","prevAvgDuration","trends","successRateChange","durationChange","taskVolumeChange","summary","agentsSpawned","m","memoryEfficiency","getBottleneckAnalysis","scope","target","bottlenecks","recommendations","slowTasks","sort","b","severity","component","metric","details","map","toFixed","memoryUsagePercent","cpuLoad","analysisDuration","confidenceScore","issuesDetected","clearInterval","setInterval","metrics","dayAgo","unref","stopSystemMonitoring","totalMem","totalmem","freeMem","freemem","usedMem","loadavg","cpus","memoryTotal","memoryUsed","memoryFree","cpuCount","platform","uptime","units","match","value","parseInt","unit","filepath","access","cleanup","exportMetrics","format","reportsDir","reportPath","csv","key","report","html","generateHTMLReport","Error","reverse","toLocaleString"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/cli/validation-helper.js"],"sourcesContent":["/**\n * CLI Parameter Validation Helper\n * Provides standardized error messages for invalid parameters\n */\n\nimport { HelpFormatter } from './help-formatter.js';\n\nexport class ValidationHelper {\n /**\n * Validate enum parameter\n */\n static validateEnum(value, paramName, validOptions, commandPath) {\n if (!validOptions.includes(value)) {\n console.error(\n HelpFormatter.formatValidationError(value, paramName, validOptions, commandPath),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate numeric parameter\n */\n static validateNumber(value, paramName, min, max, commandPath) {\n const num = parseInt(value, 10);\n\n if (isNaN(num)) {\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid number for ${paramName}.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (min !== undefined && num < min) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at least ${min}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (max !== undefined && num > max) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at most ${max}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n return num;\n }\n\n /**\n * Validate required parameter\n */\n static validateRequired(value, paramName, commandPath) {\n if (!value || (typeof value === 'string' && value.trim() === '')) {\n console.error(\n HelpFormatter.formatError(\n `Missing required parameter: ${paramName}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate file path exists\n */\n static async validateFilePath(path, paramName, commandPath) {\n try {\n const fs = await import('fs/promises');\n await fs.access(path);\n } catch (error) {\n console.error(\n HelpFormatter.formatError(\n `File not found for ${paramName}: ${path}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate boolean flag\n */\n static validateBoolean(value, paramName, commandPath) {\n const lowerValue = value.toLowerCase();\n if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') {\n return true;\n }\n if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') {\n return false;\n }\n\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid boolean for ${paramName}. Use: true, false, yes, no, 1, or 0.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n}\n"],"names":["HelpFormatter","ValidationHelper","validateEnum","value","paramName","validOptions","commandPath","includes","console","error","formatValidationError","process","exit","validateNumber","min","max","num","parseInt","isNaN","formatError","undefined","validateRequired","trim","validateFilePath","path","fs","access","validateBoolean","lowerValue","toLowerCase"],"mappings":"AAKA,SAASA,aAAa,QAAQ,sBAAsB;AAEpD,OAAO,MAAMC;IAIX,OAAOC,aAAaC,KAAK,EAAEC,SAAS,EAAEC,YAAY,EAAEC,WAAW,EAAE;QAC/D,IAAI,CAACD,aAAaE,QAAQ,CAACJ,QAAQ;YACjCK,QAAQC,KAAK,CACXT,cAAcU,qBAAqB,CAACP,OAAOC,WAAWC,cAAcC;YAEtEK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOC,eAAeV,KAAK,EAAEC,SAAS,EAAEU,GAAG,EAAEC,GAAG,EAAET,WAAW,EAAE;QAC7D,MAAMU,MAAMC,SAASd,OAAO;QAE5B,IAAIe,MAAMF,MAAM;YACdR,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,4BAA4B,EAAEC,UAAU,CAAC,CAAC,EACpDE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIE,QAAQM,aAAaJ,MAAMF,KAAK;YAClCN,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,kBAAkB,EAAEU,IAAI,OAAO,EAAEE,KAAK,EACnDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIG,QAAQK,aAAaJ,MAAMD,KAAK;YAClCP,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,iBAAiB,EAAEW,IAAI,OAAO,EAAEC,KAAK,EAClDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,OAAOI;IACT;IAKA,OAAOK,iBAAiBlB,KAAK,EAAEC,SAAS,EAAEE,WAAW,EAAE;QACrD,IAAI,CAACH,SAAU,OAAOA,UAAU,YAAYA,MAAMmB,IAAI,OAAO,IAAK;YAChEd,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,4BAA4B,EAAEf,WAAW,EAC1CE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,aAAaW,iBAAiBC,IAAI,EAAEpB,SAAS,EAAEE,WAAW,EAAE;QAC1D,IAAI;YACF,MAAMmB,KAAK,MAAM,MAAM,CAAC;YACxB,MAAMA,GAAGC,MAAM,CAACF;QAClB,EAAE,OAAOf,OAAO;YACdD,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,mBAAmB,EAAEf,UAAU,EAAE,EAAEoB,MAAM,EAC1ClB,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOe,gBAAgBxB,KAAK,EAAEC,SAAS,EAAEE,WAAW,EAAE;QACpD,MAAMsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}MsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}
1
+ {"version":3,"sources":["../../../src/cli/validation-helper.ts"],"sourcesContent":["/**\n * CLI Parameter Validation Helper\n * Provides standardized error messages for invalid parameters\n */\n\nimport { HelpFormatter } from './help-formatter.js';\n\nexport class ValidationHelper {\n /**\n * Validate enum parameter\n */\n static validateEnum(\n value: string,\n paramName: string,\n validOptions: string[],\n commandPath: string,\n ): void {\n if (!validOptions.includes(value)) {\n console.error(\n HelpFormatter.formatValidationError(value, paramName, validOptions, commandPath),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate numeric parameter\n */\n static validateNumber(\n value: string,\n paramName: string,\n min?: number,\n max?: number,\n commandPath?: string,\n ): number {\n const num = parseInt(value, 10);\n\n if (isNaN(num)) {\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid number for ${paramName}.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (min !== undefined && num < min) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at least ${min}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n if (max !== undefined && num > max) {\n console.error(\n HelpFormatter.formatError(\n `${paramName} must be at most ${max}. Got: ${num}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n\n return num;\n }\n\n /**\n * Validate required parameter\n */\n static validateRequired(value: any, paramName: string, commandPath?: string): void {\n if (!value || (typeof value === 'string' && value.trim() === '')) {\n console.error(\n HelpFormatter.formatError(\n `Missing required parameter: ${paramName}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate file path exists\n */\n static async validateFilePath(\n path: string,\n paramName: string,\n commandPath?: string,\n ): Promise<void> {\n try {\n const fs = await import('fs/promises');\n await fs.access(path);\n } catch (error) {\n console.error(\n HelpFormatter.formatError(\n `File not found for ${paramName}: ${path}`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n }\n\n /**\n * Validate boolean flag\n */\n static validateBoolean(value: string, paramName: string, commandPath?: string): boolean {\n const lowerValue = value.toLowerCase();\n if (lowerValue === 'true' || lowerValue === '1' || lowerValue === 'yes') {\n return true;\n }\n if (lowerValue === 'false' || lowerValue === '0' || lowerValue === 'no') {\n return false;\n }\n\n console.error(\n HelpFormatter.formatError(\n `'${value}' is not a valid boolean for ${paramName}. Use: true, false, yes, no, 1, or 0.`,\n commandPath || 'claude-flow',\n ),\n );\n process.exit(1);\n }\n}\n"],"names":["HelpFormatter","ValidationHelper","validateEnum","value","paramName","validOptions","commandPath","includes","console","error","formatValidationError","process","exit","validateNumber","min","max","num","parseInt","isNaN","formatError","undefined","validateRequired","trim","validateFilePath","path","fs","access","validateBoolean","lowerValue","toLowerCase"],"mappings":"AAKA,SAASA,aAAa,QAAQ,sBAAsB;AAEpD,OAAO,MAAMC;IAIX,OAAOC,aACLC,KAAa,EACbC,SAAiB,EACjBC,YAAsB,EACtBC,WAAmB,EACb;QACN,IAAI,CAACD,aAAaE,QAAQ,CAACJ,QAAQ;YACjCK,QAAQC,KAAK,CACXT,cAAcU,qBAAqB,CAACP,OAAOC,WAAWC,cAAcC;YAEtEK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOC,eACLV,KAAa,EACbC,SAAiB,EACjBU,GAAY,EACZC,GAAY,EACZT,WAAoB,EACZ;QACR,MAAMU,MAAMC,SAASd,OAAO;QAE5B,IAAIe,MAAMF,MAAM;YACdR,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,4BAA4B,EAAEC,UAAU,CAAC,CAAC,EACpDE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIE,QAAQM,aAAaJ,MAAMF,KAAK;YAClCN,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,kBAAkB,EAAEU,IAAI,OAAO,EAAEE,KAAK,EACnDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,IAAIG,QAAQK,aAAaJ,MAAMD,KAAK;YAClCP,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,GAAGf,UAAU,iBAAiB,EAAEW,IAAI,OAAO,EAAEC,KAAK,EAClDV,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;QAEA,OAAOI;IACT;IAKA,OAAOK,iBAAiBlB,KAAU,EAAEC,SAAiB,EAAEE,WAAoB,EAAQ;QACjF,IAAI,CAACH,SAAU,OAAOA,UAAU,YAAYA,MAAMmB,IAAI,OAAO,IAAK;YAChEd,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,4BAA4B,EAAEf,WAAW,EAC1CE,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,aAAaW,iBACXC,IAAY,EACZpB,SAAiB,EACjBE,WAAoB,EACL;QACf,IAAI;YACF,MAAMmB,KAAK,MAAM,MAAM,CAAC;YACxB,MAAMA,GAAGC,MAAM,CAACF;QAClB,EAAE,OAAOf,OAAO;YACdD,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,mBAAmB,EAAEf,UAAU,EAAE,EAAEoB,MAAM,EAC1ClB,eAAe;YAGnBK,QAAQC,IAAI,CAAC;QACf;IACF;IAKA,OAAOe,gBAAgBxB,KAAa,EAAEC,SAAiB,EAAEE,WAAoB,EAAW;QACtF,MAAMsB,aAAazB,MAAM0B,WAAW;QACpC,IAAID,eAAe,UAAUA,eAAe,OAAOA,eAAe,OAAO;YACvE,OAAO;QACT;QACA,IAAIA,eAAe,WAAWA,eAAe,OAAOA,eAAe,MAAM;YACvE,OAAO;QACT;QAEApB,QAAQC,KAAK,CACXT,cAAcmB,WAAW,CACvB,CAAC,CAAC,EAAEhB,MAAM,6BAA6B,EAAEC,UAAU,qCAAqC,CAAC,EACzFE,eAAe;QAGnBK,QAAQC,IAAI,CAAC;IACf;AACF"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/reasoningbank/reasoningbank-adapter.js"],"sourcesContent":["/**\n * ReasoningBank Adapter for Claude-Flow (WASM-Powered)\n *\n * Wraps agentic-flow's ReasoningBank WASM for ultra-fast performance\n * Performance: 0.04ms/op storage, 10,000-25,000 ops/sec (250x+ faster than SDK)\n */\n\nimport { createReasoningBank } from 'agentic-flow/dist/reasoningbank/wasm-adapter.js';\nimport { v4 as uuidv4 } from 'uuid';\n\n// WASM instance (singleton)\nlet wasmInstance = null;\nlet initPromise = null;\n\n// Query result cache (LRU)\nconst queryCache = new Map();\nconst CACHE_SIZE = 100;\nconst CACHE_TTL = 60000; // 60 seconds\n\n/**\n * Initialize ReasoningBank WASM instance\n * @returns {Promise<ReasoningBankAdapter>}\n */\nasync function getWasmInstance() {\n if (wasmInstance) {\n return wasmInstance;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Create WASM instance with database name from environment or default\n const dbName = process.env.CLAUDE_FLOW_DB_NAME || 'claude-flow-memory';\n wasmInstance = await createReasoningBank(dbName);\n console.log('[ReasoningBank] WASM initialized successfully');\n return wasmInstance;\n } catch (error) {\n console.error('[ReasoningBank] WASM initialization failed:', error);\n throw new Error(`Failed to initialize ReasoningBank WASM: ${error.message}`);\n }\n })();\n\n return initPromise;\n}\n\n/**\n * Initialize ReasoningBank database (WASM version)\n */\nexport async function initializeReasoningBank() {\n // Just initialize the WASM instance\n await getWasmInstance();\n return true;\n}\n\n/**\n * Store a memory in ReasoningBank (WASM-powered for 0.04ms performance)\n *\n * Maps claude-flow memory model to ReasoningBank pattern model:\n * - key -> strategy\n * - value -> task_description\n * - namespace -> task_category\n * - confidence -> success_score\n */\nexport async function storeMemory(key, value, options = {}) {\n const wasm = await getWasmInstance();\n\n try {\n // Map our memory model to ReasoningBank pattern model\n const pattern = {\n task_description: value,\n task_category: options.namespace || 'default',\n strategy: key,\n success_score: options.confidence || 0.8,\n // Include metadata for compatibility\n metadata: {\n agent: options.agent || 'memory-agent',\n domain: options.domain || 'general',\n type: options.type || 'fact',\n original_key: key,\n original_value: value,\n namespace: options.namespace || 'default',\n created_at: new Date().toISOString()\n }\n };\n\n // Store using WASM (ultra-fast: 0.04ms/op)\n const patternId = await wasm.storePattern(pattern);\n\n // Invalidate query cache when new memory is added\n queryCache.clear();\n\n return patternId;\n } catch (error) {\n console.error('[ReasoningBank] WASM storeMemory failed:', error);\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n}\n\n/**\n * Query memories from ReasoningBank (WASM-powered semantic search)\n *\n * Uses WASM findSimilar for ultra-fast semantic search\n * Fallback to searchByCategory if semantic search fails\n */\nexport async function queryMemories(searchQuery, options = {}) {\n // Check cache first\n const cached = getCachedQuery(searchQuery, options);\n if (cached) {\n return cached;\n }\n\n const wasm = await getWasmInstance();\n const limit = options.limit || 10;\n const namespace = options.namespace || 'default';\n\n try {\n // Try semantic search first (WASM-powered, ultra-fast)\n const results = await wasm.findSimilar(\n searchQuery,\n namespace,\n limit\n );\n\n // Map WASM pattern results to our memory format\n const memories = results.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString(),\n score: pattern.similarity_score || 0,\n // Include original pattern for debugging\n _pattern: pattern\n }));\n\n // If no results, try category search as fallback\n if (memories.length === 0) {\n console.warn('[ReasoningBank] Semantic search returned 0 results, trying category fallback');\n const categoryResults = await wasm.searchByCategory(namespace, limit);\n\n const fallbackMemories = categoryResults.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString(),\n _pattern: pattern\n }));\n\n // Cache and return fallback results\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n }\n\n // Cache successful results\n setCachedQuery(searchQuery, options, memories);\n return memories;\n } catch (error) {\n console.warn('[ReasoningBank] WASM query failed, trying category fallback:', error.message);\n\n try {\n // Final fallback: search by category\n const categoryResults = await wasm.searchByCategory(namespace, limit);\n\n const fallbackMemories = categoryResults.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString()\n }));\n\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n } catch (fallbackError) {\n console.error('[ReasoningBank] All query methods failed:', fallbackError);\n return [];\n }\n }\n}\n\n/**\n * List all memories (using WASM searchByCategory with no filter)\n */\nexport async function listMemories(options = {}) {\n const wasm = await getWasmInstance();\n const limit = options.limit || 10;\n const namespace = options.namespace || 'default';\n\n try {\n // Use category search to list all memories in namespace\n const patterns = await wasm.searchByCategory(namespace, limit);\n\n return patterns.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString()\n }));\n } catch (error) {\n console.error('[ReasoningBank] listMemories failed:', error);\n return [];\n }\n}\n\n/**\n * Get ReasoningBank statistics (WASM-powered)\n */\nexport async function getStatus() {\n const wasm = await getWasmInstance();\n\n try {\n const stats = await wasm.getStats();\n\n return {\n total_memories: stats.total_patterns || 0,\n total_categories: stats.total_categories || 0,\n storage_backend: stats.storage_backend || 'unknown',\n wasm_version: stats.wasm_version || '1.5.11',\n performance: 'WASM-powered (0.04ms/op)',\n avg_confidence: 0.8, // WASM doesn't track this, use default\n total_usage: 0, // WASM doesn't track this\n total_embeddings: stats.total_patterns || 0,\n total_trajectories: 0 // Not applicable in WASM\n };\n } catch (error) {\n console.error('[ReasoningBank] getStatus failed:', error);\n return {\n total_memories: 0,\n error: error.message\n };\n }\n}\n\n/**\n * Check which ReasoningBank tables are present (WASM version always has required data)\n */\nexport async function checkReasoningBankTables() {\n const wasm = await getWasmInstance();\n\n try {\n await wasm.getStats();\n\n return {\n exists: true,\n existingTables: ['WASM patterns storage'],\n missingTables: [],\n requiredTables: ['WASM patterns storage'],\n backend: 'WASM',\n note: 'WASM backend does not use traditional SQL tables'\n };\n } catch (error) {\n return {\n exists: false,\n existingTables: [],\n missingTables: [],\n requiredTables: [],\n error: error.message\n };\n }\n}\n\n/**\n * Migrate existing database (not needed for WASM, always initialized)\n */\nexport async function migrateReasoningBank() {\n try {\n await getWasmInstance();\n\n return {\n success: true,\n message: 'WASM backend initialized successfully',\n migrated: false,\n note: 'WASM backend does not require traditional migration'\n };\n } catch (error) {\n return {\n success: false,\n message: `WASM initialization failed: ${error.message}`,\n error: error.message\n };\n }\n}\n\n/**\n * Get cached query results\n */\nfunction getCachedQuery(searchQuery, options) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n const cached = queryCache.get(cacheKey);\n\n if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n return cached.results;\n }\n\n return null;\n}\n\n/**\n * Set cached query results (LRU eviction)\n */\nfunction setCachedQuery(searchQuery, options, results) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n\n // LRU eviction\n if (queryCache.size >= CACHE_SIZE) {\n const firstKey = queryCache.keys().next().value;\n queryCache.delete(firstKey);\n }\n\n queryCache.set(cacheKey, {\n results,\n timestamp: Date.now()\n });\n}\n"],"names":["createReasoningBank","v4","uuidv4","wasmInstance","initPromise","queryCache","Map","CACHE_SIZE","CACHE_TTL","getWasmInstance","dbName","process","env","CLAUDE_FLOW_DB_NAME","console","log","error","Error","message","initializeReasoningBank","storeMemory","key","value","options","wasm","pattern","task_description","task_category","namespace","strategy","success_score","confidence","metadata","agent","domain","type","original_key","original_value","created_at","Date","toISOString","patternId","storePattern","clear","queryMemories","searchQuery","cached","getCachedQuery","limit","results","findSimilar","memories","map","id","usage_count","score","similarity_score","_pattern","length","warn","categoryResults","searchByCategory","fallbackMemories","setCachedQuery","fallbackError","listMemories","patterns","getStatus","stats","getStats","total_memories","total_patterns","total_categories","storage_backend","wasm_version","performance","avg_confidence","total_usage","total_embeddings","total_trajectories","checkReasoningBankTables","exists","existingTables","missingTables","requiredTables","backend","note","migrateReasoningBank","success","migrated","cacheKey","JSON","stringify","get","now","timestamp","size","firstKey","keys","next","delete","set"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/reasoningbank/reasoningbank-adapter.js"],"sourcesContent":["/**\n * ReasoningBank Adapter for Claude-Flow (WASM-Powered)\n *\n * Wraps agentic-flow's ReasoningBank WASM for ultra-fast performance\n * Performance: 3ms/op storage, 10,000-25,000 ops/sec (250x+ faster than SDK)\n *\n * Now uses agentic-flow@1.5.12 with proper ESM WASM bindings!\n */\n\nimport { createReasoningBank } from 'agentic-flow/dist/reasoningbank/wasm-adapter.js';\nimport { v4 as uuidv4 } from 'uuid';\n\n// WASM instance (singleton)\nlet wasmInstance = null;\nlet initPromise = null;\n\n// Query result cache (LRU)\nconst queryCache = new Map();\nconst CACHE_SIZE = 100;\nconst CACHE_TTL = 60000; // 60 seconds\n\n/**\n * Initialize ReasoningBank WASM instance\n * @returns {Promise<ReasoningBankAdapter>}\n */\nasync function getWasmInstance() {\n if (wasmInstance) {\n return wasmInstance;\n }\n\n if (initPromise) {\n return initPromise;\n }\n\n initPromise = (async () => {\n try {\n // Create WASM instance with database name from environment or default\n const dbName = process.env.CLAUDE_FLOW_DB_NAME || 'claude-flow-memory';\n wasmInstance = await createReasoningBank(dbName);\n console.log('[ReasoningBank] WASM initialized successfully');\n return wasmInstance;\n } catch (error) {\n console.error('[ReasoningBank] WASM initialization failed:', error);\n throw new Error(`Failed to initialize ReasoningBank WASM: ${error.message}`);\n }\n })();\n\n return initPromise;\n}\n\n/**\n * Initialize ReasoningBank database (WASM version)\n */\nexport async function initializeReasoningBank() {\n // Just initialize the WASM instance\n await getWasmInstance();\n return true;\n}\n\n/**\n * Store a memory in ReasoningBank (WASM-powered for 0.04ms performance)\n *\n * Maps claude-flow memory model to ReasoningBank pattern model:\n * - key -> strategy\n * - value -> task_description\n * - namespace -> task_category\n * - confidence -> success_score\n */\nexport async function storeMemory(key, value, options = {}) {\n const wasm = await getWasmInstance();\n\n try {\n // Map our memory model to ReasoningBank pattern model\n const pattern = {\n task_description: value,\n task_category: options.namespace || 'default',\n strategy: key,\n success_score: options.confidence || 0.8,\n // Include metadata for compatibility\n metadata: {\n agent: options.agent || 'memory-agent',\n domain: options.domain || 'general',\n type: options.type || 'fact',\n original_key: key,\n original_value: value,\n namespace: options.namespace || 'default',\n created_at: new Date().toISOString()\n }\n };\n\n // Store using WASM (ultra-fast: 0.04ms/op)\n const patternId = await wasm.storePattern(pattern);\n\n // Invalidate query cache when new memory is added\n queryCache.clear();\n\n return patternId;\n } catch (error) {\n console.error('[ReasoningBank] WASM storeMemory failed:', error);\n throw new Error(`Failed to store memory: ${error.message}`);\n }\n}\n\n/**\n * Query memories from ReasoningBank (WASM-powered semantic search)\n *\n * Uses WASM findSimilar for ultra-fast semantic search\n * Fallback to searchByCategory if semantic search fails\n */\nexport async function queryMemories(searchQuery, options = {}) {\n // Check cache first\n const cached = getCachedQuery(searchQuery, options);\n if (cached) {\n return cached;\n }\n\n const wasm = await getWasmInstance();\n const limit = options.limit || 10;\n const namespace = options.namespace || 'default';\n\n try {\n // Try semantic search first (WASM-powered, ultra-fast)\n const results = await wasm.findSimilar(\n searchQuery,\n namespace,\n limit\n );\n\n // Map WASM pattern results to our memory format\n const memories = results.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString(),\n score: pattern.similarity_score || 0,\n // Include original pattern for debugging\n _pattern: pattern\n }));\n\n // If no results, try category search as fallback\n if (memories.length === 0) {\n console.warn('[ReasoningBank] Semantic search returned 0 results, trying category fallback');\n const categoryResults = await wasm.searchByCategory(namespace, limit);\n\n const fallbackMemories = categoryResults.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString(),\n _pattern: pattern\n }));\n\n // Cache and return fallback results\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n }\n\n // Cache successful results\n setCachedQuery(searchQuery, options, memories);\n return memories;\n } catch (error) {\n console.warn('[ReasoningBank] WASM query failed, trying category fallback:', error.message);\n\n try {\n // Final fallback: search by category\n const categoryResults = await wasm.searchByCategory(namespace, limit);\n\n const fallbackMemories = categoryResults.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString()\n }));\n\n setCachedQuery(searchQuery, options, fallbackMemories);\n return fallbackMemories;\n } catch (fallbackError) {\n console.error('[ReasoningBank] All query methods failed:', fallbackError);\n return [];\n }\n }\n}\n\n/**\n * List all memories (using WASM searchByCategory with no filter)\n */\nexport async function listMemories(options = {}) {\n const wasm = await getWasmInstance();\n const limit = options.limit || 10;\n const namespace = options.namespace || 'default';\n\n try {\n // Use category search to list all memories in namespace\n const patterns = await wasm.searchByCategory(namespace, limit);\n\n return patterns.map(pattern => ({\n id: pattern.id || `mem_${uuidv4()}`,\n key: pattern.strategy || pattern.metadata?.original_key || 'unknown',\n value: pattern.task_description || pattern.metadata?.original_value || '',\n namespace: pattern.task_category || pattern.metadata?.namespace || 'default',\n confidence: pattern.success_score || 0.8,\n usage_count: pattern.usage_count || 0,\n created_at: pattern.metadata?.created_at || new Date().toISOString()\n }));\n } catch (error) {\n console.error('[ReasoningBank] listMemories failed:', error);\n return [];\n }\n}\n\n/**\n * Get ReasoningBank statistics (WASM-powered)\n */\nexport async function getStatus() {\n const wasm = await getWasmInstance();\n\n try {\n const stats = await wasm.getStats();\n\n return {\n total_memories: stats.total_patterns || 0,\n total_categories: stats.total_categories || 0,\n storage_backend: stats.storage_backend || 'unknown',\n wasm_version: stats.wasm_version || '1.5.11',\n performance: 'WASM-powered (0.04ms/op)',\n avg_confidence: 0.8, // WASM doesn't track this, use default\n total_usage: 0, // WASM doesn't track this\n total_embeddings: stats.total_patterns || 0,\n total_trajectories: 0 // Not applicable in WASM\n };\n } catch (error) {\n console.error('[ReasoningBank] getStatus failed:', error);\n return {\n total_memories: 0,\n error: error.message\n };\n }\n}\n\n/**\n * Check which ReasoningBank tables are present (WASM version always has required data)\n */\nexport async function checkReasoningBankTables() {\n const wasm = await getWasmInstance();\n\n try {\n await wasm.getStats();\n\n return {\n exists: true,\n existingTables: ['WASM patterns storage'],\n missingTables: [],\n requiredTables: ['WASM patterns storage'],\n backend: 'WASM',\n note: 'WASM backend does not use traditional SQL tables'\n };\n } catch (error) {\n return {\n exists: false,\n existingTables: [],\n missingTables: [],\n requiredTables: [],\n error: error.message\n };\n }\n}\n\n/**\n * Migrate existing database (not needed for WASM, always initialized)\n */\nexport async function migrateReasoningBank() {\n try {\n await getWasmInstance();\n\n return {\n success: true,\n message: 'WASM backend initialized successfully',\n migrated: false,\n note: 'WASM backend does not require traditional migration'\n };\n } catch (error) {\n return {\n success: false,\n message: `WASM initialization failed: ${error.message}`,\n error: error.message\n };\n }\n}\n\n/**\n * Get cached query results\n */\nfunction getCachedQuery(searchQuery, options) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n const cached = queryCache.get(cacheKey);\n\n if (cached && Date.now() - cached.timestamp < CACHE_TTL) {\n return cached.results;\n }\n\n return null;\n}\n\n/**\n * Set cached query results (LRU eviction)\n */\nfunction setCachedQuery(searchQuery, options, results) {\n const cacheKey = JSON.stringify({ searchQuery, options });\n\n // LRU eviction\n if (queryCache.size >= CACHE_SIZE) {\n const firstKey = queryCache.keys().next().value;\n queryCache.delete(firstKey);\n }\n\n queryCache.set(cacheKey, {\n results,\n timestamp: Date.now()\n });\n}\n"],"names":["createReasoningBank","v4","uuidv4","wasmInstance","initPromise","queryCache","Map","CACHE_SIZE","CACHE_TTL","getWasmInstance","dbName","process","env","CLAUDE_FLOW_DB_NAME","console","log","error","Error","message","initializeReasoningBank","storeMemory","key","value","options","wasm","pattern","task_description","task_category","namespace","strategy","success_score","confidence","metadata","agent","domain","type","original_key","original_value","created_at","Date","toISOString","patternId","storePattern","clear","queryMemories","searchQuery","cached","getCachedQuery","limit","results","findSimilar","memories","map","id","usage_count","score","similarity_score","_pattern","length","warn","categoryResults","searchByCategory","fallbackMemories","setCachedQuery","fallbackError","listMemories","patterns","getStatus","stats","getStats","total_memories","total_patterns","total_categories","storage_backend","wasm_version","performance","avg_confidence","total_usage","total_embeddings","total_trajectories","checkReasoningBankTables","exists","existingTables","missingTables","requiredTables","backend","note","migrateReasoningBank","success","migrated","cacheKey","JSON","stringify","get","now","timestamp","size","firstKey","keys","next","delete","set"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/key-redactor.ts"],"sourcesContent":["/**\n * API Key Redaction Utility\n * Prevents sensitive data from leaking into logs, memory, or git commits\n */\n\nexport interface RedactionConfig {\n patterns: RegExp[];\n replacement: string;\n maskLength: number;\n}\n\nexport class KeyRedactor {\n private static readonly API_KEY_PATTERNS = [\n // Anthropic API keys\n /sk-ant-[a-zA-Z0-9_-]{95,}/gi,\n\n // OpenRouter API keys\n /sk-or-[a-zA-Z0-9_-]{32,}/gi,\n\n // Google/Gemini API keys\n /AIza[a-zA-Z0-9_-]{35}/gi,\n\n // Generic API keys\n /[a-zA-Z0-9_-]{20,}API[a-zA-Z0-9_-]{20,}/gi,\n\n // Bearer tokens\n /Bearer\\s+[a-zA-Z0-9_\\-\\.]{20,}/gi,\n\n // Environment variable format\n /([A-Z_]+_API_KEY|[A-Z_]+_TOKEN|[A-Z_]+_SECRET)=[\"']?([^\"'\\s]+)[\"']?/gi,\n\n // Supabase keys\n /eyJ[a-zA-Z0-9_-]*\\.eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*/gi,\n ];\n\n private static readonly SENSITIVE_FIELDS = [\n 'apiKey',\n 'api_key',\n 'token',\n 'secret',\n 'password',\n 'private_key',\n 'privateKey',\n 'accessToken',\n 'access_token',\n 'refreshToken',\n 'refresh_token',\n ];\n\n /**\n * Redact API keys and sensitive data from text\n */\n static redact(text: string, showPrefix = true): string {\n if (!text) return text;\n\n let redacted = text;\n\n // Redact using patterns\n this.API_KEY_PATTERNS.forEach(pattern => {\n redacted = redacted.replace(pattern, (match) => {\n if (showPrefix && match.length > 8) {\n const prefix = match.substring(0, 8);\n return `${prefix}...[REDACTED]`;\n }\n return '[REDACTED_API_KEY]';\n });\n });\n\n return redacted;\n }\n\n /**\n * Redact sensitive fields in objects\n */\n static redactObject<T extends Record<string, any>>(obj: T, deep = true): T {\n if (!obj || typeof obj !== 'object') return obj;\n\n const redacted = { ...obj };\n\n Object.keys(redacted).forEach(key => {\n const lowerKey = key.toLowerCase();\n\n // Check if field name is sensitive\n const isSensitive = this.SENSITIVE_FIELDS.some(field =>\n lowerKey.includes(field)\n );\n\n if (isSensitive && typeof redacted[key] === 'string') {\n const value = redacted[key] as string;\n if (value && value.length > 8) {\n redacted[key] = `${value.substring(0, 4)}...[REDACTED]` as any;\n } else {\n redacted[key] = '[REDACTED]' as any;\n }\n } else if (deep && typeof redacted[key] === 'object' && redacted[key] !== null) {\n redacted[key] = this.redactObject(redacted[key], deep);\n } else if (typeof redacted[key] === 'string') {\n // Redact any API keys in string values\n redacted[key] = this.redact(redacted[key]) as any;\n }\n });\n\n return redacted;\n }\n\n /**\n * Sanitize text for safe logging\n */\n static sanitize(text: string): string {\n return this.redact(text, true);\n }\n\n /**\n * Sanitize command arguments\n */\n static sanitizeArgs(args: string[]): string[] {\n return args.map(arg => {\n // Check if arg is a flag value pair\n if (arg.includes('key') || arg.includes('token') || arg.includes('secret')) {\n return this.redact(arg);\n }\n return arg;\n });\n }\n\n /**\n * Check if text contains unredacted sensitive data\n */\n static containsSensitiveData(text: string): boolean {\n return this.API_KEY_PATTERNS.some(pattern => pattern.test(text));\n }\n\n /**\n * Validate that text is safe for logging/storage\n */\n static validate(text: string): { safe: boolean; warnings: string[] } {\n const warnings: string[] = [];\n\n this.API_KEY_PATTERNS.forEach((pattern, index) => {\n if (pattern.test(text)) {\n warnings.push(`Potential API key detected (pattern ${index + 1})`);\n }\n });\n\n return {\n safe: warnings.length === 0,\n warnings,\n };\n }\n\n /**\n * Redact environment variables\n */\n static redactEnv(env: Record<string, string | undefined>): Record<string, string> {\n const redacted: Record<string, string> = {};\n\n Object.keys(env).forEach(key => {\n const value = env[key];\n if (!value) {\n redacted[key] = '';\n return;\n }\n\n const lowerKey = key.toLowerCase();\n const isSensitive = lowerKey.includes('key') ||\n lowerKey.includes('token') ||\n lowerKey.includes('secret') ||\n lowerKey.includes('password');\n\n if (isSensitive) {\n redacted[key] = value.length > 8\n ? `${value.substring(0, 4)}...[REDACTED]`\n : '[REDACTED]';\n } else {\n redacted[key] = value;\n }\n });\n\n return redacted;\n }\n}\n\n// Export singleton instance\nexport const redactor = KeyRedactor;\n"],"names":["KeyRedactor","API_KEY_PATTERNS","SENSITIVE_FIELDS","redact","text","showPrefix","redacted","forEach","pattern","replace","match","length","prefix","substring","redactObject","obj","deep","Object","keys","key","lowerKey","toLowerCase","isSensitive","some","field","includes","value","sanitize","sanitizeArgs","args","map","arg","containsSensitiveData","test","validate","warnings","index","push","safe","redactEnv","env","redactor"],"mappings":"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"}
1
+ {"version":3,"sources":["../../../src/utils/key-redactor.js"],"sourcesContent":["/**\n * API Key Redaction Utility\n * Prevents sensitive data from leaking into logs, memory, or git commits\n */\n\nexport class KeyRedactor {\n static API_KEY_PATTERNS = [\n // Anthropic API keys\n /sk-ant-[a-zA-Z0-9_-]{95,}/gi,\n\n // OpenRouter API keys\n /sk-or-[a-zA-Z0-9_-]{32,}/gi,\n\n // Google/Gemini API keys\n /AIza[a-zA-Z0-9_-]{35}/gi,\n\n // Generic API keys\n /[a-zA-Z0-9_-]{20,}API[a-zA-Z0-9_-]{20,}/gi,\n\n // Bearer tokens\n /Bearer\\s+[a-zA-Z0-9_\\-\\.]{20,}/gi,\n\n // Environment variable format\n /([A-Z_]+_API_KEY|[A-Z_]+_TOKEN|[A-Z_]+_SECRET)=[\"']?([^\"'\\s]+)[\"']?/gi,\n\n // Supabase keys\n /eyJ[a-zA-Z0-9_-]*\\.eyJ[a-zA-Z0-9_-]*\\.[a-zA-Z0-9_-]*/gi,\n ];\n\n static SENSITIVE_FIELDS = [\n 'apiKey',\n 'api_key',\n 'token',\n 'secret',\n 'password',\n 'private_key',\n 'privateKey',\n 'accessToken',\n 'access_token',\n 'refreshToken',\n 'refresh_token',\n ];\n\n /**\n * Redact API keys and sensitive data from text\n */\n static redact(text, showPrefix = true) {\n if (!text) return text;\n\n let redacted = text;\n\n // Redact using patterns\n this.API_KEY_PATTERNS.forEach(pattern => {\n redacted = redacted.replace(pattern, (match) => {\n if (showPrefix && match.length > 8) {\n const prefix = match.substring(0, 8);\n return `${prefix}...[REDACTED]`;\n }\n return '[REDACTED_API_KEY]';\n });\n });\n\n return redacted;\n }\n\n /**\n * Redact sensitive fields in objects\n */\n static redactObject(obj, deep = true) {\n if (!obj || typeof obj !== 'object') return obj;\n\n const redacted = { ...obj };\n\n Object.keys(redacted).forEach(key => {\n const lowerKey = key.toLowerCase();\n\n // Check if field name is sensitive\n const isSensitive = this.SENSITIVE_FIELDS.some(field =>\n lowerKey.includes(field)\n );\n\n if (isSensitive && typeof redacted[key] === 'string') {\n const value = redacted[key];\n if (value && value.length > 8) {\n redacted[key] = `${value.substring(0, 4)}...[REDACTED]`;\n } else {\n redacted[key] = '[REDACTED]';\n }\n } else if (deep && typeof redacted[key] === 'object' && redacted[key] !== null) {\n redacted[key] = this.redactObject(redacted[key], deep);\n } else if (typeof redacted[key] === 'string') {\n // Redact any API keys in string values\n redacted[key] = this.redact(redacted[key]);\n }\n });\n\n return redacted;\n }\n\n /**\n * Sanitize text for safe logging\n */\n static sanitize(text) {\n return this.redact(text, true);\n }\n\n /**\n * Sanitize command arguments\n */\n static sanitizeArgs(args) {\n return args.map(arg => {\n // Check if arg is a flag value pair\n if (arg.includes('key') || arg.includes('token') || arg.includes('secret')) {\n return this.redact(arg);\n }\n return arg;\n });\n }\n\n /**\n * Check if text contains unredacted sensitive data\n */\n static containsSensitiveData(text) {\n return this.API_KEY_PATTERNS.some(pattern => pattern.test(text));\n }\n\n /**\n * Validate that text is safe for logging/storage\n */\n static validate(text) {\n const warnings = [];\n\n this.API_KEY_PATTERNS.forEach((pattern, index) => {\n if (pattern.test(text)) {\n warnings.push(`Potential API key detected (pattern ${index + 1})`);\n }\n });\n\n return {\n safe: warnings.length === 0,\n warnings,\n };\n }\n\n /**\n * Redact environment variables\n */\n static redactEnv(env) {\n const redacted = {};\n\n Object.keys(env).forEach(key => {\n const value = env[key];\n if (!value) {\n redacted[key] = '';\n return;\n }\n\n const lowerKey = key.toLowerCase();\n const isSensitive = lowerKey.includes('key') ||\n lowerKey.includes('token') ||\n lowerKey.includes('secret') ||\n lowerKey.includes('password');\n\n if (isSensitive) {\n redacted[key] = value.length > 8\n ? `${value.substring(0, 4)}...[REDACTED]`\n : '[REDACTED]';\n } else {\n redacted[key] = value;\n }\n });\n\n return redacted;\n }\n}\n\n// Export singleton instance\nexport const redactor = KeyRedactor;\n"],"names":["KeyRedactor","API_KEY_PATTERNS","SENSITIVE_FIELDS","redact","text","showPrefix","redacted","forEach","pattern","replace","match","length","prefix","substring","redactObject","obj","deep","Object","keys","key","lowerKey","toLowerCase","isSensitive","some","field","includes","value","sanitize","sanitizeArgs","args","map","arg","containsSensitiveData","test","validate","warnings","index","push","safe","redactEnv","env","redactor"],"mappings":"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"},GAAG,CAACrB,IAAI;YACtB,IAAI,CAACO,OAAO;gBACVpB,QAAQ,CAACa,IAAI,GAAG;gBAChB;YACF;YAEA,MAAMC,WAAWD,IAAIE,WAAW;YAChC,MAAMC,cAAcF,SAASK,QAAQ,CAAC,UACnBL,SAASK,QAAQ,CAAC,YAClBL,SAASK,QAAQ,CAAC,aAClBL,SAASK,QAAQ,CAAC;YAErC,IAAIH,aAAa;gBACfhB,QAAQ,CAACa,IAAI,GAAGO,MAAMf,MAAM,GAAG,IAC3B,GAAGe,MAAMb,SAAS,CAAC,GAAG,GAAG,aAAa,CAAC,GACvC;YACN,OAAO;gBACLP,QAAQ,CAACa,IAAI,GAAGO;YAClB;QACF;QAEA,OAAOpB;IACT;AACF;AAGA,OAAO,MAAMmC,WAAWzC,YAAY"}
@@ -1,13 +1,11 @@
1
- import { promises as fs } from 'fs';
2
- import path from 'path';
1
+ import * as fs from 'fs/promises';
2
+ import * as path from 'path';
3
3
  import { exec } from 'child_process';
4
4
  import { promisify } from 'util';
5
5
  const execAsync = promisify(exec);
6
- let MetricsReader = class MetricsReader {
7
- constructor(){
8
- this.metricsDir = '.claude-flow/metrics';
9
- this.sessionsDir = '.claude-flow/sessions';
10
- }
6
+ export class MetricsReader {
7
+ metricsDir = '.claude-flow/metrics';
8
+ sessionsDir = '.claude-flow/sessions';
11
9
  async getSystemMetrics() {
12
10
  try {
13
11
  const filePath = path.join(this.metricsDir, 'system-metrics.json');
@@ -18,15 +16,6 @@ let MetricsReader = class MetricsReader {
18
16
  return null;
19
17
  }
20
18
  }
21
- async getTaskQueue() {
22
- try {
23
- const queueFile = '.claude-flow/tasks/queue.json';
24
- const content = await fs.readFile(queueFile, 'utf8');
25
- return JSON.parse(content);
26
- } catch (error) {
27
- return [];
28
- }
29
- }
30
19
  async getTaskMetrics() {
31
20
  try {
32
21
  const filePath = path.join(this.metricsDir, 'task-metrics.json');
@@ -47,30 +36,30 @@ let MetricsReader = class MetricsReader {
47
36
  }
48
37
  async getActiveAgents() {
49
38
  try {
39
+ const perfMetrics = await this.getPerformanceMetrics();
40
+ const sessionFiles = await this.getSessionFiles();
50
41
  const agents = [];
51
- const agentsDir = '.claude-flow/agents';
52
- try {
53
- const agentFiles = await fs.readdir(agentsDir);
54
- for (const file of agentFiles){
55
- if (file.endsWith('.json')) {
56
- try {
57
- const content = await fs.readFile(path.join(agentsDir, file), 'utf8');
58
- const agent = JSON.parse(content);
59
- agents.push(agent);
60
- } catch {}
42
+ for (const file of sessionFiles){
43
+ try {
44
+ const content = await fs.readFile(path.join(this.sessionsDir, 'pair', file), 'utf8');
45
+ const sessionData = JSON.parse(content);
46
+ if (sessionData.agents && Array.isArray(sessionData.agents)) {
47
+ agents.push(...sessionData.agents);
61
48
  }
62
- }
63
- } catch {}
64
- if (agents.length === 0) {
65
- const sessionFiles = await this.getSessionFiles();
66
- for (const file of sessionFiles){
67
- try {
68
- const content = await fs.readFile(path.join(this.sessionsDir, 'pair', file), 'utf8');
69
- const sessionData = JSON.parse(content);
70
- if (sessionData.agents && Array.isArray(sessionData.agents)) {
71
- agents.push(...sessionData.agents);
72
- }
73
- } catch {}
49
+ } catch {}
50
+ }
51
+ if (agents.length === 0 && perfMetrics) {
52
+ const activeCount = perfMetrics.activeAgents || 0;
53
+ const totalCount = perfMetrics.totalAgents || 0;
54
+ for(let i = 0; i < totalCount; i++){
55
+ agents.push({
56
+ id: `agent-${i + 1}`,
57
+ name: `Agent ${i + 1}`,
58
+ type: i === 0 ? 'orchestrator' : 'worker',
59
+ status: i < activeCount ? 'active' : 'idle',
60
+ activeTasks: i < activeCount ? 1 : 0,
61
+ lastActivity: Date.now() - i * 1000
62
+ });
74
63
  }
75
64
  }
76
65
  return agents;
@@ -146,7 +135,7 @@ let MetricsReader = class MetricsReader {
146
135
  }
147
136
  async getMCPServerStatus() {
148
137
  try {
149
- const { stdout } = await execAsync('ps aux | grep -E "mcp" | grep -v grep | wc -l');
138
+ const { stdout } = await execAsync('ps aux | grep -E "mcp-server\\.js|claude-flow mcp start" | grep -v grep | wc -l');
150
139
  const processCount = parseInt(stdout.trim(), 10);
151
140
  const { stdout: orchestratorOut } = await execAsync('ps aux | grep -E "claude-flow start" | grep -v grep | wc -l');
152
141
  const orchestratorRunning = parseInt(orchestratorOut.trim(), 10) > 0;
@@ -175,6 +164,15 @@ let MetricsReader = class MetricsReader {
175
164
  };
176
165
  }
177
166
  }
167
+ }
168
+
169
+ //# sourceMappingURL=metrics-reader.js.map processCount: 0,
170
+ orchestratorRunning: false,
171
+ port: null,
172
+ connections: 0
173
+ };
174
+ }
175
+ }
178
176
  };
179
177
  export { MetricsReader };
180
178
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/utils/metrics-reader.js"],"sourcesContent":["import { promises as fs } from 'fs';\nimport path from 'path';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\nclass MetricsReader {\n constructor() {\n this.metricsDir = '.claude-flow/metrics';\n this.sessionsDir = '.claude-flow/sessions';\n }\n\n async getSystemMetrics() {\n try {\n const filePath = path.join(this.metricsDir, 'system-metrics.json');\n const content = await fs.readFile(filePath, 'utf8');\n const metrics = JSON.parse(content);\n \n // Return the most recent metric\n return metrics.length > 0 ? metrics[metrics.length - 1] : null;\n } catch (error) {\n return null;\n }\n }\n\n async getTaskQueue() {\n try {\n const queueFile = '.claude-flow/tasks/queue.json';\n const content = await fs.readFile(queueFile, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return [];\n }\n }\n\n async getTaskMetrics() {\n try {\n const filePath = path.join(this.metricsDir, 'task-metrics.json');\n const content = await fs.readFile(filePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return [];\n }\n }\n\n async getPerformanceMetrics() {\n try {\n const filePath = path.join(this.metricsDir, 'performance.json');\n const content = await fs.readFile(filePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return null;\n }\n }\n\n async getActiveAgents() {\n try {\n const agents = [];\n \n // Check for agents in the .claude-flow/agents directory\n const agentsDir = '.claude-flow/agents';\n try {\n const agentFiles = await fs.readdir(agentsDir);\n for (const file of agentFiles) {\n if (file.endsWith('.json')) {\n try {\n const content = await fs.readFile(path.join(agentsDir, file), 'utf8');\n const agent = JSON.parse(content);\n agents.push(agent);\n } catch {\n // Skip invalid agent files\n }\n }\n }\n } catch {\n // Agents directory doesn't exist yet\n }\n \n // If no agents found in directory, check session files\n if (agents.length === 0) {\n const sessionFiles = await this.getSessionFiles();\n for (const file of sessionFiles) {\n try {\n const content = await fs.readFile(path.join(this.sessionsDir, 'pair', file), 'utf8');\n const sessionData = JSON.parse(content);\n \n if (sessionData.agents && Array.isArray(sessionData.agents)) {\n agents.push(...sessionData.agents);\n }\n } catch {\n // Skip invalid session files\n }\n }\n }\n \n return agents;\n } catch (error) {\n return [];\n }\n }\n\n async getSessionStatus() {\n try {\n const sessionFiles = await this.getSessionFiles();\n \n if (sessionFiles.length === 0) {\n return null;\n }\n \n // Get the most recent session\n const mostRecentFile = sessionFiles[sessionFiles.length - 1];\n const content = await fs.readFile(path.join(this.sessionsDir, 'pair', mostRecentFile), 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return null;\n }\n }\n\n async getRecentTasks(limit = 10) {\n try {\n const taskMetrics = await this.getTaskMetrics();\n \n // Sort by timestamp descending and take the limit\n return taskMetrics\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, limit)\n .map(task => ({\n id: task.id,\n type: task.type,\n status: task.success ? 'completed' : 'failed',\n startTime: task.timestamp - task.duration,\n endTime: task.timestamp,\n duration: task.duration\n }));\n } catch (error) {\n return [];\n }\n }\n\n async getOverallHealth() {\n try {\n const systemMetrics = await this.getSystemMetrics();\n const perfMetrics = await this.getPerformanceMetrics();\n \n if (!systemMetrics && !perfMetrics) {\n return 'error';\n }\n \n // Check memory usage\n if (systemMetrics && systemMetrics.memoryUsagePercent > 90) {\n return 'error';\n }\n \n if (systemMetrics && systemMetrics.memoryUsagePercent > 75) {\n return 'warning';\n }\n \n // Check CPU load\n if (systemMetrics && systemMetrics.cpuLoad > 0.8) {\n return 'warning';\n }\n \n // Check task failure rate\n if (perfMetrics && perfMetrics.totalTasks > 0) {\n const failureRate = perfMetrics.failedTasks / perfMetrics.totalTasks;\n if (failureRate > 0.5) {\n return 'error';\n }\n if (failureRate > 0.2) {\n return 'warning';\n }\n }\n \n return 'healthy';\n } catch (error) {\n return 'error';\n }\n }\n\n async getSessionFiles() {\n try {\n const files = await fs.readdir(path.join(this.sessionsDir, 'pair'));\n return files.filter(f => f.endsWith('.json')).sort();\n } catch (error) {\n return [];\n }\n }\n\n async getMCPServerStatus() {\n try {\n // Check if MCP server process is running (including flow-nexus and other MCP variants)\n const { stdout } = await execAsync('ps aux | grep -E \"mcp\" | grep -v grep | wc -l');\n const processCount = parseInt(stdout.trim(), 10);\n \n // Check for orchestrator running\n const { stdout: orchestratorOut } = await execAsync('ps aux | grep -E \"claude-flow start\" | grep -v grep | wc -l');\n const orchestratorRunning = parseInt(orchestratorOut.trim(), 10) > 0;\n \n // Determine status\n const isRunning = processCount > 0;\n \n // Try to get port from process (default is 3000)\n let port = 3000;\n try {\n const { stdout: portOut } = await execAsync('lsof -i :3000 2>/dev/null | grep LISTEN | wc -l');\n if (parseInt(portOut.trim(), 10) === 0) {\n // If port 3000 not listening, check other common ports\n port = null;\n }\n } catch {\n // lsof might not be available or port not in use\n }\n \n return {\n running: isRunning,\n processCount,\n orchestratorRunning,\n port,\n connections: processCount > 0 ? Math.max(1, processCount - 1) : 0 // Estimate connections\n };\n } catch (error) {\n // Fallback if commands fail\n return {\n running: false,\n processCount: 0,\n orchestratorRunning: false,\n port: null,\n connections: 0\n };\n }\n }\n}\n\nexport { MetricsReader };"],"names":["promises","fs","path","exec","promisify","execAsync","MetricsReader","metricsDir","sessionsDir","getSystemMetrics","filePath","join","content","readFile","metrics","JSON","parse","length","error","getTaskQueue","queueFile","getTaskMetrics","getPerformanceMetrics","getActiveAgents","agents","agentsDir","agentFiles","readdir","file","endsWith","agent","push","sessionFiles","getSessionFiles","sessionData","Array","isArray","getSessionStatus","mostRecentFile","getRecentTasks","limit","taskMetrics","sort","a","b","timestamp","slice","map","task","id","type","status","success","startTime","duration","endTime","getOverallHealth","systemMetrics","perfMetrics","memoryUsagePercent","cpuLoad","totalTasks","failureRate","failedTasks","files","filter","f","getMCPServerStatus","stdout","processCount","parseInt","trim","orchestratorOut","orchestratorRunning","isRunning","port","portOut","running","connections","Math","max"],"mappings":"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"}AG,KAAK;gBAChD,OAAO;YACT;YAGA,IAAIzC,eAAeA,YAAY0C,UAAU,GAAG,GAAG;gBAC7C,MAAMC,cAAc3C,YAAY4C,WAAW,GAAG5C,YAAY0C,UAAU;gBACpE,IAAIC,cAAc,KAAK;oBACrB,OAAO;gBACT;gBACA,IAAIA,cAAc,KAAK;oBACrB,OAAO;gBACT;YACF;YAEA,OAAO;QACT,EAAE,OAAO/C,OAAO;YACd,OAAO;QACT;IACF;IAEA,MAAcM,kBAAqC;QACjD,IAAI;YACF,MAAM2C,QAAQ,MAAMlE,GAAGmE,OAAO,CAAClE,KAAKS,IAAI,CAAC,IAAI,CAACH,WAAW,EAAE;YAC3D,OAAO2D,MAAME,MAAM,CAACC,CAAAA,IAAKA,EAAEC,QAAQ,CAAC,UAAUtB,IAAI;QACpD,EAAE,OAAO/B,OAAO;YACd,OAAO,EAAE;QACX;IACF;IAEA,MAAMsD,qBAA+C;QACnD,IAAI;YAEF,MAAM,EAAEC,MAAM,EAAE,GAAG,MAAMpE,UAAU;YACnC,MAAMqE,eAAeC,SAASF,OAAOG,IAAI,IAAI;YAG7C,MAAM,EAAEH,QAAQI,eAAe,EAAE,GAAG,MAAMxE,UAAU;YACpD,MAAMyE,sBAAsBH,SAASE,gBAAgBD,IAAI,IAAI,MAAM;YAGnE,MAAMG,YAAYL,eAAe;YAGjC,IAAIM,OAAsB;YAC1B,IAAI;gBACF,MAAM,EAAEP,QAAQQ,OAAO,EAAE,GAAG,MAAM5E,UAAU;gBAC5C,IAAIsE,SAASM,QAAQL,IAAI,IAAI,QAAQ,GAAG;oBAEtCI,OAAO;gBACT;YACF,EAAE,OAAM,CAER;YAEA,OAAO;gBACLE,SAASH;gBACTL;gBACAI;gBACAE;gBACAG,aAAaT,eAAe,IAAIU,KAAKC,GAAG,CAAC,GAAGX,eAAe,KAAK;YAClE;QACF,EAAE,OAAOxD,OAAO;YAEd,OAAO;gBACLgE,SAAS;gBACTR,cAAc;gBACdI,qBAAqB;gBACrBE,MAAM;gBACNG,aAAa;YACf;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../../src/utils/metrics-reader.ts"],"sourcesContent":["import * as fs from 'fs/promises';\nimport * as path from 'path';\nimport { exec } from 'child_process';\nimport { promisify } from 'util';\n\nconst execAsync = promisify(exec);\n\ninterface SystemMetrics {\n timestamp: number;\n memoryTotal: number;\n memoryUsed: number;\n memoryFree: number;\n memoryUsagePercent: number;\n memoryEfficiency: number;\n cpuCount: number;\n cpuLoad: number;\n platform: string;\n uptime: number;\n}\n\ninterface TaskMetric {\n id: string;\n type: string;\n success: boolean;\n duration: number;\n timestamp: number;\n metadata: Record<string, any>;\n}\n\ninterface PerformanceMetrics {\n startTime: number;\n totalTasks: number;\n successfulTasks: number;\n failedTasks: number;\n totalAgents: number;\n activeAgents: number;\n neuralEvents: number;\n}\n\ninterface Agent {\n id: string;\n name: string;\n type: string;\n status: 'active' | 'idle' | 'busy';\n activeTasks: number;\n lastActivity?: number;\n}\n\ninterface SessionData {\n id: string;\n startTime: number;\n endTime?: number;\n agents: Agent[];\n tasks: any[];\n status: 'active' | 'completed' | 'paused';\n}\n\ninterface MCPServerStatus {\n running: boolean;\n processCount: number;\n orchestratorRunning: boolean;\n port: number | null;\n connections: number;\n}\n\nexport class MetricsReader {\n private metricsDir = '.claude-flow/metrics';\n private sessionsDir = '.claude-flow/sessions';\n\n async getSystemMetrics(): Promise<SystemMetrics | null> {\n try {\n const filePath = path.join(this.metricsDir, 'system-metrics.json');\n const content = await fs.readFile(filePath, 'utf8');\n const metrics: SystemMetrics[] = JSON.parse(content);\n \n // Return the most recent metric\n return metrics.length > 0 ? metrics[metrics.length - 1] : null;\n } catch (error) {\n return null;\n }\n }\n\n async getTaskMetrics(): Promise<TaskMetric[]> {\n try {\n const filePath = path.join(this.metricsDir, 'task-metrics.json');\n const content = await fs.readFile(filePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return [];\n }\n }\n\n async getPerformanceMetrics(): Promise<PerformanceMetrics | null> {\n try {\n const filePath = path.join(this.metricsDir, 'performance.json');\n const content = await fs.readFile(filePath, 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return null;\n }\n }\n\n async getActiveAgents(): Promise<Agent[]> {\n try {\n // First check performance metrics for agent count\n const perfMetrics = await this.getPerformanceMetrics();\n \n // Also check session files for more detailed agent info\n const sessionFiles = await this.getSessionFiles();\n const agents: Agent[] = [];\n \n for (const file of sessionFiles) {\n try {\n const content = await fs.readFile(path.join(this.sessionsDir, 'pair', file), 'utf8');\n const sessionData = JSON.parse(content);\n \n if (sessionData.agents && Array.isArray(sessionData.agents)) {\n agents.push(...sessionData.agents);\n }\n } catch {\n // Skip invalid session files\n }\n }\n \n // If no agents found in sessions, create mock agents based on performance metrics\n if (agents.length === 0 && perfMetrics) {\n const activeCount = perfMetrics.activeAgents || 0;\n const totalCount = perfMetrics.totalAgents || 0;\n \n for (let i = 0; i < totalCount; i++) {\n agents.push({\n id: `agent-${i + 1}`,\n name: `Agent ${i + 1}`,\n type: i === 0 ? 'orchestrator' : 'worker',\n status: i < activeCount ? 'active' : 'idle',\n activeTasks: i < activeCount ? 1 : 0,\n lastActivity: Date.now() - (i * 1000)\n });\n }\n }\n \n return agents;\n } catch (error) {\n return [];\n }\n }\n\n async getSessionStatus(): Promise<SessionData | null> {\n try {\n const sessionFiles = await this.getSessionFiles();\n \n if (sessionFiles.length === 0) {\n return null;\n }\n \n // Get the most recent session\n const mostRecentFile = sessionFiles[sessionFiles.length - 1];\n const content = await fs.readFile(path.join(this.sessionsDir, 'pair', mostRecentFile), 'utf8');\n return JSON.parse(content);\n } catch (error) {\n return null;\n }\n }\n\n async getRecentTasks(limit: number = 10): Promise<any[]> {\n try {\n const taskMetrics = await this.getTaskMetrics();\n \n // Sort by timestamp descending and take the limit\n return taskMetrics\n .sort((a, b) => b.timestamp - a.timestamp)\n .slice(0, limit)\n .map(task => ({\n id: task.id,\n type: task.type,\n status: task.success ? 'completed' : 'failed',\n startTime: task.timestamp - task.duration,\n endTime: task.timestamp,\n duration: task.duration\n }));\n } catch (error) {\n return [];\n }\n }\n\n async getOverallHealth(): Promise<'healthy' | 'warning' | 'error'> {\n try {\n const systemMetrics = await this.getSystemMetrics();\n const perfMetrics = await this.getPerformanceMetrics();\n \n if (!systemMetrics && !perfMetrics) {\n return 'error';\n }\n \n // Check memory usage\n if (systemMetrics && systemMetrics.memoryUsagePercent > 90) {\n return 'error';\n }\n \n if (systemMetrics && systemMetrics.memoryUsagePercent > 75) {\n return 'warning';\n }\n \n // Check CPU load\n if (systemMetrics && systemMetrics.cpuLoad > 0.8) {\n return 'warning';\n }\n \n // Check task failure rate\n if (perfMetrics && perfMetrics.totalTasks > 0) {\n const failureRate = perfMetrics.failedTasks / perfMetrics.totalTasks;\n if (failureRate > 0.5) {\n return 'error';\n }\n if (failureRate > 0.2) {\n return 'warning';\n }\n }\n \n return 'healthy';\n } catch (error) {\n return 'error';\n }\n }\n\n private async getSessionFiles(): Promise<string[]> {\n try {\n const files = await fs.readdir(path.join(this.sessionsDir, 'pair'));\n return files.filter(f => f.endsWith('.json')).sort();\n } catch (error) {\n return [];\n }\n }\n\n async getMCPServerStatus(): Promise<MCPServerStatus> {\n try {\n // Check if MCP server process is running\n const { stdout } = await execAsync('ps aux | grep -E \"mcp-server\\\\.js|claude-flow mcp start\" | grep -v grep | wc -l');\n const processCount = parseInt(stdout.trim(), 10);\n \n // Check for orchestrator running\n const { stdout: orchestratorOut } = await execAsync('ps aux | grep -E \"claude-flow start\" | grep -v grep | wc -l');\n const orchestratorRunning = parseInt(orchestratorOut.trim(), 10) > 0;\n \n // Determine status\n const isRunning = processCount > 0;\n \n // Try to get port from process (default is 3000)\n let port: number | null = 3000;\n try {\n const { stdout: portOut } = await execAsync('lsof -i :3000 2>/dev/null | grep LISTEN | wc -l');\n if (parseInt(portOut.trim(), 10) === 0) {\n // If port 3000 not listening, check other common ports\n port = null;\n }\n } catch {\n // lsof might not be available or port not in use\n }\n \n return {\n running: isRunning,\n processCount,\n orchestratorRunning,\n port,\n connections: processCount > 0 ? Math.max(1, processCount - 1) : 0 // Estimate connections\n };\n } catch (error) {\n // Fallback if commands fail\n return {\n running: false,\n processCount: 0,\n orchestratorRunning: false,\n port: null,\n connections: 0\n };\n }\n }\n}"],"names":["fs","path","exec","promisify","execAsync","MetricsReader","metricsDir","sessionsDir","getSystemMetrics","filePath","join","content","readFile","metrics","JSON","parse","length","error","getTaskMetrics","getPerformanceMetrics","getActiveAgents","perfMetrics","sessionFiles","getSessionFiles","agents","file","sessionData","Array","isArray","push","activeCount","activeAgents","totalCount","totalAgents","i","id","name","type","status","activeTasks","lastActivity","Date","now","getSessionStatus","mostRecentFile","getRecentTasks","limit","taskMetrics","sort","a","b","timestamp","slice","map","task","success","startTime","duration","endTime","getOverallHealth","systemMetrics","memoryUsagePercent","cpuLoad","totalTasks","failureRate","failedTasks","files","readdir","filter","f","endsWith","getMCPServerStatus","stdout","processCount","parseInt","trim","orchestratorOut","orchestratorRunning","isRunning","port","portOut","running","connections","Math","max"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ {
2
+ "startTime": 1760387417559,
3
+ "totalTasks": 1,
4
+ "successfulTasks": 1,
5
+ "failedTasks": 0,
6
+ "totalAgents": 0,
7
+ "activeAgents": 0,
8
+ "neuralEvents": 0
9
+ }
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "id": "cmd-hooks-1760387417663",
4
+ "type": "hooks",
5
+ "success": true,
6
+ "duration": 7.150390000000016,
7
+ "timestamp": 1760387417671,
8
+ "metadata": {}
9
+ }
10
+ ]