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,740 @@
1
+ /**
2
+ * Swarm Communication System for Hive Mind
3
+ * Handles inter-agent messaging and coordination
4
+ */
5
+
6
+ import EventEmitter from 'events';
7
+ import crypto from 'crypto';
8
+
9
+ /**
10
+ * Message types and their priorities
11
+ */
12
+ const MESSAGE_TYPES = {
13
+ command: { priority: 1, reliable: true, encrypted: true },
14
+ query: { priority: 2, reliable: true, encrypted: false },
15
+ response: { priority: 2, reliable: true, encrypted: false },
16
+ broadcast: { priority: 3, reliable: false, encrypted: false },
17
+ heartbeat: { priority: 4, reliable: false, encrypted: false },
18
+ consensus: { priority: 1, reliable: true, encrypted: true },
19
+ task: { priority: 2, reliable: true, encrypted: false },
20
+ result: { priority: 2, reliable: true, encrypted: false },
21
+ error: { priority: 1, reliable: true, encrypted: false },
22
+ sync: { priority: 3, reliable: true, encrypted: false },
23
+ };
24
+
25
+ /**
26
+ * Communication protocols
27
+ */
28
+ const PROTOCOLS = {
29
+ direct: 'direct', // Point-to-point
30
+ broadcast: 'broadcast', // One-to-all
31
+ multicast: 'multicast', // One-to-many
32
+ gossip: 'gossip', // Epidemic spread
33
+ consensus: 'consensus', // Byzantine agreement
34
+ };
35
+
36
+ /**
37
+ * SwarmCommunication class
38
+ */
39
+ export class SwarmCommunication extends EventEmitter {
40
+ constructor(config = {}) {
41
+ super();
42
+
43
+ this.config = {
44
+ swarmId: config.swarmId,
45
+ encryption: config.encryption || false,
46
+ maxRetries: config.maxRetries || 3,
47
+ timeout: config.timeout || 5000,
48
+ bufferSize: config.bufferSize || 1000,
49
+ gossipFanout: config.gossipFanout || 3,
50
+ consensusQuorum: config.consensusQuorum || 0.67,
51
+ ...config,
52
+ };
53
+
54
+ this.state = {
55
+ agents: new Map(), // Connected agents
56
+ channels: new Map(), // Communication channels
57
+ messageBuffer: [], // Message queue
58
+ messageHistory: new Map(), // Sent messages
59
+ metrics: {
60
+ sent: 0,
61
+ received: 0,
62
+ failed: 0,
63
+ encrypted: 0,
64
+ latency: [],
65
+ },
66
+ };
67
+
68
+ this.encryptionKey = this.config.encryption ? crypto.randomBytes(32) : null;
69
+
70
+ this._initialize();
71
+ }
72
+
73
+ /**
74
+ * Initialize communication system
75
+ */
76
+ _initialize() {
77
+ // Set up message processing
78
+ this.messageProcessor = setInterval(() => {
79
+ this._processMessageBuffer();
80
+ }, 100);
81
+
82
+ // Set up heartbeat
83
+ this.heartbeatTimer = setInterval(() => {
84
+ this._sendHeartbeats();
85
+ }, 10000);
86
+
87
+ this.emit('communication:initialized', { swarmId: this.config.swarmId });
88
+ }
89
+
90
+ /**
91
+ * Register agent in communication network
92
+ */
93
+ registerAgent(agentId, metadata = {}) {
94
+ const agent = {
95
+ id: agentId,
96
+ status: 'online',
97
+ lastSeen: Date.now(),
98
+ metadata,
99
+ messageCount: 0,
100
+ channel: this._createChannel(agentId),
101
+ };
102
+
103
+ this.state.agents.set(agentId, agent);
104
+
105
+ // Announce new agent to swarm
106
+ this.broadcast(
107
+ {
108
+ type: 'agent_joined',
109
+ agentId,
110
+ metadata,
111
+ },
112
+ 'sync',
113
+ );
114
+
115
+ this.emit('agent:registered', agent);
116
+ return agent;
117
+ }
118
+
119
+ /**
120
+ * Unregister agent from network
121
+ */
122
+ unregisterAgent(agentId) {
123
+ const agent = this.state.agents.get(agentId);
124
+ if (!agent) return;
125
+
126
+ // Close channel
127
+ const channel = this.state.channels.get(agentId);
128
+ if (channel) {
129
+ channel.close();
130
+ this.state.channels.delete(agentId);
131
+ }
132
+
133
+ this.state.agents.delete(agentId);
134
+
135
+ // Announce agent departure
136
+ this.broadcast(
137
+ {
138
+ type: 'agent_left',
139
+ agentId,
140
+ },
141
+ 'sync',
142
+ );
143
+
144
+ this.emit('agent:unregistered', { agentId });
145
+ }
146
+
147
+ /**
148
+ * Send direct message to agent
149
+ */
150
+ async send(toAgentId, message, type = 'query') {
151
+ const messageId = this._generateMessageId();
152
+ const timestamp = Date.now();
153
+
154
+ const envelope = {
155
+ id: messageId,
156
+ from: 'system', // Will be set by sender
157
+ to: toAgentId,
158
+ type,
159
+ timestamp,
160
+ message,
161
+ protocol: PROTOCOLS.direct,
162
+ };
163
+
164
+ // Encrypt if needed
165
+ if (this.config.encryption && MESSAGE_TYPES[type]?.encrypted) {
166
+ envelope.message = this._encrypt(message);
167
+ envelope.encrypted = true;
168
+ this.state.metrics.encrypted++;
169
+ }
170
+
171
+ // Add to buffer
172
+ this._addToBuffer(envelope);
173
+
174
+ // Track message
175
+ this.state.messageHistory.set(messageId, {
176
+ ...envelope,
177
+ status: 'pending',
178
+ attempts: 0,
179
+ });
180
+
181
+ this.state.metrics.sent++;
182
+
183
+ // Return promise that resolves when message is acknowledged
184
+ return new Promise((resolve, reject) => {
185
+ const timeout = setTimeout(() => {
186
+ reject(new Error(`Message timeout: ${messageId}`));
187
+ }, this.config.timeout);
188
+
189
+ this.once(`ack:${messageId}`, () => {
190
+ clearTimeout(timeout);
191
+ resolve({ messageId, delivered: true });
192
+ });
193
+
194
+ this.once(`nack:${messageId}`, (error) => {
195
+ clearTimeout(timeout);
196
+ reject(error);
197
+ });
198
+ });
199
+ }
200
+
201
+ /**
202
+ * Broadcast message to all agents
203
+ */
204
+ broadcast(message, type = 'broadcast') {
205
+ const messageId = this._generateMessageId();
206
+ const timestamp = Date.now();
207
+
208
+ const envelope = {
209
+ id: messageId,
210
+ from: 'system',
211
+ to: '*',
212
+ type,
213
+ timestamp,
214
+ message,
215
+ protocol: PROTOCOLS.broadcast,
216
+ };
217
+
218
+ // Broadcasts are typically not encrypted
219
+ this._addToBuffer(envelope);
220
+
221
+ this.state.metrics.sent++;
222
+
223
+ this.emit('message:broadcast', envelope);
224
+
225
+ return { messageId, recipients: this.state.agents.size };
226
+ }
227
+
228
+ /**
229
+ * Multicast message to specific agents
230
+ */
231
+ multicast(agentIds, message, type = 'query') {
232
+ const messageId = this._generateMessageId();
233
+ const timestamp = Date.now();
234
+
235
+ const envelopes = agentIds.map((agentId) => ({
236
+ id: `${messageId}-${agentId}`,
237
+ from: 'system',
238
+ to: agentId,
239
+ type,
240
+ timestamp,
241
+ message,
242
+ protocol: PROTOCOLS.multicast,
243
+ groupId: messageId,
244
+ }));
245
+
246
+ envelopes.forEach((envelope) => this._addToBuffer(envelope));
247
+
248
+ this.state.metrics.sent += envelopes.length;
249
+
250
+ return { messageId, recipients: agentIds.length };
251
+ }
252
+
253
+ /**
254
+ * Gossip protocol for epidemic spread
255
+ */
256
+ gossip(message, type = 'sync') {
257
+ const messageId = this._generateMessageId();
258
+ const timestamp = Date.now();
259
+
260
+ // Select random agents for initial spread
261
+ const agents = Array.from(this.state.agents.keys());
262
+ const selected = this._selectRandomAgents(agents, this.config.gossipFanout);
263
+
264
+ selected.forEach((agentId) => {
265
+ const envelope = {
266
+ id: `${messageId}-${agentId}`,
267
+ from: 'system',
268
+ to: agentId,
269
+ type,
270
+ timestamp,
271
+ message: {
272
+ ...message,
273
+ _gossip: {
274
+ originalId: messageId,
275
+ hops: 0,
276
+ seen: [],
277
+ },
278
+ },
279
+ protocol: PROTOCOLS.gossip,
280
+ };
281
+
282
+ this._addToBuffer(envelope);
283
+ });
284
+
285
+ this.state.metrics.sent += selected.length;
286
+
287
+ return { messageId, initialTargets: selected };
288
+ }
289
+
290
+ /**
291
+ * Byzantine consensus protocol
292
+ */
293
+ async consensus(proposal, validators = []) {
294
+ const consensusId = this._generateMessageId();
295
+ const timestamp = Date.now();
296
+
297
+ // If no validators specified, use all online agents
298
+ if (validators.length === 0) {
299
+ validators = Array.from(this.state.agents.keys()).filter(
300
+ (id) => this.state.agents.get(id).status === 'online',
301
+ );
302
+ }
303
+
304
+ const votes = new Map();
305
+ const votePromises = [];
306
+
307
+ // Phase 1: Proposal
308
+ validators.forEach((agentId) => {
309
+ const envelope = {
310
+ id: `${consensusId}-propose-${agentId}`,
311
+ from: 'system',
312
+ to: agentId,
313
+ type: 'consensus',
314
+ timestamp,
315
+ message: {
316
+ phase: 'propose',
317
+ consensusId,
318
+ proposal,
319
+ },
320
+ protocol: PROTOCOLS.consensus,
321
+ };
322
+
323
+ this._addToBuffer(envelope);
324
+
325
+ // Create promise for vote
326
+ const votePromise = new Promise((resolve) => {
327
+ this.once(`vote:${consensusId}:${agentId}`, (vote) => {
328
+ votes.set(agentId, vote);
329
+ resolve({ agentId, vote });
330
+ });
331
+
332
+ // Timeout for vote
333
+ setTimeout(() => {
334
+ if (!votes.has(agentId)) {
335
+ votes.set(agentId, null);
336
+ resolve({ agentId, vote: null });
337
+ }
338
+ }, this.config.timeout);
339
+ });
340
+
341
+ votePromises.push(votePromise);
342
+ });
343
+
344
+ // Wait for all votes
345
+ await Promise.all(votePromises);
346
+
347
+ // Phase 2: Tally and decide
348
+ const voteCount = {};
349
+ let totalVotes = 0;
350
+
351
+ votes.forEach((vote) => {
352
+ if (vote !== null) {
353
+ voteCount[vote] = (voteCount[vote] || 0) + 1;
354
+ totalVotes++;
355
+ }
356
+ });
357
+
358
+ // Check if consensus reached
359
+ const sortedVotes = Object.entries(voteCount).sort((a, b) => b[1] - a[1]);
360
+ const winner = sortedVotes[0];
361
+ const consensusReached = winner && winner[1] / validators.length >= this.config.consensusQuorum;
362
+
363
+ const result = {
364
+ consensusId,
365
+ proposal,
366
+ validators: validators.length,
367
+ votes: Object.fromEntries(votes),
368
+ voteCount,
369
+ winner: consensusReached ? winner[0] : null,
370
+ consensusReached,
371
+ quorum: this.config.consensusQuorum,
372
+ timestamp: Date.now(),
373
+ };
374
+
375
+ // Phase 3: Announce result
376
+ this.broadcast(
377
+ {
378
+ phase: 'result',
379
+ consensusId,
380
+ result,
381
+ },
382
+ 'consensus',
383
+ );
384
+
385
+ this.emit('consensus:completed', result);
386
+
387
+ return result;
388
+ }
389
+
390
+ /**
391
+ * Handle incoming message
392
+ */
393
+ handleMessage(envelope) {
394
+ this.state.metrics.received++;
395
+
396
+ // Update agent last seen
397
+ const agent = this.state.agents.get(envelope.from);
398
+ if (agent) {
399
+ agent.lastSeen = Date.now();
400
+ agent.messageCount++;
401
+ }
402
+
403
+ // Decrypt if needed
404
+ if (envelope.encrypted && this.config.encryption) {
405
+ try {
406
+ envelope.message = this._decrypt(envelope.message);
407
+ } catch (error) {
408
+ this.emit('error', { type: 'decryption_failed', envelope, error });
409
+ return;
410
+ }
411
+ }
412
+
413
+ // Process based on protocol
414
+ switch (envelope.protocol) {
415
+ case PROTOCOLS.direct:
416
+ this._handleDirectMessage(envelope);
417
+ break;
418
+
419
+ case PROTOCOLS.broadcast:
420
+ this._handleBroadcastMessage(envelope);
421
+ break;
422
+
423
+ case PROTOCOLS.multicast:
424
+ this._handleMulticastMessage(envelope);
425
+ break;
426
+
427
+ case PROTOCOLS.gossip:
428
+ this._handleGossipMessage(envelope);
429
+ break;
430
+
431
+ case PROTOCOLS.consensus:
432
+ this._handleConsensusMessage(envelope);
433
+ break;
434
+
435
+ default:
436
+ this.emit('error', { type: 'unknown_protocol', envelope });
437
+ }
438
+
439
+ // Emit general message event
440
+ this.emit('message:received', envelope);
441
+ }
442
+
443
+ /**
444
+ * Handle direct message
445
+ */
446
+ _handleDirectMessage(envelope) {
447
+ // Send acknowledgment
448
+ this._sendAck(envelope.id, envelope.from);
449
+
450
+ // Emit specific event for message type
451
+ this.emit(`message:${envelope.type}`, envelope);
452
+ }
453
+
454
+ /**
455
+ * Handle broadcast message
456
+ */
457
+ _handleBroadcastMessage(envelope) {
458
+ // No ack for broadcasts
459
+ this.emit(`broadcast:${envelope.type}`, envelope);
460
+ }
461
+
462
+ /**
463
+ * Handle multicast message
464
+ */
465
+ _handleMulticastMessage(envelope) {
466
+ // Send ack to original sender
467
+ this._sendAck(envelope.groupId, envelope.from);
468
+
469
+ this.emit(`multicast:${envelope.type}`, envelope);
470
+ }
471
+
472
+ /**
473
+ * Handle gossip message
474
+ */
475
+ _handleGossipMessage(envelope) {
476
+ const gossipData = envelope.message._gossip;
477
+
478
+ // Check if we've seen this message
479
+ if (gossipData.seen.includes(this.config.swarmId)) {
480
+ return;
481
+ }
482
+
483
+ // Mark as seen
484
+ gossipData.seen.push(this.config.swarmId);
485
+ gossipData.hops++;
486
+
487
+ // Process the message
488
+ this.emit(`gossip:${envelope.type}`, envelope);
489
+
490
+ // Continue spreading if hop count is low
491
+ if (gossipData.hops < 3) {
492
+ const agents = Array.from(this.state.agents.keys()).filter(
493
+ (id) => !gossipData.seen.includes(id),
494
+ );
495
+
496
+ const selected = this._selectRandomAgents(agents, this.config.gossipFanout);
497
+
498
+ selected.forEach((agentId) => {
499
+ const newEnvelope = {
500
+ ...envelope,
501
+ id: `${gossipData.originalId}-${agentId}-hop${gossipData.hops}`,
502
+ to: agentId,
503
+ from: this.config.swarmId,
504
+ };
505
+
506
+ this._addToBuffer(newEnvelope);
507
+ });
508
+ }
509
+ }
510
+
511
+ /**
512
+ * Handle consensus message
513
+ */
514
+ _handleConsensusMessage(envelope) {
515
+ const { phase, consensusId } = envelope.message;
516
+
517
+ switch (phase) {
518
+ case 'propose':
519
+ // Agent should vote on proposal
520
+ this.emit('consensus:proposal', envelope);
521
+ break;
522
+
523
+ case 'vote':
524
+ // Collect vote
525
+ this.emit(`vote:${consensusId}:${envelope.from}`, envelope.message.vote);
526
+ break;
527
+
528
+ case 'result':
529
+ // Consensus result announced
530
+ this.emit('consensus:result', envelope.message.result);
531
+ break;
532
+ }
533
+ }
534
+
535
+ /**
536
+ * Send acknowledgment
537
+ */
538
+ _sendAck(messageId, toAgent) {
539
+ const ack = {
540
+ id: `ack-${messageId}`,
541
+ from: this.config.swarmId,
542
+ to: toAgent,
543
+ type: 'ack',
544
+ timestamp: Date.now(),
545
+ message: { originalId: messageId },
546
+ protocol: PROTOCOLS.direct,
547
+ };
548
+
549
+ this._addToBuffer(ack);
550
+ }
551
+
552
+ /**
553
+ * Create communication channel
554
+ */
555
+ _createChannel(agentId) {
556
+ // In production, this would create actual network channels
557
+ // For now, we simulate with event emitters
558
+ const channel = new EventEmitter();
559
+
560
+ channel.send = (message) => {
561
+ this.emit(`channel:${agentId}`, message);
562
+ };
563
+
564
+ channel.close = () => {
565
+ channel.removeAllListeners();
566
+ };
567
+
568
+ this.state.channels.set(agentId, channel);
569
+
570
+ return channel;
571
+ }
572
+
573
+ /**
574
+ * Add message to buffer
575
+ */
576
+ _addToBuffer(envelope) {
577
+ this.state.messageBuffer.push(envelope);
578
+
579
+ // Limit buffer size
580
+ if (this.state.messageBuffer.length > this.config.bufferSize) {
581
+ const dropped = this.state.messageBuffer.shift();
582
+ this.emit('message:dropped', dropped);
583
+ }
584
+ }
585
+
586
+ /**
587
+ * Process message buffer
588
+ */
589
+ _processMessageBuffer() {
590
+ const toProcess = this.state.messageBuffer.splice(0, 10);
591
+
592
+ toProcess.forEach((envelope) => {
593
+ // Simulate network delay
594
+ setTimeout(() => {
595
+ if (envelope.to === '*') {
596
+ // Broadcast to all agents
597
+ this.state.agents.forEach((agent) => {
598
+ this.emit(`deliver:${agent.id}`, envelope);
599
+ });
600
+ } else {
601
+ // Direct delivery
602
+ this.emit(`deliver:${envelope.to}`, envelope);
603
+ }
604
+
605
+ // Update message history
606
+ const history = this.state.messageHistory.get(envelope.id);
607
+ if (history) {
608
+ history.status = 'sent';
609
+ history.sentAt = Date.now();
610
+ }
611
+ }, Math.random() * 100);
612
+ });
613
+ }
614
+
615
+ /**
616
+ * Send heartbeats to all agents
617
+ */
618
+ _sendHeartbeats() {
619
+ const now = Date.now();
620
+
621
+ this.state.agents.forEach((agent, agentId) => {
622
+ // Check if agent is still responsive
623
+ if (now - agent.lastSeen > 30000) {
624
+ agent.status = 'offline';
625
+ this.emit('agent:offline', { agentId });
626
+ }
627
+
628
+ // Send heartbeat
629
+ const heartbeat = {
630
+ id: `heartbeat-${now}-${agentId}`,
631
+ from: 'system',
632
+ to: agentId,
633
+ type: 'heartbeat',
634
+ timestamp: now,
635
+ message: { timestamp: now },
636
+ protocol: PROTOCOLS.direct,
637
+ };
638
+
639
+ this._addToBuffer(heartbeat);
640
+ });
641
+ }
642
+
643
+ /**
644
+ * Select random agents
645
+ */
646
+ _selectRandomAgents(agents, count) {
647
+ const shuffled = [...agents].sort(() => Math.random() - 0.5);
648
+ return shuffled.slice(0, Math.min(count, agents.length));
649
+ }
650
+
651
+ /**
652
+ * Generate unique message ID
653
+ */
654
+ _generateMessageId() {
655
+ return `msg-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
656
+ }
657
+
658
+ /**
659
+ * Encrypt message
660
+ */
661
+ _encrypt(data) {
662
+ if (!this.encryptionKey) return data;
663
+
664
+ const iv = crypto.randomBytes(16);
665
+ const cipher = crypto.createCipheriv('aes-256-cbc', this.encryptionKey, iv);
666
+
667
+ let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'hex');
668
+ encrypted += cipher.final('hex');
669
+
670
+ return {
671
+ iv: iv.toString('hex'),
672
+ data: encrypted,
673
+ };
674
+ }
675
+
676
+ /**
677
+ * Decrypt message
678
+ */
679
+ _decrypt(encrypted) {
680
+ if (!this.encryptionKey) return encrypted;
681
+
682
+ const iv = Buffer.from(encrypted.iv, 'hex');
683
+ const decipher = crypto.createDecipheriv('aes-256-cbc', this.encryptionKey, iv);
684
+
685
+ let decrypted = decipher.update(encrypted.data, 'hex', 'utf8');
686
+ decrypted += decipher.final('utf8');
687
+
688
+ return JSON.parse(decrypted);
689
+ }
690
+
691
+ /**
692
+ * Get communication statistics
693
+ */
694
+ getStatistics() {
695
+ const avgLatency =
696
+ this.state.metrics.latency.length > 0
697
+ ? this.state.metrics.latency.reduce((a, b) => a + b, 0) / this.state.metrics.latency.length
698
+ : 0;
699
+
700
+ return {
701
+ agents: {
702
+ total: this.state.agents.size,
703
+ online: Array.from(this.state.agents.values()).filter((a) => a.status === 'online').length,
704
+ offline: Array.from(this.state.agents.values()).filter((a) => a.status === 'offline')
705
+ .length,
706
+ },
707
+ messages: {
708
+ sent: this.state.metrics.sent,
709
+ received: this.state.metrics.received,
710
+ failed: this.state.metrics.failed,
711
+ encrypted: this.state.metrics.encrypted,
712
+ buffered: this.state.messageBuffer.length,
713
+ },
714
+ performance: {
715
+ avgLatency: avgLatency.toFixed(2),
716
+ successRate:
717
+ this.state.metrics.sent > 0
718
+ ? (
719
+ ((this.state.metrics.sent - this.state.metrics.failed) / this.state.metrics.sent) *
720
+ 100
721
+ ).toFixed(2)
722
+ : 100,
723
+ },
724
+ };
725
+ }
726
+
727
+ /**
728
+ * Close communication system
729
+ */
730
+ close() {
731
+ // Clear timers
732
+ if (this.messageProcessor) clearInterval(this.messageProcessor);
733
+ if (this.heartbeatTimer) clearInterval(this.heartbeatTimer);
734
+
735
+ // Close all channels
736
+ this.state.channels.forEach((channel) => channel.close());
737
+
738
+ this.emit('communication:closed');
739
+ }
740
+ }