claude-flow-novice 2.0.3 → 2.0.4

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 (272) hide show
  1. package/dist/src/cli/commands/guidance.js +487 -668
  2. package/dist/src/cli/commands/index-validate.js +18 -29
  3. package/dist/src/cli/commands/mcp-troubleshoot.js +230 -282
  4. package/dist/src/cli/commands/neural-goal-init.js +92 -125
  5. package/dist/src/cli/commands/swarm-exec.js +317 -393
  6. package/dist/src/cli/commands/swarm.js +1 -1
  7. package/dist/src/cli/commands/validate-framework.js +983 -1100
  8. package/dist/src/cli/commands/validate.js +144 -223
  9. package/dist/src/cli/simple-commands/__tests__/agent.test.js +265 -277
  10. package/dist/src/cli/simple-commands/__tests__/memory.test.js +6 -7
  11. package/dist/src/cli/simple-commands/__tests__/swarm.test.js +373 -356
  12. package/dist/src/cli/simple-commands/__tests__/task.test.js +6 -7
  13. package/dist/src/cli/simple-commands/agent.js +157 -193
  14. package/dist/src/cli/simple-commands/analysis.js +336 -446
  15. package/dist/src/cli/simple-commands/automation-executor.js +1095 -1339
  16. package/dist/src/cli/simple-commands/automation.js +481 -469
  17. package/dist/src/cli/simple-commands/batch-manager.js +261 -313
  18. package/dist/src/cli/simple-commands/claude-telemetry.js +241 -267
  19. package/dist/src/cli/simple-commands/claude-track.js +68 -90
  20. package/dist/src/cli/simple-commands/concurrent-display.js +266 -320
  21. package/dist/src/cli/simple-commands/config.js +245 -290
  22. package/dist/src/cli/simple-commands/coordination.js +182 -234
  23. package/dist/src/cli/simple-commands/enhanced-ui-views.js +812 -615
  24. package/dist/src/cli/simple-commands/enhanced-webui-complete.js +922 -981
  25. package/dist/src/cli/simple-commands/fix-hook-variables.js +274 -294
  26. package/dist/src/cli/simple-commands/github/gh-coordinator.js +378 -457
  27. package/dist/src/cli/simple-commands/github/github-api.js +535 -574
  28. package/dist/src/cli/simple-commands/github/init.js +276 -303
  29. package/dist/src/cli/simple-commands/github.js +222 -247
  30. package/dist/src/cli/simple-commands/goal.js +51 -63
  31. package/dist/src/cli/simple-commands/hive-mind/auto-save-middleware.js +208 -278
  32. package/dist/src/cli/simple-commands/hive-mind/communication.js +601 -696
  33. package/dist/src/cli/simple-commands/hive-mind/core.js +907 -979
  34. package/dist/src/cli/simple-commands/hive-mind/db-optimizer.js +406 -655
  35. package/dist/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1125 -1245
  36. package/dist/src/cli/simple-commands/hive-mind/memory.js +854 -1090
  37. package/dist/src/cli/simple-commands/hive-mind/performance-optimizer.js +459 -574
  38. package/dist/src/cli/simple-commands/hive-mind/performance-test.js +263 -347
  39. package/dist/src/cli/simple-commands/hive-mind/queen.js +727 -768
  40. package/dist/src/cli/simple-commands/hive-mind/session-manager.js +745 -1049
  41. package/dist/src/cli/simple-commands/hive-mind-optimize.js +227 -283
  42. package/dist/src/cli/simple-commands/hive-mind-wizard.js +174 -217
  43. package/dist/src/cli/simple-commands/hive-mind.js +1842 -2283
  44. package/dist/src/cli/simple-commands/hive.js +90 -79
  45. package/dist/src/cli/simple-commands/hook-safety.js +431 -521
  46. package/dist/src/cli/simple-commands/hooks/session-start-soul.js +203 -254
  47. package/dist/src/cli/simple-commands/hooks.js +1064 -1204
  48. package/dist/src/cli/simple-commands/init/agent-copier.js +294 -319
  49. package/dist/src/cli/simple-commands/init/batch-init.js +496 -562
  50. package/dist/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +13 -19
  51. package/dist/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +13 -19
  52. package/dist/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +61 -88
  53. package/dist/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +125 -150
  54. package/dist/src/cli/simple-commands/init/claude-commands/slash-commands.js +42 -49
  55. package/dist/src/cli/simple-commands/init/claude-commands/sparc-commands.js +43 -61
  56. package/dist/src/cli/simple-commands/init/copy-revised-templates.js +141 -147
  57. package/dist/src/cli/simple-commands/init/executable-wrapper.js +31 -44
  58. package/dist/src/cli/simple-commands/init/gitignore-updater.js +64 -90
  59. package/dist/src/cli/simple-commands/init/help.js +104 -107
  60. package/dist/src/cli/simple-commands/init/hive-mind-init.js +509 -528
  61. package/dist/src/cli/simple-commands/init/index.js +1510 -1759
  62. package/dist/src/cli/simple-commands/init/performance-monitor.js +234 -317
  63. package/dist/src/cli/simple-commands/init/rollback/backup-manager.js +441 -504
  64. package/dist/src/cli/simple-commands/init/rollback/index.js +289 -364
  65. package/dist/src/cli/simple-commands/init/rollback/recovery-manager.js +652 -728
  66. package/dist/src/cli/simple-commands/init/rollback/rollback-executor.js +416 -481
  67. package/dist/src/cli/simple-commands/init/rollback/state-tracker.js +369 -448
  68. package/dist/src/cli/simple-commands/init/sparc/roo-readme.js +1 -2
  69. package/dist/src/cli/simple-commands/init/sparc/roomodes-config.js +122 -99
  70. package/dist/src/cli/simple-commands/init/sparc/workflows.js +32 -37
  71. package/dist/src/cli/simple-commands/init/sparc-structure.js +55 -62
  72. package/dist/src/cli/simple-commands/init/template-copier.js +421 -533
  73. package/dist/src/cli/simple-commands/init/templates/coordination-md.js +3 -6
  74. package/dist/src/cli/simple-commands/init/templates/enhanced-templates.js +344 -318
  75. package/dist/src/cli/simple-commands/init/templates/github-safe-enhanced.js +173 -218
  76. package/dist/src/cli/simple-commands/init/templates/github-safe.js +65 -75
  77. package/dist/src/cli/simple-commands/init/templates/memory-bank-md.js +3 -6
  78. package/dist/src/cli/simple-commands/init/templates/readme-files.js +2 -4
  79. package/dist/src/cli/simple-commands/init/templates/safe-hook-patterns.js +187 -230
  80. package/dist/src/cli/simple-commands/init/templates/sparc-modes.js +53 -80
  81. package/dist/src/cli/simple-commands/init/templates/verification-claude-md.js +101 -85
  82. package/dist/src/cli/simple-commands/init/validation/config-validator.js +283 -330
  83. package/dist/src/cli/simple-commands/init/validation/health-checker.js +495 -561
  84. package/dist/src/cli/simple-commands/init/validation/index.js +302 -358
  85. package/dist/src/cli/simple-commands/init/validation/mode-validator.js +308 -359
  86. package/dist/src/cli/simple-commands/init/validation/post-init-validator.js +389 -366
  87. package/dist/src/cli/simple-commands/init/validation/pre-init-validator.js +270 -268
  88. package/dist/src/cli/simple-commands/init/validation/test-runner.js +427 -447
  89. package/dist/src/cli/simple-commands/init.js +1 -2
  90. package/dist/src/cli/simple-commands/mcp-health.js +131 -158
  91. package/dist/src/cli/simple-commands/mcp-integration-layer.js +533 -634
  92. package/dist/src/cli/simple-commands/mcp.js +345 -400
  93. package/dist/src/cli/simple-commands/memory-consolidation.js +426 -537
  94. package/dist/src/cli/simple-commands/memory.js +247 -311
  95. package/dist/src/cli/simple-commands/migrate-hooks.js +39 -46
  96. package/dist/src/cli/simple-commands/monitor.js +294 -363
  97. package/dist/src/cli/simple-commands/neural.js +51 -65
  98. package/dist/src/cli/simple-commands/pair-autofix-only.js +538 -662
  99. package/dist/src/cli/simple-commands/pair-basic.js +528 -656
  100. package/dist/src/cli/simple-commands/pair-old.js +430 -543
  101. package/dist/src/cli/simple-commands/pair-working.js +615 -751
  102. package/dist/src/cli/simple-commands/pair.js +615 -751
  103. package/dist/src/cli/simple-commands/performance-hooks.js +83 -111
  104. package/dist/src/cli/simple-commands/performance-metrics.js +348 -433
  105. package/dist/src/cli/simple-commands/process-ui-enhanced.js +708 -787
  106. package/dist/src/cli/simple-commands/process-ui.js +230 -254
  107. package/dist/src/cli/simple-commands/realtime-update-system.js +525 -611
  108. package/dist/src/cli/simple-commands/sparc/architecture.js +1704 -1530
  109. package/dist/src/cli/simple-commands/sparc/commands.js +438 -516
  110. package/dist/src/cli/simple-commands/sparc/completion.js +1224 -1481
  111. package/dist/src/cli/simple-commands/sparc/coordinator.js +913 -978
  112. package/dist/src/cli/simple-commands/sparc/index.js +241 -298
  113. package/dist/src/cli/simple-commands/sparc/phase-base.js +314 -390
  114. package/dist/src/cli/simple-commands/sparc/pseudocode.js +965 -869
  115. package/dist/src/cli/simple-commands/sparc/refinement.js +980 -1273
  116. package/dist/src/cli/simple-commands/sparc/specification.js +559 -645
  117. package/dist/src/cli/simple-commands/sparc-modes/architect.js +1 -1
  118. package/dist/src/cli/simple-commands/sparc-modes/ask.js +1 -1
  119. package/dist/src/cli/simple-commands/sparc-modes/code.js +1 -1
  120. package/dist/src/cli/simple-commands/sparc-modes/debug.js +1 -1
  121. package/dist/src/cli/simple-commands/sparc-modes/devops.js +1 -1
  122. package/dist/src/cli/simple-commands/sparc-modes/docs-writer.js +1 -1
  123. package/dist/src/cli/simple-commands/sparc-modes/generic.js +1 -1
  124. package/dist/src/cli/simple-commands/sparc-modes/index.js +47 -55
  125. package/dist/src/cli/simple-commands/sparc-modes/integration.js +1 -1
  126. package/dist/src/cli/simple-commands/sparc-modes/mcp.js +1 -1
  127. package/dist/src/cli/simple-commands/sparc-modes/monitoring.js +1 -1
  128. package/dist/src/cli/simple-commands/sparc-modes/optimization.js +1 -1
  129. package/dist/src/cli/simple-commands/sparc-modes/security-review.js +1 -1
  130. package/dist/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +1 -1
  131. package/dist/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +1 -1
  132. package/dist/src/cli/simple-commands/sparc-modes/supabase-admin.js +1 -1
  133. package/dist/src/cli/simple-commands/sparc-modes/swarm.js +101 -87
  134. package/dist/src/cli/simple-commands/sparc-modes/tdd.js +1 -1
  135. package/dist/src/cli/simple-commands/sparc-modes/tutorial.js +1 -1
  136. package/dist/src/cli/simple-commands/sparc.js +465 -493
  137. package/dist/src/cli/simple-commands/start-ui.js +108 -132
  138. package/dist/src/cli/simple-commands/start-wrapper.js +240 -268
  139. package/dist/src/cli/simple-commands/start.js +1 -1
  140. package/dist/src/cli/simple-commands/status.js +254 -275
  141. package/dist/src/cli/simple-commands/stream-chain-clean.js +128 -171
  142. package/dist/src/cli/simple-commands/stream-chain-fixed.js +61 -82
  143. package/dist/src/cli/simple-commands/stream-chain-real.js +267 -331
  144. package/dist/src/cli/simple-commands/stream-chain-working.js +211 -263
  145. package/dist/src/cli/simple-commands/stream-chain.js +260 -318
  146. package/dist/src/cli/simple-commands/stream-processor.js +290 -315
  147. package/dist/src/cli/simple-commands/swarm-executor.js +189 -222
  148. package/dist/src/cli/simple-commands/swarm-metrics-integration.js +208 -300
  149. package/dist/src/cli/simple-commands/swarm-ui.js +623 -703
  150. package/dist/src/cli/simple-commands/swarm-webui-integration.js +258 -286
  151. package/dist/src/cli/simple-commands/swarm.js +887 -1082
  152. package/dist/src/cli/simple-commands/task.js +161 -206
  153. package/dist/src/cli/simple-commands/timestamp-fix.js +59 -89
  154. package/dist/src/cli/simple-commands/token-tracker.js +258 -316
  155. package/dist/src/cli/simple-commands/tool-execution-framework.js +433 -519
  156. package/dist/src/cli/simple-commands/train-and-stream.js +275 -331
  157. package/dist/src/cli/simple-commands/training-pipeline.js +619 -725
  158. package/dist/src/cli/simple-commands/training.js +170 -227
  159. package/dist/src/cli/simple-commands/verification-hooks.js +261 -284
  160. package/dist/src/cli/simple-commands/verification-integration.js +389 -417
  161. package/dist/src/cli/simple-commands/verification-training-integration.js +486 -606
  162. package/dist/src/cli/simple-commands/verification.js +493 -513
  163. package/dist/src/cli/simple-commands/web-server.js +766 -836
  164. package/dist/src/cli/simple-commands/webui-validator.js +106 -124
  165. package/dist/src/coordination/event-bus/demo-wasm-integration.js +212 -251
  166. package/dist/src/coordination/event-bus/qe-event-bus.js +608 -748
  167. package/dist/src/coordination/event-bus/qe-event-bus.test.js +379 -454
  168. package/dist/src/coordination/iteration-tracker.js +363 -454
  169. package/dist/src/enterprise/analytics-manager.js +1135 -0
  170. package/dist/src/enterprise/audit-manager.js +1115 -0
  171. package/dist/src/enterprise/cloud-manager.js +891 -0
  172. package/dist/src/enterprise/deployment-manager.js +966 -0
  173. package/dist/src/enterprise/index.js +6 -0
  174. package/dist/src/enterprise/project-manager.js +584 -0
  175. package/dist/src/enterprise/security-manager.js +991 -0
  176. package/dist/src/index.js +1 -1
  177. package/dist/src/mcp/DEPRECATED.js +46 -60
  178. package/dist/src/mcp/fixes/mcp-error-fixes.js +115 -134
  179. package/dist/src/mcp/implementations/agent-tracker.js +114 -128
  180. package/dist/src/mcp/implementations/daa-tools.js +292 -350
  181. package/dist/src/mcp/implementations/workflow-tools.js +329 -361
  182. package/dist/src/mcp/mcp-config-manager.js +1183 -1331
  183. package/dist/src/mcp/mcp-server-novice-simplified.js +11 -17
  184. package/dist/src/mcp/mcp-server-novice.js +11 -17
  185. package/dist/src/mcp/mcp-server-sdk.js +11 -17
  186. package/dist/src/mcp/mcp-server.js +1620 -1484
  187. package/dist/src/mcp/ruv-swarm-wrapper.js +209 -239
  188. package/dist/src/memory/advanced-serializer.js +609 -589
  189. package/dist/src/memory/enhanced-examples.js +220 -305
  190. package/dist/src/memory/enhanced-memory.js +295 -336
  191. package/dist/src/memory/enhanced-session-serializer.js +408 -492
  192. package/dist/src/memory/fallback-memory-system.js +900 -1021
  193. package/dist/src/memory/fallback-store.js +93 -131
  194. package/dist/src/memory/high-performance-serialization.js +592 -730
  195. package/dist/src/memory/in-memory-store.js +161 -213
  196. package/dist/src/memory/index.js +123 -157
  197. package/dist/src/memory/lock-free-structures.js +578 -764
  198. package/dist/src/memory/memory-mapped-persistence.js +585 -766
  199. package/dist/src/memory/memory-pressure-manager.js +569 -707
  200. package/dist/src/memory/migration.js +358 -445
  201. package/dist/src/memory/shared-memory.js +641 -768
  202. package/dist/src/memory/sqlite-store.js +245 -325
  203. package/dist/src/memory/sqlite-wrapper.js +122 -151
  204. package/dist/src/memory/swarm-memory.js +470 -603
  205. package/dist/src/memory/test-example.js +126 -134
  206. package/dist/src/memory/ultra-fast-memory-store.js +622 -821
  207. package/dist/src/memory/unified-memory-manager.js +356 -437
  208. package/dist/src/migration/index.js +92 -0
  209. package/dist/src/migration/logger.js +121 -0
  210. package/dist/src/migration/migration-analyzer.js +268 -0
  211. package/dist/src/migration/migration-runner.js +522 -0
  212. package/dist/src/migration/migration-validator.js +285 -0
  213. package/dist/src/migration/progress-reporter.js +150 -0
  214. package/dist/src/migration/rollback-manager.js +321 -0
  215. package/dist/src/migration/tests/migration-system.test.js +7 -0
  216. package/dist/src/migration/types.js +3 -0
  217. package/dist/src/swarm/CodeRefactoringSwarm.js +777 -952
  218. package/dist/src/swarm/__tests__/integration.test.js +227 -0
  219. package/dist/src/swarm/__tests__/prompt-copier.test.js +344 -0
  220. package/dist/src/swarm/advanced-orchestrator.js +1095 -0
  221. package/dist/src/swarm/claude-code-interface.js +961 -0
  222. package/dist/src/swarm/claude-flow-executor.js +229 -0
  223. package/dist/src/swarm/consensus-coordinator.js +475 -0
  224. package/dist/src/swarm/coordinator.js +2993 -0
  225. package/dist/src/swarm/direct-executor.js +1180 -0
  226. package/dist/src/swarm/error-recovery/advanced-error-detection.js +691 -0
  227. package/dist/src/swarm/error-recovery/automated-recovery-workflows.js +998 -0
  228. package/dist/src/swarm/error-recovery/error-recovery-coordinator.js +1197 -0
  229. package/dist/src/swarm/error-recovery/recovery-monitoring.js +772 -0
  230. package/dist/src/swarm/error-recovery/resilience-architecture.js +714 -0
  231. package/dist/src/swarm/error-recovery/self-healing-mechanisms.js +1319 -0
  232. package/dist/src/swarm/error-recovery/test-error-recovery-effectiveness.js +808 -0
  233. package/dist/src/swarm/executor-v2.js +322 -0
  234. package/dist/src/swarm/executor.js +815 -0
  235. package/dist/src/swarm/hive-mind-integration.js +703 -0
  236. package/dist/src/swarm/index.js +41 -0
  237. package/dist/src/swarm/json-output-aggregator.js +267 -0
  238. package/dist/src/swarm/large-scale-coordinator.js +542 -0
  239. package/dist/src/swarm/mcp-integration-wrapper.js +628 -0
  240. package/dist/src/swarm/memory.js +1117 -0
  241. package/dist/src/swarm/optimizations/__tests__/optimization.test.js +348 -0
  242. package/dist/src/swarm/optimizations/async-file-manager.js +285 -0
  243. package/dist/src/swarm/optimizations/circular-buffer.js +162 -0
  244. package/dist/src/swarm/optimizations/connection-pool.js +244 -0
  245. package/dist/src/swarm/optimizations/index.js +28 -0
  246. package/dist/src/swarm/optimizations/optimized-executor.js +320 -0
  247. package/dist/src/swarm/optimizations/ttl-map.js +234 -0
  248. package/dist/src/swarm/prompt-cli.js +200 -0
  249. package/dist/src/swarm/prompt-copier-enhanced.js +202 -0
  250. package/dist/src/swarm/prompt-copier.js +381 -0
  251. package/dist/src/swarm/prompt-manager.js +295 -0
  252. package/dist/src/swarm/prompt-utils.js +310 -0
  253. package/dist/src/swarm/result-aggregator.js +718 -0
  254. package/dist/src/swarm/sparc-executor.js +1568 -0
  255. package/dist/src/swarm/strategies/auto.js +758 -0
  256. package/dist/src/swarm/strategies/base.js +128 -0
  257. package/dist/src/swarm/strategies/research.js +914 -0
  258. package/dist/src/swarm/strategies/strategy-metrics-patch.js +2 -0
  259. package/dist/src/swarm/types.js +52 -0
  260. package/dist/src/swarm/workers/copy-worker.js +56 -0
  261. package/dist/src/utils/__tests__/github-cli-safety-wrapper.test.js +332 -400
  262. package/dist/src/utils/github-cli-safe.js +56 -64
  263. package/dist/src/utils/github-cli-safety-wrapper.js +451 -546
  264. package/dist/src/utils/npx-isolated-cache.js +104 -119
  265. package/dist/src/utils/preference-manager.js +622 -652
  266. package/dist/src/utils/timezone-utils.js +86 -105
  267. package/dist/src/validators/epic-config-schema.js +214 -0
  268. package/dist/src/validators/index.js +10 -0
  269. package/dist/src/validators/swarm-init-validator.js +259 -0
  270. package/dist/src/validators/todowrite-batching-validator.js +215 -0
  271. package/dist/src/validators/todowrite-integration.js +187 -0
  272. package/package.json +2 -2
