claude-flow 3.32.9 → 3.32.10

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 (451) hide show
  1. package/.claude/.proven-config-version +1 -0
  2. package/.claude/agents/MIGRATION_SUMMARY.md +221 -221
  3. package/.claude/agents/analysis/analyze-code-quality.md +57 -57
  4. package/.claude/agents/analysis/code-analyzer.md +188 -188
  5. package/.claude/agents/analysis/code-review/analyze-code-quality.md +57 -57
  6. package/.claude/agents/architecture/system-design/arch-system-design.md +35 -35
  7. package/.claude/agents/base-template-generator.md +41 -41
  8. package/.claude/agents/consensus/byzantine-coordinator.md +42 -42
  9. package/.claude/agents/consensus/crdt-synchronizer.md +976 -976
  10. package/.claude/agents/consensus/gossip-coordinator.md +42 -42
  11. package/.claude/agents/consensus/performance-benchmarker.md +830 -830
  12. package/.claude/agents/consensus/quorum-manager.md +802 -802
  13. package/.claude/agents/consensus/raft-manager.md +42 -42
  14. package/.claude/agents/consensus/security-manager.md +601 -601
  15. package/.claude/agents/core/coder.md +254 -254
  16. package/.claude/agents/core/planner.md +151 -151
  17. package/.claude/agents/core/researcher.md +173 -173
  18. package/.claude/agents/core/reviewer.md +308 -308
  19. package/.claude/agents/core/tester.md +299 -299
  20. package/.claude/agents/custom/test-long-runner.md +43 -43
  21. package/.claude/agents/data/ml/data-ml-model.md +75 -75
  22. package/.claude/agents/database-specialist.md +9 -9
  23. package/.claude/agents/development/backend/dev-backend-api.md +28 -28
  24. package/.claude/agents/development/dev-backend-api.md +177 -177
  25. package/.claude/agents/devops/ci-cd/ops-cicd-github.md +51 -51
  26. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +62 -62
  27. package/.claude/agents/dual-mode/codex-coordinator.md +206 -206
  28. package/.claude/agents/dual-mode/codex-worker.md +190 -190
  29. package/.claude/agents/dual-mode/dual-orchestrator.md +253 -253
  30. package/.claude/agents/flow-nexus/app-store.md +87 -87
  31. package/.claude/agents/flow-nexus/authentication.md +68 -68
  32. package/.claude/agents/flow-nexus/challenges.md +80 -80
  33. package/.claude/agents/flow-nexus/neural-network.md +87 -87
  34. package/.claude/agents/flow-nexus/payments.md +82 -82
  35. package/.claude/agents/flow-nexus/sandbox.md +75 -75
  36. package/.claude/agents/flow-nexus/swarm.md +75 -75
  37. package/.claude/agents/flow-nexus/user-tools.md +95 -95
  38. package/.claude/agents/flow-nexus/workflow.md +83 -83
  39. package/.claude/agents/github/code-review-swarm.md +520 -520
  40. package/.claude/agents/github/github-modes.md +153 -153
  41. package/.claude/agents/github/issue-tracker.md +298 -298
  42. package/.claude/agents/github/multi-repo-swarm.md +524 -524
  43. package/.claude/agents/github/pr-manager.md +162 -162
  44. package/.claude/agents/github/project-board-sync.md +477 -477
  45. package/.claude/agents/github/release-manager.md +337 -337
  46. package/.claude/agents/github/release-swarm.md +550 -550
  47. package/.claude/agents/github/repo-architect.md +364 -364
  48. package/.claude/agents/github/swarm-issue.md +550 -550
  49. package/.claude/agents/github/swarm-pr.md +401 -401
  50. package/.claude/agents/github/sync-coordinator.md +424 -424
  51. package/.claude/agents/github/workflow-automation.md +604 -604
  52. package/.claude/agents/goal/agent.md +816 -816
  53. package/.claude/agents/goal/code-goal-planner.md +444 -444
  54. package/.claude/agents/goal/goal-planner.md +167 -167
  55. package/.claude/agents/hive-mind/collective-intelligence-coordinator.md +128 -128
  56. package/.claude/agents/hive-mind/queen-coordinator.md +201 -201
  57. package/.claude/agents/hive-mind/scout-explorer.md +240 -240
  58. package/.claude/agents/hive-mind/swarm-memory-manager.md +191 -191
  59. package/.claude/agents/hive-mind/worker-specialist.md +215 -215
  60. package/.claude/agents/neural/safla-neural.md +73 -73
  61. package/.claude/agents/optimization/benchmark-suite.md +662 -662
  62. package/.claude/agents/optimization/load-balancer.md +428 -428
  63. package/.claude/agents/optimization/performance-monitor.md +669 -669
  64. package/.claude/agents/optimization/resource-allocator.md +671 -671
  65. package/.claude/agents/optimization/topology-optimizer.md +805 -805
  66. package/.claude/agents/payments/agentic-payments.md +126 -126
  67. package/.claude/agents/project-coordinator.md +8 -8
  68. package/.claude/agents/python-specialist.md +9 -9
  69. package/.claude/agents/reasoning/agent.md +816 -816
  70. package/.claude/agents/reasoning/goal-planner.md +72 -72
  71. package/.claude/agents/security-auditor.md +9 -9
  72. package/.claude/agents/sona/sona-learning-optimizer.md +65 -65
  73. package/.claude/agents/sparc/architecture.md +452 -452
  74. package/.claude/agents/sparc/pseudocode.md +298 -298
  75. package/.claude/agents/sparc/refinement.md +503 -503
  76. package/.claude/agents/sparc/specification.md +257 -257
  77. package/.claude/agents/specialized/mobile/spec-mobile-react-native.md +87 -87
  78. package/.claude/agents/sublinear/consensus-coordinator.md +337 -337
  79. package/.claude/agents/sublinear/matrix-optimizer.md +184 -184
  80. package/.claude/agents/sublinear/pagerank-analyzer.md +298 -298
  81. package/.claude/agents/sublinear/performance-optimizer.md +367 -367
  82. package/.claude/agents/sublinear/trading-predictor.md +245 -245
  83. package/.claude/agents/swarm/adaptive-coordinator.md +363 -363
  84. package/.claude/agents/swarm/hierarchical-coordinator.md +299 -299
  85. package/.claude/agents/swarm/mesh-coordinator.md +362 -362
  86. package/.claude/agents/templates/automation-smart-agent.md +184 -184
  87. package/.claude/agents/templates/coordinator-swarm-init.md +82 -82
  88. package/.claude/agents/templates/github-pr-manager.md +154 -154
  89. package/.claude/agents/templates/implementer-sparc-coder.md +242 -242
  90. package/.claude/agents/templates/memory-coordinator.md +162 -162
  91. package/.claude/agents/templates/migration-plan.md +723 -723
  92. package/.claude/agents/templates/orchestrator-task.md +119 -119
  93. package/.claude/agents/templates/performance-analyzer.md +178 -178
  94. package/.claude/agents/templates/sparc-coordinator.md +162 -162
  95. package/.claude/agents/testing/production-validator.md +372 -372
  96. package/.claude/agents/testing/tdd-london-swarm.md +221 -221
  97. package/.claude/agents/testing/unit/tdd-london-swarm.md +221 -221
  98. package/.claude/agents/testing/validation/production-validator.md +372 -372
  99. package/.claude/agents/typescript-specialist.md +9 -9
  100. package/.claude/agents/v3/database-specialist.md +9 -9
  101. package/.claude/agents/v3/project-coordinator.md +8 -8
  102. package/.claude/agents/v3/python-specialist.md +9 -9
  103. package/.claude/agents/v3/test-architect.md +9 -9
  104. package/.claude/agents/v3/typescript-specialist.md +9 -9
  105. package/.claude/agents/v3/v3-integration-architect.md +311 -311
  106. package/.claude/agents/v3/v3-memory-specialist.md +280 -280
  107. package/.claude/agents/v3/v3-performance-engineer.md +362 -362
  108. package/.claude/agents/v3/v3-queen-coordinator.md +62 -62
  109. package/.claude/agents/v3/v3-security-architect.md +139 -139
  110. package/.claude/checkpoints/1767754460.json +8 -8
  111. package/.claude/commands/agents/README.md +10 -10
  112. package/.claude/commands/agents/agent-capabilities.md +21 -21
  113. package/.claude/commands/agents/agent-coordination.md +28 -28
  114. package/.claude/commands/agents/agent-spawning.md +28 -28
  115. package/.claude/commands/agents/agent-types.md +26 -26
  116. package/.claude/commands/analysis/COMMAND_COMPLIANCE_REPORT.md +53 -53
  117. package/.claude/commands/analysis/README.md +9 -9
  118. package/.claude/commands/analysis/bottleneck-detect.md +162 -162
  119. package/.claude/commands/analysis/performance-bottlenecks.md +58 -58
  120. package/.claude/commands/analysis/performance-report.md +25 -25
  121. package/.claude/commands/analysis/token-efficiency.md +44 -44
  122. package/.claude/commands/analysis/token-usage.md +25 -25
  123. package/.claude/commands/automation/README.md +9 -9
  124. package/.claude/commands/automation/auto-agent.md +122 -122
  125. package/.claude/commands/automation/self-healing.md +105 -105
  126. package/.claude/commands/automation/session-memory.md +89 -89
  127. package/.claude/commands/automation/smart-agents.md +72 -72
  128. package/.claude/commands/automation/smart-spawn.md +25 -25
  129. package/.claude/commands/automation/workflow-select.md +25 -25
  130. package/.claude/commands/claude-flow-help.md +103 -103
  131. package/.claude/commands/claude-flow-memory.md +107 -107
  132. package/.claude/commands/claude-flow-swarm.md +205 -205
  133. package/.claude/commands/coordination/README.md +9 -9
  134. package/.claude/commands/coordination/agent-spawn.md +25 -25
  135. package/.claude/commands/coordination/init.md +44 -44
  136. package/.claude/commands/coordination/orchestrate.md +43 -43
  137. package/.claude/commands/coordination/spawn.md +45 -45
  138. package/.claude/commands/coordination/swarm-init.md +85 -85
  139. package/.claude/commands/coordination/task-orchestrate.md +25 -25
  140. package/.claude/commands/flow-nexus/app-store.md +123 -123
  141. package/.claude/commands/flow-nexus/challenges.md +119 -119
  142. package/.claude/commands/flow-nexus/login-registration.md +64 -64
  143. package/.claude/commands/flow-nexus/neural-network.md +133 -133
  144. package/.claude/commands/flow-nexus/payments.md +115 -115
  145. package/.claude/commands/flow-nexus/sandbox.md +82 -82
  146. package/.claude/commands/flow-nexus/swarm.md +86 -86
  147. package/.claude/commands/flow-nexus/user-tools.md +151 -151
  148. package/.claude/commands/flow-nexus/workflow.md +114 -114
  149. package/.claude/commands/github/README.md +11 -11
  150. package/.claude/commands/github/code-review-swarm.md +513 -513
  151. package/.claude/commands/github/code-review.md +25 -25
  152. package/.claude/commands/github/github-modes.md +146 -146
  153. package/.claude/commands/github/github-swarm.md +121 -121
  154. package/.claude/commands/github/issue-tracker.md +291 -291
  155. package/.claude/commands/github/issue-triage.md +25 -25
  156. package/.claude/commands/github/multi-repo-swarm.md +518 -518
  157. package/.claude/commands/github/pr-enhance.md +26 -26
  158. package/.claude/commands/github/pr-manager.md +169 -169
  159. package/.claude/commands/github/project-board-sync.md +470 -470
  160. package/.claude/commands/github/release-manager.md +337 -337
  161. package/.claude/commands/github/release-swarm.md +543 -543
  162. package/.claude/commands/github/repo-analyze.md +25 -25
  163. package/.claude/commands/github/repo-architect.md +366 -366
  164. package/.claude/commands/github/swarm-issue.md +481 -481
  165. package/.claude/commands/github/swarm-pr.md +284 -284
  166. package/.claude/commands/github/sync-coordinator.md +300 -300
  167. package/.claude/commands/github/workflow-automation.md +441 -441
  168. package/.claude/commands/hive-mind/README.md +17 -17
  169. package/.claude/commands/hive-mind/hive-mind-consensus.md +8 -8
  170. package/.claude/commands/hive-mind/hive-mind-init.md +18 -18
  171. package/.claude/commands/hive-mind/hive-mind-memory.md +8 -8
  172. package/.claude/commands/hive-mind/hive-mind-metrics.md +8 -8
  173. package/.claude/commands/hive-mind/hive-mind-resume.md +8 -8
  174. package/.claude/commands/hive-mind/hive-mind-sessions.md +8 -8
  175. package/.claude/commands/hive-mind/hive-mind-spawn.md +21 -21
  176. package/.claude/commands/hive-mind/hive-mind-status.md +8 -8
  177. package/.claude/commands/hive-mind/hive-mind-stop.md +8 -8
  178. package/.claude/commands/hive-mind/hive-mind-wizard.md +8 -8
  179. package/.claude/commands/hive-mind/hive-mind.md +27 -27
  180. package/.claude/commands/hooks/README.md +11 -11
  181. package/.claude/commands/hooks/overview.md +57 -57
  182. package/.claude/commands/hooks/post-edit.md +117 -117
  183. package/.claude/commands/hooks/post-task.md +112 -112
  184. package/.claude/commands/hooks/pre-edit.md +113 -113
  185. package/.claude/commands/hooks/pre-task.md +111 -111
  186. package/.claude/commands/hooks/session-end.md +118 -118
  187. package/.claude/commands/hooks/setup.md +102 -102
  188. package/.claude/commands/memory/README.md +9 -9
  189. package/.claude/commands/memory/memory-persist.md +25 -25
  190. package/.claude/commands/memory/memory-search.md +25 -25
  191. package/.claude/commands/memory/memory-usage.md +25 -25
  192. package/.claude/commands/memory/neural.md +47 -47
  193. package/.claude/commands/monitoring/README.md +9 -9
  194. package/.claude/commands/monitoring/agent-metrics.md +25 -25
  195. package/.claude/commands/monitoring/agents.md +44 -44
  196. package/.claude/commands/monitoring/real-time-view.md +25 -25
  197. package/.claude/commands/monitoring/status.md +46 -46
  198. package/.claude/commands/monitoring/swarm-monitor.md +25 -25
  199. package/.claude/commands/optimization/README.md +9 -9
  200. package/.claude/commands/optimization/auto-topology.md +61 -61
  201. package/.claude/commands/optimization/cache-manage.md +25 -25
  202. package/.claude/commands/optimization/parallel-execute.md +25 -25
  203. package/.claude/commands/optimization/parallel-execution.md +49 -49
  204. package/.claude/commands/optimization/topology-optimize.md +25 -25
  205. package/.claude/commands/pair/README.md +260 -260
  206. package/.claude/commands/pair/commands.md +545 -545
  207. package/.claude/commands/pair/config.md +509 -509
  208. package/.claude/commands/pair/examples.md +511 -511
  209. package/.claude/commands/pair/modes.md +347 -347
  210. package/.claude/commands/pair/session.md +406 -406
  211. package/.claude/commands/pair/start.md +208 -208
  212. package/.claude/commands/sparc/analyzer.md +51 -51
  213. package/.claude/commands/sparc/architect.md +53 -53
  214. package/.claude/commands/sparc/ask.md +97 -97
  215. package/.claude/commands/sparc/batch-executor.md +54 -54
  216. package/.claude/commands/sparc/code.md +89 -89
  217. package/.claude/commands/sparc/coder.md +54 -54
  218. package/.claude/commands/sparc/debug.md +83 -83
  219. package/.claude/commands/sparc/debugger.md +54 -54
  220. package/.claude/commands/sparc/designer.md +53 -53
  221. package/.claude/commands/sparc/devops.md +109 -109
  222. package/.claude/commands/sparc/docs-writer.md +80 -80
  223. package/.claude/commands/sparc/documenter.md +54 -54
  224. package/.claude/commands/sparc/innovator.md +54 -54
  225. package/.claude/commands/sparc/integration.md +83 -83
  226. package/.claude/commands/sparc/mcp.md +117 -117
  227. package/.claude/commands/sparc/memory-manager.md +54 -54
  228. package/.claude/commands/sparc/optimizer.md +54 -54
  229. package/.claude/commands/sparc/orchestrator.md +131 -131
  230. package/.claude/commands/sparc/post-deployment-monitoring-mode.md +83 -83
  231. package/.claude/commands/sparc/refinement-optimization-mode.md +83 -83
  232. package/.claude/commands/sparc/researcher.md +54 -54
  233. package/.claude/commands/sparc/reviewer.md +54 -54
  234. package/.claude/commands/sparc/security-review.md +80 -80
  235. package/.claude/commands/sparc/sparc-modes.md +174 -174
  236. package/.claude/commands/sparc/sparc.md +111 -111
  237. package/.claude/commands/sparc/spec-pseudocode.md +80 -80
  238. package/.claude/commands/sparc/supabase-admin.md +348 -348
  239. package/.claude/commands/sparc/swarm-coordinator.md +54 -54
  240. package/.claude/commands/sparc/tdd.md +54 -54
  241. package/.claude/commands/sparc/tester.md +54 -54
  242. package/.claude/commands/sparc/tutorial.md +79 -79
  243. package/.claude/commands/sparc/workflow-manager.md +54 -54
  244. package/.claude/commands/sparc.md +166 -166
  245. package/.claude/commands/stream-chain/pipeline.md +120 -120
  246. package/.claude/commands/stream-chain/run.md +69 -69
  247. package/.claude/commands/swarm/README.md +15 -15
  248. package/.claude/commands/swarm/analysis.md +95 -95
  249. package/.claude/commands/swarm/development.md +96 -96
  250. package/.claude/commands/swarm/examples.md +168 -168
  251. package/.claude/commands/swarm/maintenance.md +102 -102
  252. package/.claude/commands/swarm/optimization.md +117 -117
  253. package/.claude/commands/swarm/research.md +136 -136
  254. package/.claude/commands/swarm/swarm-analysis.md +8 -8
  255. package/.claude/commands/swarm/swarm-background.md +8 -8
  256. package/.claude/commands/swarm/swarm-init.md +19 -19
  257. package/.claude/commands/swarm/swarm-modes.md +8 -8
  258. package/.claude/commands/swarm/swarm-monitor.md +8 -8
  259. package/.claude/commands/swarm/swarm-spawn.md +19 -19
  260. package/.claude/commands/swarm/swarm-status.md +8 -8
  261. package/.claude/commands/swarm/swarm-strategies.md +8 -8
  262. package/.claude/commands/swarm/swarm.md +27 -27
  263. package/.claude/commands/swarm/testing.md +131 -131
  264. package/.claude/commands/training/README.md +9 -9
  265. package/.claude/commands/training/model-update.md +25 -25
  266. package/.claude/commands/training/neural-patterns.md +73 -73
  267. package/.claude/commands/training/neural-train.md +25 -25
  268. package/.claude/commands/training/pattern-learn.md +25 -25
  269. package/.claude/commands/training/specialization.md +62 -62
  270. package/.claude/commands/truth/start.md +142 -142
  271. package/.claude/commands/verify/check.md +49 -49
  272. package/.claude/commands/verify/start.md +127 -127
  273. package/.claude/commands/workflows/README.md +9 -9
  274. package/.claude/commands/workflows/development.md +77 -77
  275. package/.claude/commands/workflows/research.md +62 -62
  276. package/.claude/commands/workflows/workflow-create.md +25 -25
  277. package/.claude/commands/workflows/workflow-execute.md +25 -25
  278. package/.claude/commands/workflows/workflow-export.md +25 -25
  279. package/.claude/config/v3-dependency-optimization.json +265 -265
  280. package/.claude/config/v3-performance-targets.json +250 -250
  281. package/.claude/helpers/.LOCKED +2 -2
  282. package/.claude/helpers/.helpers-version +1 -0
  283. package/.claude/helpers/README.md +96 -96
  284. package/.claude/helpers/adr-compliance.sh +186 -186
  285. package/.claude/helpers/aggressive-microcompact.mjs +36 -36
  286. package/.claude/helpers/auto-commit.sh +178 -178
  287. package/.claude/helpers/auto-memory-hook.mjs +430 -430
  288. package/.claude/helpers/checkpoint-manager.sh +251 -251
  289. package/.claude/helpers/context-persistence-hook.mjs +2001 -2001
  290. package/.claude/helpers/daemon-manager.sh +252 -252
  291. package/.claude/helpers/ddd-tracker.sh +144 -144
  292. package/.claude/helpers/github-safe.js +156 -156
  293. package/.claude/helpers/github-setup.sh +45 -45
  294. package/.claude/helpers/guidance-hook.sh +13 -13
  295. package/.claude/helpers/guidance-hooks.sh +102 -102
  296. package/.claude/helpers/health-monitor.sh +108 -108
  297. package/.claude/helpers/helpers.manifest.json +13 -0
  298. package/.claude/helpers/hook-handler.cjs +464 -464
  299. package/.claude/helpers/intelligence.cjs +1058 -1058
  300. package/.claude/helpers/learning-hooks.sh +329 -329
  301. package/.claude/helpers/learning-optimizer.sh +127 -127
  302. package/.claude/helpers/learning-service.mjs +1144 -1144
  303. package/.claude/helpers/memory.cjs +84 -84
  304. package/.claude/helpers/metrics-db.mjs +503 -503
  305. package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
  306. package/.claude/helpers/pattern-consolidator.sh +86 -86
  307. package/.claude/helpers/perf-worker.sh +160 -160
  308. package/.claude/helpers/quick-start.sh +19 -19
  309. package/.claude/helpers/router.cjs +62 -62
  310. package/.claude/helpers/security-scanner.sh +127 -127
  311. package/.claude/helpers/session.cjs +125 -125
  312. package/.claude/helpers/setup-mcp.sh +18 -18
  313. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  314. package/.claude/helpers/statusline.cjs +156 -1
  315. package/.claude/helpers/swarm-comms.sh +353 -353
  316. package/.claude/helpers/swarm-hooks.sh +761 -761
  317. package/.claude/helpers/swarm-monitor.sh +210 -210
  318. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  319. package/.claude/helpers/update-v3-progress.sh +165 -165
  320. package/.claude/helpers/v3-quick-status.sh +57 -57
  321. package/.claude/helpers/v3.sh +110 -110
  322. package/.claude/helpers/validate-v3-config.sh +215 -215
  323. package/.claude/helpers/worker-manager.sh +170 -170
  324. package/.claude/mcp.json +12 -12
  325. package/.claude/proven-config.json +42 -0
  326. package/.claude/settings.json +284 -284
  327. package/.claude/settings.json.bak +526 -526
  328. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  329. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  330. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  331. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  332. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  333. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
  334. package/.claude/skills/browser/SKILL.md +204 -204
  335. package/.claude/skills/dual-mode/README.md +71 -71
  336. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  337. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  338. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  339. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  340. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  341. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  342. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  343. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  344. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  345. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  346. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  347. package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
  348. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  349. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  350. package/.claude/skills/performance-analysis/SKILL.md +560 -560
  351. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  352. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  353. package/.claude/skills/skill-builder/SKILL.md +910 -910
  354. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  355. package/.claude/skills/stream-chain/SKILL.md +560 -560
  356. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  357. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  358. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  359. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  360. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  361. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  362. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  363. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  364. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  365. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  366. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  367. package/.claude/skills/verification-quality/SKILL.md +691 -691
  368. package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
  369. package/.claude/skills/worker-integration/SKILL.md +147 -147
  370. package/.claude/statusline-command.sh +176 -176
  371. package/.claude/statusline.mjs +109 -109
  372. package/.claude/statusline.sh +431 -431
  373. package/.claude/workflows/full-system-test.js +65 -65
  374. package/.claude/workflows/intelligence-system-hardening.js +120 -120
  375. package/.claude/workflows/plugin-contract-audit.js +91 -91
  376. package/.claude-plugin/README.md +720 -720
  377. package/.claude-plugin/docs/INSTALLATION.md +261 -261
  378. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
  379. package/.claude-plugin/docs/QUICKSTART.md +361 -361
  380. package/.claude-plugin/docs/STRUCTURE.md +128 -128
  381. package/.claude-plugin/hooks/hooks.json +79 -79
  382. package/.claude-plugin/marketplace.json +185 -185
  383. package/.claude-plugin/plugin.json +71 -71
  384. package/.claude-plugin/scripts/install.sh +234 -234
  385. package/.claude-plugin/scripts/ruflo-hook.cjs +166 -166
  386. package/.claude-plugin/scripts/ruflo-hook.sh +52 -52
  387. package/.claude-plugin/scripts/uninstall.sh +36 -36
  388. package/.claude-plugin/scripts/verify.sh +108 -108
  389. package/LICENSE +21 -21
  390. package/README.md +419 -419
  391. package/bin/cli.js +11 -11
  392. package/bin/npx-repair.js +7 -7
  393. package/bin/npx-safe-launch.js +9 -9
  394. package/package.json +192 -192
  395. package/v3/@claude-flow/cli/README.md +419 -419
  396. package/v3/@claude-flow/cli/bin/cli.js +314 -314
  397. package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
  398. package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
  399. package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
  400. package/v3/@claude-flow/cli/dist/src/autopilot-state.js +24 -7
  401. package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
  402. package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
  403. package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
  404. package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
  405. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
  406. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
  407. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +31 -10
  408. package/v3/@claude-flow/cli/dist/src/commands/init.js +202 -34
  409. package/v3/@claude-flow/cli/dist/src/commands/memory.js +12 -1
  410. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
  411. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
  412. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
  413. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
  414. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
  415. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
  416. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
  417. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
  418. package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
  419. package/v3/@claude-flow/cli/dist/src/funnel/disclosure.js +13 -2
  420. package/v3/@claude-flow/cli/dist/src/funnel/messages.d.ts +12 -10
  421. package/v3/@claude-flow/cli/dist/src/funnel/messages.js +83 -11
  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.js +2 -2
  425. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +751 -751
  426. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +24 -24
  427. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
  428. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
  429. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-tools.js +8 -0
  430. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +21 -0
  431. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +4 -3
  432. package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +22 -22
  433. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +192 -123
  434. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +407 -407
  435. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
  436. package/v3/@claude-flow/cli/dist/src/parser.js +25 -9
  437. package/v3/@claude-flow/cli/dist/src/proxy/verify.js +2 -2
  438. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  439. package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
  440. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  441. package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +4 -4
  442. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +7 -4
  443. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
  444. package/v3/@claude-flow/cli/package.json +137 -137
  445. package/v3/@claude-flow/guidance/README.md +1195 -1195
  446. package/v3/@claude-flow/guidance/package.json +198 -198
  447. package/v3/@claude-flow/shared/README.md +323 -323
  448. package/v3/@claude-flow/shared/dist/events/event-store.js +31 -31
  449. package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
  450. package/v3/@claude-flow/shared/package.json +43 -43
  451. package/v3/README.md +493 -493
