claude-flow-novice 1.3.0 → 1.3.2

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 (305) hide show
  1. package/.claude-flow-novice/preferences/generation.json +147 -0
  2. package/.claude-flow-novice/preferences/language-configs/javascript.json +51 -0
  3. package/.claude-flow-novice/preferences/language-configs/python.json +50 -0
  4. package/.claude-flow-novice/preferences/language-configs/rust.json +237 -0
  5. package/.claude-flow-novice/preferences/language-configs/typescript.json +54 -0
  6. package/.claude-flow-novice/preferences/project-local.json +91 -0
  7. package/.claude-flow-novice/preferences/resource-delegation.json +120 -0
  8. package/.claude-flow-novice/preferences/team-shared.json +195 -0
  9. package/.claude-flow-novice/preferences/user-global.json +247 -0
  10. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-JAVASCRIPT.md +769 -0
  11. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-PYTHON.md +1214 -0
  12. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-RUST.md +475 -0
  13. package/.claude-flow-novice/templates/claude-md-templates/CLAUDE-TYPESCRIPT.md +851 -0
  14. package/.claude-flow-novice/templates/claude-md-templates/README.md +263 -0
  15. package/CLAUDE.md +81 -0
  16. package/README-NPM.md +0 -0
  17. package/package.json +11 -7
  18. package/scripts/build/README.md +167 -0
  19. package/scripts/build/build-config.js +27 -0
  20. package/scripts/build/build-prompt-copier.sh +30 -0
  21. package/scripts/build/performance-monitor.js +869 -0
  22. package/scripts/build/prepare-publish.js +150 -0
  23. package/scripts/build/typescript-fixer.js +621 -0
  24. package/scripts/build/unified-builder.sh +428 -0
  25. package/scripts/build/update-bin-version.js +32 -0
  26. package/scripts/dev/README.md +264 -0
  27. package/scripts/dev/claude-flow-wrapper.sh +35 -0
  28. package/scripts/dev/claude-monitor.py +419 -0
  29. package/scripts/dev/claude-sparc.sh +562 -0
  30. package/scripts/dev/claude-wrapper.sh +17 -0
  31. package/scripts/dev/demo-phase3-compliance.js +172 -0
  32. package/scripts/dev/demo-task-system.ts +224 -0
  33. package/scripts/dev/deployment-validator.js +315 -0
  34. package/scripts/dev/spawn-claude-terminal.sh +32 -0
  35. package/scripts/dev/start-portal.sh +506 -0
  36. package/scripts/dev/start-web-ui.js +15 -0
  37. package/scripts/dev/stop-portal.sh +311 -0
  38. package/scripts/dev/validate-examples.ts +288 -0
  39. package/scripts/dev/validate-phase2.cjs +451 -0
  40. package/scripts/dev/validate-phase2.js +785 -0
  41. package/scripts/dev/validate-phase3.cjs +208 -0
  42. package/scripts/dev/validate-security-remediation.js +1 -0
  43. package/scripts/legacy/README.md +272 -0
  44. package/scripts/legacy/batch-fix-ts.sh +54 -0
  45. package/scripts/legacy/build-migration.sh +105 -0
  46. package/scripts/legacy/build-monitor.js +209 -0
  47. package/scripts/legacy/build-with-filter.sh +84 -0
  48. package/scripts/legacy/build-workaround.sh +71 -0
  49. package/scripts/legacy/fix-ts-advanced.js +358 -0
  50. package/scripts/legacy/fix-ts-final.sh +50 -0
  51. package/scripts/legacy/fix-ts-targeted.sh +49 -0
  52. package/scripts/legacy/fix-typescript-errors.js +305 -0
  53. package/scripts/legacy/force-build.sh +63 -0
  54. package/scripts/legacy/optimize-performance.js +400 -0
  55. package/scripts/legacy/performance-monitor.js +263 -0
  56. package/scripts/legacy/performance-monitoring.js +532 -0
  57. package/scripts/legacy/performance-test-runner.js +645 -0
  58. package/scripts/legacy/quick-fix-ts.js +281 -0
  59. package/scripts/legacy/safe-build.sh +63 -0
  60. package/scripts/migration/README.md +434 -0
  61. package/scripts/migration/install-arm64.js +78 -0
  62. package/scripts/migration/install.js +83 -0
  63. package/scripts/migration/migrate-hooks.js +173 -0
  64. package/scripts/migration/migration-examples.ts +318 -0
  65. package/scripts/optimization/build-optimizer.js +438 -0
  66. package/scripts/optimization/config-validator.js +761 -0
  67. package/scripts/optimization/test-optimization.js +432 -0
  68. package/scripts/optimization/unified-activation.js +839 -0
  69. package/scripts/performance/ACTIVATION_COMMANDS.md +292 -0
  70. package/scripts/performance/sqlite-enhanced-activation.sh +583 -0
  71. package/scripts/performance/test-enhanced-backend.sh +504 -0
  72. package/scripts/performance-test-runner.js +698 -0
  73. package/scripts/security/README.md +339 -0
  74. package/scripts/security/install-git-hooks.sh +132 -0
  75. package/scripts/security/ruv-swarm-safe.js +74 -0
  76. package/scripts/test/README.md +236 -0
  77. package/scripts/test/check-links.ts +274 -0
  78. package/scripts/test/check-performance-regression.ts +168 -0
  79. package/scripts/test/coverage-report.ts +692 -0
  80. package/scripts/test/generate-swarm-tests.js +633 -0
  81. package/scripts/test/integration-test-validation.cjs +253 -0
  82. package/scripts/test/load-test-swarm.js +576 -0
  83. package/scripts/test/run-phase3-compliance-tests.js +427 -0
  84. package/scripts/test/test-batch-tasks.ts +29 -0
  85. package/scripts/test/test-byzantine-resolution.js +246 -0
  86. package/scripts/test/test-claude-spawn-options.sh +63 -0
  87. package/scripts/test/test-cli-wizard.js +331 -0
  88. package/scripts/test/test-comprehensive.js +401 -0
  89. package/scripts/test/test-coordination-features.ts +238 -0
  90. package/scripts/test/test-fallback-systems.js +276 -0
  91. package/scripts/test/test-init-command.ts +302 -0
  92. package/scripts/test/test-mcp.ts +251 -0
  93. package/scripts/test/test-runner.ts +568 -0
  94. package/scripts/test/test-swarm-integration.sh +92 -0
  95. package/scripts/test/test-swarm.ts +142 -0
  96. package/scripts/test/validation-summary.ts +408 -0
  97. package/scripts/utils/README.md +261 -0
  98. package/scripts/utils/clean-build-artifacts.sh +94 -0
  99. package/scripts/utils/cleanup-root.sh +69 -0
  100. package/scripts/utils/fix-cliffy-imports.js +307 -0
  101. package/scripts/utils/fix-duplicate-imports.js +114 -0
  102. package/scripts/utils/fix-error-handling.cjs +70 -0
  103. package/scripts/utils/fix-import-paths.js +104 -0
  104. package/scripts/utils/fix-imports.js +116 -0
  105. package/scripts/utils/fix-shebang.js +78 -0
  106. package/scripts/utils/fix-test-modules.js +27 -0
  107. package/scripts/utils/fix-timezone-issue-246.js +200 -0
  108. package/scripts/utils/fix-ts-comprehensive.py +182 -0
  109. package/scripts/utils/fix-ts-targeted-batch.js +250 -0
  110. package/scripts/utils/remove-benchmark-conflicts.sh +140 -0
  111. package/scripts/utils/simple-test-fixer.js +190 -0
  112. package/scripts/utils/validate-metrics-structure.cjs +144 -0
  113. package/scripts/verify-mcp-server.js +86 -0
  114. package/src/cli/simple-commands/__tests__/agent.test.js +291 -0
  115. package/src/cli/simple-commands/__tests__/memory.test.js +8 -0
  116. package/src/cli/simple-commands/__tests__/swarm.test.js +371 -0
  117. package/src/cli/simple-commands/__tests__/task.test.js +8 -0
  118. package/src/cli/simple-commands/agent.js +216 -0
  119. package/src/cli/simple-commands/analysis.js +570 -0
  120. package/src/cli/simple-commands/automation-executor.js +1603 -0
  121. package/src/cli/simple-commands/automation.js +627 -0
  122. package/src/cli/simple-commands/batch-manager.js +338 -0
  123. package/src/cli/simple-commands/claude-telemetry.js +311 -0
  124. package/src/cli/simple-commands/claude-track.js +102 -0
  125. package/src/cli/simple-commands/concurrent-display.js +348 -0
  126. package/src/cli/simple-commands/config.js +319 -0
  127. package/src/cli/simple-commands/coordination.js +307 -0
  128. package/src/cli/simple-commands/enhanced-ui-views.js +654 -0
  129. package/src/cli/simple-commands/enhanced-webui-complete.js +1038 -0
  130. package/src/cli/simple-commands/fix-hook-variables.js +363 -0
  131. package/src/cli/simple-commands/github/gh-coordinator.js +605 -0
  132. package/src/cli/simple-commands/github/github-api.js +624 -0
  133. package/src/cli/simple-commands/github/init.js +543 -0
  134. package/src/cli/simple-commands/github.js +377 -0
  135. package/src/cli/simple-commands/goal.js +145 -0
  136. package/src/cli/simple-commands/hive-mind/auto-save-middleware.js +311 -0
  137. package/src/cli/simple-commands/hive-mind/communication.js +740 -0
  138. package/src/cli/simple-commands/hive-mind/core.js +1031 -0
  139. package/src/cli/simple-commands/hive-mind/db-optimizer.js +872 -0
  140. package/src/cli/simple-commands/hive-mind/mcp-wrapper.js +1364 -0
  141. package/src/cli/simple-commands/hive-mind/memory.js +1292 -0
  142. package/src/cli/simple-commands/hive-mind/performance-optimizer.js +618 -0
  143. package/src/cli/simple-commands/hive-mind/performance-test.js +373 -0
  144. package/src/cli/simple-commands/hive-mind/queen.js +809 -0
  145. package/src/cli/simple-commands/hive-mind/session-manager.js +1223 -0
  146. package/src/cli/simple-commands/hive-mind-optimize.js +361 -0
  147. package/src/cli/simple-commands/hive-mind-wizard.js +281 -0
  148. package/src/cli/simple-commands/hive-mind.js +3112 -0
  149. package/src/cli/simple-commands/hive.js +140 -0
  150. package/src/cli/simple-commands/hook-safety.js +671 -0
  151. package/src/cli/simple-commands/hooks.js +1268 -0
  152. package/src/cli/simple-commands/init/.claude/checkpoints/1756224542.json +7 -0
  153. package/src/cli/simple-commands/init/.claude/checkpoints/1756224544.json +8 -0
  154. package/src/cli/simple-commands/init/README.md +106 -0
  155. package/src/cli/simple-commands/init/VALIDATION_ROLLBACK.md +488 -0
  156. package/src/cli/simple-commands/init/agent-copier.js +347 -0
  157. package/src/cli/simple-commands/init/batch-init.js +663 -0
  158. package/src/cli/simple-commands/init/claude-commands/claude-flow-commands.js +438 -0
  159. package/src/cli/simple-commands/init/claude-commands/optimized-claude-flow-commands.js +876 -0
  160. package/src/cli/simple-commands/init/claude-commands/optimized-slash-commands.js +356 -0
  161. package/src/cli/simple-commands/init/claude-commands/optimized-sparc-commands.js +501 -0
  162. package/src/cli/simple-commands/init/claude-commands/slash-commands.js +57 -0
  163. package/src/cli/simple-commands/init/claude-commands/sparc-commands.js +296 -0
  164. package/src/cli/simple-commands/init/copy-revised-templates.js +175 -0
  165. package/src/cli/simple-commands/init/executable-wrapper.js +122 -0
  166. package/src/cli/simple-commands/init/gitignore-updater.js +137 -0
  167. package/src/cli/simple-commands/init/help.js +110 -0
  168. package/src/cli/simple-commands/init/hive-mind-init.js +749 -0
  169. package/src/cli/simple-commands/init/index.js +1953 -0
  170. package/src/cli/simple-commands/init/performance-monitor.js +344 -0
  171. package/src/cli/simple-commands/init/rollback/backup-manager.js +542 -0
  172. package/src/cli/simple-commands/init/rollback/index.js +399 -0
  173. package/src/cli/simple-commands/init/rollback/recovery-manager.js +778 -0
  174. package/src/cli/simple-commands/init/rollback/rollback-executor.js +521 -0
  175. package/src/cli/simple-commands/init/rollback/state-tracker.js +486 -0
  176. package/src/cli/simple-commands/init/sparc/roo-readme.js +61 -0
  177. package/src/cli/simple-commands/init/sparc/roomodes-config.js +102 -0
  178. package/src/cli/simple-commands/init/sparc/workflows.js +40 -0
  179. package/src/cli/simple-commands/init/sparc-structure.js +68 -0
  180. package/src/cli/simple-commands/init/template-copier.js +640 -0
  181. package/src/cli/simple-commands/init/templates/CLAUDE.md +1185 -0
  182. package/src/cli/simple-commands/init/templates/CLAUDE.md.optimized +265 -0
  183. package/src/cli/simple-commands/init/templates/claude-flow-universal +81 -0
  184. package/src/cli/simple-commands/init/templates/claude-flow.bat +18 -0
  185. package/src/cli/simple-commands/init/templates/claude-flow.ps1 +24 -0
  186. package/src/cli/simple-commands/init/templates/claude-md.js +1101 -0
  187. package/src/cli/simple-commands/init/templates/commands/analysis/bottleneck-detect.md +162 -0
  188. package/src/cli/simple-commands/init/templates/commands/automation/auto-agent.md +122 -0
  189. package/src/cli/simple-commands/init/templates/commands/coordination/swarm-init.md +85 -0
  190. package/src/cli/simple-commands/init/templates/commands/github/github-swarm.md +121 -0
  191. package/src/cli/simple-commands/init/templates/commands/helpers/standard-checkpoint-hooks.sh +179 -0
  192. package/src/cli/simple-commands/init/templates/commands/hooks/notification.md +113 -0
  193. package/src/cli/simple-commands/init/templates/commands/hooks/post-command.md +116 -0
  194. package/src/cli/simple-commands/init/templates/commands/hooks/post-edit.md +117 -0
  195. package/src/cli/simple-commands/init/templates/commands/hooks/post-task.md +112 -0
  196. package/src/cli/simple-commands/init/templates/commands/hooks/pre-command.md +113 -0
  197. package/src/cli/simple-commands/init/templates/commands/hooks/pre-edit.md +113 -0
  198. package/src/cli/simple-commands/init/templates/commands/hooks/pre-search.md +112 -0
  199. package/src/cli/simple-commands/init/templates/commands/hooks/pre-task.md +111 -0
  200. package/src/cli/simple-commands/init/templates/commands/hooks/session-end.md +118 -0
  201. package/src/cli/simple-commands/init/templates/commands/hooks/session-restore.md +118 -0
  202. package/src/cli/simple-commands/init/templates/commands/hooks/session-start.md +117 -0
  203. package/src/cli/simple-commands/init/templates/coordination-md.js +340 -0
  204. package/src/cli/simple-commands/init/templates/coordination.md +16 -0
  205. package/src/cli/simple-commands/init/templates/enhanced-templates.js +2347 -0
  206. package/src/cli/simple-commands/init/templates/github-safe-enhanced.js +331 -0
  207. package/src/cli/simple-commands/init/templates/github-safe.js +106 -0
  208. package/src/cli/simple-commands/init/templates/memory-bank-md.js +259 -0
  209. package/src/cli/simple-commands/init/templates/memory-bank.md +16 -0
  210. package/src/cli/simple-commands/init/templates/readme-files.js +72 -0
  211. package/src/cli/simple-commands/init/templates/safe-hook-patterns.js +430 -0
  212. package/src/cli/simple-commands/init/templates/settings.json +109 -0
  213. package/src/cli/simple-commands/init/templates/settings.json.enhanced +35 -0
  214. package/src/cli/simple-commands/init/templates/sparc-modes.js +1401 -0
  215. package/src/cli/simple-commands/init/templates/verification-claude-md.js +432 -0
  216. package/src/cli/simple-commands/init/validation/config-validator.js +354 -0
  217. package/src/cli/simple-commands/init/validation/health-checker.js +599 -0
  218. package/src/cli/simple-commands/init/validation/index.js +388 -0
  219. package/src/cli/simple-commands/init/validation/mode-validator.js +387 -0
  220. package/src/cli/simple-commands/init/validation/post-init-validator.js +390 -0
  221. package/src/cli/simple-commands/init/validation/pre-init-validator.js +290 -0
  222. package/src/cli/simple-commands/init/validation/test-runner.js +488 -0
  223. package/src/cli/simple-commands/init.js +4 -0
  224. package/src/cli/simple-commands/mcp-health.js +163 -0
  225. package/src/cli/simple-commands/mcp-integration-layer.js +689 -0
  226. package/src/cli/simple-commands/mcp.js +420 -0
  227. package/src/cli/simple-commands/memory-consolidation.js +631 -0
  228. package/src/cli/simple-commands/memory.js +345 -0
  229. package/src/cli/simple-commands/migrate-hooks.js +63 -0
  230. package/src/cli/simple-commands/monitor.js +417 -0
  231. package/src/cli/simple-commands/neural.js +148 -0
  232. package/src/cli/simple-commands/pair-autofix-only.js +755 -0
  233. package/src/cli/simple-commands/pair-basic.js +751 -0
  234. package/src/cli/simple-commands/pair-old.js +623 -0
  235. package/src/cli/simple-commands/pair-working.js +849 -0
  236. package/src/cli/simple-commands/pair.js +849 -0
  237. package/src/cli/simple-commands/performance-hooks.js +149 -0
  238. package/src/cli/simple-commands/performance-metrics.js +601 -0
  239. package/src/cli/simple-commands/process-ui-enhanced.js +821 -0
  240. package/src/cli/simple-commands/process-ui.js +274 -0
  241. package/src/cli/simple-commands/realtime-update-system.js +659 -0
  242. package/src/cli/simple-commands/sparc/architecture.js +1750 -0
  243. package/src/cli/simple-commands/sparc/commands.js +575 -0
  244. package/src/cli/simple-commands/sparc/completion.js +1831 -0
  245. package/src/cli/simple-commands/sparc/coordinator.js +1045 -0
  246. package/src/cli/simple-commands/sparc/index.js +321 -0
  247. package/src/cli/simple-commands/sparc/phase-base.js +430 -0
  248. package/src/cli/simple-commands/sparc/pseudocode.js +984 -0
  249. package/src/cli/simple-commands/sparc/refinement.js +1856 -0
  250. package/src/cli/simple-commands/sparc/specification.js +736 -0
  251. package/src/cli/simple-commands/sparc-modes/architect.js +125 -0
  252. package/src/cli/simple-commands/sparc-modes/ask.js +126 -0
  253. package/src/cli/simple-commands/sparc-modes/code.js +148 -0
  254. package/src/cli/simple-commands/sparc-modes/debug.js +112 -0
  255. package/src/cli/simple-commands/sparc-modes/devops.js +137 -0
  256. package/src/cli/simple-commands/sparc-modes/docs-writer.js +38 -0
  257. package/src/cli/simple-commands/sparc-modes/generic.js +34 -0
  258. package/src/cli/simple-commands/sparc-modes/index.js +201 -0
  259. package/src/cli/simple-commands/sparc-modes/integration.js +55 -0
  260. package/src/cli/simple-commands/sparc-modes/mcp.js +38 -0
  261. package/src/cli/simple-commands/sparc-modes/monitoring.js +38 -0
  262. package/src/cli/simple-commands/sparc-modes/optimization.js +38 -0
  263. package/src/cli/simple-commands/sparc-modes/security-review.js +130 -0
  264. package/src/cli/simple-commands/sparc-modes/sparc-orchestrator.js +167 -0
  265. package/src/cli/simple-commands/sparc-modes/spec-pseudocode.js +38 -0
  266. package/src/cli/simple-commands/sparc-modes/supabase-admin.js +149 -0
  267. package/src/cli/simple-commands/sparc-modes/swarm.js +436 -0
  268. package/src/cli/simple-commands/sparc-modes/tdd.js +112 -0
  269. package/src/cli/simple-commands/sparc-modes/tutorial.js +277 -0
  270. package/src/cli/simple-commands/sparc.js +530 -0
  271. package/src/cli/simple-commands/start-ui.js +147 -0
  272. package/src/cli/simple-commands/start-wrapper.js +285 -0
  273. package/src/cli/simple-commands/start.js +2 -0
  274. package/src/cli/simple-commands/status.js +303 -0
  275. package/src/cli/simple-commands/stream-chain-clean.js +221 -0
  276. package/src/cli/simple-commands/stream-chain-fixed.js +89 -0
  277. package/src/cli/simple-commands/stream-chain-real.js +408 -0
  278. package/src/cli/simple-commands/stream-chain-working.js +323 -0
  279. package/src/cli/simple-commands/stream-chain.js +491 -0
  280. package/src/cli/simple-commands/stream-processor.js +340 -0
  281. package/src/cli/simple-commands/swarm-executor.js +253 -0
  282. package/src/cli/simple-commands/swarm-metrics-integration.js +371 -0
  283. package/src/cli/simple-commands/swarm-ui.js +741 -0
  284. package/src/cli/simple-commands/swarm-webui-integration.js +311 -0
  285. package/src/cli/simple-commands/swarm.js +2277 -0
  286. package/src/cli/simple-commands/task.js +228 -0
  287. package/src/cli/simple-commands/templates/mle-star-workflow.json +294 -0
  288. package/src/cli/simple-commands/timestamp-fix.js +104 -0
  289. package/src/cli/simple-commands/token-tracker.js +372 -0
  290. package/src/cli/simple-commands/tool-execution-framework.js +555 -0
  291. package/src/cli/simple-commands/train-and-stream.js +354 -0
  292. package/src/cli/simple-commands/training-pipeline.js +874 -0
  293. package/src/cli/simple-commands/training.js +288 -0
  294. package/src/cli/simple-commands/verification-hooks.js +336 -0
  295. package/src/cli/simple-commands/verification-integration.js +464 -0
  296. package/src/cli/simple-commands/verification-training-integration.js +646 -0
  297. package/src/cli/simple-commands/verification.js +551 -0
  298. package/src/cli/simple-commands/web-server.js +929 -0
  299. package/src/cli/simple-commands/webui-validator.js +136 -0
  300. package/src/language/README.md +503 -0
  301. package/src/language/claude-md-generator.js +618 -0
  302. package/src/language/cli.js +422 -0
  303. package/src/language/example.js +347 -0
  304. package/src/language/integration-system.js +619 -0
  305. package/src/language/language-detector.js +581 -0