@@ -1,493 +1,418 @@
1
1
  /**
2
2
  * Real Performance Metrics Collection System
3
3
  * Tracks actual system performance, agent activity, and resource usage
4
- */
5
-
6
- import { promises as fs } from 'fs';
7
- import path from 'path';
8
- import os from 'os';
9
- import { performance } from 'perf_hooks';
10
-
4
+ */ import { promises as fs } from "fs";
5
+ import path from "path";
6
+ import os from "os";
7
+ import { performance } from "perf_hooks";
11
8
  // Metrics storage path
12
9
  const METRICS_DIR = path.join(process.cwd(), '.claude-flow', 'metrics');
13
10
  const PERFORMANCE_FILE = path.join(METRICS_DIR, 'performance.json');
14
11
  const AGENT_METRICS_FILE = path.join(METRICS_DIR, 'agent-metrics.json');
15
12
  const TASK_METRICS_FILE = path.join(METRICS_DIR, 'task-metrics.json');
16
13
  const SYSTEM_METRICS_FILE = path.join(METRICS_DIR, 'system-metrics.json');
17
-
18
14
  // In-memory metrics cache
19
15
  let metricsCache = {
20
- tasks: [],
21
- agents: {},
22
- system: [],
23
- performance: {
24
- startTime: Date.now(),
25
- totalTasks: 0,
26
- successfulTasks: 0,
27
- failedTasks: 0,
28
- totalAgents: 0,
29
- activeAgents: 0,
30
- neuralEvents: 0,
31
- },
16
+ tasks: [],
17
+ agents: {},
18
+ system: [],
19
+ performance: {
20
+ startTime: Date.now(),
21
+ totalTasks: 0,
22
+ successfulTasks: 0,
23
+ failedTasks: 0,
24
+ totalAgents: 0,
25
+ activeAgents: 0,
26
+ neuralEvents: 0
27
+ }
32
28
  };