@@ -1,803 +1,803 @@
1
- ---
2
- name: quorum-manager
3
- description: Implements dynamic quorum adjustment and intelligent membership management
4
- ---
5
-
6
- # Quorum Manager
7
-
8
- Implements dynamic quorum adjustment and intelligent membership management for distributed consensus protocols.
9
-
10
- ## Core Responsibilities
11
-
12
- 1. **Dynamic Quorum Calculation**: Adapt quorum requirements based on real-time network conditions
13
- 2. **Membership Management**: Handle seamless node addition, removal, and failure scenarios
14
- 3. **Network Monitoring**: Assess connectivity, latency, and partition detection
15
- 4. **Weighted Voting**: Implement capability-based voting weight assignments
16
- 5. **Fault Tolerance Optimization**: Balance availability and consistency guarantees
17
-
18
- ## Technical Implementation
19
-
20
- ### Core Quorum Management System
21
- ```javascript
22
- class QuorumManager {
23
- constructor(nodeId, consensusProtocol) {
24
- this.nodeId = nodeId;
25
- this.protocol = consensusProtocol;
26
- this.currentQuorum = new Map(); // nodeId -> QuorumNode
27
- this.quorumHistory = [];
28
- this.networkMonitor = new NetworkConditionMonitor();
29
- this.membershipTracker = new MembershipTracker();
30
- this.faultToleranceCalculator = new FaultToleranceCalculator();
31
- this.adjustmentStrategies = new Map();
32
-
33
- this.initializeStrategies();
34
- }
35
-
36
- // Initialize quorum adjustment strategies
37
- initializeStrategies() {
38
- this.adjustmentStrategies.set('NETWORK_BASED', new NetworkBasedStrategy());
39
- this.adjustmentStrategies.set('PERFORMANCE_BASED', new PerformanceBasedStrategy());
40
- this.adjustmentStrategies.set('FAULT_TOLERANCE_BASED', new FaultToleranceStrategy());
41
- this.adjustmentStrategies.set('HYBRID', new HybridStrategy());
42
- }
43
-
44
- // Calculate optimal quorum size based on current conditions
45
- async calculateOptimalQuorum(context = {}) {
46
- const networkConditions = await this.networkMonitor.getCurrentConditions();
47
- const membershipStatus = await this.membershipTracker.getMembershipStatus();
48
- const performanceMetrics = context.performanceMetrics || await this.getPerformanceMetrics();
49
-
50
- const analysisInput = {
51
- networkConditions: networkConditions,
52
- membershipStatus: membershipStatus,
53
- performanceMetrics: performanceMetrics,
54
- currentQuorum: this.currentQuorum,
55
- protocol: this.protocol,
56
- faultToleranceRequirements: context.faultToleranceRequirements || this.getDefaultFaultTolerance()
57
- };
58
-
59
- // Apply multiple strategies and select optimal result
60
- const strategyResults = new Map();
61
-
62
- for (const [strategyName, strategy] of this.adjustmentStrategies) {
63
- try {
64
- const result = await strategy.calculateQuorum(analysisInput);
65
- strategyResults.set(strategyName, result);
66
- } catch (error) {
67
- console.warn(`Strategy ${strategyName} failed:`, error);
68
- }
69
- }
70
-
71
- // Select best strategy result
72
- const optimalResult = this.selectOptimalStrategy(strategyResults, analysisInput);
73
-
74
- return {
75
- recommendedQuorum: optimalResult.quorum,
76
- strategy: optimalResult.strategy,
77
- confidence: optimalResult.confidence,
78
- reasoning: optimalResult.reasoning,
79
- expectedImpact: optimalResult.expectedImpact
80
- };
81
- }
82
-
83
- // Apply quorum changes with validation and rollback capability
84
- async adjustQuorum(newQuorumConfig, options = {}) {
85
- const adjustmentId = `adjustment_${Date.now()}`;
86
-
87
- try {
88
- // Validate new quorum configuration
89
- await this.validateQuorumConfiguration(newQuorumConfig);
90
-
91
- // Create adjustment plan
92
- const adjustmentPlan = await this.createAdjustmentPlan(
93
- this.currentQuorum, newQuorumConfig
94
- );
95
-
96
- // Execute adjustment with monitoring
97
- const adjustmentResult = await this.executeQuorumAdjustment(
98
- adjustmentPlan, adjustmentId, options
99
- );
100
-
101
- // Verify adjustment success
102
- await this.verifyQuorumAdjustment(adjustmentResult);
103
-
104
- // Update current quorum
105
- this.currentQuorum = newQuorumConfig.quorum;
106
-
107
- // Record successful adjustment
108
- this.recordQuorumChange(adjustmentId, adjustmentResult);
109
-
110
- return {
111
- success: true,
112
- adjustmentId: adjustmentId,
113
- previousQuorum: adjustmentPlan.previousQuorum,
114
- newQuorum: this.currentQuorum,
115
- impact: adjustmentResult.impact
116
- };
117
-
118
- } catch (error) {
119
- console.error(`Quorum adjustment failed:`, error);
120
-
121
- // Attempt rollback
122
- await this.rollbackQuorumAdjustment(adjustmentId);
123
-
124
- throw error;
125
- }
126
- }
127
-
128
- async executeQuorumAdjustment(adjustmentPlan, adjustmentId, options) {
129
- const startTime = Date.now();
130
-
131
- // Phase 1: Prepare nodes for quorum change
132
- await this.prepareNodesForAdjustment(adjustmentPlan.affectedNodes);
133
-
134
- // Phase 2: Execute membership changes
135
- const membershipChanges = await this.executeMembershipChanges(
136
- adjustmentPlan.membershipChanges
137
- );
138
-
139
- // Phase 3: Update voting weights if needed
140
- if (adjustmentPlan.weightChanges.length > 0) {
141
- await this.updateVotingWeights(adjustmentPlan.weightChanges);
142
- }
143
-
144
- // Phase 4: Reconfigure consensus protocol
145
- await this.reconfigureConsensusProtocol(adjustmentPlan.protocolChanges);
146
-
147
- // Phase 5: Verify new quorum is operational
148
- const verificationResult = await this.verifyQuorumOperational(adjustmentPlan.newQuorum);
149
-
150
- const endTime = Date.now();
151
-
152
- return {
153
- adjustmentId: adjustmentId,
154
- duration: endTime - startTime,
155
- membershipChanges: membershipChanges,
156
- verificationResult: verificationResult,
157
- impact: await this.measureAdjustmentImpact(startTime, endTime)
158
- };
159
- }
160
- }
161
- ```
162
-
163
- ### Network-Based Quorum Strategy
164
- ```javascript
165
- class NetworkBasedStrategy {
166
- constructor() {
167
- this.networkAnalyzer = new NetworkAnalyzer();
168
- this.connectivityMatrix = new ConnectivityMatrix();
169
- this.partitionPredictor = new PartitionPredictor();
170
- }
171
-
172
- async calculateQuorum(analysisInput) {
173
- const { networkConditions, membershipStatus, currentQuorum } = analysisInput;
174
-
175
- // Analyze network topology and connectivity
176
- const topologyAnalysis = await this.analyzeNetworkTopology(membershipStatus.activeNodes);
177
-
178
- // Predict potential network partitions
179
- const partitionRisk = await this.assessPartitionRisk(networkConditions, topologyAnalysis);
180
-
181
- // Calculate minimum quorum for fault tolerance
182
- const minQuorum = this.calculateMinimumQuorum(
183
- membershipStatus.activeNodes.length,
184
- partitionRisk.maxPartitionSize
185
- );
186
-
187
- // Optimize for network conditions
188
- const optimizedQuorum = await this.optimizeForNetworkConditions(
189
- minQuorum,
190
- networkConditions,
191
- topologyAnalysis
192
- );
193
-
194
- return {
195
- quorum: optimizedQuorum,
196
- strategy: 'NETWORK_BASED',
197
- confidence: this.calculateConfidence(networkConditions, topologyAnalysis),
198
- reasoning: this.generateReasoning(optimizedQuorum, partitionRisk, networkConditions),
199
- expectedImpact: {
200
- availability: this.estimateAvailabilityImpact(optimizedQuorum),
201
- performance: this.estimatePerformanceImpact(optimizedQuorum, networkConditions)
202
- }
203
- };
204
- }
205
-
206
- async analyzeNetworkTopology(activeNodes) {
207
- const topology = {
208
- nodes: activeNodes.length,
209
- edges: 0,
210
- clusters: [],
211
- diameter: 0,
212
- connectivity: new Map()
213
- };
214
-
215
- // Build connectivity matrix
216
- for (const node of activeNodes) {
217
- const connections = await this.getNodeConnections(node);
218
- topology.connectivity.set(node.id, connections);
219
- topology.edges += connections.length;
220
- }
221
-
222
- // Identify network clusters
223
- topology.clusters = await this.identifyNetworkClusters(topology.connectivity);
224
-
225
- // Calculate network diameter
226
- topology.diameter = await this.calculateNetworkDiameter(topology.connectivity);
227
-
228
- return topology;
229
- }
230
-
231
- async assessPartitionRisk(networkConditions, topologyAnalysis) {
232
- const riskFactors = {
233
- connectivityReliability: this.assessConnectivityReliability(networkConditions),
234
- geographicDistribution: this.assessGeographicRisk(topologyAnalysis),
235
- networkLatency: this.assessLatencyRisk(networkConditions),
236
- historicalPartitions: await this.getHistoricalPartitionData()
237
- };
238
-
239
- // Calculate overall partition risk
240
- const overallRisk = this.calculateOverallPartitionRisk(riskFactors);
241
-
242
- // Estimate maximum partition size
243
- const maxPartitionSize = this.estimateMaxPartitionSize(
244
- topologyAnalysis,
245
- riskFactors
246
- );
247
-
248
- return {
249
- overallRisk: overallRisk,
250
- maxPartitionSize: maxPartitionSize,
251
- riskFactors: riskFactors,
252
- mitigationStrategies: this.suggestMitigationStrategies(riskFactors)
253
- };
254
- }
255
-
256
- calculateMinimumQuorum(totalNodes, maxPartitionSize) {
257
- // For Byzantine fault tolerance: need > 2/3 of total nodes
258
- const byzantineMinimum = Math.floor(2 * totalNodes / 3) + 1;
259
-
260
- // For network partition tolerance: need > 1/2 of largest connected component
261
- const partitionMinimum = Math.floor((totalNodes - maxPartitionSize) / 2) + 1;
262
-
263
- // Use the more restrictive requirement
264
- return Math.max(byzantineMinimum, partitionMinimum);
265
- }
266
-
267
- async optimizeForNetworkConditions(minQuorum, networkConditions, topologyAnalysis) {
268
- const optimization = {
269
- baseQuorum: minQuorum,
270
- nodes: new Map(),
271
- totalWeight: 0
272
- };
273
-
274
- // Select nodes for quorum based on network position and reliability
275
- const nodeScores = await this.scoreNodesForQuorum(networkConditions, topologyAnalysis);
276
-
277
- // Sort nodes by score (higher is better)
278
- const sortedNodes = Array.from(nodeScores.entries())
279
- .sort(([,scoreA], [,scoreB]) => scoreB - scoreA);
280
-
281
- // Select top nodes for quorum
282
- let selectedCount = 0;
283
- for (const [nodeId, score] of sortedNodes) {
284
- if (selectedCount < minQuorum) {
285
- const weight = this.calculateNodeWeight(nodeId, score, networkConditions);
286
- optimization.nodes.set(nodeId, {
287
- weight: weight,
288
- score: score,
289
- role: selectedCount === 0 ? 'primary' : 'secondary'
290
- });
291
- optimization.totalWeight += weight;
292
- selectedCount++;
293
- }
294
- }
295
-
296
- return optimization;
297
- }
298
-
299
- async scoreNodesForQuorum(networkConditions, topologyAnalysis) {
300
- const scores = new Map();
301
-
302
- for (const [nodeId, connections] of topologyAnalysis.connectivity) {
303
- let score = 0;
304
-
305
- // Connectivity score (more connections = higher score)
306
- score += (connections.length / topologyAnalysis.nodes) * 30;
307
-
308
- // Network position score (central nodes get higher scores)
309
- const centrality = this.calculateCentrality(nodeId, topologyAnalysis);
310
- score += centrality * 25;
311
-
312
- // Reliability score based on network conditions
313
- const reliability = await this.getNodeReliability(nodeId, networkConditions);
314
- score += reliability * 25;
315
-
316
- // Geographic diversity score
317
- const geoScore = await this.getGeographicDiversityScore(nodeId, topologyAnalysis);
318
- score += geoScore * 20;
319
-
320
- scores.set(nodeId, score);
321
- }
322
-
323
- return scores;
324
- }
325
-
326
- calculateNodeWeight(nodeId, score, networkConditions) {
327
- // Base weight of 1, adjusted by score and conditions
328
- let weight = 1.0;
329
-
330
- // Adjust based on normalized score (0-1)
331
- const normalizedScore = score / 100;
332
- weight *= (0.5 + normalizedScore);
333
-
334
- // Adjust based on network latency
335
- const nodeLatency = networkConditions.nodeLatencies.get(nodeId) || 100;
336
- const latencyFactor = Math.max(0.1, 1.0 - (nodeLatency / 1000)); // Lower latency = higher weight
337
- weight *= latencyFactor;
338
-
339
- // Ensure minimum weight
340
- return Math.max(0.1, Math.min(2.0, weight));
341
- }
342
- }
343
- ```
344
-
345
- ### Performance-Based Quorum Strategy
346
- ```javascript
347
- class PerformanceBasedStrategy {
348
- constructor() {
349
- this.performanceAnalyzer = new PerformanceAnalyzer();
350
- this.throughputOptimizer = new ThroughputOptimizer();
351
- this.latencyOptimizer = new LatencyOptimizer();
352
- }
353
-
354
- async calculateQuorum(analysisInput) {
355
- const { performanceMetrics, membershipStatus, protocol } = analysisInput;
356
-
357
- // Analyze current performance bottlenecks
358
- const bottlenecks = await this.identifyPerformanceBottlenecks(performanceMetrics);
359
-
360
- // Calculate throughput-optimal quorum size
361
- const throughputOptimal = await this.calculateThroughputOptimalQuorum(
362
- performanceMetrics, membershipStatus.activeNodes
363
- );
364
-
365
- // Calculate latency-optimal quorum size
366
- const latencyOptimal = await this.calculateLatencyOptimalQuorum(
367
- performanceMetrics, membershipStatus.activeNodes
368
- );
369
-
370
- // Balance throughput and latency requirements
371
- const balancedQuorum = await this.balanceThroughputAndLatency(
372
- throughputOptimal, latencyOptimal, performanceMetrics.requirements
373
- );
374
-
375
- return {
376
- quorum: balancedQuorum,
377
- strategy: 'PERFORMANCE_BASED',
378
- confidence: this.calculatePerformanceConfidence(performanceMetrics),
379
- reasoning: this.generatePerformanceReasoning(
380
- balancedQuorum, throughputOptimal, latencyOptimal, bottlenecks
381
- ),
382
- expectedImpact: {
383
- throughputImprovement: this.estimateThroughputImpact(balancedQuorum),
384
- latencyImprovement: this.estimateLatencyImpact(balancedQuorum)
385
- }
386
- };
387
- }
388
-
389
- async calculateThroughputOptimalQuorum(performanceMetrics, activeNodes) {
390
- const currentThroughput = performanceMetrics.throughput;
391
- const targetThroughput = performanceMetrics.requirements.targetThroughput;
392
-
393
- // Analyze relationship between quorum size and throughput
394
- const throughputCurve = await this.analyzeThroughputCurve(activeNodes);
395
-
396
- // Find quorum size that maximizes throughput while meeting requirements
397
- let optimalSize = Math.ceil(activeNodes.length / 2) + 1; // Minimum viable quorum
398
- let maxThroughput = 0;
399
-
400
- for (let size = optimalSize; size <= activeNodes.length; size++) {
401
- const projectedThroughput = this.projectThroughput(size, throughputCurve);
402
-
403
- if (projectedThroughput > maxThroughput && projectedThroughput >= targetThroughput) {
404
- maxThroughput = projectedThroughput;
405
- optimalSize = size;
406
- } else if (projectedThroughput < maxThroughput * 0.9) {
407
- // Stop if throughput starts decreasing significantly
408
- break;
409
- }
410
- }
411
-
412
- return await this.selectOptimalNodes(activeNodes, optimalSize, 'THROUGHPUT');
413
- }
414
-
415
- async calculateLatencyOptimalQuorum(performanceMetrics, activeNodes) {
416
- const currentLatency = performanceMetrics.latency;
417
- const targetLatency = performanceMetrics.requirements.maxLatency;
418
-
419
- // Analyze relationship between quorum size and latency
420
- const latencyCurve = await this.analyzeLatencyCurve(activeNodes);
421
-
422
- // Find minimum quorum size that meets latency requirements
423
- const minViableQuorum = Math.ceil(activeNodes.length / 2) + 1;
424
-
425
- for (let size = minViableQuorum; size <= activeNodes.length; size++) {
426
- const projectedLatency = this.projectLatency(size, latencyCurve);
427
-
428
- if (projectedLatency <= targetLatency) {
429
- return await this.selectOptimalNodes(activeNodes, size, 'LATENCY');
430
- }
431
- }
432
-
433
- // If no size meets requirements, return minimum viable with warning
434
- console.warn('No quorum size meets latency requirements');
435
- return await this.selectOptimalNodes(activeNodes, minViableQuorum, 'LATENCY');
436
- }
437
-
438
- async selectOptimalNodes(availableNodes, targetSize, optimizationTarget) {
439
- const nodeScores = new Map();
440
-
441
- // Score nodes based on optimization target
442
- for (const node of availableNodes) {
443
- let score = 0;
444
-
445
- if (optimizationTarget === 'THROUGHPUT') {
446
- score = await this.scoreThroughputCapability(node);
447
- } else if (optimizationTarget === 'LATENCY') {
448
- score = await this.scoreLatencyPerformance(node);
449
- }
450
-
451
- nodeScores.set(node.id, score);
452
- }
453
-
454
- // Select top-scoring nodes
455
- const sortedNodes = availableNodes.sort((a, b) =>
456
- nodeScores.get(b.id) - nodeScores.get(a.id)
457
- );
458
-
459
- const selectedNodes = new Map();
460
-
461
- for (let i = 0; i < Math.min(targetSize, sortedNodes.length); i++) {
462
- const node = sortedNodes[i];
463
- selectedNodes.set(node.id, {
464
- weight: this.calculatePerformanceWeight(node, nodeScores.get(node.id)),
465
- score: nodeScores.get(node.id),
466
- role: i === 0 ? 'primary' : 'secondary',
467
- optimizationTarget: optimizationTarget
468
- });
469
- }
470
-
471
- return {
472
- nodes: selectedNodes,
473
- totalWeight: Array.from(selectedNodes.values())
474
- .reduce((sum, node) => sum + node.weight, 0),
475
- optimizationTarget: optimizationTarget
476
- };
477
- }
478
-
479
- async scoreThroughputCapability(node) {
480
- let score = 0;
481
-
482
- // CPU capacity score
483
- const cpuCapacity = await this.getNodeCPUCapacity(node);
484
- score += (cpuCapacity / 100) * 30; // 30% weight for CPU
485
-
486
- // Network bandwidth score
487
- const bandwidth = await this.getNodeBandwidth(node);
488
- score += (bandwidth / 1000) * 25; // 25% weight for bandwidth (Mbps)
489
-
490
- // Memory capacity score
491
- const memory = await this.getNodeMemory(node);
492
- score += (memory / 8192) * 20; // 20% weight for memory (MB)
493
-
494
- // Historical throughput performance
495
- const historicalPerformance = await this.getHistoricalThroughput(node);
496
- score += (historicalPerformance / 1000) * 25; // 25% weight for historical performance
497
-
498
- return Math.min(100, score); // Normalize to 0-100
499
- }
500
-
501
- async scoreLatencyPerformance(node) {
502
- let score = 100; // Start with perfect score, subtract penalties
503
-
504
- // Network latency penalty
505
- const avgLatency = await this.getAverageNodeLatency(node);
506
- score -= (avgLatency / 10); // Subtract 1 point per 10ms latency
507
-
508
- // CPU load penalty
509
- const cpuLoad = await this.getNodeCPULoad(node);
510
- score -= (cpuLoad / 2); // Subtract 0.5 points per 1% CPU load
511
-
512
- // Geographic distance penalty (for distributed networks)
513
- const geoLatency = await this.getGeographicLatency(node);
514
- score -= (geoLatency / 20); // Subtract 1 point per 20ms geo latency
515
-
516
- // Consistency penalty (nodes with inconsistent performance)
517
- const consistencyScore = await this.getPerformanceConsistency(node);
518
- score *= consistencyScore; // Multiply by consistency factor (0-1)
519
-
520
- return Math.max(0, score);
521
- }
522
- }
523
- ```
524
-
525
- ### Fault Tolerance Strategy
526
- ```javascript
527
- class FaultToleranceStrategy {
528
- constructor() {
529
- this.faultAnalyzer = new FaultAnalyzer();
530
- this.reliabilityCalculator = new ReliabilityCalculator();
531
- this.redundancyOptimizer = new RedundancyOptimizer();
532
- }
533
-
534
- async calculateQuorum(analysisInput) {
535
- const { membershipStatus, faultToleranceRequirements, networkConditions } = analysisInput;
536
-
537
- // Analyze fault scenarios
538
- const faultScenarios = await this.analyzeFaultScenarios(
539
- membershipStatus.activeNodes, networkConditions
540
- );
541
-
542
- // Calculate minimum quorum for fault tolerance requirements
543
- const minQuorum = this.calculateFaultTolerantQuorum(
544
- faultScenarios, faultToleranceRequirements
545
- );
546
-
547
- // Optimize node selection for maximum fault tolerance
548
- const faultTolerantQuorum = await this.optimizeForFaultTolerance(
549
- membershipStatus.activeNodes, minQuorum, faultScenarios
550
- );
551
-
552
- return {
553
- quorum: faultTolerantQuorum,
554
- strategy: 'FAULT_TOLERANCE_BASED',
555
- confidence: this.calculateFaultConfidence(faultScenarios),
556
- reasoning: this.generateFaultToleranceReasoning(
557
- faultTolerantQuorum, faultScenarios, faultToleranceRequirements
558
- ),
559
- expectedImpact: {
560
- availability: this.estimateAvailabilityImprovement(faultTolerantQuorum),
561
- resilience: this.estimateResilienceImprovement(faultTolerantQuorum)
562
- }
563
- };
564
- }
565
-
566
- async analyzeFaultScenarios(activeNodes, networkConditions) {
567
- const scenarios = [];
568
-
569
- // Single node failure scenarios
570
- for (const node of activeNodes) {
571
- const scenario = await this.analyzeSingleNodeFailure(node, activeNodes, networkConditions);
572
- scenarios.push(scenario);
573
- }
574
-
575
- // Multiple node failure scenarios
576
- const multiFailureScenarios = await this.analyzeMultipleNodeFailures(
577
- activeNodes, networkConditions
578
- );
579
- scenarios.push(...multiFailureScenarios);
580
-
581
- // Network partition scenarios
582
- const partitionScenarios = await this.analyzeNetworkPartitionScenarios(
583
- activeNodes, networkConditions
584
- );
585
- scenarios.push(...partitionScenarios);
586
-
587
- // Correlated failure scenarios
588
- const correlatedFailureScenarios = await this.analyzeCorrelatedFailures(
589
- activeNodes, networkConditions
590
- );
591
- scenarios.push(...correlatedFailureScenarios);
592
-
593
- return this.prioritizeScenariosByLikelihood(scenarios);
594
- }
595
-
596
- calculateFaultTolerantQuorum(faultScenarios, requirements) {
597
- let maxRequiredQuorum = 0;
598
-
599
- for (const scenario of faultScenarios) {
600
- if (scenario.likelihood >= requirements.minLikelihoodToConsider) {
601
- const requiredQuorum = this.calculateQuorumForScenario(scenario, requirements);
602
- maxRequiredQuorum = Math.max(maxRequiredQuorum, requiredQuorum);
603
- }
604
- }
605
-
606
- return maxRequiredQuorum;
607
- }
608
-
609
- calculateQuorumForScenario(scenario, requirements) {
610
- const totalNodes = scenario.totalNodes;
611
- const failedNodes = scenario.failedNodes;
612
- const availableNodes = totalNodes - failedNodes;
613
-
614
- // For Byzantine fault tolerance
615
- if (requirements.byzantineFaultTolerance) {
616
- const maxByzantineNodes = Math.floor((totalNodes - 1) / 3);
617
- return Math.floor(2 * totalNodes / 3) + 1;
618
- }
619
-
620
- // For crash fault tolerance
621
- return Math.floor(availableNodes / 2) + 1;
622
- }
623
-
624
- async optimizeForFaultTolerance(activeNodes, minQuorum, faultScenarios) {
625
- const optimizedQuorum = {
626
- nodes: new Map(),
627
- totalWeight: 0,
628
- faultTolerance: {
629
- singleNodeFailures: 0,
630
- multipleNodeFailures: 0,
631
- networkPartitions: 0
632
- }
633
- };
634
-
635
- // Score nodes based on fault tolerance contribution
636
- const nodeScores = await this.scoreFaultToleranceContribution(
637
- activeNodes, faultScenarios
638
- );
639
-
640
- // Select nodes to maximize fault tolerance coverage
641
- const selectedNodes = this.selectFaultTolerantNodes(
642
- activeNodes, minQuorum, nodeScores, faultScenarios
643
- );
644
-
645
- for (const [nodeId, nodeData] of selectedNodes) {
646
- optimizedQuorum.nodes.set(nodeId, {
647
- weight: nodeData.weight,
648
- score: nodeData.score,
649
- role: nodeData.role,
650
- faultToleranceContribution: nodeData.faultToleranceContribution
651
- });
652
- optimizedQuorum.totalWeight += nodeData.weight;
653
- }
654
-
655
- // Calculate fault tolerance metrics for selected quorum
656
- optimizedQuorum.faultTolerance = await this.calculateFaultToleranceMetrics(
657
- selectedNodes, faultScenarios
658
- );
659
-
660
- return optimizedQuorum;
661
- }
662
-
663
- async scoreFaultToleranceContribution(activeNodes, faultScenarios) {
664
- const scores = new Map();
665
-
666
- for (const node of activeNodes) {
667
- let score = 0;
668
-
669
- // Independence score (nodes in different failure domains get higher scores)
670
- const independenceScore = await this.calculateIndependenceScore(node, activeNodes);
671
- score += independenceScore * 40;
672
-
673
- // Reliability score (historical uptime and performance)
674
- const reliabilityScore = await this.calculateReliabilityScore(node);
675
- score += reliabilityScore * 30;
676
-
677
- // Geographic diversity score
678
- const diversityScore = await this.calculateDiversityScore(node, activeNodes);
679
- score += diversityScore * 20;
680
-
681
- // Recovery capability score
682
- const recoveryScore = await this.calculateRecoveryScore(node);
683
- score += recoveryScore * 10;
684
-
685
- scores.set(node.id, score);
686
- }
687
-
688
- return scores;
689
- }
690
-
691
- selectFaultTolerantNodes(activeNodes, minQuorum, nodeScores, faultScenarios) {
692
- const selectedNodes = new Map();
693
- const remainingNodes = [...activeNodes];
694
-
695
- // Greedy selection to maximize fault tolerance coverage
696
- while (selectedNodes.size < minQuorum && remainingNodes.length > 0) {
697
- let bestNode = null;
698
- let bestScore = -1;
699
- let bestIndex = -1;
700
-
701
- for (let i = 0; i < remainingNodes.length; i++) {
702
- const node = remainingNodes[i];
703
- const additionalCoverage = this.calculateAdditionalFaultCoverage(
704
- node, selectedNodes, faultScenarios
705
- );
706
-
707
- const combinedScore = nodeScores.get(node.id) + (additionalCoverage * 50);
708
-
709
- if (combinedScore > bestScore) {
710
- bestScore = combinedScore;
711
- bestNode = node;
712
- bestIndex = i;
713
- }
714
- }
715
-
716
- if (bestNode) {
717
- selectedNodes.set(bestNode.id, {
718
- weight: this.calculateFaultToleranceWeight(bestNode, nodeScores.get(bestNode.id)),
719
- score: nodeScores.get(bestNode.id),
720
- role: selectedNodes.size === 0 ? 'primary' : 'secondary',
721
- faultToleranceContribution: this.calculateFaultToleranceContribution(bestNode)
722
- });
723
-
724
- remainingNodes.splice(bestIndex, 1);
725
- } else {
726
- break; // No more beneficial nodes
727
- }
728
- }
729
-
730
- return selectedNodes;
731
- }
732
- }
733
- ```
734
-
735
- ## MCP Integration Hooks
736
-
737
- ### Quorum State Management
738
- ```javascript
739
- // Store quorum configuration and history
740
- await this.mcpTools.memory_usage({
741
- action: 'store',
742
- key: `quorum_config_${this.nodeId}`,
743
- value: JSON.stringify({
744
- currentQuorum: Array.from(this.currentQuorum.entries()),
745
- strategy: this.activeStrategy,
746
- networkConditions: this.lastNetworkAnalysis,
747
- adjustmentHistory: this.quorumHistory.slice(-10)
748
- }),
749
- namespace: 'quorum_management',
750
- ttl: 3600000 // 1 hour
751
- });
752
-
753
- // Coordinate with swarm for membership changes
754
- const swarmStatus = await this.mcpTools.swarm_status({
755
- swarmId: this.swarmId
756
- });
757
-
758
- await this.mcpTools.coordination_sync({
759
- swarmId: this.swarmId
760
- });
761
- ```
762
-
763
- ### Performance Monitoring Integration
764
- ```javascript
765
- // Track quorum adjustment performance
766
- await this.mcpTools.metrics_collect({
767
- components: [
768
- 'quorum_adjustment_latency',
769
- 'consensus_availability',
770
- 'fault_tolerance_coverage',
771
- 'network_partition_recovery_time'
772
- ]
773
- });
774
-
775
- // Neural learning for quorum optimization
776
- await this.mcpTools.neural_patterns({
777
- action: 'learn',
778
- operation: 'quorum_optimization',
779
- outcome: JSON.stringify({
780
- adjustmentType: adjustment.strategy,
781
- performanceImpact: measurementResults,
782
- networkConditions: currentNetworkState,
783
- faultToleranceImprovement: faultToleranceMetrics
784
- })
785
- });
786
- ```
787
-
788
- ### Task Orchestration for Quorum Changes
789
- ```javascript
790
- // Orchestrate complex quorum adjustments
791
- await this.mcpTools.task_orchestrate({
792
- task: 'quorum_adjustment',
793
- strategy: 'sequential',
794
- priority: 'high',
795
- dependencies: [
796
- 'network_analysis',
797
- 'membership_validation',
798
- 'performance_assessment'
799
- ]
800
- });
801
- ```
802
-
1
+ ---
2
+ name: quorum-manager
3
+ description: Implements dynamic quorum adjustment and intelligent membership management
4
+ ---
5
+
6
+ # Quorum Manager
7
+
8
+ Implements dynamic quorum adjustment and intelligent membership management for distributed consensus protocols.
9
+
10
+ ## Core Responsibilities
11
+
12
+ 1. **Dynamic Quorum Calculation**: Adapt quorum requirements based on real-time network conditions
13
+ 2. **Membership Management**: Handle seamless node addition, removal, and failure scenarios
14
+ 3. **Network Monitoring**: Assess connectivity, latency, and partition detection
15
+ 4. **Weighted Voting**: Implement capability-based voting weight assignments
16
+ 5. **Fault Tolerance Optimization**: Balance availability and consistency guarantees
17
+
18
+ ## Technical Implementation
19
+
20
+ ### Core Quorum Management System
21
+ ```javascript
22
+ class QuorumManager {
23
+ constructor(nodeId, consensusProtocol) {
24
+ this.nodeId = nodeId;
25
+ this.protocol = consensusProtocol;
26
+ this.currentQuorum = new Map(); // nodeId -> QuorumNode
27
+ this.quorumHistory = [];
28
+ this.networkMonitor = new NetworkConditionMonitor();
29
+ this.membershipTracker = new MembershipTracker();
30
+ this.faultToleranceCalculator = new FaultToleranceCalculator();
31
+ this.adjustmentStrategies = new Map();
32
+
33
+ this.initializeStrategies();
34
+ }
35
+
36
+ // Initialize quorum adjustment strategies
37
+ initializeStrategies() {
38
+ this.adjustmentStrategies.set('NETWORK_BASED', new NetworkBasedStrategy());
39
+ this.adjustmentStrategies.set('PERFORMANCE_BASED', new PerformanceBasedStrategy());
40
+ this.adjustmentStrategies.set('FAULT_TOLERANCE_BASED', new FaultToleranceStrategy());
41
+ this.adjustmentStrategies.set('HYBRID', new HybridStrategy());
42
+ }
43
+
44
+ // Calculate optimal quorum size based on current conditions
45
+ async calculateOptimalQuorum(context = {}) {
46
+ const networkConditions = await this.networkMonitor.getCurrentConditions();
47
+ const membershipStatus = await this.membershipTracker.getMembershipStatus();
48
+ const performanceMetrics = context.performanceMetrics || await this.getPerformanceMetrics();
49
+
50
+ const analysisInput = {
51
+ networkConditions: networkConditions,
52
+ membershipStatus: membershipStatus,
53
+ performanceMetrics: performanceMetrics,
54
+ currentQuorum: this.currentQuorum,
55
+ protocol: this.protocol,
56
+ faultToleranceRequirements: context.faultToleranceRequirements || this.getDefaultFaultTolerance()
57
+ };
58
+
59
+ // Apply multiple strategies and select optimal result
60
+ const strategyResults = new Map();
61
+
62
+ for (const [strategyName, strategy] of this.adjustmentStrategies) {
63
+ try {
64
+ const result = await strategy.calculateQuorum(analysisInput);
65
+ strategyResults.set(strategyName, result);
66
+ } catch (error) {
67
+ console.warn(`Strategy ${strategyName} failed:`, error);
68
+ }
69
+ }
70
+
71
+ // Select best strategy result
72
+ const optimalResult = this.selectOptimalStrategy(strategyResults, analysisInput);
73
+
74
+ return {
75
+ recommendedQuorum: optimalResult.quorum,
76
+ strategy: optimalResult.strategy,
77
+ confidence: optimalResult.confidence,
78
+ reasoning: optimalResult.reasoning,
79
+ expectedImpact: optimalResult.expectedImpact
80
+ };
81
+ }
82
+
83
+ // Apply quorum changes with validation and rollback capability
84
+ async adjustQuorum(newQuorumConfig, options = {}) {
85
+ const adjustmentId = `adjustment_${Date.now()}`;
86
+
87
+ try {
88
+ // Validate new quorum configuration
89
+ await this.validateQuorumConfiguration(newQuorumConfig);
90
+
91
+ // Create adjustment plan
92
+ const adjustmentPlan = await this.createAdjustmentPlan(
93
+ this.currentQuorum, newQuorumConfig
94
+ );
95
+
96
+ // Execute adjustment with monitoring
97
+ const adjustmentResult = await this.executeQuorumAdjustment(
98
+ adjustmentPlan, adjustmentId, options
99
+ );
100
+
101
+ // Verify adjustment success
102
+ await this.verifyQuorumAdjustment(adjustmentResult);
103
+
104
+ // Update current quorum
105
+ this.currentQuorum = newQuorumConfig.quorum;
106
+
107
+ // Record successful adjustment
108
+ this.recordQuorumChange(adjustmentId, adjustmentResult);
109
+
110
+ return {
111
+ success: true,
112
+ adjustmentId: adjustmentId,
113
+ previousQuorum: adjustmentPlan.previousQuorum,
114
+ newQuorum: this.currentQuorum,
115
+ impact: adjustmentResult.impact
116
+ };
117
+
118
+ } catch (error) {
119
+ console.error(`Quorum adjustment failed:`, error);
120
+
121
+ // Attempt rollback
122
+ await this.rollbackQuorumAdjustment(adjustmentId);
123
+
124
+ throw error;
125
+ }
126
+ }
127
+
128
+ async executeQuorumAdjustment(adjustmentPlan, adjustmentId, options) {
129
+ const startTime = Date.now();
130
+
131
+ // Phase 1: Prepare nodes for quorum change
132
+ await this.prepareNodesForAdjustment(adjustmentPlan.affectedNodes);
133
+
134
+ // Phase 2: Execute membership changes
135
+ const membershipChanges = await this.executeMembershipChanges(
136
+ adjustmentPlan.membershipChanges
137
+ );
138
+
139
+ // Phase 3: Update voting weights if needed
140
+ if (adjustmentPlan.weightChanges.length > 0) {
141
+ await this.updateVotingWeights(adjustmentPlan.weightChanges);
142
+ }
143
+
144
+ // Phase 4: Reconfigure consensus protocol
145
+ await this.reconfigureConsensusProtocol(adjustmentPlan.protocolChanges);
146
+
147
+ // Phase 5: Verify new quorum is operational
148
+ const verificationResult = await this.verifyQuorumOperational(adjustmentPlan.newQuorum);
149
+
150
+ const endTime = Date.now();
151
+
152
+ return {
153
+ adjustmentId: adjustmentId,
154
+ duration: endTime - startTime,
155
+ membershipChanges: membershipChanges,
156
+ verificationResult: verificationResult,
157
+ impact: await this.measureAdjustmentImpact(startTime, endTime)
158
+ };
159
+ }
160
+ }
161
+ ```
162
+
163
+ ### Network-Based Quorum Strategy
164
+ ```javascript
165
+ class NetworkBasedStrategy {
166
+ constructor() {
167
+ this.networkAnalyzer = new NetworkAnalyzer();
168
+ this.connectivityMatrix = new ConnectivityMatrix();
169
+ this.partitionPredictor = new PartitionPredictor();
170
+ }
171
+
172
+ async calculateQuorum(analysisInput) {
173
+ const { networkConditions, membershipStatus, currentQuorum } = analysisInput;
174
+
175
+ // Analyze network topology and connectivity
176
+ const topologyAnalysis = await this.analyzeNetworkTopology(membershipStatus.activeNodes);
177
+
178
+ // Predict potential network partitions
179
+ const partitionRisk = await this.assessPartitionRisk(networkConditions, topologyAnalysis);
180
+
181
+ // Calculate minimum quorum for fault tolerance
182
+ const minQuorum = this.calculateMinimumQuorum(
183
+ membershipStatus.activeNodes.length,
184
+ partitionRisk.maxPartitionSize
185
+ );
186
+
187
+ // Optimize for network conditions
188
+ const optimizedQuorum = await this.optimizeForNetworkConditions(
189
+ minQuorum,
190
+ networkConditions,
191
+ topologyAnalysis
192
+ );
193
+
194
+ return {
195
+ quorum: optimizedQuorum,
196
+ strategy: 'NETWORK_BASED',
197
+ confidence: this.calculateConfidence(networkConditions, topologyAnalysis),
198
+ reasoning: this.generateReasoning(optimizedQuorum, partitionRisk, networkConditions),
199
+ expectedImpact: {
200
+ availability: this.estimateAvailabilityImpact(optimizedQuorum),
201
+ performance: this.estimatePerformanceImpact(optimizedQuorum, networkConditions)
202
+ }
203
+ };
204
+ }
205
+
206
+ async analyzeNetworkTopology(activeNodes) {
207
+ const topology = {
208
+ nodes: activeNodes.length,
209
+ edges: 0,
210
+ clusters: [],
211
+ diameter: 0,
212
+ connectivity: new Map()
213
+ };
214
+
215
+ // Build connectivity matrix
216
+ for (const node of activeNodes) {
217
+ const connections = await this.getNodeConnections(node);
218
+ topology.connectivity.set(node.id, connections);
219
+ topology.edges += connections.length;
220
+ }
221
+
222
+ // Identify network clusters
223
+ topology.clusters = await this.identifyNetworkClusters(topology.connectivity);
224
+
225
+ // Calculate network diameter
226
+ topology.diameter = await this.calculateNetworkDiameter(topology.connectivity);
227
+
228
+ return topology;
229
+ }
230
+
231
+ async assessPartitionRisk(networkConditions, topologyAnalysis) {
232
+ const riskFactors = {
233
+ connectivityReliability: this.assessConnectivityReliability(networkConditions),
234
+ geographicDistribution: this.assessGeographicRisk(topologyAnalysis),
235
+ networkLatency: this.assessLatencyRisk(networkConditions),
236
+ historicalPartitions: await this.getHistoricalPartitionData()
237
+ };
238
+
239
+ // Calculate overall partition risk
240
+ const overallRisk = this.calculateOverallPartitionRisk(riskFactors);
241
+
242
+ // Estimate maximum partition size
243
+ const maxPartitionSize = this.estimateMaxPartitionSize(
244
+ topologyAnalysis,
245
+ riskFactors
246
+ );
247
+
248
+ return {
249
+ overallRisk: overallRisk,
250
+ maxPartitionSize: maxPartitionSize,
251
+ riskFactors: riskFactors,
252
+ mitigationStrategies: this.suggestMitigationStrategies(riskFactors)
253
+ };
254
+ }
255
+
256
+ calculateMinimumQuorum(totalNodes, maxPartitionSize) {
257
+ // For Byzantine fault tolerance: need > 2/3 of total nodes
258
+ const byzantineMinimum = Math.floor(2 * totalNodes / 3) + 1;
259
+
260
+ // For network partition tolerance: need > 1/2 of largest connected component
261
+ const partitionMinimum = Math.floor((totalNodes - maxPartitionSize) / 2) + 1;
262
+
263
+ // Use the more restrictive requirement
264
+ return Math.max(byzantineMinimum, partitionMinimum);
265
+ }
266
+
267
+ async optimizeForNetworkConditions(minQuorum, networkConditions, topologyAnalysis) {
268
+ const optimization = {
269
+ baseQuorum: minQuorum,
270
+ nodes: new Map(),
271
+ totalWeight: 0
272
+ };
273
+
274
+ // Select nodes for quorum based on network position and reliability
275
+ const nodeScores = await this.scoreNodesForQuorum(networkConditions, topologyAnalysis);
276
+
277
+ // Sort nodes by score (higher is better)
278
+ const sortedNodes = Array.from(nodeScores.entries())
279
+ .sort(([,scoreA], [,scoreB]) => scoreB - scoreA);
280
+
281
+ // Select top nodes for quorum
282
+ let selectedCount = 0;
283
+ for (const [nodeId, score] of sortedNodes) {
284
+ if (selectedCount < minQuorum) {
285
+ const weight = this.calculateNodeWeight(nodeId, score, networkConditions);
286
+ optimization.nodes.set(nodeId, {
287
+ weight: weight,
288
+ score: score,
289
+ role: selectedCount === 0 ? 'primary' : 'secondary'
290
+ });
291
+ optimization.totalWeight += weight;
292
+ selectedCount++;
293
+ }
294
+ }
295
+
296
+ return optimization;
297
+ }
298
+
299
+ async scoreNodesForQuorum(networkConditions, topologyAnalysis) {
300
+ const scores = new Map();
301
+
302
+ for (const [nodeId, connections] of topologyAnalysis.connectivity) {
303
+ let score = 0;
304
+
305
+ // Connectivity score (more connections = higher score)
306
+ score += (connections.length / topologyAnalysis.nodes) * 30;
307
+
308
+ // Network position score (central nodes get higher scores)
309
+ const centrality = this.calculateCentrality(nodeId, topologyAnalysis);
310
+ score += centrality * 25;
311
+
312
+ // Reliability score based on network conditions
313
+ const reliability = await this.getNodeReliability(nodeId, networkConditions);
314
+ score += reliability * 25;
315
+
316
+ // Geographic diversity score
317
+ const geoScore = await this.getGeographicDiversityScore(nodeId, topologyAnalysis);
318
+ score += geoScore * 20;
319
+
320
+ scores.set(nodeId, score);
321
+ }
322
+
323
+ return scores;
324
+ }
325
+
326
+ calculateNodeWeight(nodeId, score, networkConditions) {
327
+ // Base weight of 1, adjusted by score and conditions
328
+ let weight = 1.0;
329
+
330
+ // Adjust based on normalized score (0-1)
331
+ const normalizedScore = score / 100;
332
+ weight *= (0.5 + normalizedScore);
333
+
334
+ // Adjust based on network latency
335
+ const nodeLatency = networkConditions.nodeLatencies.get(nodeId) || 100;
336
+ const latencyFactor = Math.max(0.1, 1.0 - (nodeLatency / 1000)); // Lower latency = higher weight
337
+ weight *= latencyFactor;
338
+
339
+ // Ensure minimum weight
340
+ return Math.max(0.1, Math.min(2.0, weight));
341
+ }
342
+ }
343
+ ```
344
+
345
+ ### Performance-Based Quorum Strategy
346
+ ```javascript
347
+ class PerformanceBasedStrategy {
348
+ constructor() {
349
+ this.performanceAnalyzer = new PerformanceAnalyzer();
350
+ this.throughputOptimizer = new ThroughputOptimizer();
351
+ this.latencyOptimizer = new LatencyOptimizer();
352
+ }
353
+
354
+ async calculateQuorum(analysisInput) {
355
+ const { performanceMetrics, membershipStatus, protocol } = analysisInput;
356
+
357
+ // Analyze current performance bottlenecks
358
+ const bottlenecks = await this.identifyPerformanceBottlenecks(performanceMetrics);
359
+
360
+ // Calculate throughput-optimal quorum size
361
+ const throughputOptimal = await this.calculateThroughputOptimalQuorum(
362
+ performanceMetrics, membershipStatus.activeNodes
363
+ );
364
+
365
+ // Calculate latency-optimal quorum size
366
+ const latencyOptimal = await this.calculateLatencyOptimalQuorum(
367
+ performanceMetrics, membershipStatus.activeNodes
368
+ );
369
+
370
+ // Balance throughput and latency requirements
371
+ const balancedQuorum = await this.balanceThroughputAndLatency(
372
+ throughputOptimal, latencyOptimal, performanceMetrics.requirements
373
+ );
374
+
375
+ return {
376
+ quorum: balancedQuorum,
377
+ strategy: 'PERFORMANCE_BASED',
378
+ confidence: this.calculatePerformanceConfidence(performanceMetrics),
379
+ reasoning: this.generatePerformanceReasoning(
380
+ balancedQuorum, throughputOptimal, latencyOptimal, bottlenecks
381
+ ),
382
+ expectedImpact: {
383
+ throughputImprovement: this.estimateThroughputImpact(balancedQuorum),
384
+ latencyImprovement: this.estimateLatencyImpact(balancedQuorum)
385
+ }
386
+ };
387
+ }
388
+
389
+ async calculateThroughputOptimalQuorum(performanceMetrics, activeNodes) {
390
+ const currentThroughput = performanceMetrics.throughput;
391
+ const targetThroughput = performanceMetrics.requirements.targetThroughput;
392
+
393
+ // Analyze relationship between quorum size and throughput
394
+ const throughputCurve = await this.analyzeThroughputCurve(activeNodes);
395
+
396
+ // Find quorum size that maximizes throughput while meeting requirements
397
+ let optimalSize = Math.ceil(activeNodes.length / 2) + 1; // Minimum viable quorum
398
+ let maxThroughput = 0;
399
+
400
+ for (let size = optimalSize; size <= activeNodes.length; size++) {
401
+ const projectedThroughput = this.projectThroughput(size, throughputCurve);
402
+
403
+ if (projectedThroughput > maxThroughput && projectedThroughput >= targetThroughput) {
404
+ maxThroughput = projectedThroughput;
405
+ optimalSize = size;
406
+ } else if (projectedThroughput < maxThroughput * 0.9) {
407
+ // Stop if throughput starts decreasing significantly
408
+ break;
409
+ }
410
+ }
411
+
412
+ return await this.selectOptimalNodes(activeNodes, optimalSize, 'THROUGHPUT');
413
+ }
414
+
415
+ async calculateLatencyOptimalQuorum(performanceMetrics, activeNodes) {
416
+ const currentLatency = performanceMetrics.latency;
417
+ const targetLatency = performanceMetrics.requirements.maxLatency;
418
+
419
+ // Analyze relationship between quorum size and latency
420
+ const latencyCurve = await this.analyzeLatencyCurve(activeNodes);
421
+
422
+ // Find minimum quorum size that meets latency requirements
423
+ const minViableQuorum = Math.ceil(activeNodes.length / 2) + 1;
424
+
425
+ for (let size = minViableQuorum; size <= activeNodes.length; size++) {
426
+ const projectedLatency = this.projectLatency(size, latencyCurve);
427
+
428
+ if (projectedLatency <= targetLatency) {
429
+ return await this.selectOptimalNodes(activeNodes, size, 'LATENCY');
430
+ }
431
+ }
432
+
433
+ // If no size meets requirements, return minimum viable with warning
434
+ console.warn('No quorum size meets latency requirements');
435
+ return await this.selectOptimalNodes(activeNodes, minViableQuorum, 'LATENCY');
436
+ }
437
+
438
+ async selectOptimalNodes(availableNodes, targetSize, optimizationTarget) {
439
+ const nodeScores = new Map();
440
+
441
+ // Score nodes based on optimization target
442
+ for (const node of availableNodes) {
443
+ let score = 0;
444
+
445
+ if (optimizationTarget === 'THROUGHPUT') {
446
+ score = await this.scoreThroughputCapability(node);
447
+ } else if (optimizationTarget === 'LATENCY') {
448
+ score = await this.scoreLatencyPerformance(node);
449
+ }
450
+
451
+ nodeScores.set(node.id, score);
452
+ }
453
+
454
+ // Select top-scoring nodes
455
+ const sortedNodes = availableNodes.sort((a, b) =>
456
+ nodeScores.get(b.id) - nodeScores.get(a.id)
457
+ );
458
+
459
+ const selectedNodes = new Map();
460
+
461
+ for (let i = 0; i < Math.min(targetSize, sortedNodes.length); i++) {
462
+ const node = sortedNodes[i];
463
+ selectedNodes.set(node.id, {
464
+ weight: this.calculatePerformanceWeight(node, nodeScores.get(node.id)),
465
+ score: nodeScores.get(node.id),
466
+ role: i === 0 ? 'primary' : 'secondary',
467
+ optimizationTarget: optimizationTarget
468
+ });
469
+ }
470
+
471
+ return {
472
+ nodes: selectedNodes,
473
+ totalWeight: Array.from(selectedNodes.values())
474
+ .reduce((sum, node) => sum + node.weight, 0),
475
+ optimizationTarget: optimizationTarget
476
+ };
477
+ }
478
+
479
+ async scoreThroughputCapability(node) {
480
+ let score = 0;
481
+
482
+ // CPU capacity score
483
+ const cpuCapacity = await this.getNodeCPUCapacity(node);
484
+ score += (cpuCapacity / 100) * 30; // 30% weight for CPU
485
+
486
+ // Network bandwidth score
487
+ const bandwidth = await this.getNodeBandwidth(node);
488
+ score += (bandwidth / 1000) * 25; // 25% weight for bandwidth (Mbps)
489
+
490
+ // Memory capacity score
491
+ const memory = await this.getNodeMemory(node);
492
+ score += (memory / 8192) * 20; // 20% weight for memory (MB)
493
+
494
+ // Historical throughput performance
495
+ const historicalPerformance = await this.getHistoricalThroughput(node);
496
+ score += (historicalPerformance / 1000) * 25; // 25% weight for historical performance
497
+
498
+ return Math.min(100, score); // Normalize to 0-100
499
+ }
500
+
501
+ async scoreLatencyPerformance(node) {
502
+ let score = 100; // Start with perfect score, subtract penalties
503
+
504
+ // Network latency penalty
505
+ const avgLatency = await this.getAverageNodeLatency(node);
506
+ score -= (avgLatency / 10); // Subtract 1 point per 10ms latency
507
+
508
+ // CPU load penalty
509
+ const cpuLoad = await this.getNodeCPULoad(node);
510
+ score -= (cpuLoad / 2); // Subtract 0.5 points per 1% CPU load
511
+
512
+ // Geographic distance penalty (for distributed networks)
513
+ const geoLatency = await this.getGeographicLatency(node);
514
+ score -= (geoLatency / 20); // Subtract 1 point per 20ms geo latency
515
+
516
+ // Consistency penalty (nodes with inconsistent performance)
517
+ const consistencyScore = await this.getPerformanceConsistency(node);
518
+ score *= consistencyScore; // Multiply by consistency factor (0-1)
519
+
520
+ return Math.max(0, score);
521
+ }
522
+ }
523
+ ```
524
+
525
+ ### Fault Tolerance Strategy
526
+ ```javascript
527
+ class FaultToleranceStrategy {
528
+ constructor() {
529
+ this.faultAnalyzer = new FaultAnalyzer();
530
+ this.reliabilityCalculator = new ReliabilityCalculator();
531
+ this.redundancyOptimizer = new RedundancyOptimizer();
532
+ }
533
+
534
+ async calculateQuorum(analysisInput) {
535
+ const { membershipStatus, faultToleranceRequirements, networkConditions } = analysisInput;
536
+
537
+ // Analyze fault scenarios
538
+ const faultScenarios = await this.analyzeFaultScenarios(
539
+ membershipStatus.activeNodes, networkConditions
540
+ );
541
+
542
+ // Calculate minimum quorum for fault tolerance requirements
543
+ const minQuorum = this.calculateFaultTolerantQuorum(
544
+ faultScenarios, faultToleranceRequirements
545
+ );
546
+
547
+ // Optimize node selection for maximum fault tolerance
548
+ const faultTolerantQuorum = await this.optimizeForFaultTolerance(
549
+ membershipStatus.activeNodes, minQuorum, faultScenarios
550
+ );
551
+
552
+ return {
553
+ quorum: faultTolerantQuorum,
554
+ strategy: 'FAULT_TOLERANCE_BASED',
555
+ confidence: this.calculateFaultConfidence(faultScenarios),
556
+ reasoning: this.generateFaultToleranceReasoning(
557
+ faultTolerantQuorum, faultScenarios, faultToleranceRequirements
558
+ ),
559
+ expectedImpact: {
560
+ availability: this.estimateAvailabilityImprovement(faultTolerantQuorum),
561
+ resilience: this.estimateResilienceImprovement(faultTolerantQuorum)
562
+ }
563
+ };
564
+ }
565
+
566
+ async analyzeFaultScenarios(activeNodes, networkConditions) {
567
+ const scenarios = [];
568
+
569
+ // Single node failure scenarios
570
+ for (const node of activeNodes) {
571
+ const scenario = await this.analyzeSingleNodeFailure(node, activeNodes, networkConditions);
572
+ scenarios.push(scenario);
573
+ }
574
+
575
+ // Multiple node failure scenarios
576
+ const multiFailureScenarios = await this.analyzeMultipleNodeFailures(
577
+ activeNodes, networkConditions
578
+ );
579
+ scenarios.push(...multiFailureScenarios);
580
+
581
+ // Network partition scenarios
582
+ const partitionScenarios = await this.analyzeNetworkPartitionScenarios(
583
+ activeNodes, networkConditions
584
+ );
585
+ scenarios.push(...partitionScenarios);
586
+
587
+ // Correlated failure scenarios
588
+ const correlatedFailureScenarios = await this.analyzeCorrelatedFailures(
589
+ activeNodes, networkConditions
590
+ );
591
+ scenarios.push(...correlatedFailureScenarios);
592
+
593
+ return this.prioritizeScenariosByLikelihood(scenarios);
594
+ }
595
+
596
+ calculateFaultTolerantQuorum(faultScenarios, requirements) {
597
+ let maxRequiredQuorum = 0;
598
+
599
+ for (const scenario of faultScenarios) {
600
+ if (scenario.likelihood >= requirements.minLikelihoodToConsider) {
601
+ const requiredQuorum = this.calculateQuorumForScenario(scenario, requirements);
602
+ maxRequiredQuorum = Math.max(maxRequiredQuorum, requiredQuorum);
603
+ }
604
+ }
605
+
606
+ return maxRequiredQuorum;
607
+ }
608
+
609
+ calculateQuorumForScenario(scenario, requirements) {
610
+ const totalNodes = scenario.totalNodes;
611
+ const failedNodes = scenario.failedNodes;
612
+ const availableNodes = totalNodes - failedNodes;
613
+
614
+ // For Byzantine fault tolerance
615
+ if (requirements.byzantineFaultTolerance) {
616
+ const maxByzantineNodes = Math.floor((totalNodes - 1) / 3);
617
+ return Math.floor(2 * totalNodes / 3) + 1;
618
+ }
619
+
620
+ // For crash fault tolerance
621
+ return Math.floor(availableNodes / 2) + 1;
622
+ }
623
+
624
+ async optimizeForFaultTolerance(activeNodes, minQuorum, faultScenarios) {
625
+ const optimizedQuorum = {
626
+ nodes: new Map(),
627
+ totalWeight: 0,
628
+ faultTolerance: {
629
+ singleNodeFailures: 0,
630
+ multipleNodeFailures: 0,
631
+ networkPartitions: 0
632
+ }
633
+ };
634
+
635
+ // Score nodes based on fault tolerance contribution
636
+ const nodeScores = await this.scoreFaultToleranceContribution(
637
+ activeNodes, faultScenarios
638
+ );
639
+
640
+ // Select nodes to maximize fault tolerance coverage
641
+ const selectedNodes = this.selectFaultTolerantNodes(
642
+ activeNodes, minQuorum, nodeScores, faultScenarios
643
+ );
644
+
645
+ for (const [nodeId, nodeData] of selectedNodes) {
646
+ optimizedQuorum.nodes.set(nodeId, {
647
+ weight: nodeData.weight,
648
+ score: nodeData.score,
649
+ role: nodeData.role,
650
+ faultToleranceContribution: nodeData.faultToleranceContribution
651
+ });
652
+ optimizedQuorum.totalWeight += nodeData.weight;
653
+ }
654
+
655
+ // Calculate fault tolerance metrics for selected quorum
656
+ optimizedQuorum.faultTolerance = await this.calculateFaultToleranceMetrics(
657
+ selectedNodes, faultScenarios
658
+ );
659
+
660
+ return optimizedQuorum;
661
+ }
662
+
663
+ async scoreFaultToleranceContribution(activeNodes, faultScenarios) {
664
+ const scores = new Map();
665
+
666
+ for (const node of activeNodes) {
667
+ let score = 0;
668
+
669
+ // Independence score (nodes in different failure domains get higher scores)
670
+ const independenceScore = await this.calculateIndependenceScore(node, activeNodes);
671
+ score += independenceScore * 40;
672
+
673
+ // Reliability score (historical uptime and performance)
674
+ const reliabilityScore = await this.calculateReliabilityScore(node);
675
+ score += reliabilityScore * 30;
676
+
677
+ // Geographic diversity score
678
+ const diversityScore = await this.calculateDiversityScore(node, activeNodes);
679
+ score += diversityScore * 20;
680
+
681
+ // Recovery capability score
682
+ const recoveryScore = await this.calculateRecoveryScore(node);
683
+ score += recoveryScore * 10;
684
+
685
+ scores.set(node.id, score);
686
+ }
687
+
688
+ return scores;
689
+ }
690
+
691
+ selectFaultTolerantNodes(activeNodes, minQuorum, nodeScores, faultScenarios) {
692
+ const selectedNodes = new Map();
693
+ const remainingNodes = [...activeNodes];
694
+
695
+ // Greedy selection to maximize fault tolerance coverage
696
+ while (selectedNodes.size < minQuorum && remainingNodes.length > 0) {
697
+ let bestNode = null;
698
+ let bestScore = -1;
699
+ let bestIndex = -1;
700
+
701
+ for (let i = 0; i < remainingNodes.length; i++) {
702
+ const node = remainingNodes[i];
703
+ const additionalCoverage = this.calculateAdditionalFaultCoverage(
704
+ node, selectedNodes, faultScenarios
705
+ );
706
+
707
+ const combinedScore = nodeScores.get(node.id) + (additionalCoverage * 50);
708
+
709
+ if (combinedScore > bestScore) {
710
+ bestScore = combinedScore;
711
+ bestNode = node;
712
+ bestIndex = i;
713
+ }
714
+ }
715
+
716
+ if (bestNode) {
717
+ selectedNodes.set(bestNode.id, {
718
+ weight: this.calculateFaultToleranceWeight(bestNode, nodeScores.get(bestNode.id)),
719
+ score: nodeScores.get(bestNode.id),
720
+ role: selectedNodes.size === 0 ? 'primary' : 'secondary',
721
+ faultToleranceContribution: this.calculateFaultToleranceContribution(bestNode)
722
+ });
723
+
724
+ remainingNodes.splice(bestIndex, 1);
725
+ } else {
726
+ break; // No more beneficial nodes
727
+ }
728
+ }
729
+
730
+ return selectedNodes;
731
+ }
732
+ }
733
+ ```
734
+
735
+ ## MCP Integration Hooks
736
+
737
+ ### Quorum State Management
738
+ ```javascript
739
+ // Store quorum configuration and history
740
+ await this.mcpTools.memory_usage({
741
+ action: 'store',
742
+ key: `quorum_config_${this.nodeId}`,
743
+ value: JSON.stringify({
744
+ currentQuorum: Array.from(this.currentQuorum.entries()),
745
+ strategy: this.activeStrategy,
746
+ networkConditions: this.lastNetworkAnalysis,
747
+ adjustmentHistory: this.quorumHistory.slice(-10)
748
+ }),
749
+ namespace: 'quorum_management',
750
+ ttl: 3600000 // 1 hour
751
+ });
752
+
753
+ // Coordinate with swarm for membership changes
754
+ const swarmStatus = await this.mcpTools.swarm_status({
755
+ swarmId: this.swarmId
756
+ });
757
+
758
+ await this.mcpTools.coordination_sync({
759
+ swarmId: this.swarmId
760
+ });
761
+ ```
762
+
763
+ ### Performance Monitoring Integration
764
+ ```javascript
765
+ // Track quorum adjustment performance
766
+ await this.mcpTools.metrics_collect({
767
+ components: [
768
+ 'quorum_adjustment_latency',
769
+ 'consensus_availability',
770
+ 'fault_tolerance_coverage',
771
+ 'network_partition_recovery_time'
772
+ ]
773
+ });
774
+
775
+ // Neural learning for quorum optimization
776
+ await this.mcpTools.neural_patterns({
777
+ action: 'learn',
778
+ operation: 'quorum_optimization',
779
+ outcome: JSON.stringify({
780
+ adjustmentType: adjustment.strategy,
781
+ performanceImpact: measurementResults,
782
+ networkConditions: currentNetworkState,
783
+ faultToleranceImprovement: faultToleranceMetrics
784
+ })
785
+ });
786
+ ```
787
+
788
+ ### Task Orchestration for Quorum Changes
789
+ ```javascript
790
+ // Orchestrate complex quorum adjustments
791
+ await this.mcpTools.task_orchestrate({
792
+ task: 'quorum_adjustment',
793
+ strategy: 'sequential',
794
+ priority: 'high',
795
+ dependencies: [
796
+ 'network_analysis',
797
+ 'membership_validation',
798
+ 'performance_assessment'
799
+ ]
800
+ });
801
+ ```
802
+
803
803
  This Quorum Manager provides intelligent, adaptive quorum management that optimizes for network conditions, performance requirements, and fault tolerance needs while maintaining the safety and liveness properties of distributed consensus protocols.