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,618 @@
1
+ /**
2
+ * Performance Optimizer for Hive Mind System
3
+ * Implements advanced performance optimizations including:
4
+ * - Async operation optimization
5
+ * - Connection pooling management
6
+ * - Batch operation coordination
7
+ * - Performance monitoring and auto-tuning
8
+ */
9
+
10
+ import EventEmitter from 'events';
11
+ import { performance } from 'perf_hooks';
12
+
13
+ /**
14
+ * AsyncOperationQueue for managing concurrent operations
15
+ */
16
+ class AsyncOperationQueue {
17
+ constructor(maxConcurrency = 10, timeout = 30000) {
18
+ this.maxConcurrency = maxConcurrency;
19
+ this.timeout = timeout;
20
+ this.running = 0;
21
+ this.queue = [];
22
+ this.results = new Map();
23
+ this.metrics = {
24
+ processed: 0,
25
+ failures: 0,
26
+ avgProcessingTime: 0,
27
+ totalProcessingTime: 0,
28
+ };
29
+ }
30
+
31
+ async add(operation, priority = 5) {
32
+ return new Promise((resolve, reject) => {
33
+ const queueItem = {
34
+ operation,
35
+ priority,
36
+ resolve,
37
+ reject,
38
+ addedAt: Date.now(),
39
+ id: `op-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
40
+ };
41
+
42
+ // Insert based on priority (higher priority first)
43
+ const insertIndex = this.queue.findIndex((item) => item.priority < priority);
44
+ if (insertIndex === -1) {
45
+ this.queue.push(queueItem);
46
+ } else {
47
+ this.queue.splice(insertIndex, 0, queueItem);
48
+ }
49
+
50
+ this._processQueue();
51
+ });
52
+ }
53
+
54
+ async _processQueue() {
55
+ if (this.running >= this.maxConcurrency || this.queue.length === 0) {
56
+ return;
57
+ }
58
+
59
+ const item = this.queue.shift();
60
+ this.running++;
61
+
62
+ const startTime = performance.now();
63
+
64
+ try {
65
+ // Add timeout wrapper
66
+ const timeoutPromise = new Promise((_, reject) => {
67
+ setTimeout(() => reject(new Error('Operation timeout')), this.timeout);
68
+ });
69
+
70
+ const result = await Promise.race([item.operation(), timeoutPromise]);
71
+
72
+ const processingTime = performance.now() - startTime;
73
+ this._updateMetrics(processingTime, true);
74
+
75
+ item.resolve(result);
76
+ } catch (error) {
77
+ const processingTime = performance.now() - startTime;
78
+ this._updateMetrics(processingTime, false);
79
+
80
+ item.reject(error);
81
+ } finally {
82
+ this.running--;
83
+ setImmediate(() => this._processQueue());
84
+ }
85
+ }
86
+
87
+ _updateMetrics(processingTime, success) {
88
+ this.metrics.processed++;
89
+ this.metrics.totalProcessingTime += processingTime;
90
+ this.metrics.avgProcessingTime = this.metrics.totalProcessingTime / this.metrics.processed;
91
+
92
+ if (!success) {
93
+ this.metrics.failures++;
94
+ }
95
+ }
96
+
97
+ getMetrics() {
98
+ return {
99
+ ...this.metrics,
100
+ successRate:
101
+ this.metrics.processed > 0
102
+ ? (
103
+ ((this.metrics.processed - this.metrics.failures) / this.metrics.processed) *
104
+ 100
105
+ ).toFixed(2)
106
+ : 100,
107
+ queueSize: this.queue.length,
108
+ running: this.running,
109
+ utilization: ((this.running / this.maxConcurrency) * 100).toFixed(2),
110
+ };
111
+ }
112
+ }
113
+
114
+ /**
115
+ * BatchProcessor for optimizing bulk operations
116
+ */
117
+ class BatchProcessor extends EventEmitter {
118
+ constructor(config = {}) {
119
+ super();
120
+
121
+ this.config = {
122
+ maxBatchSize: config.maxBatchSize || 50,
123
+ flushInterval: config.flushInterval || 1000,
124
+ maxWaitTime: config.maxWaitTime || 5000,
125
+ ...config,
126
+ };
127
+
128
+ this.batches = new Map();
129
+ this.timers = new Map();
130
+ this.metrics = {
131
+ batchesProcessed: 0,
132
+ itemsProcessed: 0,
133
+ avgBatchSize: 0,
134
+ avgProcessingTime: 0,
135
+ };
136
+
137
+ this._startPeriodicFlush();
138
+ }
139
+
140
+ async addToBatch(batchKey, item, processor) {
141
+ if (!this.batches.has(batchKey)) {
142
+ this.batches.set(batchKey, {
143
+ items: [],
144
+ processor,
145
+ createdAt: Date.now(),
146
+ });
147
+
148
+ // Set timeout for this batch
149
+ const timer = setTimeout(() => {
150
+ this._processBatch(batchKey);
151
+ }, this.config.maxWaitTime);
152
+
153
+ this.timers.set(batchKey, timer);
154
+ }
155
+
156
+ const batch = this.batches.get(batchKey);
157
+ batch.items.push(item);
158
+
159
+ // Process if batch is full
160
+ if (batch.items.length >= this.config.maxBatchSize) {
161
+ return this._processBatch(batchKey);
162
+ }
163
+
164
+ return new Promise((resolve, reject) => {
165
+ item._resolve = resolve;
166
+ item._reject = reject;
167
+ });
168
+ }
169
+
170
+ async _processBatch(batchKey) {
171
+ const batch = this.batches.get(batchKey);
172
+ if (!batch || batch.items.length === 0) return;
173
+
174
+ // Clear timer and remove from maps
175
+ const timer = this.timers.get(batchKey);
176
+ if (timer) clearTimeout(timer);
177
+
178
+ this.timers.delete(batchKey);
179
+ this.batches.delete(batchKey);
180
+
181
+ const startTime = performance.now();
182
+
183
+ try {
184
+ const results = await batch.processor(batch.items);
185
+ const processingTime = performance.now() - startTime;
186
+
187
+ // Update metrics
188
+ this.metrics.batchesProcessed++;
189
+ this.metrics.itemsProcessed += batch.items.length;
190
+ this.metrics.avgBatchSize = this.metrics.itemsProcessed / this.metrics.batchesProcessed;
191
+ this.metrics.avgProcessingTime =
192
+ (this.metrics.avgProcessingTime * (this.metrics.batchesProcessed - 1) + processingTime) /
193
+ this.metrics.batchesProcessed;
194
+
195
+ // Resolve individual item promises
196
+ batch.items.forEach((item, index) => {
197
+ if (item._resolve) {
198
+ item._resolve(results[index] || results);
199
+ }
200
+ });
201
+
202
+ this.emit('batch:processed', {
203
+ batchKey,
204
+ itemCount: batch.items.length,
205
+ processingTime,
206
+ results,
207
+ });
208
+
209
+ return results;
210
+ } catch (error) {
211
+ // Reject individual item promises
212
+ batch.items.forEach((item) => {
213
+ if (item._reject) {
214
+ item._reject(error);
215
+ }
216
+ });
217
+
218
+ this.emit('batch:error', { batchKey, error, itemCount: batch.items.length });
219
+ throw error;
220
+ }
221
+ }
222
+
223
+ _startPeriodicFlush() {
224
+ setInterval(() => {
225
+ const now = Date.now();
226
+
227
+ for (const [batchKey, batch] of this.batches.entries()) {
228
+ // Flush batches that have been waiting too long
229
+ if (now - batch.createdAt > this.config.flushInterval) {
230
+ this._processBatch(batchKey);
231
+ }
232
+ }
233
+ }, this.config.flushInterval);
234
+ }
235
+
236
+ getMetrics() {
237
+ return {
238
+ ...this.metrics,
239
+ pendingBatches: this.batches.size,
240
+ pendingItems: Array.from(this.batches.values()).reduce(
241
+ (sum, batch) => sum + batch.items.length,
242
+ 0,
243
+ ),
244
+ };
245
+ }
246
+
247
+ close() {
248
+ // Process all remaining batches
249
+ const batchKeys = Array.from(this.batches.keys());
250
+ return Promise.all(batchKeys.map((key) => this._processBatch(key)));
251
+ }
252
+ }
253
+
254
+ /**
255
+ * PerformanceOptimizer main class
256
+ */
257
+ export class PerformanceOptimizer extends EventEmitter {
258
+ constructor(config = {}) {
259
+ super();
260
+
261
+ this.config = {
262
+ enableAsyncQueue: config.enableAsyncQueue !== false,
263
+ enableBatchProcessing: config.enableBatchProcessing !== false,
264
+ enableAutoTuning: config.enableAutoTuning !== false,
265
+ asyncQueueConcurrency: config.asyncQueueConcurrency || 10,
266
+ batchMaxSize: config.batchMaxSize || 50,
267
+ metricsInterval: config.metricsInterval || 30000,
268
+ ...config,
269
+ };
270
+
271
+ this.asyncQueue = new AsyncOperationQueue(
272
+ this.config.asyncQueueConcurrency,
273
+ this.config.asyncTimeout || 30000,
274
+ );
275
+
276
+ this.batchProcessor = new BatchProcessor({
277
+ maxBatchSize: this.config.batchMaxSize,
278
+ flushInterval: this.config.batchFlushInterval || 1000,
279
+ maxWaitTime: this.config.batchMaxWaitTime || 5000,
280
+ });
281
+
282
+ this.metrics = {
283
+ optimizations: {
284
+ asyncOperations: 0,
285
+ batchOperations: 0,
286
+ cacheHits: 0,
287
+ performanceGains: [],
288
+ },
289
+ system: {
290
+ cpuUsage: 0,
291
+ memoryUsage: 0,
292
+ throughput: 0,
293
+ },
294
+ };
295
+
296
+ this.cache = new Map();
297
+ this.performanceBaseline = null;
298
+
299
+ this._initialize();
300
+ }
301
+
302
+ _initialize() {
303
+ // Start performance monitoring
304
+ if (this.config.metricsInterval > 0) {
305
+ setInterval(() => this._collectSystemMetrics(), this.config.metricsInterval);
306
+ }
307
+
308
+ // Auto-tuning
309
+ if (this.config.enableAutoTuning) {
310
+ setInterval(() => this._autoTune(), 60000); // Every minute
311
+ }
312
+
313
+ this.emit('optimizer:initialized');
314
+ }
315
+
316
+ /**
317
+ * Optimize async operation execution
318
+ */
319
+ async optimizeAsyncOperation(operation, options = {}) {
320
+ if (!this.config.enableAsyncQueue) {
321
+ return await operation();
322
+ }
323
+
324
+ const startTime = performance.now();
325
+
326
+ try {
327
+ const result = await this.asyncQueue.add(operation, options.priority || 5);
328
+
329
+ const executionTime = performance.now() - startTime;
330
+ this.metrics.optimizations.asyncOperations++;
331
+
332
+ // Track performance gain vs baseline
333
+ if (this.performanceBaseline) {
334
+ const gain = Math.max(0, this.performanceBaseline.avgAsyncTime - executionTime);
335
+ this.metrics.optimizations.performanceGains.push(gain);
336
+ }
337
+
338
+ return result;
339
+ } catch (error) {
340
+ this.emit('error', { type: 'async_optimization_failed', error, operation: operation.name });
341
+ throw error;
342
+ }
343
+ }
344
+
345
+ /**
346
+ * Optimize batch operations
347
+ */
348
+ async optimizeBatchOperation(batchKey, item, processor, options = {}) {
349
+ if (!this.config.enableBatchProcessing) {
350
+ return await processor([item]);
351
+ }
352
+
353
+ this.metrics.optimizations.batchOperations++;
354
+
355
+ return await this.batchProcessor.addToBatch(batchKey, item, processor);
356
+ }
357
+
358
+ /**
359
+ * Optimized caching with automatic expiration
360
+ */
361
+ async optimizeWithCache(key, operation, ttl = 300000) {
362
+ // 5 minutes default
363
+ const cached = this.cache.get(key);
364
+
365
+ if (cached && Date.now() - cached.timestamp < ttl) {
366
+ this.metrics.optimizations.cacheHits++;
367
+ return cached.value;
368
+ }
369
+
370
+ const result = await operation();
371
+
372
+ this.cache.set(key, {
373
+ value: result,
374
+ timestamp: Date.now(),
375
+ });
376
+
377
+ // Clean old cache entries periodically
378
+ if (this.cache.size > 1000) {
379
+ this._cleanCache();
380
+ }
381
+
382
+ return result;
383
+ }
384
+
385
+ /**
386
+ * Optimize memory operations with connection pooling awareness
387
+ */
388
+ async optimizeMemoryOperation(operation, connectionPool) {
389
+ const startTime = performance.now();
390
+
391
+ let connection = null;
392
+ try {
393
+ connection = await connectionPool.acquire();
394
+ const result = await operation(connection);
395
+
396
+ const executionTime = performance.now() - startTime;
397
+
398
+ // Track connection efficiency
399
+ this.metrics.system.throughput =
400
+ this.metrics.system.throughput * 0.9 + (1000 / executionTime) * 0.1;
401
+
402
+ return result;
403
+ } finally {
404
+ if (connection) {
405
+ connectionPool.release(connection);
406
+ }
407
+ }
408
+ }
409
+
410
+ /**
411
+ * Optimize agent spawning with intelligent batching
412
+ */
413
+ async optimizeAgentSpawning(agentTypes, spawnFunction) {
414
+ // Group agents by complexity for optimal batching
415
+ const groups = this._groupAgentsByComplexity(agentTypes);
416
+ const results = [];
417
+
418
+ for (const group of groups) {
419
+ const batchResult = await this.optimizeBatchOperation('agent_spawn', group, spawnFunction);
420
+ results.push(...(Array.isArray(batchResult) ? batchResult : [batchResult]));
421
+ }
422
+
423
+ return results;
424
+ }
425
+
426
+ /**
427
+ * Group agents by complexity for optimal spawning
428
+ */
429
+ _groupAgentsByComplexity(agentTypes) {
430
+ const complexity = {
431
+ low: ['coordinator'],
432
+ medium: ['coder', 'tester', 'documenter'],
433
+ high: ['researcher', 'analyst', 'architect', 'optimizer', 'reviewer'],
434
+ };
435
+
436
+ const groups = [];
437
+
438
+ Object.entries(complexity).forEach(([level, types]) => {
439
+ const groupAgents = agentTypes.filter((type) => types.includes(type));
440
+ if (groupAgents.length > 0) {
441
+ groups.push(groupAgents);
442
+ }
443
+ });
444
+
445
+ return groups;
446
+ }
447
+
448
+ /**
449
+ * Auto-tune performance parameters based on metrics
450
+ */
451
+ _autoTune() {
452
+ const queueMetrics = this.asyncQueue.getMetrics();
453
+ const batchMetrics = this.batchProcessor.getMetrics();
454
+
455
+ // Adjust async queue concurrency based on utilization
456
+ if (queueMetrics.utilization > 90 && this.asyncQueue.maxConcurrency < 20) {
457
+ this.asyncQueue.maxConcurrency += 2;
458
+ this.emit('auto_tune', {
459
+ type: 'concurrency_increased',
460
+ newValue: this.asyncQueue.maxConcurrency,
461
+ });
462
+ } else if (queueMetrics.utilization < 30 && this.asyncQueue.maxConcurrency > 5) {
463
+ this.asyncQueue.maxConcurrency = Math.max(5, this.asyncQueue.maxConcurrency - 1);
464
+ this.emit('auto_tune', {
465
+ type: 'concurrency_decreased',
466
+ newValue: this.asyncQueue.maxConcurrency,
467
+ });
468
+ }
469
+
470
+ // Adjust batch sizes based on processing efficiency
471
+ if (batchMetrics.avgBatchSize > 30 && batchMetrics.avgProcessingTime > 5000) {
472
+ this.batchProcessor.config.maxBatchSize = Math.max(
473
+ 20,
474
+ this.batchProcessor.config.maxBatchSize - 5,
475
+ );
476
+ this.emit('auto_tune', {
477
+ type: 'batch_size_decreased',
478
+ newValue: this.batchProcessor.config.maxBatchSize,
479
+ });
480
+ }
481
+ }
482
+
483
+ /**
484
+ * Clean old cache entries
485
+ */
486
+ _cleanCache() {
487
+ const now = Date.now();
488
+ const entries = Array.from(this.cache.entries());
489
+
490
+ // Remove oldest 20% of entries
491
+ entries.sort((a, b) => a[1].timestamp - b[1].timestamp);
492
+ const toRemove = Math.floor(entries.length * 0.2);
493
+
494
+ for (let i = 0; i < toRemove; i++) {
495
+ this.cache.delete(entries[i][0]);
496
+ }
497
+ }
498
+
499
+ /**
500
+ * Collect system performance metrics
501
+ */
502
+ _collectSystemMetrics() {
503
+ // Simple CPU and memory usage estimation
504
+ const used = process.memoryUsage();
505
+ this.metrics.system.memoryUsage = (used.heapUsed / 1024 / 1024).toFixed(2); // MB
506
+
507
+ // Estimate throughput based on recent operations
508
+ const queueMetrics = this.asyncQueue.getMetrics();
509
+ this.metrics.system.throughput =
510
+ queueMetrics.processed > 0
511
+ ? (queueMetrics.processed / (queueMetrics.avgProcessingTime / 1000)).toFixed(2)
512
+ : 0;
513
+ }
514
+
515
+ /**
516
+ * Get comprehensive performance statistics
517
+ */
518
+ getPerformanceStats() {
519
+ return {
520
+ optimizer: this.metrics,
521
+ asyncQueue: this.asyncQueue.getMetrics(),
522
+ batchProcessor: this.batchProcessor.getMetrics(),
523
+ cache: {
524
+ size: this.cache.size,
525
+ hitRate:
526
+ this.metrics.optimizations.cacheHits > 0
527
+ ? (
528
+ (this.metrics.optimizations.cacheHits /
529
+ (this.metrics.optimizations.asyncOperations +
530
+ this.metrics.optimizations.cacheHits)) *
531
+ 100
532
+ ).toFixed(2)
533
+ : 0,
534
+ },
535
+ };
536
+ }
537
+
538
+ /**
539
+ * Generate performance report with recommendations
540
+ */
541
+ generatePerformanceReport() {
542
+ const stats = this.getPerformanceStats();
543
+ const recommendations = [];
544
+
545
+ // Analyze and provide recommendations
546
+ if (stats.asyncQueue.utilization > 80) {
547
+ recommendations.push({
548
+ type: 'scaling',
549
+ priority: 'high',
550
+ message: 'Consider increasing async queue concurrency',
551
+ currentValue: this.asyncQueue.maxConcurrency,
552
+ suggestedValue: this.asyncQueue.maxConcurrency + 3,
553
+ });
554
+ }
555
+
556
+ if (stats.cache.hitRate < 60) {
557
+ recommendations.push({
558
+ type: 'caching',
559
+ priority: 'medium',
560
+ message: 'Cache hit rate is low, consider increasing cache TTL or size',
561
+ currentHitRate: stats.cache.hitRate,
562
+ });
563
+ }
564
+
565
+ if (stats.batchProcessor.avgBatchSize < 10) {
566
+ recommendations.push({
567
+ type: 'batching',
568
+ priority: 'medium',
569
+ message: 'Batch sizes are small, consider increasing batch wait time',
570
+ avgBatchSize: stats.batchProcessor.avgBatchSize,
571
+ });
572
+ }
573
+
574
+ return {
575
+ timestamp: new Date().toISOString(),
576
+ performance: stats,
577
+ recommendations,
578
+ summary: {
579
+ overallHealth: this._calculateOverallHealth(stats),
580
+ keyMetrics: {
581
+ throughput: stats.optimizer.system.throughput,
582
+ efficiency: stats.asyncQueue.successRate,
583
+ utilization: stats.asyncQueue.utilization,
584
+ },
585
+ },
586
+ };
587
+ }
588
+
589
+ /**
590
+ * Calculate overall system health score
591
+ */
592
+ _calculateOverallHealth(stats) {
593
+ const factors = [
594
+ Math.min(100, parseFloat(stats.asyncQueue.successRate)),
595
+ Math.min(100, 100 - parseFloat(stats.asyncQueue.utilization)), // Lower utilization is better
596
+ Math.min(100, parseFloat(stats.cache.hitRate)),
597
+ Math.min(100, (stats.batchProcessor.avgBatchSize / this.config.batchMaxSize) * 100),
598
+ ];
599
+
600
+ const avgScore = factors.reduce((sum, score) => sum + score, 0) / factors.length;
601
+
602
+ if (avgScore >= 80) return 'excellent';
603
+ if (avgScore >= 60) return 'good';
604
+ if (avgScore >= 40) return 'fair';
605
+ return 'poor';
606
+ }
607
+
608
+ /**
609
+ * Close optimizer and cleanup resources
610
+ */
611
+ async close() {
612
+ await this.batchProcessor.close();
613
+ this.cache.clear();
614
+ this.emit('optimizer:closed');
615
+ }
616
+ }
617
+
618
+ export default PerformanceOptimizer;