claude-flow 2.7.0-alpha.7 → 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.
- package/bin/claude-flow +1 -1
- package/dist/src/cli/help-formatter.js +5 -0
- package/dist/src/cli/simple-commands/memory.js +22 -15
- package/dist/src/cli/simple-commands/memory.js.map +1 -1
- package/dist/src/cli/simple-commands/performance-metrics.js +231 -1
- package/dist/src/cli/simple-commands/performance-metrics.js.map +1 -1
- package/dist/src/cli/validation-helper.js.map +1 -1
- package/dist/src/core/version.js.map +1 -1
- package/dist/src/memory/swarm-memory.js +340 -421
- package/dist/src/memory/swarm-memory.js.map +1 -1
- package/dist/src/utils/key-redactor.js.map +1 -1
- package/dist/src/utils/metrics-reader.js +37 -39
- package/dist/src/utils/metrics-reader.js.map +1 -1
- package/docs/.claude-flow/metrics/performance.json +1 -1
- package/docs/.claude-flow/metrics/task-metrics.json +3 -3
- package/docs/PERFORMANCE-JSON-IMPROVEMENTS.md +277 -0
- package/docs/PERFORMANCE-METRICS-GUIDE.md +259 -0
- package/docs/integrations/agentic-flow/AGENTIC_FLOW_SECURITY_TEST_REPORT.md +7 -7
- package/docs/integrations/reasoningbank/MIGRATION-v1.5.13.md +189 -0
- package/docs/reports/REASONINGBANK_STATUS_UPDATE_v2_7_0_alpha_7.md +366 -0
- package/docs/reports/validation/DOCKER_SQL_FALLBACK_VALIDATION.md +398 -0
- package/docs/reports/validation/MEMORY_REDACTION_TEST_REPORT.md +7 -7
- package/docs/reports/validation/SQL_FALLBACK_VALIDATION_REPORT.md +405 -0
- package/docs/setup/MCP-SETUP-GUIDE.md +154 -0
- package/package.json +5 -6
- package/src/cli/simple-commands/memory.js +27 -17
- package/src/cli/simple-commands/performance-metrics.js +268 -2
- package/src/reasoningbank/reasoningbank-adapter.js +183 -132
|
@@ -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.
|
|
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/core/version.
|
|
1
|
+
{"version":3,"sources":["../../../src/core/version.ts"],"sourcesContent":["/**\n * Centralized version management\n * Reads version from package.json to ensure consistency\n */\n\nimport { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\n// Get the directory of this module\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Read version from package.json\nlet VERSION: string;\nlet BUILD_DATE: string;\n\ntry {\n // Navigate to project root and read package.json\n const packageJsonPath = join(__dirname, '../../package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n VERSION = packageJson.version;\n BUILD_DATE = new Date().toISOString().split('T')[0];\n} catch (error) {\n // Fallback version if package.json can't be read\n console.warn('Warning: Could not read version from package.json, using fallback');\n VERSION = '2.0.0-alpha.91';\n BUILD_DATE = new Date().toISOString().split('T')[0];\n}\n\nexport { VERSION, BUILD_DATE };\n\n// Helper function to get formatted version string\nexport function getVersionString(includeV = true): string {\n return includeV ? `v${VERSION}` : VERSION;\n}\n\n// Helper function for version display in CLI\nexport function displayVersion(): void {\n console.log(getVersionString());\n}"],"names":["readFileSync","join","dirname","fileURLToPath","__filename","url","__dirname","VERSION","BUILD_DATE","packageJsonPath","packageJson","JSON","parse","version","Date","toISOString","split","error","console","warn","getVersionString","includeV","displayVersion","log"],"mappings":"AAKA,SAASA,YAAY,QAAQ,KAAK;AAClC,SAASC,IAAI,EAAEC,OAAO,QAAQ,OAAO;AACrC,SAASC,aAAa,QAAQ,MAAM;AAGpC,MAAMC,aAAaD,cAAc,YAAYE,GAAG;AAChD,MAAMC,YAAYJ,QAAQE;AAG1B,IAAIG;AACJ,IAAIC;AAEJ,IAAI;IAEF,MAAMC,kBAAkBR,KAAKK,WAAW;IACxC,MAAMI,cAAcC,KAAKC,KAAK,CAACZ,aAAaS,iBAAiB;IAC7DF,UAAUG,YAAYG,OAAO;IAC7BL,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD,EAAE,OAAOC,OAAO;IAEdC,QAAQC,IAAI,CAAC;IACbZ,UAAU;IACVC,aAAa,IAAIM,OAAOC,WAAW,GAAGC,KAAK,CAAC,IAAI,CAAC,EAAE;AACrD;AAEA,SAAST,OAAO,EAAEC,UAAU,GAAG;AAG/B,OAAO,SAASY,iBAAiBC,WAAW,IAAI;IAC9C,OAAOA,WAAW,CAAC,CAAC,EAAEd,SAAS,GAAGA;AACpC;AAGA,OAAO,SAASe;IACdJ,QAAQK,GAAG,CAACH;AACd"}
|