@@ -0,0 +1,601 @@
1
+ /**
2
+ * Real Performance Metrics Collection System
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
+
11
+ // Metrics storage path
12
+ const METRICS_DIR = path.join(process.cwd(), '.claude-flow', 'metrics');
13
+ const PERFORMANCE_FILE = path.join(METRICS_DIR, 'performance.json');
14
+ const AGENT_METRICS_FILE = path.join(METRICS_DIR, 'agent-metrics.json');
15
+ const TASK_METRICS_FILE = path.join(METRICS_DIR, 'task-metrics.json');
16
+ const SYSTEM_METRICS_FILE = path.join(METRICS_DIR, 'system-metrics.json');
17
+
18
+ // In-memory metrics cache
19
+ 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
+ },
32
+ };
33
+
34
+ // Store interval ID for cleanup
35
+ let systemMonitoringInterval = null;
36
+
37
+ // Initialize metrics system
38
+ 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();
48
+ }
49
+
50
+ return true;
51
+ } catch (err) {
52
+ console.error('Failed to initialize metrics:', err);
53
+ return false;
54
+ }
55
+ }
56
+
57
+ // Load metrics from disk
58
+ 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) {
79
+ // Ignore errors, start fresh
80
+ }
81
+ }
82
+
83
+ // Save metrics to disk
84
+ 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) {
90
+ // Ignore save errors
91
+ }
92
+ }
93
+
94
+ // Track task execution
95
+ 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();
120
+ }
121
+
122
+ // Track agent activity
123
+ 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();
160
+ }
161
+
162
+ // Track neural events
163
+ export async function trackNeuralEvent(eventType, metadata = {}) {
164
+ metricsCache.performance.neuralEvents++;
165
+
166
+ await saveMetricsToDisk();
167
+ }
168
+
169
+ // Get performance report data
170
+ 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
+ };
235
+ }
236
+
237
+ // Get bottleneck analysis data
238
+ 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');
261
+ }
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,
276
+ });
277
+ recommendations.push(`Investigate ${type} agent failures and improve error handling`);
278
+ }
279
+
280
+ if (avgDuration > 15000) {
281
+ bottlenecks.push({
282
+ severity: 'warning',
283
+ component: `${type} agents`,
284
+ metric: `${(avgDuration / 1000).toFixed(1)}s avg duration`,
285
+ target: type,
286
+ });
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
+ }
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
+ };
333
+ }
334
+
335
+ // System monitoring
336
+ 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
365
+ }
366
+ }, 30000);
367
+
368
+ // Allow process to exit even with active interval
369
+ systemMonitoringInterval.unref();
370
+ }
371
+
372
+ // Stop system monitoring
373
+ export function stopSystemMonitoring() {
374
+ if (systemMonitoringInterval) {
375
+ clearInterval(systemMonitoringInterval);
376
+ systemMonitoringInterval = null;
377
+ }
378
+ }
379
+
380
+ // Get current system metrics
381
+ 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
+ };
400
+ }
401
+
402
+ // Parse timeframe string to milliseconds
403
+ 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;
418
+ }
419
+
420
+ // Check if file exists
421
+ async function fileExists(filepath) {
422
+ try {
423
+ await fs.access(filepath);
424
+ return true;
425
+ } catch {
426
+ return false;
427
+ }
428
+ }
429
+
430
+ // Cleanup function for graceful shutdown
431
+ export function cleanup() {
432
+ stopSystemMonitoring();
433
+ }
434
+
435
+ // Export metrics for reporting
436
+ 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`;
463
+ });
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}`);
486
+ }
487
+
488
+ // Generate HTML report
489
+ function generateHTMLReport(report) {
490
+ return `<!DOCTYPE html>
491
+ <html>
492
+ <head>
493
+ <title>Claude Flow Performance Report - ${new Date().toISOString()}</title>
494
+ <style>
495
+ body { font-family: Arial, sans-serif; margin: 20px; background: #f5f5f5; }
496
+ .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); }
497
+ h1, h2 { color: #333; }
498
+ .metric { display: inline-block; margin: 10px 20px 10px 0; }
499
+ .metric-label { color: #666; font-size: 14px; }
500
+ .metric-value { font-size: 24px; font-weight: bold; color: #2196F3; }
501
+ .trend { font-size: 14px; margin-left: 10px; }
502
+ .trend.positive { color: #4CAF50; }
503
+ .trend.negative { color: #F44336; }
504
+ table { width: 100%; border-collapse: collapse; margin: 20px 0; }
505
+ th, td { padding: 12px; text-align: left; border-bottom: 1px solid #ddd; }
506
+ th { background: #f5f5f5; font-weight: bold; }
507
+ .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; }
508
+ </style>
509
+ </head>
510
+ <body>
511
+ <div class="container">
512
+ <h1>Claude Flow Performance Report</h1>
513
+ <p>Generated: ${new Date().toISOString()} | Timeframe: ${report.timeframe}</p>
514
+
515
+ <h2>Summary Metrics</h2>
516
+ <div class="metrics">
517
+ <div class="metric">
518
+ <div class="metric-label">Total Tasks</div>
519
+ <div class="metric-value">${report.summary.totalTasks}</div>
520
+ ${report.trends.taskVolumeChange !== 0 ? `<span class="trend ${report.trends.taskVolumeChange > 0 ? 'positive' : 'negative'}">${report.trends.taskVolumeChange > 0 ? '+' : ''}${report.trends.taskVolumeChange}</span>` : ''}
521
+ </div>
522
+ <div class="metric">
523
+ <div class="metric-label">Success Rate</div>
524
+ <div class="metric-value">${report.summary.successRate.toFixed(1)}%</div>
525
+ ${report.trends.successRateChange !== 0 ? `<span class="trend ${report.trends.successRateChange > 0 ? 'positive' : 'negative'}">${report.trends.successRateChange > 0 ? '+' : ''}${report.trends.successRateChange.toFixed(1)}%</span>` : ''}
526
+ </div>
527
+ <div class="metric">
528
+ <div class="metric-label">Avg Duration</div>
529
+ <div class="metric-value">${report.summary.avgDuration.toFixed(1)}s</div>
530
+ ${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>` : ''}
531
+ </div>
532
+ <div class="metric">
533
+ <div class="metric-label">Memory Efficiency</div>
534
+ <div class="metric-value">${report.summary.memoryEfficiency.toFixed(0)}%</div>
535
+ </div>
536
+ </div>
537
+
538
+ <h2>Agent Performance</h2>
539
+ <table>
540
+ <thead>
541
+ <tr>
542
+ <th>Agent Type</th>
543
+ <th>Total Actions</th>
544
+ <th>Success Rate</th>
545
+ <th>Avg Duration</th>
546
+ </tr>
547
+ </thead>
548
+ <tbody>
549
+ ${Object.entries(report.agentMetrics)
550
+ .map(
551
+ ([type, metrics]) => `
552
+ <tr>
553
+ <td>${type}</td>
554
+ <td>${metrics.total}</td>
555
+ <td>${metrics.successRate.toFixed(1)}%</td>
556
+ <td>${(metrics.avgDuration / 1000).toFixed(1)}s</td>
557
+ </tr>
558
+ `,
559
+ )
560
+ .join('')}
561
+ </tbody>
562
+ </table>
563
+
564
+ <h2>Performance Trends</h2>
565
+ <div class="chart">
566
+ <p>Interactive charts would be displayed here</p>
567
+ </div>
568
+
569
+ <h2>Recent Tasks</h2>
570
+ <table>
571
+ <thead>
572
+ <tr>
573
+ <th>Task ID</th>
574
+ <th>Type</th>
575
+ <th>Status</th>
576
+ <th>Duration</th>
577
+ <th>Timestamp</th>
578
+ </tr>
579
+ </thead>
580
+ <tbody>
581
+ ${report.tasks
582
+ .slice(-10)
583
+ .reverse()
584
+ .map(
585
+ (task) => `
586
+ <tr>
587
+ <td>${task.id}</td>
588
+ <td>${task.type}</td>
589
+ <td>${task.success ? '✅ Success' : '❌ Failed'}</td>
590
+ <td>${(task.duration / 1000).toFixed(2)}s</td>
591
+ <td>${new Date(task.timestamp).toLocaleString()}</td>
592
+ </tr>
593
+ `,
594
+ )
595
+ .join('')}
596
+ </tbody>
597
+ </table>
598
+ </div>
599
+ </body>
600
+ </html>`;
601
+ }