claude-flow 3.28.0 → 3.29.0

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 (679) hide show
  1. package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
  2. package/.claude/agents/analysis/analyze-code-quality.md +57 -57
  3. package/.claude/agents/analysis/code-analyzer.md +188 -188
  4. package/.claude/agents/analysis/code-review/analyze-code-quality.md +57 -57
  5. package/.claude/agents/architecture/system-design/arch-system-design.md +35 -35
  6. package/.claude/agents/base-template-generator.md +41 -41
  7. package/.claude/agents/consensus/byzantine-coordinator.md +42 -42
  8. package/.claude/agents/consensus/crdt-synchronizer.md +976 -976
  9. package/.claude/agents/consensus/gossip-coordinator.md +42 -42
  10. package/.claude/agents/consensus/performance-benchmarker.md +830 -830
  11. package/.claude/agents/consensus/quorum-manager.md +802 -802
  12. package/.claude/agents/consensus/raft-manager.md +42 -42
  13. package/.claude/agents/consensus/security-manager.md +601 -601
  14. package/.claude/agents/core/coder.md +254 -254
  15. package/.claude/agents/core/planner.md +151 -151
  16. package/.claude/agents/core/researcher.md +173 -173
  17. package/.claude/agents/core/reviewer.md +308 -308
  18. package/.claude/agents/core/tester.md +299 -299
  19. package/.claude/agents/custom/test-long-runner.md +43 -43
  20. package/.claude/agents/data/ml/data-ml-model.md +75 -75
  21. package/.claude/agents/database-specialist.md +9 -9
  22. package/.claude/agents/development/backend/dev-backend-api.md +28 -28
  23. package/.claude/agents/development/dev-backend-api.md +177 -177
  24. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +51 -51
  25. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +62 -62
  26. package/.claude/agents/dual-mode/codex-coordinator.md +206 -206
  27. package/.claude/agents/dual-mode/codex-worker.md +190 -190
  28. package/.claude/agents/dual-mode/dual-orchestrator.md +253 -253
  29. package/.claude/agents/flow-nexus/app-store.md +87 -87
  30. package/.claude/agents/flow-nexus/authentication.md +68 -68
  31. package/.claude/agents/flow-nexus/challenges.md +80 -80
  32. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  33. package/.claude/agents/flow-nexus/payments.md +82 -82
  34. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  35. package/.claude/agents/flow-nexus/swarm.md +75 -75
  36. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  37. package/.claude/agents/flow-nexus/workflow.md +83 -83
  38. package/.claude/agents/github/code-review-swarm.md +520 -520
  39. package/.claude/agents/github/github-modes.md +153 -153
  40. package/.claude/agents/github/issue-tracker.md +298 -298
  41. package/.claude/agents/github/multi-repo-swarm.md +524 -524
  42. package/.claude/agents/github/pr-manager.md +162 -162
  43. package/.claude/agents/github/project-board-sync.md +477 -477
  44. package/.claude/agents/github/release-manager.md +337 -337
  45. package/.claude/agents/github/release-swarm.md +550 -550
  46. package/.claude/agents/github/repo-architect.md +364 -364
  47. package/.claude/agents/github/swarm-issue.md +550 -550
  48. package/.claude/agents/github/swarm-pr.md +401 -401
  49. package/.claude/agents/github/sync-coordinator.md +424 -424
  50. package/.claude/agents/github/workflow-automation.md +604 -604
  51. package/.claude/agents/goal/agent.md +816 -816
  52. package/.claude/agents/goal/code-goal-planner.md +444 -444
  53. package/.claude/agents/goal/goal-planner.md +167 -167
  54. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +128 -128
  55. package/.claude/agents/hive-mind/queen-coordinator.md +201 -201
  56. package/.claude/agents/hive-mind/scout-explorer.md +240 -240
  57. package/.claude/agents/hive-mind/swarm-memory-manager.md +191 -191
  58. package/.claude/agents/hive-mind/worker-specialist.md +215 -215
  59. package/.claude/agents/neural/safla-neural.md +73 -73
  60. package/.claude/agents/optimization/benchmark-suite.md +662 -662
  61. package/.claude/agents/optimization/load-balancer.md +428 -428
  62. package/.claude/agents/optimization/performance-monitor.md +669 -669
  63. package/.claude/agents/optimization/resource-allocator.md +671 -671
  64. package/.claude/agents/optimization/topology-optimizer.md +805 -805
  65. package/.claude/agents/payments/agentic-payments.md +126 -126
  66. package/.claude/agents/project-coordinator.md +8 -8
  67. package/.claude/agents/python-specialist.md +9 -9
  68. package/.claude/agents/reasoning/agent.md +816 -816
  69. package/.claude/agents/reasoning/goal-planner.md +72 -72
  70. package/.claude/agents/security-auditor.md +9 -9
  71. package/.claude/agents/sona/sona-learning-optimizer.md +65 -65
  72. package/.claude/agents/sparc/architecture.md +452 -452
  73. package/.claude/agents/sparc/pseudocode.md +298 -298
  74. package/.claude/agents/sparc/refinement.md +503 -503
  75. package/.claude/agents/sparc/specification.md +257 -257
  76. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +87 -87
  77. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  78. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  79. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  80. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  81. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  82. package/.claude/agents/swarm/adaptive-coordinator.md +363 -363
  83. package/.claude/agents/swarm/hierarchical-coordinator.md +299 -299
  84. package/.claude/agents/swarm/mesh-coordinator.md +362 -362
  85. package/.claude/agents/templates/automation-smart-agent.md +184 -184
  86. package/.claude/agents/templates/coordinator-swarm-init.md +82 -82
  87. package/.claude/agents/templates/github-pr-manager.md +154 -154
  88. package/.claude/agents/templates/implementer-sparc-coder.md +242 -242
  89. package/.claude/agents/templates/memory-coordinator.md +162 -162
  90. package/.claude/agents/templates/migration-plan.md +723 -723
  91. package/.claude/agents/templates/orchestrator-task.md +119 -119
  92. package/.claude/agents/templates/performance-analyzer.md +178 -178
  93. package/.claude/agents/templates/sparc-coordinator.md +162 -162
  94. package/.claude/agents/testing/production-validator.md +372 -372
  95. package/.claude/agents/testing/tdd-london-swarm.md +221 -221
  96. package/.claude/agents/testing/unit/tdd-london-swarm.md +221 -221
  97. package/.claude/agents/testing/validation/production-validator.md +372 -372
  98. package/.claude/agents/typescript-specialist.md +9 -9
  99. package/.claude/agents/v3/database-specialist.md +9 -9
  100. package/.claude/agents/v3/project-coordinator.md +8 -8
  101. package/.claude/agents/v3/python-specialist.md +9 -9
  102. package/.claude/agents/v3/test-architect.md +9 -9
  103. package/.claude/agents/v3/typescript-specialist.md +9 -9
  104. package/.claude/agents/v3/v3-integration-architect.md +311 -311
  105. package/.claude/agents/v3/v3-memory-specialist.md +280 -280
  106. package/.claude/agents/v3/v3-performance-engineer.md +362 -362
  107. package/.claude/agents/v3/v3-queen-coordinator.md +62 -62
  108. package/.claude/agents/v3/v3-security-architect.md +139 -139
  109. package/.claude/checkpoints/1767754460.json +8 -8
  110. package/.claude/commands/agents/README.md +10 -10
  111. package/.claude/commands/agents/agent-capabilities.md +21 -21
  112. package/.claude/commands/agents/agent-coordination.md +28 -28
  113. package/.claude/commands/agents/agent-spawning.md +28 -28
  114. package/.claude/commands/agents/agent-types.md +26 -26
  115. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  116. package/.claude/commands/analysis/README.md +9 -9
  117. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  118. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  119. package/.claude/commands/analysis/performance-report.md +25 -25
  120. package/.claude/commands/analysis/token-efficiency.md +44 -44
  121. package/.claude/commands/analysis/token-usage.md +25 -25
  122. package/.claude/commands/automation/README.md +9 -9
  123. package/.claude/commands/automation/auto-agent.md +122 -122
  124. package/.claude/commands/automation/self-healing.md +105 -105
  125. package/.claude/commands/automation/session-memory.md +89 -89
  126. package/.claude/commands/automation/smart-agents.md +72 -72
  127. package/.claude/commands/automation/smart-spawn.md +25 -25
  128. package/.claude/commands/automation/workflow-select.md +25 -25
  129. package/.claude/commands/claude-flow-help.md +103 -103
  130. package/.claude/commands/claude-flow-memory.md +107 -107
  131. package/.claude/commands/claude-flow-swarm.md +205 -205
  132. package/.claude/commands/coordination/README.md +9 -9
  133. package/.claude/commands/coordination/agent-spawn.md +25 -25
  134. package/.claude/commands/coordination/init.md +44 -44
  135. package/.claude/commands/coordination/orchestrate.md +43 -43
  136. package/.claude/commands/coordination/spawn.md +45 -45
  137. package/.claude/commands/coordination/swarm-init.md +85 -85
  138. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  139. package/.claude/commands/flow-nexus/app-store.md +123 -123
  140. package/.claude/commands/flow-nexus/challenges.md +119 -119
  141. package/.claude/commands/flow-nexus/login-registration.md +64 -64
  142. package/.claude/commands/flow-nexus/neural-network.md +133 -133
  143. package/.claude/commands/flow-nexus/payments.md +115 -115
  144. package/.claude/commands/flow-nexus/sandbox.md +82 -82
  145. package/.claude/commands/flow-nexus/swarm.md +86 -86
  146. package/.claude/commands/flow-nexus/user-tools.md +151 -151
  147. package/.claude/commands/flow-nexus/workflow.md +114 -114
  148. package/.claude/commands/github/README.md +11 -11
  149. package/.claude/commands/github/code-review-swarm.md +513 -513
  150. package/.claude/commands/github/code-review.md +25 -25
  151. package/.claude/commands/github/github-modes.md +146 -146
  152. package/.claude/commands/github/github-swarm.md +121 -121
  153. package/.claude/commands/github/issue-tracker.md +291 -291
  154. package/.claude/commands/github/issue-triage.md +25 -25
  155. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  156. package/.claude/commands/github/pr-enhance.md +26 -26
  157. package/.claude/commands/github/pr-manager.md +169 -169
  158. package/.claude/commands/github/project-board-sync.md +470 -470
  159. package/.claude/commands/github/release-manager.md +337 -337
  160. package/.claude/commands/github/release-swarm.md +543 -543
  161. package/.claude/commands/github/repo-analyze.md +25 -25
  162. package/.claude/commands/github/repo-architect.md +366 -366
  163. package/.claude/commands/github/swarm-issue.md +481 -481
  164. package/.claude/commands/github/swarm-pr.md +284 -284
  165. package/.claude/commands/github/sync-coordinator.md +300 -300
  166. package/.claude/commands/github/workflow-automation.md +441 -441
  167. package/.claude/commands/hive-mind/README.md +17 -17
  168. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  169. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  170. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  171. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  172. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  173. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  174. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  175. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  176. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  177. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  178. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  179. package/.claude/commands/hooks/README.md +11 -11
  180. package/.claude/commands/hooks/overview.md +57 -57
  181. package/.claude/commands/hooks/post-edit.md +117 -117
  182. package/.claude/commands/hooks/post-task.md +112 -112
  183. package/.claude/commands/hooks/pre-edit.md +113 -113
  184. package/.claude/commands/hooks/pre-task.md +111 -111
  185. package/.claude/commands/hooks/session-end.md +118 -118
  186. package/.claude/commands/hooks/setup.md +102 -102
  187. package/.claude/commands/memory/README.md +9 -9
  188. package/.claude/commands/memory/memory-persist.md +25 -25
  189. package/.claude/commands/memory/memory-search.md +25 -25
  190. package/.claude/commands/memory/memory-usage.md +25 -25
  191. package/.claude/commands/memory/neural.md +47 -47
  192. package/.claude/commands/monitoring/README.md +9 -9
  193. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  194. package/.claude/commands/monitoring/agents.md +44 -44
  195. package/.claude/commands/monitoring/real-time-view.md +25 -25
  196. package/.claude/commands/monitoring/status.md +46 -46
  197. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  198. package/.claude/commands/optimization/README.md +9 -9
  199. package/.claude/commands/optimization/auto-topology.md +61 -61
  200. package/.claude/commands/optimization/cache-manage.md +25 -25
  201. package/.claude/commands/optimization/parallel-execute.md +25 -25
  202. package/.claude/commands/optimization/parallel-execution.md +49 -49
  203. package/.claude/commands/optimization/topology-optimize.md +25 -25
  204. package/.claude/commands/pair/README.md +260 -260
  205. package/.claude/commands/pair/commands.md +545 -545
  206. package/.claude/commands/pair/config.md +509 -509
  207. package/.claude/commands/pair/examples.md +511 -511
  208. package/.claude/commands/pair/modes.md +347 -347
  209. package/.claude/commands/pair/session.md +406 -406
  210. package/.claude/commands/pair/start.md +208 -208
  211. package/.claude/commands/sparc/analyzer.md +51 -51
  212. package/.claude/commands/sparc/architect.md +53 -53
  213. package/.claude/commands/sparc/ask.md +97 -97
  214. package/.claude/commands/sparc/batch-executor.md +54 -54
  215. package/.claude/commands/sparc/code.md +89 -89
  216. package/.claude/commands/sparc/coder.md +54 -54
  217. package/.claude/commands/sparc/debug.md +83 -83
  218. package/.claude/commands/sparc/debugger.md +54 -54
  219. package/.claude/commands/sparc/designer.md +53 -53
  220. package/.claude/commands/sparc/devops.md +109 -109
  221. package/.claude/commands/sparc/docs-writer.md +80 -80
  222. package/.claude/commands/sparc/documenter.md +54 -54
  223. package/.claude/commands/sparc/innovator.md +54 -54
  224. package/.claude/commands/sparc/integration.md +83 -83
  225. package/.claude/commands/sparc/mcp.md +117 -117
  226. package/.claude/commands/sparc/memory-manager.md +54 -54
  227. package/.claude/commands/sparc/optimizer.md +54 -54
  228. package/.claude/commands/sparc/orchestrator.md +131 -131
  229. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  230. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  231. package/.claude/commands/sparc/researcher.md +54 -54
  232. package/.claude/commands/sparc/reviewer.md +54 -54
  233. package/.claude/commands/sparc/security-review.md +80 -80
  234. package/.claude/commands/sparc/sparc-modes.md +174 -174
  235. package/.claude/commands/sparc/sparc.md +111 -111
  236. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  237. package/.claude/commands/sparc/supabase-admin.md +348 -348
  238. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  239. package/.claude/commands/sparc/tdd.md +54 -54
  240. package/.claude/commands/sparc/tester.md +54 -54
  241. package/.claude/commands/sparc/tutorial.md +79 -79
  242. package/.claude/commands/sparc/workflow-manager.md +54 -54
  243. package/.claude/commands/sparc.md +166 -166
  244. package/.claude/commands/stream-chain/pipeline.md +120 -120
  245. package/.claude/commands/stream-chain/run.md +69 -69
  246. package/.claude/commands/swarm/README.md +15 -15
  247. package/.claude/commands/swarm/analysis.md +95 -95
  248. package/.claude/commands/swarm/development.md +96 -96
  249. package/.claude/commands/swarm/examples.md +168 -168
  250. package/.claude/commands/swarm/maintenance.md +102 -102
  251. package/.claude/commands/swarm/optimization.md +117 -117
  252. package/.claude/commands/swarm/research.md +136 -136
  253. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  254. package/.claude/commands/swarm/swarm-background.md +8 -8
  255. package/.claude/commands/swarm/swarm-init.md +19 -19
  256. package/.claude/commands/swarm/swarm-modes.md +8 -8
  257. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  258. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  259. package/.claude/commands/swarm/swarm-status.md +8 -8
  260. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  261. package/.claude/commands/swarm/swarm.md +27 -27
  262. package/.claude/commands/swarm/testing.md +131 -131
  263. package/.claude/commands/training/README.md +9 -9
  264. package/.claude/commands/training/model-update.md +25 -25
  265. package/.claude/commands/training/neural-patterns.md +73 -73
  266. package/.claude/commands/training/neural-train.md +25 -25
  267. package/.claude/commands/training/pattern-learn.md +25 -25
  268. package/.claude/commands/training/specialization.md +62 -62
  269. package/.claude/commands/truth/start.md +142 -142
  270. package/.claude/commands/verify/check.md +49 -49
  271. package/.claude/commands/verify/start.md +127 -127
  272. package/.claude/commands/workflows/README.md +9 -9
  273. package/.claude/commands/workflows/development.md +77 -77
  274. package/.claude/commands/workflows/research.md +62 -62
  275. package/.claude/commands/workflows/workflow-create.md +25 -25
  276. package/.claude/commands/workflows/workflow-execute.md +25 -25
  277. package/.claude/commands/workflows/workflow-export.md +25 -25
  278. package/.claude/config/v3-dependency-optimization.json +265 -265
  279. package/.claude/config/v3-performance-targets.json +250 -250
  280. package/.claude/helpers/.helpers-version +1 -1
  281. package/.claude/helpers/README.md +96 -96
  282. package/.claude/helpers/adr-compliance.sh +186 -186
  283. package/.claude/helpers/aggressive-microcompact.mjs +36 -36
  284. package/.claude/helpers/auto-commit.sh +178 -178
  285. package/.claude/helpers/auto-memory-hook.mjs +430 -430
  286. package/.claude/helpers/checkpoint-manager.sh +251 -251
  287. package/.claude/helpers/context-persistence-hook.mjs +2001 -2001
  288. package/.claude/helpers/daemon-manager.sh +252 -252
  289. package/.claude/helpers/ddd-tracker.sh +144 -144
  290. package/.claude/helpers/github-safe.js +156 -156
  291. package/.claude/helpers/github-setup.sh +45 -45
  292. package/.claude/helpers/guidance-hook.sh +13 -13
  293. package/.claude/helpers/guidance-hooks.sh +102 -102
  294. package/.claude/helpers/health-monitor.sh +108 -108
  295. package/.claude/helpers/helpers.manifest.json +6 -5
  296. package/.claude/helpers/hook-handler.cjs +460 -460
  297. package/.claude/helpers/intelligence.cjs +1058 -1058
  298. package/.claude/helpers/learning-hooks.sh +329 -329
  299. package/.claude/helpers/learning-optimizer.sh +127 -127
  300. package/.claude/helpers/learning-service.mjs +1144 -1144
  301. package/.claude/helpers/memory.cjs +84 -84
  302. package/.claude/helpers/metrics-db.mjs +503 -503
  303. package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
  304. package/.claude/helpers/pattern-consolidator.sh +86 -86
  305. package/.claude/helpers/perf-worker.sh +160 -160
  306. package/.claude/helpers/quick-start.sh +19 -19
  307. package/.claude/helpers/router.cjs +62 -62
  308. package/.claude/helpers/security-scanner.sh +127 -127
  309. package/.claude/helpers/session.cjs +125 -125
  310. package/.claude/helpers/setup-mcp.sh +18 -18
  311. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  312. package/.claude/helpers/statusline.cjs +925 -925
  313. package/.claude/helpers/swarm-comms.sh +353 -353
  314. package/.claude/helpers/swarm-hooks.sh +761 -761
  315. package/.claude/helpers/swarm-monitor.sh +210 -210
  316. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  317. package/.claude/helpers/update-v3-progress.sh +165 -165
  318. package/.claude/helpers/v3-quick-status.sh +57 -57
  319. package/.claude/helpers/v3.sh +110 -110
  320. package/.claude/helpers/validate-v3-config.sh +215 -215
  321. package/.claude/helpers/worker-manager.sh +170 -170
  322. package/.claude/mcp.json +12 -12
  323. package/.claude/proven-config.json +1 -1
  324. package/.claude/settings.json +285 -285
  325. package/.claude/settings.json.bak +526 -526
  326. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  327. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  328. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  329. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  330. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  331. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
  332. package/.claude/skills/browser/SKILL.md +204 -204
  333. package/.claude/skills/dual-mode/README.md +71 -71
  334. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  335. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  336. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  337. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  338. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  339. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  340. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  341. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  342. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  343. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  344. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  345. package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
  346. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  347. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  348. package/.claude/skills/performance-analysis/SKILL.md +560 -560
  349. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  350. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  351. package/.claude/skills/skill-builder/SKILL.md +910 -910
  352. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  353. package/.claude/skills/stream-chain/SKILL.md +560 -560
  354. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  355. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  356. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  357. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  358. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  359. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  360. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  361. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  362. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  363. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  364. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  365. package/.claude/skills/verification-quality/SKILL.md +691 -691
  366. package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
  367. package/.claude/skills/worker-integration/SKILL.md +147 -147
  368. package/.claude/statusline-command.sh +176 -176
  369. package/.claude/statusline.mjs +109 -109
  370. package/.claude/statusline.sh +431 -431
  371. package/.claude/workflows/full-system-test.js +65 -65
  372. package/.claude/workflows/intelligence-system-hardening.js +120 -120
  373. package/.claude/workflows/plugin-contract-audit.js +91 -91
  374. package/.claude-plugin/README.md +720 -720
  375. package/.claude-plugin/docs/INSTALLATION.md +261 -261
  376. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
  377. package/.claude-plugin/docs/QUICKSTART.md +361 -361
  378. package/.claude-plugin/docs/STRUCTURE.md +128 -128
  379. package/.claude-plugin/hooks/hooks.json +77 -77
  380. package/.claude-plugin/marketplace.json +185 -185
  381. package/.claude-plugin/plugin.json +71 -71
  382. package/.claude-plugin/scripts/install.sh +234 -234
  383. package/.claude-plugin/scripts/ruflo-hook.cjs +166 -166
  384. package/.claude-plugin/scripts/ruflo-hook.sh +37 -37
  385. package/.claude-plugin/scripts/uninstall.sh +36 -36
  386. package/.claude-plugin/scripts/verify.sh +108 -108
  387. package/LICENSE +21 -21
  388. package/README.md +419 -419
  389. package/bin/cli.js +11 -11
  390. package/bin/npx-repair.js +7 -7
  391. package/bin/npx-safe-launch.js +9 -9
  392. package/package.json +185 -185
  393. package/v3/@claude-flow/cli/README.md +419 -419
  394. package/v3/@claude-flow/cli/bin/cli.js +314 -314
  395. package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
  396. package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
  397. package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
  398. package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
  399. package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
  400. package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
  401. package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
  402. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
  403. package/v3/@claude-flow/cli/dist/src/commands/funnel.d.ts +2 -0
  404. package/v3/@claude-flow/cli/dist/src/commands/funnel.js +110 -2
  405. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
  406. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
  407. package/v3/@claude-flow/cli/dist/src/commands/init.js +94 -38
  408. package/v3/@claude-flow/cli/dist/src/commands/memory.js +85 -1
  409. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
  410. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
  411. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
  412. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
  413. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
  414. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
  415. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
  416. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
  417. package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
  418. package/v3/@claude-flow/cli/dist/src/funnel/disclosure.d.ts +1 -0
  419. package/v3/@claude-flow/cli/dist/src/funnel/disclosure.js +12 -0
  420. package/v3/@claude-flow/cli/dist/src/funnel/index.d.ts +1 -1
  421. package/v3/@claude-flow/cli/dist/src/funnel/index.js +1 -1
  422. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +231 -231
  423. package/v3/@claude-flow/cli/dist/src/init/executor.js +453 -453
  424. package/v3/@claude-flow/cli/dist/src/init/helper-signing.d.ts +8 -1
  425. package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +9 -2
  426. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +751 -751
  427. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +949 -949
  428. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
  429. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
  430. package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +22 -22
  431. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.d.ts +10 -0
  432. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +139 -88
  433. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.d.ts +18 -0
  434. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +539 -407
  435. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
  436. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  437. package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.d.ts +195 -0
  438. package/v3/@claude-flow/cli/dist/src/ruvector/flash-attention.js +643 -0
  439. package/v3/@claude-flow/cli/dist/src/ruvector/moe-router.d.ts +206 -0
  440. package/v3/@claude-flow/cli/dist/src/ruvector/moe-router.js +626 -0
  441. package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
  442. package/v3/@claude-flow/cli/dist/src/services/event-stream.d.ts +25 -0
  443. package/v3/@claude-flow/cli/dist/src/services/event-stream.js +27 -0
  444. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  445. package/v3/@claude-flow/cli/dist/src/services/loop-worker-runner.d.ts +16 -0
  446. package/v3/@claude-flow/cli/dist/src/services/loop-worker-runner.js +34 -0
  447. package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +4 -4
  448. package/v3/@claude-flow/cli/dist/src/services/runtime-capabilities.d.ts +22 -0
  449. package/v3/@claude-flow/cli/dist/src/services/runtime-capabilities.js +45 -0
  450. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
  451. package/v3/@claude-flow/cli/package.json +134 -133
  452. package/v3/@claude-flow/guidance/README.md +1195 -1195
  453. package/v3/@claude-flow/guidance/dist/adversarial.d.ts +284 -0
  454. package/v3/@claude-flow/guidance/dist/adversarial.js +572 -0
  455. package/v3/@claude-flow/guidance/dist/analyzer.d.ts +530 -0
  456. package/v3/@claude-flow/guidance/dist/analyzer.js +2587 -0
  457. package/v3/@claude-flow/guidance/dist/artifacts.d.ts +283 -0
  458. package/v3/@claude-flow/guidance/dist/artifacts.js +356 -0
  459. package/v3/@claude-flow/guidance/dist/authority.d.ts +290 -0
  460. package/v3/@claude-flow/guidance/dist/authority.js +558 -0
  461. package/v3/@claude-flow/guidance/dist/capabilities.d.ts +209 -0
  462. package/v3/@claude-flow/guidance/dist/capabilities.js +485 -0
  463. package/v3/@claude-flow/guidance/dist/coherence.d.ts +233 -0
  464. package/v3/@claude-flow/guidance/dist/coherence.js +372 -0
  465. package/v3/@claude-flow/guidance/dist/compiler.d.ts +87 -0
  466. package/v3/@claude-flow/guidance/dist/compiler.js +410 -0
  467. package/v3/@claude-flow/guidance/dist/conformance-kit.d.ts +225 -0
  468. package/v3/@claude-flow/guidance/dist/conformance-kit.js +629 -0
  469. package/v3/@claude-flow/guidance/dist/continue-gate.d.ts +214 -0
  470. package/v3/@claude-flow/guidance/dist/continue-gate.js +353 -0
  471. package/v3/@claude-flow/guidance/dist/crypto-utils.d.ts +17 -0
  472. package/v3/@claude-flow/guidance/dist/crypto-utils.js +24 -0
  473. package/v3/@claude-flow/guidance/dist/evolution.d.ts +282 -0
  474. package/v3/@claude-flow/guidance/dist/evolution.js +500 -0
  475. package/v3/@claude-flow/guidance/dist/gates.d.ts +79 -0
  476. package/v3/@claude-flow/guidance/dist/gates.js +302 -0
  477. package/v3/@claude-flow/guidance/dist/gateway.d.ts +206 -0
  478. package/v3/@claude-flow/guidance/dist/gateway.js +452 -0
  479. package/v3/@claude-flow/guidance/dist/generators.d.ts +153 -0
  480. package/v3/@claude-flow/guidance/dist/generators.js +682 -0
  481. package/v3/@claude-flow/guidance/dist/headless.d.ts +177 -0
  482. package/v3/@claude-flow/guidance/dist/headless.js +342 -0
  483. package/v3/@claude-flow/guidance/dist/hooks.d.ts +109 -0
  484. package/v3/@claude-flow/guidance/dist/hooks.js +347 -0
  485. package/v3/@claude-flow/guidance/dist/index.d.ts +205 -0
  486. package/v3/@claude-flow/guidance/dist/index.js +321 -0
  487. package/v3/@claude-flow/guidance/dist/ledger.d.ts +162 -0
  488. package/v3/@claude-flow/guidance/dist/ledger.js +375 -0
  489. package/v3/@claude-flow/guidance/dist/manifest-validator.d.ts +289 -0
  490. package/v3/@claude-flow/guidance/dist/manifest-validator.js +838 -0
  491. package/v3/@claude-flow/guidance/dist/memory-gate.d.ts +222 -0
  492. package/v3/@claude-flow/guidance/dist/memory-gate.js +382 -0
  493. package/v3/@claude-flow/guidance/dist/meta-governance.d.ts +265 -0
  494. package/v3/@claude-flow/guidance/dist/meta-governance.js +348 -0
  495. package/v3/@claude-flow/guidance/dist/optimizer.d.ts +104 -0
  496. package/v3/@claude-flow/guidance/dist/optimizer.js +329 -0
  497. package/v3/@claude-flow/guidance/dist/persistence.d.ts +189 -0
  498. package/v3/@claude-flow/guidance/dist/persistence.js +464 -0
  499. package/v3/@claude-flow/guidance/dist/proof.d.ts +185 -0
  500. package/v3/@claude-flow/guidance/dist/proof.js +238 -0
  501. package/v3/@claude-flow/guidance/dist/retriever.d.ts +172 -0
  502. package/v3/@claude-flow/guidance/dist/retriever.js +596 -0
  503. package/v3/@claude-flow/guidance/dist/ruvbot-integration.d.ts +370 -0
  504. package/v3/@claude-flow/guidance/dist/ruvbot-integration.js +738 -0
  505. package/v3/@claude-flow/guidance/dist/temporal.d.ts +426 -0
  506. package/v3/@claude-flow/guidance/dist/temporal.js +658 -0
  507. package/v3/@claude-flow/guidance/dist/trust.d.ts +283 -0
  508. package/v3/@claude-flow/guidance/dist/trust.js +473 -0
  509. package/v3/@claude-flow/guidance/dist/truth-anchors.d.ts +276 -0
  510. package/v3/@claude-flow/guidance/dist/truth-anchors.js +488 -0
  511. package/v3/@claude-flow/guidance/dist/types.d.ts +378 -0
  512. package/v3/@claude-flow/guidance/dist/types.js +10 -0
  513. package/v3/@claude-flow/guidance/dist/uncertainty.d.ts +372 -0
  514. package/v3/@claude-flow/guidance/dist/uncertainty.js +619 -0
  515. package/v3/@claude-flow/guidance/dist/wasm-kernel.d.ts +48 -0
  516. package/v3/@claude-flow/guidance/dist/wasm-kernel.js +158 -0
  517. package/v3/@claude-flow/guidance/package.json +198 -198
  518. package/v3/@claude-flow/shared/README.md +323 -323
  519. package/v3/@claude-flow/shared/dist/core/config/defaults.d.ts +41 -0
  520. package/v3/@claude-flow/shared/dist/core/config/defaults.js +186 -0
  521. package/v3/@claude-flow/shared/dist/core/config/index.d.ts +8 -0
  522. package/v3/@claude-flow/shared/dist/core/config/index.js +12 -0
  523. package/v3/@claude-flow/shared/dist/core/config/loader.d.ts +45 -0
  524. package/v3/@claude-flow/shared/dist/core/config/loader.js +238 -0
  525. package/v3/@claude-flow/shared/dist/core/config/schema.d.ts +1728 -0
  526. package/v3/@claude-flow/shared/dist/core/config/schema.js +160 -0
  527. package/v3/@claude-flow/shared/dist/core/config/validator.d.ts +92 -0
  528. package/v3/@claude-flow/shared/dist/core/config/validator.js +147 -0
  529. package/v3/@claude-flow/shared/dist/core/event-bus.d.ts +31 -0
  530. package/v3/@claude-flow/shared/dist/core/event-bus.js +197 -0
  531. package/v3/@claude-flow/shared/dist/core/index.d.ts +15 -0
  532. package/v3/@claude-flow/shared/dist/core/index.js +19 -0
  533. package/v3/@claude-flow/shared/dist/core/interfaces/agent.interface.d.ts +200 -0
  534. package/v3/@claude-flow/shared/dist/core/interfaces/agent.interface.js +6 -0
  535. package/v3/@claude-flow/shared/dist/core/interfaces/coordinator.interface.d.ts +310 -0
  536. package/v3/@claude-flow/shared/dist/core/interfaces/coordinator.interface.js +7 -0
  537. package/v3/@claude-flow/shared/dist/core/interfaces/event.interface.d.ts +224 -0
  538. package/v3/@claude-flow/shared/dist/core/interfaces/event.interface.js +46 -0
  539. package/v3/@claude-flow/shared/dist/core/interfaces/index.d.ts +10 -0
  540. package/v3/@claude-flow/shared/dist/core/interfaces/index.js +15 -0
  541. package/v3/@claude-flow/shared/dist/core/interfaces/memory.interface.d.ts +298 -0
  542. package/v3/@claude-flow/shared/dist/core/interfaces/memory.interface.js +7 -0
  543. package/v3/@claude-flow/shared/dist/core/interfaces/task.interface.d.ts +185 -0
  544. package/v3/@claude-flow/shared/dist/core/interfaces/task.interface.js +6 -0
  545. package/v3/@claude-flow/shared/dist/core/orchestrator/event-coordinator.d.ts +35 -0
  546. package/v3/@claude-flow/shared/dist/core/orchestrator/event-coordinator.js +101 -0
  547. package/v3/@claude-flow/shared/dist/core/orchestrator/health-monitor.d.ts +60 -0
  548. package/v3/@claude-flow/shared/dist/core/orchestrator/health-monitor.js +166 -0
  549. package/v3/@claude-flow/shared/dist/core/orchestrator/index.d.ts +46 -0
  550. package/v3/@claude-flow/shared/dist/core/orchestrator/index.js +64 -0
  551. package/v3/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.d.ts +56 -0
  552. package/v3/@claude-flow/shared/dist/core/orchestrator/lifecycle-manager.js +195 -0
  553. package/v3/@claude-flow/shared/dist/core/orchestrator/session-manager.d.ts +83 -0
  554. package/v3/@claude-flow/shared/dist/core/orchestrator/session-manager.js +193 -0
  555. package/v3/@claude-flow/shared/dist/core/orchestrator/task-manager.d.ts +49 -0
  556. package/v3/@claude-flow/shared/dist/core/orchestrator/task-manager.js +253 -0
  557. package/v3/@claude-flow/shared/dist/events/domain-events.d.ts +282 -0
  558. package/v3/@claude-flow/shared/dist/events/domain-events.js +165 -0
  559. package/v3/@claude-flow/shared/dist/events/event-store.d.ts +126 -0
  560. package/v3/@claude-flow/shared/dist/events/event-store.js +427 -0
  561. package/v3/@claude-flow/shared/dist/events/event-store.test.d.ts +8 -0
  562. package/v3/@claude-flow/shared/dist/events/event-store.test.js +293 -0
  563. package/v3/@claude-flow/shared/dist/events/example-usage.d.ts +10 -0
  564. package/v3/@claude-flow/shared/dist/events/example-usage.js +193 -0
  565. package/v3/@claude-flow/shared/dist/events/index.d.ts +21 -0
  566. package/v3/@claude-flow/shared/dist/events/index.js +22 -0
  567. package/v3/@claude-flow/shared/dist/events/projections.d.ts +177 -0
  568. package/v3/@claude-flow/shared/dist/events/projections.js +421 -0
  569. package/v3/@claude-flow/shared/dist/events/rvf-event-log.d.ts +82 -0
  570. package/v3/@claude-flow/shared/dist/events/rvf-event-log.js +340 -0
  571. package/v3/@claude-flow/shared/dist/events/state-reconstructor.d.ts +101 -0
  572. package/v3/@claude-flow/shared/dist/events/state-reconstructor.js +263 -0
  573. package/v3/@claude-flow/shared/dist/events.d.ts +80 -0
  574. package/v3/@claude-flow/shared/dist/events.js +249 -0
  575. package/v3/@claude-flow/shared/dist/hooks/example-usage.d.ts +42 -0
  576. package/v3/@claude-flow/shared/dist/hooks/example-usage.js +351 -0
  577. package/v3/@claude-flow/shared/dist/hooks/executor.d.ts +100 -0
  578. package/v3/@claude-flow/shared/dist/hooks/executor.js +267 -0
  579. package/v3/@claude-flow/shared/dist/hooks/hooks.test.d.ts +9 -0
  580. package/v3/@claude-flow/shared/dist/hooks/hooks.test.js +322 -0
  581. package/v3/@claude-flow/shared/dist/hooks/index.d.ts +52 -0
  582. package/v3/@claude-flow/shared/dist/hooks/index.js +51 -0
  583. package/v3/@claude-flow/shared/dist/hooks/registry.d.ts +133 -0
  584. package/v3/@claude-flow/shared/dist/hooks/registry.js +277 -0
  585. package/v3/@claude-flow/shared/dist/hooks/safety/bash-safety.d.ts +105 -0
  586. package/v3/@claude-flow/shared/dist/hooks/safety/bash-safety.js +481 -0
  587. package/v3/@claude-flow/shared/dist/hooks/safety/file-organization.d.ts +144 -0
  588. package/v3/@claude-flow/shared/dist/hooks/safety/file-organization.js +328 -0
  589. package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.d.ts +158 -0
  590. package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +450 -0
  591. package/v3/@claude-flow/shared/dist/hooks/safety/index.d.ts +17 -0
  592. package/v3/@claude-flow/shared/dist/hooks/safety/index.js +17 -0
  593. package/v3/@claude-flow/shared/dist/hooks/session-hooks.d.ts +234 -0
  594. package/v3/@claude-flow/shared/dist/hooks/session-hooks.js +334 -0
  595. package/v3/@claude-flow/shared/dist/hooks/task-hooks.d.ts +163 -0
  596. package/v3/@claude-flow/shared/dist/hooks/task-hooks.js +326 -0
  597. package/v3/@claude-flow/shared/dist/hooks/types.d.ts +267 -0
  598. package/v3/@claude-flow/shared/dist/hooks/types.js +62 -0
  599. package/v3/@claude-flow/shared/dist/hooks/verify-exports.test.d.ts +9 -0
  600. package/v3/@claude-flow/shared/dist/hooks/verify-exports.test.js +93 -0
  601. package/v3/@claude-flow/shared/dist/index.d.ts +20 -0
  602. package/v3/@claude-flow/shared/dist/index.js +50 -0
  603. package/v3/@claude-flow/shared/dist/mcp/connection-pool.d.ts +98 -0
  604. package/v3/@claude-flow/shared/dist/mcp/connection-pool.js +364 -0
  605. package/v3/@claude-flow/shared/dist/mcp/index.d.ts +69 -0
  606. package/v3/@claude-flow/shared/dist/mcp/index.js +84 -0
  607. package/v3/@claude-flow/shared/dist/mcp/server.d.ts +166 -0
  608. package/v3/@claude-flow/shared/dist/mcp/server.js +590 -0
  609. package/v3/@claude-flow/shared/dist/mcp/session-manager.d.ts +136 -0
  610. package/v3/@claude-flow/shared/dist/mcp/session-manager.js +335 -0
  611. package/v3/@claude-flow/shared/dist/mcp/tool-registry.d.ts +178 -0
  612. package/v3/@claude-flow/shared/dist/mcp/tool-registry.js +439 -0
  613. package/v3/@claude-flow/shared/dist/mcp/transport/http.d.ts +104 -0
  614. package/v3/@claude-flow/shared/dist/mcp/transport/http.js +476 -0
  615. package/v3/@claude-flow/shared/dist/mcp/transport/index.d.ts +102 -0
  616. package/v3/@claude-flow/shared/dist/mcp/transport/index.js +238 -0
  617. package/v3/@claude-flow/shared/dist/mcp/transport/stdio.d.ts +104 -0
  618. package/v3/@claude-flow/shared/dist/mcp/transport/stdio.js +263 -0
  619. package/v3/@claude-flow/shared/dist/mcp/transport/websocket.d.ts +133 -0
  620. package/v3/@claude-flow/shared/dist/mcp/transport/websocket.js +396 -0
  621. package/v3/@claude-flow/shared/dist/mcp/types.d.ts +436 -0
  622. package/v3/@claude-flow/shared/dist/mcp/types.js +54 -0
  623. package/v3/@claude-flow/shared/dist/plugin-interface.d.ts +544 -0
  624. package/v3/@claude-flow/shared/dist/plugin-interface.js +23 -0
  625. package/v3/@claude-flow/shared/dist/plugin-loader.d.ts +139 -0
  626. package/v3/@claude-flow/shared/dist/plugin-loader.js +434 -0
  627. package/v3/@claude-flow/shared/dist/plugin-registry.d.ts +183 -0
  628. package/v3/@claude-flow/shared/dist/plugin-registry.js +457 -0
  629. package/v3/@claude-flow/shared/dist/plugins/index.d.ts +10 -0
  630. package/v3/@claude-flow/shared/dist/plugins/index.js +10 -0
  631. package/v3/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.d.ts +106 -0
  632. package/v3/@claude-flow/shared/dist/plugins/official/hive-mind-plugin.js +241 -0
  633. package/v3/@claude-flow/shared/dist/plugins/official/index.d.ts +10 -0
  634. package/v3/@claude-flow/shared/dist/plugins/official/index.js +10 -0
  635. package/v3/@claude-flow/shared/dist/plugins/official/maestro-plugin.d.ts +121 -0
  636. package/v3/@claude-flow/shared/dist/plugins/official/maestro-plugin.js +355 -0
  637. package/v3/@claude-flow/shared/dist/plugins/types.d.ts +93 -0
  638. package/v3/@claude-flow/shared/dist/plugins/types.js +9 -0
  639. package/v3/@claude-flow/shared/dist/resilience/bulkhead.d.ts +105 -0
  640. package/v3/@claude-flow/shared/dist/resilience/bulkhead.js +206 -0
  641. package/v3/@claude-flow/shared/dist/resilience/circuit-breaker.d.ts +132 -0
  642. package/v3/@claude-flow/shared/dist/resilience/circuit-breaker.js +233 -0
  643. package/v3/@claude-flow/shared/dist/resilience/index.d.ts +19 -0
  644. package/v3/@claude-flow/shared/dist/resilience/index.js +19 -0
  645. package/v3/@claude-flow/shared/dist/resilience/rate-limiter.d.ts +168 -0
  646. package/v3/@claude-flow/shared/dist/resilience/rate-limiter.js +314 -0
  647. package/v3/@claude-flow/shared/dist/resilience/retry.d.ts +91 -0
  648. package/v3/@claude-flow/shared/dist/resilience/retry.js +159 -0
  649. package/v3/@claude-flow/shared/dist/security/index.d.ts +10 -0
  650. package/v3/@claude-flow/shared/dist/security/index.js +12 -0
  651. package/v3/@claude-flow/shared/dist/security/input-validation.d.ts +73 -0
  652. package/v3/@claude-flow/shared/dist/security/input-validation.js +201 -0
  653. package/v3/@claude-flow/shared/dist/security/secure-random.d.ts +92 -0
  654. package/v3/@claude-flow/shared/dist/security/secure-random.js +142 -0
  655. package/v3/@claude-flow/shared/dist/services/index.d.ts +7 -0
  656. package/v3/@claude-flow/shared/dist/services/index.js +7 -0
  657. package/v3/@claude-flow/shared/dist/services/v3-progress.service.d.ts +124 -0
  658. package/v3/@claude-flow/shared/dist/services/v3-progress.service.js +402 -0
  659. package/v3/@claude-flow/shared/dist/types/agent.types.d.ts +137 -0
  660. package/v3/@claude-flow/shared/dist/types/agent.types.js +6 -0
  661. package/v3/@claude-flow/shared/dist/types/index.d.ts +11 -0
  662. package/v3/@claude-flow/shared/dist/types/index.js +17 -0
  663. package/v3/@claude-flow/shared/dist/types/mcp.types.d.ts +266 -0
  664. package/v3/@claude-flow/shared/dist/types/mcp.types.js +7 -0
  665. package/v3/@claude-flow/shared/dist/types/memory.types.d.ts +236 -0
  666. package/v3/@claude-flow/shared/dist/types/memory.types.js +7 -0
  667. package/v3/@claude-flow/shared/dist/types/swarm.types.d.ts +186 -0
  668. package/v3/@claude-flow/shared/dist/types/swarm.types.js +65 -0
  669. package/v3/@claude-flow/shared/dist/types/task.types.d.ts +178 -0
  670. package/v3/@claude-flow/shared/dist/types/task.types.js +32 -0
  671. package/v3/@claude-flow/shared/dist/types.d.ts +197 -0
  672. package/v3/@claude-flow/shared/dist/types.js +21 -0
  673. package/v3/@claude-flow/shared/dist/utils/secure-logger.d.ts +69 -0
  674. package/v3/@claude-flow/shared/dist/utils/secure-logger.js +208 -0
  675. package/v3/@claude-flow/shared/package.json +43 -43
  676. package/v3/README.md +493 -493
  677. package/.claude/security-scans/scan-all-standard.json +0 -321
  678. package/.claude/security-scans/scan-code-deep.json +0 -1209
  679. package/.claude/security-scans/scan-deps-full.json +0 -14