33
-
34
29
  // Store interval ID for cleanup
35
30
  let systemMonitoringInterval = null;
36
-
37
31
  // Initialize metrics system
38
32
  export async function initializeMetrics(startMonitoring = true) {
39
- try {
40
- await fs.mkdir(METRICS_DIR, { recursive: true });
41
-
42
- // Load existing metrics if available
43
- await loadMetricsFromDisk();
44
-
45
- // Start system monitoring only if requested
46
- if (startMonitoring) {
47
- startSystemMonitoring();
33
+ try {
34
+ await fs.mkdir(METRICS_DIR, {
35
+ recursive: true
36
+ });
37
+ // Load existing metrics if available
38
+ await loadMetricsFromDisk();
39
+ // Start system monitoring only if requested
40
+ if (startMonitoring) {
41
+ startSystemMonitoring();
42
+ }
43
+ return true;
44
+ } catch (err) {
45
+ console.error('Failed to initialize metrics:', err);
46
+ return false;
48
47
  }
49
-
50
- return true;
51
- } catch (err) {
52
- console.error('Failed to initialize metrics:', err);
53
- return false;
54
- }
55
48
  }
56
-
57
49
  // Load metrics from disk
58
50
  async function loadMetricsFromDisk() {
59
- try {
60
- // Load performance metrics
61
- if (await fileExists(PERFORMANCE_FILE)) {
62
- const data = await fs.readFile(PERFORMANCE_FILE, 'utf8');
63
- const saved = JSON.parse(data);
64
- metricsCache.performance = { ...metricsCache.performance, ...saved };
65
- }
66
-
67
- // Load task metrics
68
- if (await fileExists(TASK_METRICS_FILE)) {
69
- const data = await fs.readFile(TASK_METRICS_FILE, 'utf8');
70
- metricsCache.tasks = JSON.parse(data);
71
- }
72
-
73
- // Load agent metrics
74
- if (await fileExists(AGENT_METRICS_FILE)) {
75
- const data = await fs.readFile(AGENT_METRICS_FILE, 'utf8');
76
- metricsCache.agents = JSON.parse(data);
77
- }
78
- } catch (err) {
51
+ try {
52
+ // Load performance metrics
53
+ if (await fileExists(PERFORMANCE_FILE)) {
54
+ const data = await fs.readFile(PERFORMANCE_FILE, 'utf8');
55
+ const saved = JSON.parse(data);
56
+ metricsCache.performance = {
57
+ ...metricsCache.performance,
58
+ ...saved
59
+ };
60
+ }
61
+ // Load task metrics
62
+ if (await fileExists(TASK_METRICS_FILE)) {
63
+ const data = await fs.readFile(TASK_METRICS_FILE, 'utf8');
64
+ metricsCache.tasks = JSON.parse(data);
65
+ }
66
+ // Load agent metrics
67
+ if (await fileExists(AGENT_METRICS_FILE)) {
68
+ const data = await fs.readFile(AGENT_METRICS_FILE, 'utf8');
69
+ metricsCache.agents = JSON.parse(data);
70
+ }
71
+ } catch (err) {
79
72
  // Ignore errors, start fresh
80
- }
73
+ }
81
74
  }
82
-
83
75
  // Save metrics to disk
84
76
  async function saveMetricsToDisk() {
85
- try {
86
- await fs.writeFile(PERFORMANCE_FILE, JSON.stringify(metricsCache.performance, null, 2));
87
- await fs.writeFile(TASK_METRICS_FILE, JSON.stringify(metricsCache.tasks, null, 2));
88
- await fs.writeFile(AGENT_METRICS_FILE, JSON.stringify(metricsCache.agents, null, 2));
89
- } catch (err) {
77
+ try {
78
+ await fs.writeFile(PERFORMANCE_FILE, JSON.stringify(metricsCache.performance, null, 2));
79
+ await fs.writeFile(TASK_METRICS_FILE, JSON.stringify(metricsCache.tasks, null, 2));
80
+ await fs.writeFile(AGENT_METRICS_FILE, JSON.stringify(metricsCache.agents, null, 2));
81
+ } catch (err) {
90
82
  // Ignore save errors
91
- }
83
+ }
92
84
  }
93
-
94
85
  // Track task execution
95
86
  export async function trackTaskExecution(taskId, taskType, success, duration, metadata = {}) {
96
- const task = {
97
- id: taskId,
98
- type: taskType,
99
- success,
100
- duration,
101
- timestamp: Date.now(),
102
- metadata,
103
- };
104
-
105
- metricsCache.tasks.push(task);
106
- metricsCache.performance.totalTasks++;
107
-
108
- if (success) {
109
- metricsCache.performance.successfulTasks++;
110
- } else {
111
- metricsCache.performance.failedTasks++;
112
- }
113
-
114
- // Keep only last 1000 tasks
115
- if (metricsCache.tasks.length > 1000) {
116
- metricsCache.tasks = metricsCache.tasks.slice(-1000);
117
- }
118
-
119
- await saveMetricsToDisk();
87
+ const task = {
88
+ id: taskId,
89
+ type: taskType,
90
+ success,
91
+ duration,
92
+ timestamp: Date.now(),
93
+ metadata
94
+ };
95
+ metricsCache.tasks.push(task);
96
+ metricsCache.performance.totalTasks++;
97
+ if (success) {
98
+ metricsCache.performance.successfulTasks++;
99
+ } else {
100
+ metricsCache.performance.failedTasks++;
101
+ }
102
+ // Keep only last 1000 tasks
103
+ if (metricsCache.tasks.length > 1000) {
104
+ metricsCache.tasks = metricsCache.tasks.slice(-1000);
105
+ }
106
+ await saveMetricsToDisk();
120
107
  }
121
-
122
108
  // Track agent activity
123
109
  export async function trackAgentActivity(agentId, agentType, action, duration, success = true) {
124
- if (!metricsCache.agents[agentType]) {
125
- metricsCache.agents[agentType] = {
126
- total: 0,
127
- successful: 0,
128
- failed: 0,
129
- totalDuration: 0,
130
- actions: [],
131
- };
132
- }
133
-
134
- const agent = metricsCache.agents[agentType];
135
- agent.total++;
136
- agent.totalDuration += duration;
137
-
138
- if (success) {
139
- agent.successful++;
140
- } else {
141
- agent.failed++;
142
- }
143
-
144
- agent.actions.push({
145
- id: agentId,
146
- action,
147
- duration,
148
- success,
149
- timestamp: Date.now(),
150
- });
151
-
152
- // Keep only last 100 actions per agent type
153
- if (agent.actions.length > 100) {
154
- agent.actions = agent.actions.slice(-100);
155
- }
156
-
157
- metricsCache.performance.totalAgents = Object.keys(metricsCache.agents).length;
158
-
159
- await saveMetricsToDisk();
110
+ if (!metricsCache.agents[agentType]) {
111
+ metricsCache.agents[agentType] = {
112
+ total: 0,
113
+ successful: 0,
114
+ failed: 0,
115
+ totalDuration: 0,
116
+ actions: []
117
+ };
118
+ }
119
+ const agent = metricsCache.agents[agentType];
120
+ agent.total++;
121
+ agent.totalDuration += duration;
122
+ if (success) {
123
+ agent.successful++;
124
+ } else {
125
+ agent.failed++;
126
+ }
127
+ agent.actions.push({
128
+ id: agentId,
129
+ action,
130
+ duration,
131
+ success,
132
+ timestamp: Date.now()
133
+ });
134
+ // Keep only last 100 actions per agent type
135
+ if (agent.actions.length > 100) {
136
+ agent.actions = agent.actions.slice(-100);
137
+ }
138
+ metricsCache.performance.totalAgents = Object.keys(metricsCache.agents).length;
139
+ await saveMetricsToDisk();
160
140
  }
161
-
162
141
  // Track neural events
163
142
  export async function trackNeuralEvent(eventType, metadata = {}) {
164
- metricsCache.performance.neuralEvents++;
165
-
166
- await saveMetricsToDisk();
143
+ metricsCache.performance.neuralEvents++;
144
+ await saveMetricsToDisk();
167
145
  }
168
-
169
146
  // Get performance report data
170
147
  export async function getPerformanceReport(timeframe = '24h') {
171
- const now = Date.now();
172
- const timeframeMs = parseTimeframe(timeframe);
173
- const cutoff = now - timeframeMs;
174
-
175
- // Filter tasks within timeframe
176
- const recentTasks = metricsCache.tasks.filter((task) => task.timestamp >= cutoff);
177
-
178
- // Calculate metrics
179
- const totalTasks = recentTasks.length;
180
- const successfulTasks = recentTasks.filter((t) => t.success).length;
181
- const successRate = totalTasks > 0 ? (successfulTasks / totalTasks) * 100 : 0;
182
- const avgDuration =
183
- totalTasks > 0 ? recentTasks.reduce((sum, t) => sum + t.duration, 0) / totalTasks : 0;
184
-
185
- // Agent metrics
186
- const agentMetrics = {};
187
- Object.entries(metricsCache.agents).forEach(([type, data]) => {
188
- const recentActions = data.actions.filter((a) => a.timestamp >= cutoff);
189
- if (recentActions.length > 0) {
190
- const successCount = recentActions.filter((a) => a.success).length;
191
- const avgDur = recentActions.reduce((sum, a) => sum + a.duration, 0) / recentActions.length;
192
-
193
- agentMetrics[type] = {
194
- total: recentActions.length,
195
- successRate: (successCount / recentActions.length) * 100,
196
- avgDuration: avgDur,
197
- };
198
- }
199
- });
200
-
201
- // System metrics
202
- const systemMetrics = await getSystemMetrics();
203
-
204
- // Calculate trends (compare to previous period)
205
- const prevCutoff = cutoff - timeframeMs;
206
- const prevTasks = metricsCache.tasks.filter(
207
- (t) => t.timestamp >= prevCutoff && t.timestamp < cutoff,
208
- );
209
- const prevSuccessRate =
210
- prevTasks.length > 0 ? (prevTasks.filter((t) => t.success).length / prevTasks.length) * 100 : 0;
211
- const prevAvgDuration =
212
- prevTasks.length > 0 ? prevTasks.reduce((sum, t) => sum + t.duration, 0) / prevTasks.length : 0;
213
-
214
- const trends = {
215
- successRateChange: successRate - prevSuccessRate,
216
- durationChange: avgDuration - prevAvgDuration,
217
- taskVolumeChange: totalTasks - prevTasks.length,
218
- };
219
-
220
- return {
221
- timeframe,
222
- summary: {
223
- totalTasks,
224
- successRate,
225
- avgDuration: avgDuration / 1000, // Convert to seconds
226
- agentsSpawned: Object.values(agentMetrics).reduce((sum, m) => sum + m.total, 0),
227
- memoryEfficiency: systemMetrics.memoryEfficiency,
228
- neuralEvents: metricsCache.performance.neuralEvents,
229
- },
230
- agentMetrics,
231
- systemMetrics,
232
- trends,
233
- tasks: recentTasks.slice(-20), // Last 20 tasks
234
- };
148
+ const now = Date.now();
149
+ const timeframeMs = parseTimeframe(timeframe);
150
+ const cutoff = now - timeframeMs;
151
+ // Filter tasks within timeframe
152
+ const recentTasks = metricsCache.tasks.filter((task)=>task.timestamp >= cutoff);
153
+ // Calculate metrics
154
+ const totalTasks = recentTasks.length;
155
+ const successfulTasks = recentTasks.filter((t)=>t.success).length;
156
+ const successRate = totalTasks > 0 ? successfulTasks / totalTasks * 100 : 0;
157
+ const avgDuration = totalTasks > 0 ? recentTasks.reduce((sum, t)=>sum + t.duration, 0) / totalTasks : 0;
158
+ // Agent metrics
159
+ const agentMetrics = {};
160
+ Object.entries(metricsCache.agents).forEach(([type, data])=>{
161
+ const recentActions = data.actions.filter((a)=>a.timestamp >= cutoff);
162
+ if (recentActions.length > 0) {
163
+ const successCount = recentActions.filter((a)=>a.success).length;
164
+ const avgDur = recentActions.reduce((sum, a)=>sum + a.duration, 0) / recentActions.length;
165
+ agentMetrics[type] = {
166
+ total: recentActions.length,
167
+ successRate: successCount / recentActions.length * 100,
168
+ avgDuration: avgDur
169
+ };
170
+ }
171
+ });
172
+ // System metrics
173
+ const systemMetrics = await getSystemMetrics();
174
+ // Calculate trends (compare to previous period)
175
+ const prevCutoff = cutoff - timeframeMs;
176
+ const prevTasks = metricsCache.tasks.filter((t)=>t.timestamp >= prevCutoff && t.timestamp < cutoff);
177
+ const prevSuccessRate = prevTasks.length > 0 ? prevTasks.filter((t)=>t.success).length / prevTasks.length * 100 : 0;
178
+ const prevAvgDuration = prevTasks.length > 0 ? prevTasks.reduce((sum, t)=>sum + t.duration, 0) / prevTasks.length : 0;
179
+ const trends = {
180
+ successRateChange: successRate - prevSuccessRate,
181
+ durationChange: avgDuration - prevAvgDuration,
182
+ taskVolumeChange: totalTasks - prevTasks.length
183
+ };
184
+ return {
185
+ timeframe,
186
+ summary: {
187
+ totalTasks,
188
+ successRate,
189
+ avgDuration: avgDuration / 1000,
190
+ agentsSpawned: Object.values(agentMetrics).reduce((sum, m)=>sum + m.total, 0),
191
+ memoryEfficiency: systemMetrics.memoryEfficiency,
192
+ neuralEvents: metricsCache.performance.neuralEvents
193
+ },
194
+ agentMetrics,
195
+ systemMetrics,
196
+ trends,
197
+ tasks: recentTasks.slice(-20)
198
+ };
235
199
  }
236
-
237
200
  // Get bottleneck analysis data
238
201
  export async function getBottleneckAnalysis(scope = 'system', target = 'all') {
239
- const bottlenecks = [];
240
- const recommendations = [];
241
-
242
- // Analyze task performance
243
- if (scope === 'system' || scope === 'task') {
244
- const slowTasks = metricsCache.tasks
245
- .filter((t) => t.duration > 10000) // Tasks taking more than 10s
246
- .sort((a, b) => b.duration - a.duration)
247
- .slice(0, 5);
248
-
249
- if (slowTasks.length > 0) {
250
- bottlenecks.push({
251
- severity: 'warning',
252
- component: 'Task execution',
253
- metric: `${slowTasks.length} slow tasks (>10s)`,
254
- details: slowTasks.map((t) => ({
255
- id: t.id,
256
- type: t.type,
257
- duration: t.duration / 1000,
258
- })),
259
- });
260
- recommendations.push('Optimize slow task types or break them into smaller subtasks');
202
+ const bottlenecks = [];
203
+ const recommendations = [];
204
+ // Analyze task performance
205
+ if (scope === 'system' || scope === 'task') {
206
+ const slowTasks = metricsCache.tasks.filter((t)=>t.duration > 10000) // Tasks taking more than 10s
207
+ .sort((a, b)=>b.duration - a.duration).slice(0, 5);
208
+ if (slowTasks.length > 0) {
209
+ bottlenecks.push({
210
+ severity: 'warning',
211
+ component: 'Task execution',
212
+ metric: `${slowTasks.length} slow tasks (>10s)`,
213
+ details: slowTasks.map((t)=>({
214
+ id: t.id,
215
+ type: t.type,
216
+ duration: t.duration / 1000
217
+ }))
218
+ });
219
+ recommendations.push('Optimize slow task types or break them into smaller subtasks');
220
+ }
261
221
  }
262
- }
263
-
264
- // Analyze agent performance
265
- if (scope === 'system' || scope === 'agent') {
266
- Object.entries(metricsCache.agents).forEach(([type, data]) => {
267
- const successRate = data.total > 0 ? (data.successful / data.total) * 100 : 100;
268
- const avgDuration = data.total > 0 ? data.totalDuration / data.total : 0;
269
-
270
- if (successRate < 80) {
271
- bottlenecks.push({
272
- severity: 'critical',
273
- component: `${type} agents`,
274
- metric: `${successRate.toFixed(1)}% success rate`,
275
- target: type,
222
+ // Analyze agent performance
223
+ if (scope === 'system' || scope === 'agent') {
224
+ Object.entries(metricsCache.agents).forEach(([type, data])=>{
225
+ const successRate = data.total > 0 ? data.successful / data.total * 100 : 100;
226
+ const avgDuration = data.total > 0 ? data.totalDuration / data.total : 0;
227
+ if (successRate < 80) {
228
+ bottlenecks.push({
229
+ severity: 'critical',
230
+ component: `${type} agents`,
231
+ metric: `${successRate.toFixed(1)}% success rate`,
232
+ target: type
233
+ });
234
+ recommendations.push(`Investigate ${type} agent failures and improve error handling`);
235
+ }
236
+ if (avgDuration > 15000) {
237
+ bottlenecks.push({
238
+ severity: 'warning',
239
+ component: `${type} agents`,
240
+ metric: `${(avgDuration / 1000).toFixed(1)}s avg duration`,
241
+ target: type
242
+ });
243
+ recommendations.push(`Optimize ${type} agent performance or increase parallelization`);
244
+ }
276
245
  });
277
- recommendations.push(`Investigate ${type} agent failures and improve error handling`);
278
- }
279
-
280
- if (avgDuration > 15000) {
246
+ }
247
+ // Analyze system resources
248
+ if (scope === 'system' || scope === 'memory') {
249
+ const systemMetrics = await getSystemMetrics();
250
+ if (systemMetrics.memoryUsagePercent > 80) {
251
+ bottlenecks.push({
252
+ severity: 'critical',
253
+ component: 'Memory usage',
254
+ metric: `${systemMetrics.memoryUsagePercent}% utilization`
255
+ });
256
+ recommendations.push('Implement memory optimization or increase system resources');
257
+ }
258
+ if (systemMetrics.cpuLoad > 0.8) {
259
+ bottlenecks.push({
260
+ severity: 'warning',
261
+ component: 'CPU usage',
262
+ metric: `${(systemMetrics.cpuLoad * 100).toFixed(1)}% load`
263
+ });
264
+ recommendations.push('Consider horizontal scaling or CPU optimization');
265
+ }
266
+ }
267
+ // Add positive indicators
268
+ if (bottlenecks.length === 0) {
281
269
  bottlenecks.push({
282
- severity: 'warning',
283
- component: `${type} agents`,
284
- metric: `${(avgDuration / 1000).toFixed(1)}s avg duration`,
285
- target: type,
270
+ severity: 'good',
271
+ component: 'Overall system',
272
+ metric: 'No bottlenecks detected'
286
273
  });
287
- recommendations.push(`Optimize ${type} agent performance or increase parallelization`);
288
- }
289
- });
290
- }
291
-
292
- // Analyze system resources
293
- if (scope === 'system' || scope === 'memory') {
294
- const systemMetrics = await getSystemMetrics();
295
-
296
- if (systemMetrics.memoryUsagePercent > 80) {
297
- bottlenecks.push({
298
- severity: 'critical',
299
- component: 'Memory usage',
300
- metric: `${systemMetrics.memoryUsagePercent}% utilization`,
301
- });
302
- recommendations.push('Implement memory optimization or increase system resources');
303
- }
304
-
305
- if (systemMetrics.cpuLoad > 0.8) {
306
- bottlenecks.push({
307
- severity: 'warning',
308
- component: 'CPU usage',
309
- metric: `${(systemMetrics.cpuLoad * 100).toFixed(1)}% load`,
310
- });
311
- recommendations.push('Consider horizontal scaling or CPU optimization');
312
274
  }
313
- }
314
-
315
- // Add positive indicators
316
- if (bottlenecks.length === 0) {
317
- bottlenecks.push({
318
- severity: 'good',
319
- component: 'Overall system',
320
- metric: 'No bottlenecks detected',
321
- });
322
- }
323
-
324
- return {
325
- scope,
326
- target,
327
- bottlenecks,
328
- recommendations,
329
- analysisDuration: performance.now(),
330
- confidenceScore: 0.85,
331
- issuesDetected: bottlenecks.filter((b) => b.severity !== 'good').length,
332
- };
275
+ return {
276
+ scope,
277
+ target,
278
+ bottlenecks,
279
+ recommendations,
280
+ analysisDuration: performance.now(),
281
+ confidenceScore: 0.85,
282
+ issuesDetected: bottlenecks.filter((b)=>b.severity !== 'good').length
283
+ };
333
284
  }
334
-
335
285
  // System monitoring
336
286
  function startSystemMonitoring() {
337
- // Clear any existing interval
338
- if (systemMonitoringInterval) {
339
- clearInterval(systemMonitoringInterval);
340
- }
341
-
342
- // Collect system metrics every 30 seconds
343
- systemMonitoringInterval = setInterval(async () => {
344
- const metrics = await getSystemMetrics();
345
-
346
- // Store system metrics
347
- if (!metricsCache.system) {
348
- metricsCache.system = [];
349
- }
350
-
351
- metricsCache.system.push({
352
- timestamp: Date.now(),
353
- ...metrics,
354
- });
355
-
356
- // Keep only last 24 hours of system metrics
357
- const dayAgo = Date.now() - 24 * 60 * 60 * 1000;
358
- metricsCache.system = metricsCache.system.filter((m) => m.timestamp > dayAgo);
359
-
360
- // Save to disk
361
- try {
362
- await fs.writeFile(SYSTEM_METRICS_FILE, JSON.stringify(metricsCache.system, null, 2));
363
- } catch (err) {
364
- // Ignore save errors
287
+ // Clear any existing interval
288
+ if (systemMonitoringInterval) {
289
+ clearInterval(systemMonitoringInterval);
365
290
  }
366
- }, 30000);
367
-
368
- // Allow process to exit even with active interval
369
- systemMonitoringInterval.unref();
291
+ // Collect system metrics every 30 seconds
292
+ systemMonitoringInterval = setInterval(async ()=>{
293
+ const metrics = await getSystemMetrics();
294
+ // Store system metrics
295
+ if (!metricsCache.system) {
296
+ metricsCache.system = [];
297
+ }
298
+ metricsCache.system.push({
299
+ timestamp: Date.now(),
300
+ ...metrics
301
+ });
302
+ // Keep only last 24 hours of system metrics
303
+ const dayAgo = Date.now() - 24 * 60 * 60 * 1000;
304
+ metricsCache.system = metricsCache.system.filter((m)=>m.timestamp > dayAgo);
305
+ // Save to disk
306
+ try {
307
+ await fs.writeFile(SYSTEM_METRICS_FILE, JSON.stringify(metricsCache.system, null, 2));
308
+ } catch (err) {
309
+ // Ignore save errors
310
+ }
311
+ }, 30000);
312
+ // Allow process to exit even with active interval
313
+ systemMonitoringInterval.unref();
370
314
  }
371
-
372
315
  // Stop system monitoring
373
316
  export function stopSystemMonitoring() {
374
- if (systemMonitoringInterval) {
375
- clearInterval(systemMonitoringInterval);
376
- systemMonitoringInterval = null;
377
- }
317
+ if (systemMonitoringInterval) {
318
+ clearInterval(systemMonitoringInterval);
319
+ systemMonitoringInterval = null;
320
+ }
378
321
  }
379
-
380
322
  // Get current system metrics
381
323
  async function getSystemMetrics() {
382
- const totalMem = os.totalmem();
383
- const freeMem = os.freemem();
384
- const usedMem = totalMem - freeMem;
385
- const memoryUsagePercent = (usedMem / totalMem) * 100;
386
-
387
- const cpuLoad = os.loadavg()[0] / os.cpus().length; // 1-minute load average
388
-
389
- return {
390
- memoryTotal: totalMem,
391
- memoryUsed: usedMem,
392
- memoryFree: freeMem,
393
- memoryUsagePercent,
394
- memoryEfficiency: 100 - memoryUsagePercent,
395
- cpuCount: os.cpus().length,
396
- cpuLoad,
397
- platform: os.platform(),
398
- uptime: os.uptime(),
399
- };
324
+ const totalMem = os.totalmem();
325
+ const freeMem = os.freemem();
326
+ const usedMem = totalMem - freeMem;
327
+ const memoryUsagePercent = usedMem / totalMem * 100;
328
+ const cpuLoad = os.loadavg()[0] / os.cpus().length; // 1-minute load average
329
+ return {
330
+ memoryTotal: totalMem,
331
+ memoryUsed: usedMem,
332
+ memoryFree: freeMem,
333
+ memoryUsagePercent,
334
+ memoryEfficiency: 100 - memoryUsagePercent,
335
+ cpuCount: os.cpus().length,
336
+ cpuLoad,
337
+ platform: os.platform(),
338
+ uptime: os.uptime()
339
+ };
400
340
  }
401
-
402
341
  // Parse timeframe string to milliseconds
403
342
  function parseTimeframe(timeframe) {
404
- const units = {
405
- h: 60 * 60 * 1000,
406
- d: 24 * 60 * 60 * 1000,
407
- };
408
-
409
- const match = timeframe.match(/^(\d+)([hd])$/);
410
- if (match) {
411
- const value = parseInt(match[1]);
412
- const unit = match[2];
413
- return value * units[unit];
414
- }
415
-
416
- // Default to 24 hours
417
- return 24 * 60 * 60 * 1000;
343
+ const units = {
344
+ h: 60 * 60 * 1000,
345
+ d: 24 * 60 * 60 * 1000
346
+ };
347
+ const match = timeframe.match(/^(\d+)([hd])$/);
348
+ if (match) {
349
+ const value = parseInt(match[1]);
350
+ const unit = match[2];
351
+ return value * units[unit];
352
+ }
353
+ // Default to 24 hours
354
+ return 24 * 60 * 60 * 1000;
418
355
  }
419
-
420
356
  // Check if file exists
421
357
  async function fileExists(filepath) {
422
- try {
423
- await fs.access(filepath);
424
- return true;
425
- } catch {
426
- return false;
427
- }
358
+ try {
359
+ await fs.access(filepath);
360
+ return true;
361
+ } catch {
362
+ return false;
363
+ }
428
364
  }
429
-
430
365
  // Cleanup function for graceful shutdown
431
366
  export function cleanup() {
432
- stopSystemMonitoring();
367
+ stopSystemMonitoring();
433
368
  }
434
-
435
369
  // Export metrics for reporting
436
370
  export async function exportMetrics(format = 'json') {
437
- const timestamp = Date.now();
438
- const reportsDir = path.join(process.cwd(), 'analysis-reports');
439
-
440
- await fs.mkdir(reportsDir, { recursive: true });
441
-
442
- if (format === 'json') {
443
- const reportPath = path.join(reportsDir, `performance-${timestamp}.json`);
444
- const data = {
445
- timestamp: new Date().toISOString(),
446
- performance: metricsCache.performance,
447
- tasks: metricsCache.tasks.slice(-100), // Last 100 tasks
448
- agents: metricsCache.agents,
449
- system: metricsCache.system.slice(-50), // Last 50 system snapshots
450
- };
451
-
452
- await fs.writeFile(reportPath, JSON.stringify(data, null, 2));
453
- return reportPath;
454
- }
455
-
456
- if (format === 'csv') {
457
- const reportPath = path.join(reportsDir, `performance-${timestamp}.csv`);
458
- let csv = 'Timestamp,Type,Metric,Value\n';
459
-
460
- // Add performance metrics
461
- Object.entries(metricsCache.performance).forEach(([key, value]) => {
462
- csv += `${new Date().toISOString()},performance,${key},${value}\n`;
371
+ const timestamp = Date.now();
372
+ const reportsDir = path.join(process.cwd(), 'analysis-reports');
373
+ await fs.mkdir(reportsDir, {
374
+ recursive: true
463
375
  });
464
-
465
- // Add agent metrics
466
- Object.entries(metricsCache.agents).forEach(([type, data]) => {
467
- csv += `${new Date().toISOString()},agent,${type}_total,${data.total}\n`;
468
- csv += `${new Date().toISOString()},agent,${type}_success_rate,${data.total > 0 ? (data.successful / data.total) * 100 : 0}\n`;
469
- csv += `${new Date().toISOString()},agent,${type}_avg_duration,${data.total > 0 ? data.totalDuration / data.total : 0}\n`;
470
- });
471
-
472
- await fs.writeFile(reportPath, csv);
473
- return reportPath;
474
- }
475
-
476
- if (format === 'html') {
477
- const reportPath = path.join(reportsDir, `performance-${timestamp}.html`);
478
- const report = await getPerformanceReport('24h');
479
-
480
- const html = generateHTMLReport(report);
481
- await fs.writeFile(reportPath, html);
482
- return reportPath;
483
- }
484
-
485
- throw new Error(`Unsupported format: ${format}`);
376
+ if (format === 'json') {
377
+ const reportPath = path.join(reportsDir, `performance-${timestamp}.json`);
378
+ const data = {
379
+ timestamp: new Date().toISOString(),
380
+ performance: metricsCache.performance,
381
+ tasks: metricsCache.tasks.slice(-100),
382
+ agents: metricsCache.agents,
383
+ system: metricsCache.system.slice(-50)
384
+ };
385
+ await fs.writeFile(reportPath, JSON.stringify(data, null, 2));
386
+ return reportPath;
387
+ }
388
+ if (format === 'csv') {
389
+ const reportPath = path.join(reportsDir, `performance-${timestamp}.csv`);
390
+ let csv = 'Timestamp,Type,Metric,Value\n';
391
+ // Add performance metrics
392
+ Object.entries(metricsCache.performance).forEach(([key, value])=>{
393
+ csv += `${new Date().toISOString()},performance,${key},${value}\n`;
394
+ });
395
+ // Add agent metrics
396
+ Object.entries(metricsCache.agents).forEach(([type, data])=>{
397
+ csv += `${new Date().toISOString()},agent,${type}_total,${data.total}\n`;
398
+ csv += `${new Date().toISOString()},agent,${type}_success_rate,${data.total > 0 ? data.successful / data.total * 100 : 0}\n`;
399
+ csv += `${new Date().toISOString()},agent,${type}_avg_duration,${data.total > 0 ? data.totalDuration / data.total : 0}\n`;
400
+ });
401
+ await fs.writeFile(reportPath, csv);
402
+ return reportPath;
403
+ }
404
+ if (format === 'html') {
405
+ const reportPath = path.join(reportsDir, `performance-${timestamp}.html`);
406
+ const report = await getPerformanceReport('24h');
407
+ const html = generateHTMLReport(report);
408
+ await fs.writeFile(reportPath, html);
409
+ return reportPath;
410
+ }
411
+ throw new Error(`Unsupported format: ${format}`);
486
412
  }
487
-
488
413
  // Generate HTML report
489
414
  function generateHTMLReport(report) {
490
- return `<!DOCTYPE html>
415
+ return `<!DOCTYPE html>
491
416
  <html>
492
417
  <head>
493
418
  <title>Claude Flow Performance Report - ${new Date().toISOString()}</title>
@@ -546,18 +471,14 @@ function generateHTMLReport(report) {
546
471
  </tr>
547
472
  </thead>
548
473
  <tbody>
549
- ${Object.entries(report.agentMetrics)
550
- .map(
551
- ([type, metrics]) => `
474
+ ${Object.entries(report.agentMetrics).map(([type, metrics])=>`
552
475
  <tr>
553
476
  <td>${type}</td>
554
477
  <td>${metrics.total}</td>
555
478
  <td>${metrics.successRate.toFixed(1)}%</td>
556
479
  <td>${(metrics.avgDuration / 1000).toFixed(1)}s</td>
557
480
  </tr>
558
- `,
559
- )
560
- .join('')}
481
+ `).join('')}
561
482
  </tbody>
562
483
  </table>
563
484
 
@@ -578,11 +499,7 @@ function generateHTMLReport(report) {
578
499
  </tr>
579
500
  </thead>
580
501
  <tbody>
581
- ${report.tasks
582
- .slice(-10)
583
- .reverse()
584
- .map(
585
- (task) => `
502
+ ${report.tasks.slice(-10).reverse().map((task)=>`
586
503
  <tr>
587
504
  <td>${task.id}</td>
588
505
  <td>${task.type}</td>
@@ -590,9 +507,7 @@ function generateHTMLReport(report) {
590
507
  <td>${(task.duration / 1000).toFixed(2)}s</td>
591
508
  <td>${new Date(task.timestamp).toLocaleString()}</td>
592
509
  </tr>
593
- `,
594
- )
595
- .join('')}
510
+ `).join('')}
596
511
  </tbody>
597
512
  </table>
598
513
  </div>