@@ -1,977 +1,977 @@
1
- ---
2
- name: crdt-synchronizer
3
- description: Implements Conflict-free Replicated Data Types for eventually consistent state synchronization
4
- ---
5
-
6
- # CRDT Synchronizer
7
-
8
- Implements Conflict-free Replicated Data Types for eventually consistent distributed state synchronization.
9
-
10
- ## Core Responsibilities
11
-
12
- 1. **CRDT Implementation**: Deploy state-based and operation-based conflict-free data types
13
- 2. **Data Structure Management**: Handle counters, sets, registers, and composite structures
14
- 3. **Delta Synchronization**: Implement efficient incremental state updates
15
- 4. **Conflict Resolution**: Ensure deterministic conflict-free merge operations
16
- 5. **Causal Consistency**: Maintain proper ordering of causally related operations
17
-
18
- ## Technical Implementation
19
-
20
- ### Base CRDT Framework
21
- ```javascript
22
- class CRDTSynchronizer {
23
- constructor(nodeId, replicationGroup) {
24
- this.nodeId = nodeId;
25
- this.replicationGroup = replicationGroup;
26
- this.crdtInstances = new Map();
27
- this.vectorClock = new VectorClock(nodeId);
28
- this.deltaBuffer = new Map();
29
- this.syncScheduler = new SyncScheduler();
30
- this.causalTracker = new CausalTracker();
31
- }
32
-
33
- // Register CRDT instance
34
- registerCRDT(name, crdtType, initialState = null) {
35
- const crdt = this.createCRDTInstance(crdtType, initialState);
36
- this.crdtInstances.set(name, crdt);
37
-
38
- // Subscribe to CRDT changes for delta tracking
39
- crdt.onUpdate((delta) => {
40
- this.trackDelta(name, delta);
41
- });
42
-
43
- return crdt;
44
- }
45
-
46
- // Create specific CRDT instance
47
- createCRDTInstance(type, initialState) {
48
- switch (type) {
49
- case 'G_COUNTER':
50
- return new GCounter(this.nodeId, this.replicationGroup, initialState);
51
- case 'PN_COUNTER':
52
- return new PNCounter(this.nodeId, this.replicationGroup, initialState);
53
- case 'OR_SET':
54
- return new ORSet(this.nodeId, initialState);
55
- case 'LWW_REGISTER':
56
- return new LWWRegister(this.nodeId, initialState);
57
- case 'OR_MAP':
58
- return new ORMap(this.nodeId, this.replicationGroup, initialState);
59
- case 'RGA':
60
- return new RGA(this.nodeId, initialState);
61
- default:
62
- throw new Error(`Unknown CRDT type: ${type}`);
63
- }
64
- }
65
-
66
- // Synchronize with peer nodes
67
- async synchronize(peerNodes = null) {
68
- const targets = peerNodes || Array.from(this.replicationGroup);
69
-
70
- for (const peer of targets) {
71
- if (peer !== this.nodeId) {
72
- await this.synchronizeWithPeer(peer);
73
- }
74
- }
75
- }
76
-
77
- async synchronizeWithPeer(peerNode) {
78
- // Get current state and deltas
79
- const localState = this.getCurrentState();
80
- const deltas = this.getDeltasSince(peerNode);
81
-
82
- // Send sync request
83
- const syncRequest = {
84
- type: 'CRDT_SYNC_REQUEST',
85
- sender: this.nodeId,
86
- vectorClock: this.vectorClock.clone(),
87
- state: localState,
88
- deltas: deltas
89
- };
90
-
91
- try {
92
- const response = await this.sendSyncRequest(peerNode, syncRequest);
93
- await this.processSyncResponse(response);
94
- } catch (error) {
95
- console.error(`Sync failed with ${peerNode}:`, error);
96
- }
97
- }
98
- }
99
- ```
100
-
101
- ### G-Counter Implementation
102
- ```javascript
103
- class GCounter {
104
- constructor(nodeId, replicationGroup, initialState = null) {
105
- this.nodeId = nodeId;
106
- this.replicationGroup = replicationGroup;
107
- this.payload = new Map();
108
-
109
- // Initialize counters for all nodes
110
- for (const node of replicationGroup) {
111
- this.payload.set(node, 0);
112
- }
113
-
114
- if (initialState) {
115
- this.merge(initialState);
116
- }
117
-
118
- this.updateCallbacks = [];
119
- }
120
-
121
- // Increment operation (can only be performed by owner node)
122
- increment(amount = 1) {
123
- if (amount < 0) {
124
- throw new Error('G-Counter only supports positive increments');
125
- }
126
-
127
- const oldValue = this.payload.get(this.nodeId) || 0;
128
- const newValue = oldValue + amount;
129
- this.payload.set(this.nodeId, newValue);
130
-
131
- // Notify observers
132
- this.notifyUpdate({
133
- type: 'INCREMENT',
134
- node: this.nodeId,
135
- oldValue: oldValue,
136
- newValue: newValue,
137
- delta: amount
138
- });
139
-
140
- return newValue;
141
- }
142
-
143
- // Get current value (sum of all node counters)
144
- value() {
145
- return Array.from(this.payload.values()).reduce((sum, val) => sum + val, 0);
146
- }
147
-
148
- // Merge with another G-Counter state
149
- merge(otherState) {
150
- let changed = false;
151
-
152
- for (const [node, otherValue] of otherState.payload) {
153
- const currentValue = this.payload.get(node) || 0;
154
- if (otherValue > currentValue) {
155
- this.payload.set(node, otherValue);
156
- changed = true;
157
- }
158
- }
159
-
160
- if (changed) {
161
- this.notifyUpdate({
162
- type: 'MERGE',
163
- mergedFrom: otherState
164
- });
165
- }
166
- }
167
-
168
- // Compare with another state
169
- compare(otherState) {
170
- for (const [node, otherValue] of otherState.payload) {
171
- const currentValue = this.payload.get(node) || 0;
172
- if (currentValue < otherValue) {
173
- return 'LESS_THAN';
174
- } else if (currentValue > otherValue) {
175
- return 'GREATER_THAN';
176
- }
177
- }
178
- return 'EQUAL';
179
- }
180
-
181
- // Clone current state
182
- clone() {
183
- const newCounter = new GCounter(this.nodeId, this.replicationGroup);
184
- newCounter.payload = new Map(this.payload);
185
- return newCounter;
186
- }
187
-
188
- onUpdate(callback) {
189
- this.updateCallbacks.push(callback);
190
- }
191
-
192
- notifyUpdate(delta) {
193
- this.updateCallbacks.forEach(callback => callback(delta));
194
- }
195
- }
196
- ```
197
-
198
- ### OR-Set Implementation
199
- ```javascript
200
- class ORSet {
201
- constructor(nodeId, initialState = null) {
202
- this.nodeId = nodeId;
203
- this.elements = new Map(); // element -> Set of unique tags
204
- this.tombstones = new Set(); // removed element tags
205
- this.tagCounter = 0;
206
-
207
- if (initialState) {
208
- this.merge(initialState);
209
- }
210
-
211
- this.updateCallbacks = [];
212
- }
213
-
214
- // Add element to set
215
- add(element) {
216
- const tag = this.generateUniqueTag();
217
-
218
- if (!this.elements.has(element)) {
219
- this.elements.set(element, new Set());
220
- }
221
-
222
- this.elements.get(element).add(tag);
223
-
224
- this.notifyUpdate({
225
- type: 'ADD',
226
- element: element,
227
- tag: tag
228
- });
229
-
230
- return tag;
231
- }
232
-
233
- // Remove element from set
234
- remove(element) {
235
- if (!this.elements.has(element)) {
236
- return false; // Element not present
237
- }
238
-
239
- const tags = this.elements.get(element);
240
- const removedTags = [];
241
-
242
- // Add all tags to tombstones
243
- for (const tag of tags) {
244
- this.tombstones.add(tag);
245
- removedTags.push(tag);
246
- }
247
-
248
- this.notifyUpdate({
249
- type: 'REMOVE',
250
- element: element,
251
- removedTags: removedTags
252
- });
253
-
254
- return true;
255
- }
256
-
257
- // Check if element is in set
258
- has(element) {
259
- if (!this.elements.has(element)) {
260
- return false;
261
- }
262
-
263
- const tags = this.elements.get(element);
264
-
265
- // Element is present if it has at least one non-tombstoned tag
266
- for (const tag of tags) {
267
- if (!this.tombstones.has(tag)) {
268
- return true;
269
- }
270
- }
271
-
272
- return false;
273
- }
274
-
275
- // Get all elements in set
276
- values() {
277
- const result = new Set();
278
-
279
- for (const [element, tags] of this.elements) {
280
- // Include element if it has at least one non-tombstoned tag
281
- for (const tag of tags) {
282
- if (!this.tombstones.has(tag)) {
283
- result.add(element);
284
- break;
285
- }
286
- }
287
- }
288
-
289
- return result;
290
- }
291
-
292
- // Merge with another OR-Set
293
- merge(otherState) {
294
- let changed = false;
295
-
296
- // Merge elements and their tags
297
- for (const [element, otherTags] of otherState.elements) {
298
- if (!this.elements.has(element)) {
299
- this.elements.set(element, new Set());
300
- }
301
-
302
- const currentTags = this.elements.get(element);
303
-
304
- for (const tag of otherTags) {
305
- if (!currentTags.has(tag)) {
306
- currentTags.add(tag);
307
- changed = true;
308
- }
309
- }
310
- }
311
-
312
- // Merge tombstones
313
- for (const tombstone of otherState.tombstones) {
314
- if (!this.tombstones.has(tombstone)) {
315
- this.tombstones.add(tombstone);
316
- changed = true;
317
- }
318
- }
319
-
320
- if (changed) {
321
- this.notifyUpdate({
322
- type: 'MERGE',
323
- mergedFrom: otherState
324
- });
325
- }
326
- }
327
-
328
- generateUniqueTag() {
329
- return `${this.nodeId}-${Date.now()}-${++this.tagCounter}`;
330
- }
331
-
332
- onUpdate(callback) {
333
- this.updateCallbacks.push(callback);
334
- }
335
-
336
- notifyUpdate(delta) {
337
- this.updateCallbacks.forEach(callback => callback(delta));
338
- }
339
- }
340
- ```
341
-
342
- ### LWW-Register Implementation
343
- ```javascript
344
- class LWWRegister {
345
- constructor(nodeId, initialValue = null) {
346
- this.nodeId = nodeId;
347
- this.value = initialValue;
348
- this.timestamp = initialValue ? Date.now() : 0;
349
- this.vectorClock = new VectorClock(nodeId);
350
- this.updateCallbacks = [];
351
- }
352
-
353
- // Set new value with timestamp
354
- set(newValue, timestamp = null) {
355
- const ts = timestamp || Date.now();
356
-
357
- if (ts > this.timestamp ||
358
- (ts === this.timestamp && this.nodeId > this.getLastWriter())) {
359
- const oldValue = this.value;
360
- this.value = newValue;
361
- this.timestamp = ts;
362
- this.vectorClock.increment();
363
-
364
- this.notifyUpdate({
365
- type: 'SET',
366
- oldValue: oldValue,
367
- newValue: newValue,
368
- timestamp: ts
369
- });
370
- }
371
- }
372
-
373
- // Get current value
374
- get() {
375
- return this.value;
376
- }
377
-
378
- // Merge with another LWW-Register
379
- merge(otherRegister) {
380
- if (otherRegister.timestamp > this.timestamp ||
381
- (otherRegister.timestamp === this.timestamp &&
382
- otherRegister.nodeId > this.nodeId)) {
383
-
384
- const oldValue = this.value;
385
- this.value = otherRegister.value;
386
- this.timestamp = otherRegister.timestamp;
387
-
388
- this.notifyUpdate({
389
- type: 'MERGE',
390
- oldValue: oldValue,
391
- newValue: this.value,
392
- mergedFrom: otherRegister
393
- });
394
- }
395
-
396
- // Merge vector clocks
397
- this.vectorClock.merge(otherRegister.vectorClock);
398
- }
399
-
400
- getLastWriter() {
401
- // In real implementation, this would track the actual writer
402
- return this.nodeId;
403
- }
404
-
405
- onUpdate(callback) {
406
- this.updateCallbacks.push(callback);
407
- }
408
-
409
- notifyUpdate(delta) {
410
- this.updateCallbacks.forEach(callback => callback(delta));
411
- }
412
- }
413
- ```
414
-
415
- ### RGA (Replicated Growable Array) Implementation
416
- ```javascript
417
- class RGA {
418
- constructor(nodeId, initialSequence = []) {
419
- this.nodeId = nodeId;
420
- this.sequence = [];
421
- this.tombstones = new Set();
422
- this.vertexCounter = 0;
423
-
424
- // Initialize with sequence
425
- for (const element of initialSequence) {
426
- this.insert(this.sequence.length, element);
427
- }
428
-
429
- this.updateCallbacks = [];
430
- }
431
-
432
- // Insert element at position
433
- insert(position, element) {
434
- const vertex = this.createVertex(element, position);
435
-
436
- // Find insertion point based on causal ordering
437
- const insertionIndex = this.findInsertionIndex(vertex, position);
438
-
439
- this.sequence.splice(insertionIndex, 0, vertex);
440
-
441
- this.notifyUpdate({
442
- type: 'INSERT',
443
- position: insertionIndex,
444
- element: element,
445
- vertex: vertex
446
- });
447
-
448
- return vertex.id;
449
- }
450
-
451
- // Remove element at position
452
- remove(position) {
453
- if (position < 0 || position >= this.visibleLength()) {
454
- throw new Error('Position out of bounds');
455
- }
456
-
457
- const visibleVertex = this.getVisibleVertex(position);
458
- if (visibleVertex) {
459
- this.tombstones.add(visibleVertex.id);
460
-
461
- this.notifyUpdate({
462
- type: 'REMOVE',
463
- position: position,
464
- vertex: visibleVertex
465
- });
466
-
467
- return true;
468
- }
469
-
470
- return false;
471
- }
472
-
473
- // Get visible elements (non-tombstoned)
474
- toArray() {
475
- return this.sequence
476
- .filter(vertex => !this.tombstones.has(vertex.id))
477
- .map(vertex => vertex.element);
478
- }
479
-
480
- // Get visible length
481
- visibleLength() {
482
- return this.sequence.filter(vertex => !this.tombstones.has(vertex.id)).length;
483
- }
484
-
485
- // Merge with another RGA
486
- merge(otherRGA) {
487
- let changed = false;
488
-
489
- // Merge sequences
490
- const mergedSequence = this.mergeSequences(this.sequence, otherRGA.sequence);
491
- if (mergedSequence.length !== this.sequence.length) {
492
- this.sequence = mergedSequence;
493
- changed = true;
494
- }
495
-
496
- // Merge tombstones
497
- for (const tombstone of otherRGA.tombstones) {
498
- if (!this.tombstones.has(tombstone)) {
499
- this.tombstones.add(tombstone);
500
- changed = true;
501
- }
502
- }
503
-
504
- if (changed) {
505
- this.notifyUpdate({
506
- type: 'MERGE',
507
- mergedFrom: otherRGA
508
- });
509
- }
510
- }
511
-
512
- createVertex(element, position) {
513
- const leftVertex = position > 0 ? this.getVisibleVertex(position - 1) : null;
514
-
515
- return {
516
- id: `${this.nodeId}-${++this.vertexCounter}`,
517
- element: element,
518
- leftOrigin: leftVertex ? leftVertex.id : null,
519
- timestamp: Date.now(),
520
- nodeId: this.nodeId
521
- };
522
- }
523
-
524
- findInsertionIndex(vertex, targetPosition) {
525
- // Simplified insertion logic - in practice would use more sophisticated
526
- // causal ordering based on left origins and vector clocks
527
- let visibleCount = 0;
528
-
529
- for (let i = 0; i < this.sequence.length; i++) {
530
- if (!this.tombstones.has(this.sequence[i].id)) {
531
- if (visibleCount === targetPosition) {
532
- return i;
533
- }
534
- visibleCount++;
535
- }
536
- }
537
-
538
- return this.sequence.length;
539
- }
540
-
541
- getVisibleVertex(position) {
542
- let visibleCount = 0;
543
-
544
- for (const vertex of this.sequence) {
545
- if (!this.tombstones.has(vertex.id)) {
546
- if (visibleCount === position) {
547
- return vertex;
548
- }
549
- visibleCount++;
550
- }
551
- }
552
-
553
- return null;
554
- }
555
-
556
- mergeSequences(seq1, seq2) {
557
- // Simplified merge - real implementation would use topological sort
558
- // based on causal dependencies
559
- const merged = [...seq1];
560
-
561
- for (const vertex of seq2) {
562
- if (!merged.find(v => v.id === vertex.id)) {
563
- merged.push(vertex);
564
- }
565
- }
566
-
567
- // Sort by timestamp for basic ordering
568
- return merged.sort((a, b) => a.timestamp - b.timestamp);
569
- }
570
-
571
- onUpdate(callback) {
572
- this.updateCallbacks.push(callback);
573
- }
574
-
575
- notifyUpdate(delta) {
576
- this.updateCallbacks.forEach(callback => callback(delta));
577
- }
578
- }
579
- ```
580
-
581
- ### Delta-State CRDT Framework
582
- ```javascript
583
- class DeltaStateCRDT {
584
- constructor(baseCRDT) {
585
- this.baseCRDT = baseCRDT;
586
- this.deltaBuffer = [];
587
- this.lastSyncVector = new Map();
588
- this.maxDeltaBuffer = 1000;
589
- }
590
-
591
- // Apply operation and track delta
592
- applyOperation(operation) {
593
- const oldState = this.baseCRDT.clone();
594
- const result = this.baseCRDT.applyOperation(operation);
595
- const newState = this.baseCRDT.clone();
596
-
597
- // Compute delta
598
- const delta = this.computeDelta(oldState, newState);
599
- this.addDelta(delta);
600
-
601
- return result;
602
- }
603
-
604
- // Add delta to buffer
605
- addDelta(delta) {
606
- this.deltaBuffer.push({
607
- delta: delta,
608
- timestamp: Date.now(),
609
- vectorClock: this.baseCRDT.vectorClock.clone()
610
- });
611
-
612
- // Maintain buffer size
613
- if (this.deltaBuffer.length > this.maxDeltaBuffer) {
614
- this.deltaBuffer.shift();
615
- }
616
- }
617
-
618
- // Get deltas since last sync with peer
619
- getDeltasSince(peerNode) {
620
- const lastSync = this.lastSyncVector.get(peerNode) || new VectorClock();
621
-
622
- return this.deltaBuffer.filter(deltaEntry =>
623
- deltaEntry.vectorClock.isAfter(lastSync)
624
- );
625
- }
626
-
627
- // Apply received deltas
628
- applyDeltas(deltas) {
629
- const sortedDeltas = this.sortDeltasByCausalOrder(deltas);
630
-
631
- for (const delta of sortedDeltas) {
632
- this.baseCRDT.merge(delta.delta);
633
- }
634
- }
635
-
636
- // Compute delta between two states
637
- computeDelta(oldState, newState) {
638
- // Implementation depends on specific CRDT type
639
- // This is a simplified version
640
- return {
641
- type: 'STATE_DELTA',
642
- changes: this.compareStates(oldState, newState)
643
- };
644
- }
645
-
646
- sortDeltasByCausalOrder(deltas) {
647
- // Sort deltas to respect causal ordering
648
- return deltas.sort((a, b) => {
649
- if (a.vectorClock.isBefore(b.vectorClock)) return -1;
650
- if (b.vectorClock.isBefore(a.vectorClock)) return 1;
651
- return 0;
652
- });
653
- }
654
-
655
- // Garbage collection for old deltas
656
- garbageCollectDeltas() {
657
- const cutoffTime = Date.now() - (24 * 60 * 60 * 1000); // 24 hours
658
-
659
- this.deltaBuffer = this.deltaBuffer.filter(
660
- deltaEntry => deltaEntry.timestamp > cutoffTime
661
- );
662
- }
663
- }
664
- ```
665
-
666
- ## MCP Integration Hooks
667
-
668
- ### Memory Coordination for CRDT State
669
- ```javascript
670
- // Store CRDT state persistently
671
- await this.mcpTools.memory_usage({
672
- action: 'store',
673
- key: `crdt_state_${this.crdtName}`,
674
- value: JSON.stringify({
675
- type: this.crdtType,
676
- state: this.serializeState(),
677
- vectorClock: Array.from(this.vectorClock.entries()),
678
- lastSync: Array.from(this.lastSyncVector.entries())
679
- }),
680
- namespace: 'crdt_synchronization',
681
- ttl: 0 // Persistent
682
- });
683
-
684
- // Coordinate delta synchronization
685
- await this.mcpTools.memory_usage({
686
- action: 'store',
687
- key: `deltas_${this.nodeId}_${Date.now()}`,
688
- value: JSON.stringify(this.getDeltasSince(null)),
689
- namespace: 'crdt_deltas',
690
- ttl: 86400000 // 24 hours
691
- });
692
- ```
693
-
694
- ### Performance Monitoring
695
- ```javascript
696
- // Track CRDT synchronization metrics
697
- await this.mcpTools.metrics_collect({
698
- components: [
699
- 'crdt_merge_time',
700
- 'delta_generation_time',
701
- 'sync_convergence_time',
702
- 'memory_usage_per_crdt'
703
- ]
704
- });
705
-
706
- // Neural pattern learning for sync optimization
707
- await this.mcpTools.neural_patterns({
708
- action: 'learn',
709
- operation: 'crdt_sync_optimization',
710
- outcome: JSON.stringify({
711
- syncPattern: this.lastSyncPattern,
712
- convergenceTime: this.lastConvergenceTime,
713
- networkTopology: this.networkState
714
- })
715
- });
716
- ```
717
-
718
- ## Advanced CRDT Features
719
-
720
- ### Causal Consistency Tracker
721
- ```javascript
722
- class CausalTracker {
723
- constructor(nodeId) {
724
- this.nodeId = nodeId;
725
- this.vectorClock = new VectorClock(nodeId);
726
- this.causalBuffer = new Map();
727
- this.deliveredEvents = new Set();
728
- }
729
-
730
- // Track causal dependencies
731
- trackEvent(event) {
732
- event.vectorClock = this.vectorClock.clone();
733
- this.vectorClock.increment();
734
-
735
- // Check if event can be delivered
736
- if (this.canDeliver(event)) {
737
- this.deliverEvent(event);
738
- this.checkBufferedEvents();
739
- } else {
740
- this.bufferEvent(event);
741
- }
742
- }
743
-
744
- canDeliver(event) {
745
- // Event can be delivered if all its causal dependencies are satisfied
746
- for (const [nodeId, clock] of event.vectorClock.entries()) {
747
- if (nodeId === event.originNode) {
748
- // Origin node's clock should be exactly one more than current
749
- if (clock !== this.vectorClock.get(nodeId) + 1) {
750
- return false;
751
- }
752
- } else {
753
- // Other nodes' clocks should not exceed current
754
- if (clock > this.vectorClock.get(nodeId)) {
755
- return false;
756
- }
757
- }
758
- }
759
- return true;
760
- }
761
-
762
- deliverEvent(event) {
763
- if (!this.deliveredEvents.has(event.id)) {
764
- // Update vector clock
765
- this.vectorClock.merge(event.vectorClock);
766
-
767
- // Mark as delivered
768
- this.deliveredEvents.add(event.id);
769
-
770
- // Apply event to CRDT
771
- this.applyCRDTOperation(event);
772
- }
773
- }
774
-
775
- bufferEvent(event) {
776
- if (!this.causalBuffer.has(event.id)) {
777
- this.causalBuffer.set(event.id, event);
778
- }
779
- }
780
-
781
- checkBufferedEvents() {
782
- const deliverable = [];
783
-
784
- for (const [eventId, event] of this.causalBuffer) {
785
- if (this.canDeliver(event)) {
786
- deliverable.push(event);
787
- }
788
- }
789
-
790
- // Deliver events in causal order
791
- for (const event of deliverable) {
792
- this.causalBuffer.delete(event.id);
793
- this.deliverEvent(event);
794
- }
795
- }
796
- }
797
- ```
798
-
799
- ### CRDT Composition Framework
800
- ```javascript
801
- class CRDTComposer {
802
- constructor() {
803
- this.compositeTypes = new Map();
804
- this.transformations = new Map();
805
- }
806
-
807
- // Define composite CRDT structure
808
- defineComposite(name, schema) {
809
- this.compositeTypes.set(name, {
810
- schema: schema,
811
- factory: (nodeId, replicationGroup) =>
812
- this.createComposite(schema, nodeId, replicationGroup)
813
- });
814
- }
815
-
816
- createComposite(schema, nodeId, replicationGroup) {
817
- const composite = new CompositeCRDT(nodeId, replicationGroup);
818
-
819
- for (const [fieldName, fieldSpec] of Object.entries(schema)) {
820
- const fieldCRDT = this.createFieldCRDT(fieldSpec, nodeId, replicationGroup);
821
- composite.addField(fieldName, fieldCRDT);
822
- }
823
-
824
- return composite;
825
- }
826
-
827
- createFieldCRDT(fieldSpec, nodeId, replicationGroup) {
828
- switch (fieldSpec.type) {
829
- case 'counter':
830
- return fieldSpec.decrements ?
831
- new PNCounter(nodeId, replicationGroup) :
832
- new GCounter(nodeId, replicationGroup);
833
- case 'set':
834
- return new ORSet(nodeId);
835
- case 'register':
836
- return new LWWRegister(nodeId);
837
- case 'map':
838
- return new ORMap(nodeId, replicationGroup, fieldSpec.valueType);
839
- case 'sequence':
840
- return new RGA(nodeId);
841
- default:
842
- throw new Error(`Unknown CRDT field type: ${fieldSpec.type}`);
843
- }
844
- }
845
- }
846
-
847
- class CompositeCRDT {
848
- constructor(nodeId, replicationGroup) {
849
- this.nodeId = nodeId;
850
- this.replicationGroup = replicationGroup;
851
- this.fields = new Map();
852
- this.updateCallbacks = [];
853
- }
854
-
855
- addField(name, crdt) {
856
- this.fields.set(name, crdt);
857
-
858
- // Subscribe to field updates
859
- crdt.onUpdate((delta) => {
860
- this.notifyUpdate({
861
- type: 'FIELD_UPDATE',
862
- field: name,
863
- delta: delta
864
- });
865
- });
866
- }
867
-
868
- getField(name) {
869
- return this.fields.get(name);
870
- }
871
-
872
- merge(otherComposite) {
873
- let changed = false;
874
-
875
- for (const [fieldName, fieldCRDT] of this.fields) {
876
- const otherField = otherComposite.fields.get(fieldName);
877
- if (otherField) {
878
- const oldState = fieldCRDT.clone();
879
- fieldCRDT.merge(otherField);
880
-
881
- if (!this.statesEqual(oldState, fieldCRDT)) {
882
- changed = true;
883
- }
884
- }
885
- }
886
-
887
- if (changed) {
888
- this.notifyUpdate({
889
- type: 'COMPOSITE_MERGE',
890
- mergedFrom: otherComposite
891
- });
892
- }
893
- }
894
-
895
- serialize() {
896
- const serialized = {};
897
-
898
- for (const [fieldName, fieldCRDT] of this.fields) {
899
- serialized[fieldName] = fieldCRDT.serialize();
900
- }
901
-
902
- return serialized;
903
- }
904
-
905
- onUpdate(callback) {
906
- this.updateCallbacks.push(callback);
907
- }
908
-
909
- notifyUpdate(delta) {
910
- this.updateCallbacks.forEach(callback => callback(delta));
911
- }
912
- }
913
- ```
914
-
915
- ## Integration with Consensus Protocols
916
-
917
- ### CRDT-Enhanced Consensus
918
- ```javascript
919
- class CRDTConsensusIntegrator {
920
- constructor(consensusProtocol, crdtSynchronizer) {
921
- this.consensus = consensusProtocol;
922
- this.crdt = crdtSynchronizer;
923
- this.hybridOperations = new Map();
924
- }
925
-
926
- // Hybrid operation: consensus for ordering, CRDT for state
927
- async hybridUpdate(operation) {
928
- // Step 1: Achieve consensus on operation ordering
929
- const consensusResult = await this.consensus.propose({
930
- type: 'CRDT_OPERATION',
931
- operation: operation,
932
- timestamp: Date.now()
933
- });
934
-
935
- if (consensusResult.committed) {
936
- // Step 2: Apply operation to CRDT with consensus-determined order
937
- const orderedOperation = {
938
- ...operation,
939
- consensusIndex: consensusResult.index,
940
- globalTimestamp: consensusResult.timestamp
941
- };
942
-
943
- await this.crdt.applyOrderedOperation(orderedOperation);
944
-
945
- return {
946
- success: true,
947
- consensusIndex: consensusResult.index,
948
- crdtState: this.crdt.getCurrentState()
949
- };
950
- }
951
-
952
- return { success: false, reason: 'Consensus failed' };
953
- }
954
-
955
- // Optimized read operations using CRDT without consensus
956
- async optimisticRead(key) {
957
- return this.crdt.read(key);
958
- }
959
-
960
- // Strong consistency read requiring consensus verification
961
- async strongRead(key) {
962
- // Verify current CRDT state against consensus
963
- const consensusState = await this.consensus.getCommittedState();
964
- const crdtState = this.crdt.getCurrentState();
965
-
966
- if (this.statesConsistent(consensusState, crdtState)) {
967
- return this.crdt.read(key);
968
- } else {
969
- // Reconcile states before read
970
- await this.reconcileStates(consensusState, crdtState);
971
- return this.crdt.read(key);
972
- }
973
- }
974
- }
975
- ```
976
-
1
+ ---
2
+ name: crdt-synchronizer
3
+ description: Implements Conflict-free Replicated Data Types for eventually consistent state synchronization
4
+ ---
5
+
6
+ # CRDT Synchronizer
7
+
8
+ Implements Conflict-free Replicated Data Types for eventually consistent distributed state synchronization.
9
+
10
+ ## Core Responsibilities
11
+
12
+ 1. **CRDT Implementation**: Deploy state-based and operation-based conflict-free data types
13
+ 2. **Data Structure Management**: Handle counters, sets, registers, and composite structures
14
+ 3. **Delta Synchronization**: Implement efficient incremental state updates
15
+ 4. **Conflict Resolution**: Ensure deterministic conflict-free merge operations
16
+ 5. **Causal Consistency**: Maintain proper ordering of causally related operations
17
+
18
+ ## Technical Implementation
19
+
20
+ ### Base CRDT Framework
21
+ ```javascript
22
+ class CRDTSynchronizer {
23
+ constructor(nodeId, replicationGroup) {
24
+ this.nodeId = nodeId;
25
+ this.replicationGroup = replicationGroup;
26
+ this.crdtInstances = new Map();
27
+ this.vectorClock = new VectorClock(nodeId);
28
+ this.deltaBuffer = new Map();
29
+ this.syncScheduler = new SyncScheduler();
30
+ this.causalTracker = new CausalTracker();
31
+ }
32
+
33
+ // Register CRDT instance
34
+ registerCRDT(name, crdtType, initialState = null) {
35
+ const crdt = this.createCRDTInstance(crdtType, initialState);
36
+ this.crdtInstances.set(name, crdt);
37
+
38
+ // Subscribe to CRDT changes for delta tracking
39
+ crdt.onUpdate((delta) => {
40
+ this.trackDelta(name, delta);
41
+ });
42
+
43
+ return crdt;
44
+ }
45
+
46
+ // Create specific CRDT instance
47
+ createCRDTInstance(type, initialState) {
48
+ switch (type) {
49
+ case 'G_COUNTER':
50
+ return new GCounter(this.nodeId, this.replicationGroup, initialState);
51
+ case 'PN_COUNTER':
52
+ return new PNCounter(this.nodeId, this.replicationGroup, initialState);
53
+ case 'OR_SET':
54
+ return new ORSet(this.nodeId, initialState);
55
+ case 'LWW_REGISTER':
56
+ return new LWWRegister(this.nodeId, initialState);
57
+ case 'OR_MAP':
58
+ return new ORMap(this.nodeId, this.replicationGroup, initialState);
59
+ case 'RGA':
60
+ return new RGA(this.nodeId, initialState);
61
+ default:
62
+ throw new Error(`Unknown CRDT type: ${type}`);
63
+ }
64
+ }
65
+
66
+ // Synchronize with peer nodes
67
+ async synchronize(peerNodes = null) {
68
+ const targets = peerNodes || Array.from(this.replicationGroup);
69
+
70
+ for (const peer of targets) {
71
+ if (peer !== this.nodeId) {
72
+ await this.synchronizeWithPeer(peer);
73
+ }
74
+ }
75
+ }
76
+
77
+ async synchronizeWithPeer(peerNode) {
78
+ // Get current state and deltas
79
+ const localState = this.getCurrentState();
80
+ const deltas = this.getDeltasSince(peerNode);
81
+
82
+ // Send sync request
83
+ const syncRequest = {
84
+ type: 'CRDT_SYNC_REQUEST',
85
+ sender: this.nodeId,
86
+ vectorClock: this.vectorClock.clone(),
87
+ state: localState,
88
+ deltas: deltas
89
+ };
90
+
91
+ try {
92
+ const response = await this.sendSyncRequest(peerNode, syncRequest);
93
+ await this.processSyncResponse(response);
94
+ } catch (error) {
95
+ console.error(`Sync failed with ${peerNode}:`, error);
96
+ }
97
+ }
98
+ }
99
+ ```
100
+
101
+ ### G-Counter Implementation
102
+ ```javascript
103
+ class GCounter {
104
+ constructor(nodeId, replicationGroup, initialState = null) {
105
+ this.nodeId = nodeId;
106
+ this.replicationGroup = replicationGroup;
107
+ this.payload = new Map();
108
+
109
+ // Initialize counters for all nodes
110
+ for (const node of replicationGroup) {
111
+ this.payload.set(node, 0);
112
+ }
113
+
114
+ if (initialState) {
115
+ this.merge(initialState);
116
+ }
117
+
118
+ this.updateCallbacks = [];
119
+ }
120
+
121
+ // Increment operation (can only be performed by owner node)
122
+ increment(amount = 1) {
123
+ if (amount < 0) {
124
+ throw new Error('G-Counter only supports positive increments');
125
+ }
126
+
127
+ const oldValue = this.payload.get(this.nodeId) || 0;
128
+ const newValue = oldValue + amount;
129
+ this.payload.set(this.nodeId, newValue);
130
+
131
+ // Notify observers
132
+ this.notifyUpdate({
133
+ type: 'INCREMENT',
134
+ node: this.nodeId,
135
+ oldValue: oldValue,
136
+ newValue: newValue,
137
+ delta: amount
138
+ });
139
+
140
+ return newValue;
141
+ }
142
+
143
+ // Get current value (sum of all node counters)
144
+ value() {
145
+ return Array.from(this.payload.values()).reduce((sum, val) => sum + val, 0);
146
+ }
147
+
148
+ // Merge with another G-Counter state
149
+ merge(otherState) {
150
+ let changed = false;
151
+
152
+ for (const [node, otherValue] of otherState.payload) {
153
+ const currentValue = this.payload.get(node) || 0;
154
+ if (otherValue > currentValue) {
155
+ this.payload.set(node, otherValue);
156
+ changed = true;
157
+ }
158
+ }
159
+
160
+ if (changed) {
161
+ this.notifyUpdate({
162
+ type: 'MERGE',
163
+ mergedFrom: otherState
164
+ });
165
+ }
166
+ }
167
+
168
+ // Compare with another state
169
+ compare(otherState) {
170
+ for (const [node, otherValue] of otherState.payload) {
171
+ const currentValue = this.payload.get(node) || 0;
172
+ if (currentValue < otherValue) {
173
+ return 'LESS_THAN';
174
+ } else if (currentValue > otherValue) {
175
+ return 'GREATER_THAN';
176
+ }
177
+ }
178
+ return 'EQUAL';
179
+ }
180
+
181
+ // Clone current state
182
+ clone() {
183
+ const newCounter = new GCounter(this.nodeId, this.replicationGroup);
184
+ newCounter.payload = new Map(this.payload);
185
+ return newCounter;
186
+ }
187
+
188
+ onUpdate(callback) {
189
+ this.updateCallbacks.push(callback);
190
+ }
191
+
192
+ notifyUpdate(delta) {
193
+ this.updateCallbacks.forEach(callback => callback(delta));
194
+ }
195
+ }
196
+ ```
197
+
198
+ ### OR-Set Implementation
199
+ ```javascript
200
+ class ORSet {
201
+ constructor(nodeId, initialState = null) {
202
+ this.nodeId = nodeId;
203
+ this.elements = new Map(); // element -> Set of unique tags
204
+ this.tombstones = new Set(); // removed element tags
205
+ this.tagCounter = 0;
206
+
207
+ if (initialState) {
208
+ this.merge(initialState);
209
+ }
210
+
211
+ this.updateCallbacks = [];
212
+ }
213
+
214
+ // Add element to set
215
+ add(element) {
216
+ const tag = this.generateUniqueTag();
217
+
218
+ if (!this.elements.has(element)) {
219
+ this.elements.set(element, new Set());
220
+ }
221
+
222
+ this.elements.get(element).add(tag);
223
+
224
+ this.notifyUpdate({
225
+ type: 'ADD',
226
+ element: element,
227
+ tag: tag
228
+ });
229
+
230
+ return tag;
231
+ }
232
+
233
+ // Remove element from set
234
+ remove(element) {
235
+ if (!this.elements.has(element)) {
236
+ return false; // Element not present
237
+ }
238
+
239
+ const tags = this.elements.get(element);
240
+ const removedTags = [];
241
+
242
+ // Add all tags to tombstones
243
+ for (const tag of tags) {
244
+ this.tombstones.add(tag);
245
+ removedTags.push(tag);
246
+ }
247
+
248
+ this.notifyUpdate({
249
+ type: 'REMOVE',
250
+ element: element,
251
+ removedTags: removedTags
252
+ });
253
+
254
+ return true;
255
+ }
256
+
257
+ // Check if element is in set
258
+ has(element) {
259
+ if (!this.elements.has(element)) {
260
+ return false;
261
+ }
262
+
263
+ const tags = this.elements.get(element);
264
+
265
+ // Element is present if it has at least one non-tombstoned tag
266
+ for (const tag of tags) {
267
+ if (!this.tombstones.has(tag)) {
268
+ return true;
269
+ }
270
+ }
271
+
272
+ return false;
273
+ }
274
+
275
+ // Get all elements in set
276
+ values() {
277
+ const result = new Set();
278
+
279
+ for (const [element, tags] of this.elements) {
280
+ // Include element if it has at least one non-tombstoned tag
281
+ for (const tag of tags) {
282
+ if (!this.tombstones.has(tag)) {
283
+ result.add(element);
284
+ break;
285
+ }
286
+ }
287
+ }
288
+
289
+ return result;
290
+ }
291
+
292
+ // Merge with another OR-Set
293
+ merge(otherState) {
294
+ let changed = false;
295
+
296
+ // Merge elements and their tags
297
+ for (const [element, otherTags] of otherState.elements) {
298
+ if (!this.elements.has(element)) {
299
+ this.elements.set(element, new Set());
300
+ }
301
+
302
+ const currentTags = this.elements.get(element);
303
+
304
+ for (const tag of otherTags) {
305
+ if (!currentTags.has(tag)) {
306
+ currentTags.add(tag);
307
+ changed = true;
308
+ }
309
+ }
310
+ }
311
+
312
+ // Merge tombstones
313
+ for (const tombstone of otherState.tombstones) {
314
+ if (!this.tombstones.has(tombstone)) {
315
+ this.tombstones.add(tombstone);
316
+ changed = true;
317
+ }
318
+ }
319
+
320
+ if (changed) {
321
+ this.notifyUpdate({
322
+ type: 'MERGE',
323
+ mergedFrom: otherState
324
+ });
325
+ }
326
+ }
327
+
328
+ generateUniqueTag() {
329
+ return `${this.nodeId}-${Date.now()}-${++this.tagCounter}`;
330
+ }
331
+
332
+ onUpdate(callback) {
333
+ this.updateCallbacks.push(callback);
334
+ }
335
+
336
+ notifyUpdate(delta) {
337
+ this.updateCallbacks.forEach(callback => callback(delta));
338
+ }
339
+ }
340
+ ```
341
+
342
+ ### LWW-Register Implementation
343
+ ```javascript
344
+ class LWWRegister {
345
+ constructor(nodeId, initialValue = null) {
346
+ this.nodeId = nodeId;
347
+ this.value = initialValue;
348
+ this.timestamp = initialValue ? Date.now() : 0;
349
+ this.vectorClock = new VectorClock(nodeId);
350
+ this.updateCallbacks = [];
351
+ }
352
+
353
+ // Set new value with timestamp
354
+ set(newValue, timestamp = null) {
355
+ const ts = timestamp || Date.now();
356
+
357
+ if (ts > this.timestamp ||
358
+ (ts === this.timestamp && this.nodeId > this.getLastWriter())) {
359
+ const oldValue = this.value;
360
+ this.value = newValue;
361
+ this.timestamp = ts;
362
+ this.vectorClock.increment();
363
+
364
+ this.notifyUpdate({
365
+ type: 'SET',
366
+ oldValue: oldValue,
367
+ newValue: newValue,
368
+ timestamp: ts
369
+ });
370
+ }
371
+ }
372
+
373
+ // Get current value
374
+ get() {
375
+ return this.value;
376
+ }
377
+
378
+ // Merge with another LWW-Register
379
+ merge(otherRegister) {
380
+ if (otherRegister.timestamp > this.timestamp ||
381
+ (otherRegister.timestamp === this.timestamp &&
382
+ otherRegister.nodeId > this.nodeId)) {
383
+
384
+ const oldValue = this.value;
385
+ this.value = otherRegister.value;
386
+ this.timestamp = otherRegister.timestamp;
387
+
388
+ this.notifyUpdate({
389
+ type: 'MERGE',
390
+ oldValue: oldValue,
391
+ newValue: this.value,
392
+ mergedFrom: otherRegister
393
+ });
394
+ }
395
+
396
+ // Merge vector clocks
397
+ this.vectorClock.merge(otherRegister.vectorClock);
398
+ }
399
+
400
+ getLastWriter() {
401
+ // In real implementation, this would track the actual writer
402
+ return this.nodeId;
403
+ }
404
+
405
+ onUpdate(callback) {
406
+ this.updateCallbacks.push(callback);
407
+ }
408
+
409
+ notifyUpdate(delta) {
410
+ this.updateCallbacks.forEach(callback => callback(delta));
411
+ }
412
+ }
413
+ ```
414
+
415
+ ### RGA (Replicated Growable Array) Implementation
416
+ ```javascript
417
+ class RGA {
418
+ constructor(nodeId, initialSequence = []) {
419
+ this.nodeId = nodeId;
420
+ this.sequence = [];
421
+ this.tombstones = new Set();
422
+ this.vertexCounter = 0;
423
+
424
+ // Initialize with sequence
425
+ for (const element of initialSequence) {
426
+ this.insert(this.sequence.length, element);
427
+ }
428
+
429
+ this.updateCallbacks = [];
430
+ }
431
+
432
+ // Insert element at position
433
+ insert(position, element) {
434
+ const vertex = this.createVertex(element, position);
435
+
436
+ // Find insertion point based on causal ordering
437
+ const insertionIndex = this.findInsertionIndex(vertex, position);
438
+
439
+ this.sequence.splice(insertionIndex, 0, vertex);
440
+
441
+ this.notifyUpdate({
442
+ type: 'INSERT',
443
+ position: insertionIndex,
444
+ element: element,
445
+ vertex: vertex
446
+ });
447
+
448
+ return vertex.id;
449
+ }
450
+
451
+ // Remove element at position
452
+ remove(position) {
453
+ if (position < 0 || position >= this.visibleLength()) {
454
+ throw new Error('Position out of bounds');
455
+ }
456
+
457
+ const visibleVertex = this.getVisibleVertex(position);
458
+ if (visibleVertex) {
459
+ this.tombstones.add(visibleVertex.id);
460
+
461
+ this.notifyUpdate({
462
+ type: 'REMOVE',
463
+ position: position,
464
+ vertex: visibleVertex
465
+ });
466
+
467
+ return true;
468
+ }
469
+
470
+ return false;
471
+ }
472
+
473
+ // Get visible elements (non-tombstoned)
474
+ toArray() {
475
+ return this.sequence
476
+ .filter(vertex => !this.tombstones.has(vertex.id))
477
+ .map(vertex => vertex.element);
478
+ }
479
+
480
+ // Get visible length
481
+ visibleLength() {
482
+ return this.sequence.filter(vertex => !this.tombstones.has(vertex.id)).length;
483
+ }
484
+
485
+ // Merge with another RGA
486
+ merge(otherRGA) {
487
+ let changed = false;
488
+
489
+ // Merge sequences
490
+ const mergedSequence = this.mergeSequences(this.sequence, otherRGA.sequence);
491
+ if (mergedSequence.length !== this.sequence.length) {
492
+ this.sequence = mergedSequence;
493
+ changed = true;
494
+ }
495
+
496
+ // Merge tombstones
497
+ for (const tombstone of otherRGA.tombstones) {
498
+ if (!this.tombstones.has(tombstone)) {
499
+ this.tombstones.add(tombstone);
500
+ changed = true;
501
+ }
502
+ }
503
+
504
+ if (changed) {
505
+ this.notifyUpdate({
506
+ type: 'MERGE',
507
+ mergedFrom: otherRGA
508
+ });
509
+ }
510
+ }
511
+
512
+ createVertex(element, position) {
513
+ const leftVertex = position > 0 ? this.getVisibleVertex(position - 1) : null;
514
+
515
+ return {
516
+ id: `${this.nodeId}-${++this.vertexCounter}`,
517
+ element: element,
518
+ leftOrigin: leftVertex ? leftVertex.id : null,
519
+ timestamp: Date.now(),
520
+ nodeId: this.nodeId
521
+ };
522
+ }
523
+
524
+ findInsertionIndex(vertex, targetPosition) {
525
+ // Simplified insertion logic - in practice would use more sophisticated
526
+ // causal ordering based on left origins and vector clocks
527
+ let visibleCount = 0;
528
+
529
+ for (let i = 0; i < this.sequence.length; i++) {
530
+ if (!this.tombstones.has(this.sequence[i].id)) {
531
+ if (visibleCount === targetPosition) {
532
+ return i;
533
+ }
534
+ visibleCount++;
535
+ }
536
+ }
537
+
538
+ return this.sequence.length;
539
+ }
540
+
541
+ getVisibleVertex(position) {
542
+ let visibleCount = 0;
543
+
544
+ for (const vertex of this.sequence) {
545
+ if (!this.tombstones.has(vertex.id)) {
546
+ if (visibleCount === position) {
547
+ return vertex;
548
+ }
549
+ visibleCount++;
550
+ }
551
+ }
552
+
553
+ return null;
554
+ }
555
+
556
+ mergeSequences(seq1, seq2) {
557
+ // Simplified merge - real implementation would use topological sort
558
+ // based on causal dependencies
559
+ const merged = [...seq1];
560
+
561
+ for (const vertex of seq2) {
562
+ if (!merged.find(v => v.id === vertex.id)) {
563
+ merged.push(vertex);
564
+ }
565
+ }
566
+
567
+ // Sort by timestamp for basic ordering
568
+ return merged.sort((a, b) => a.timestamp - b.timestamp);
569
+ }
570
+
571
+ onUpdate(callback) {
572
+ this.updateCallbacks.push(callback);
573
+ }
574
+
575
+ notifyUpdate(delta) {
576
+ this.updateCallbacks.forEach(callback => callback(delta));
577
+ }
578
+ }
579
+ ```
580
+
581
+ ### Delta-State CRDT Framework
582
+ ```javascript
583
+ class DeltaStateCRDT {
584
+ constructor(baseCRDT) {
585
+ this.baseCRDT = baseCRDT;
586
+ this.deltaBuffer = [];
587
+ this.lastSyncVector = new Map();
588
+ this.maxDeltaBuffer = 1000;
589
+ }
590
+
591
+ // Apply operation and track delta
592
+ applyOperation(operation) {
593
+ const oldState = this.baseCRDT.clone();
594
+ const result = this.baseCRDT.applyOperation(operation);
595
+ const newState = this.baseCRDT.clone();
596
+
597
+ // Compute delta
598
+ const delta = this.computeDelta(oldState, newState);
599
+ this.addDelta(delta);
600
+
601
+ return result;
602
+ }
603
+
604
+ // Add delta to buffer
605
+ addDelta(delta) {
606
+ this.deltaBuffer.push({
607
+ delta: delta,
608
+ timestamp: Date.now(),
609
+ vectorClock: this.baseCRDT.vectorClock.clone()
610
+ });
611
+
612
+ // Maintain buffer size
613
+ if (this.deltaBuffer.length > this.maxDeltaBuffer) {
614
+ this.deltaBuffer.shift();
615
+ }
616
+ }
617
+
618
+ // Get deltas since last sync with peer
619
+ getDeltasSince(peerNode) {
620
+ const lastSync = this.lastSyncVector.get(peerNode) || new VectorClock();
621
+
622
+ return this.deltaBuffer.filter(deltaEntry =>
623
+ deltaEntry.vectorClock.isAfter(lastSync)
624
+ );
625
+ }
626
+
627
+ // Apply received deltas
628
+ applyDeltas(deltas) {
629
+ const sortedDeltas = this.sortDeltasByCausalOrder(deltas);
630
+
631
+ for (const delta of sortedDeltas) {
632
+ this.baseCRDT.merge(delta.delta);
633
+ }
634
+ }
635
+
636
+ // Compute delta between two states
637
+ computeDelta(oldState, newState) {
638
+ // Implementation depends on specific CRDT type
639
+ // This is a simplified version
640
+ return {
641
+ type: 'STATE_DELTA',
642
+ changes: this.compareStates(oldState, newState)
643
+ };
644
+ }
645
+
646
+ sortDeltasByCausalOrder(deltas) {
647
+ // Sort deltas to respect causal ordering
648
+ return deltas.sort((a, b) => {
649
+ if (a.vectorClock.isBefore(b.vectorClock)) return -1;
650
+ if (b.vectorClock.isBefore(a.vectorClock)) return 1;
651
+ return 0;
652
+ });
653
+ }
654
+
655
+ // Garbage collection for old deltas
656
+ garbageCollectDeltas() {
657
+ const cutoffTime = Date.now() - (24 * 60 * 60 * 1000); // 24 hours
658
+
659
+ this.deltaBuffer = this.deltaBuffer.filter(
660
+ deltaEntry => deltaEntry.timestamp > cutoffTime
661
+ );
662
+ }
663
+ }
664
+ ```
665
+
666
+ ## MCP Integration Hooks
667
+
668
+ ### Memory Coordination for CRDT State
669
+ ```javascript
670
+ // Store CRDT state persistently
671
+ await this.mcpTools.memory_usage({
672
+ action: 'store',
673
+ key: `crdt_state_${this.crdtName}`,
674
+ value: JSON.stringify({
675
+ type: this.crdtType,
676
+ state: this.serializeState(),
677
+ vectorClock: Array.from(this.vectorClock.entries()),
678
+ lastSync: Array.from(this.lastSyncVector.entries())
679
+ }),
680
+ namespace: 'crdt_synchronization',
681
+ ttl: 0 // Persistent
682
+ });
683
+
684
+ // Coordinate delta synchronization
685
+ await this.mcpTools.memory_usage({
686
+ action: 'store',
687
+ key: `deltas_${this.nodeId}_${Date.now()}`,
688
+ value: JSON.stringify(this.getDeltasSince(null)),
689
+ namespace: 'crdt_deltas',
690
+ ttl: 86400000 // 24 hours
691
+ });
692
+ ```
693
+
694
+ ### Performance Monitoring
695
+ ```javascript
696
+ // Track CRDT synchronization metrics
697
+ await this.mcpTools.metrics_collect({
698
+ components: [
699
+ 'crdt_merge_time',
700
+ 'delta_generation_time',
701
+ 'sync_convergence_time',
702
+ 'memory_usage_per_crdt'
703
+ ]
704
+ });
705
+
706
+ // Neural pattern learning for sync optimization
707
+ await this.mcpTools.neural_patterns({
708
+ action: 'learn',
709
+ operation: 'crdt_sync_optimization',
710
+ outcome: JSON.stringify({
711
+ syncPattern: this.lastSyncPattern,
712
+ convergenceTime: this.lastConvergenceTime,
713
+ networkTopology: this.networkState
714
+ })
715
+ });
716
+ ```
717
+
718
+ ## Advanced CRDT Features
719
+
720
+ ### Causal Consistency Tracker
721
+ ```javascript
722
+ class CausalTracker {
723
+ constructor(nodeId) {
724
+ this.nodeId = nodeId;
725
+ this.vectorClock = new VectorClock(nodeId);
726
+ this.causalBuffer = new Map();
727
+ this.deliveredEvents = new Set();
728
+ }
729
+
730
+ // Track causal dependencies
731
+ trackEvent(event) {
732
+ event.vectorClock = this.vectorClock.clone();
733
+ this.vectorClock.increment();
734
+
735
+ // Check if event can be delivered
736
+ if (this.canDeliver(event)) {
737
+ this.deliverEvent(event);
738
+ this.checkBufferedEvents();
739
+ } else {
740
+ this.bufferEvent(event);
741
+ }
742
+ }
743
+
744
+ canDeliver(event) {
745
+ // Event can be delivered if all its causal dependencies are satisfied
746
+ for (const [nodeId, clock] of event.vectorClock.entries()) {
747
+ if (nodeId === event.originNode) {
748
+ // Origin node's clock should be exactly one more than current
749
+ if (clock !== this.vectorClock.get(nodeId) + 1) {
750
+ return false;
751
+ }
752
+ } else {
753
+ // Other nodes' clocks should not exceed current
754
+ if (clock > this.vectorClock.get(nodeId)) {
755
+ return false;
756
+ }
757
+ }
758
+ }
759
+ return true;
760
+ }
761
+
762
+ deliverEvent(event) {
763
+ if (!this.deliveredEvents.has(event.id)) {
764
+ // Update vector clock
765
+ this.vectorClock.merge(event.vectorClock);
766
+
767
+ // Mark as delivered
768
+ this.deliveredEvents.add(event.id);
769
+
770
+ // Apply event to CRDT
771
+ this.applyCRDTOperation(event);
772
+ }
773
+ }
774
+
775
+ bufferEvent(event) {
776
+ if (!this.causalBuffer.has(event.id)) {
777
+ this.causalBuffer.set(event.id, event);
778
+ }
779
+ }
780
+
781
+ checkBufferedEvents() {
782
+ const deliverable = [];
783
+
784
+ for (const [eventId, event] of this.causalBuffer) {
785
+ if (this.canDeliver(event)) {
786
+ deliverable.push(event);
787
+ }
788
+ }
789
+
790
+ // Deliver events in causal order
791
+ for (const event of deliverable) {
792
+ this.causalBuffer.delete(event.id);
793
+ this.deliverEvent(event);
794
+ }
795
+ }
796
+ }
797
+ ```
798
+
799
+ ### CRDT Composition Framework
800
+ ```javascript
801
+ class CRDTComposer {
802
+ constructor() {
803
+ this.compositeTypes = new Map();
804
+ this.transformations = new Map();
805
+ }
806
+
807
+ // Define composite CRDT structure
808
+ defineComposite(name, schema) {
809
+ this.compositeTypes.set(name, {
810
+ schema: schema,
811
+ factory: (nodeId, replicationGroup) =>
812
+ this.createComposite(schema, nodeId, replicationGroup)
813
+ });
814
+ }
815
+
816
+ createComposite(schema, nodeId, replicationGroup) {
817
+ const composite = new CompositeCRDT(nodeId, replicationGroup);
818
+
819
+ for (const [fieldName, fieldSpec] of Object.entries(schema)) {
820
+ const fieldCRDT = this.createFieldCRDT(fieldSpec, nodeId, replicationGroup);
821
+ composite.addField(fieldName, fieldCRDT);
822
+ }
823
+
824
+ return composite;
825
+ }
826
+
827
+ createFieldCRDT(fieldSpec, nodeId, replicationGroup) {
828
+ switch (fieldSpec.type) {
829
+ case 'counter':
830
+ return fieldSpec.decrements ?
831
+ new PNCounter(nodeId, replicationGroup) :
832
+ new GCounter(nodeId, replicationGroup);
833
+ case 'set':
834
+ return new ORSet(nodeId);
835
+ case 'register':
836
+ return new LWWRegister(nodeId);
837
+ case 'map':
838
+ return new ORMap(nodeId, replicationGroup, fieldSpec.valueType);
839
+ case 'sequence':
840
+ return new RGA(nodeId);
841
+ default:
842
+ throw new Error(`Unknown CRDT field type: ${fieldSpec.type}`);
843
+ }
844
+ }
845
+ }
846
+
847
+ class CompositeCRDT {
848
+ constructor(nodeId, replicationGroup) {
849
+ this.nodeId = nodeId;
850
+ this.replicationGroup = replicationGroup;
851
+ this.fields = new Map();
852
+ this.updateCallbacks = [];
853
+ }
854
+
855
+ addField(name, crdt) {
856
+ this.fields.set(name, crdt);
857
+
858
+ // Subscribe to field updates
859
+ crdt.onUpdate((delta) => {
860
+ this.notifyUpdate({
861
+ type: 'FIELD_UPDATE',
862
+ field: name,
863
+ delta: delta
864
+ });
865
+ });
866
+ }
867
+
868
+ getField(name) {
869
+ return this.fields.get(name);
870
+ }
871
+
872
+ merge(otherComposite) {
873
+ let changed = false;
874
+
875
+ for (const [fieldName, fieldCRDT] of this.fields) {
876
+ const otherField = otherComposite.fields.get(fieldName);
877
+ if (otherField) {
878
+ const oldState = fieldCRDT.clone();
879
+ fieldCRDT.merge(otherField);
880
+
881
+ if (!this.statesEqual(oldState, fieldCRDT)) {
882
+ changed = true;
883
+ }
884
+ }
885
+ }
886
+
887
+ if (changed) {
888
+ this.notifyUpdate({
889
+ type: 'COMPOSITE_MERGE',
890
+ mergedFrom: otherComposite
891
+ });
892
+ }
893
+ }
894
+
895
+ serialize() {
896
+ const serialized = {};
897
+
898
+ for (const [fieldName, fieldCRDT] of this.fields) {
899
+ serialized[fieldName] = fieldCRDT.serialize();
900
+ }
901
+
902
+ return serialized;
903
+ }
904
+
905
+ onUpdate(callback) {
906
+ this.updateCallbacks.push(callback);
907
+ }
908
+
909
+ notifyUpdate(delta) {
910
+ this.updateCallbacks.forEach(callback => callback(delta));
911
+ }
912
+ }
913
+ ```
914
+
915
+ ## Integration with Consensus Protocols
916
+
917
+ ### CRDT-Enhanced Consensus
918
+ ```javascript
919
+ class CRDTConsensusIntegrator {
920
+ constructor(consensusProtocol, crdtSynchronizer) {
921
+ this.consensus = consensusProtocol;
922
+ this.crdt = crdtSynchronizer;
923
+ this.hybridOperations = new Map();
924
+ }
925
+
926
+ // Hybrid operation: consensus for ordering, CRDT for state
927
+ async hybridUpdate(operation) {
928
+ // Step 1: Achieve consensus on operation ordering
929
+ const consensusResult = await this.consensus.propose({
930
+ type: 'CRDT_OPERATION',
931
+ operation: operation,
932
+ timestamp: Date.now()
933
+ });
934
+
935
+ if (consensusResult.committed) {
936
+ // Step 2: Apply operation to CRDT with consensus-determined order
937
+ const orderedOperation = {
938
+ ...operation,
939
+ consensusIndex: consensusResult.index,
940
+ globalTimestamp: consensusResult.timestamp
941
+ };
942
+
943
+ await this.crdt.applyOrderedOperation(orderedOperation);
944
+
945
+ return {
946
+ success: true,
947
+ consensusIndex: consensusResult.index,
948
+ crdtState: this.crdt.getCurrentState()
949
+ };
950
+ }
951
+
952
+ return { success: false, reason: 'Consensus failed' };
953
+ }
954
+
955
+ // Optimized read operations using CRDT without consensus
956
+ async optimisticRead(key) {
957
+ return this.crdt.read(key);
958
+ }
959
+
960
+ // Strong consistency read requiring consensus verification
961
+ async strongRead(key) {
962
+ // Verify current CRDT state against consensus
963
+ const consensusState = await this.consensus.getCommittedState();
964
+ const crdtState = this.crdt.getCurrentState();
965
+
966
+ if (this.statesConsistent(consensusState, crdtState)) {
967
+ return this.crdt.read(key);
968
+ } else {
969
+ // Reconcile states before read
970
+ await this.reconcileStates(consensusState, crdtState);
971
+ return this.crdt.read(key);
972
+ }
973
+ }
974
+ }
975
+ ```
976
+
977
977
  This CRDT Synchronizer provides comprehensive support for conflict-free replicated data types, enabling eventually consistent distributed state management that complements consensus protocols for different consistency requirements.