claude-flow 3.42.3 → 3.42.4

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 (463) 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/.LOCKED +2 -2
  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/hook-handler.cjs +606 -606
  296. package/.claude/helpers/intelligence.cjs +1169 -1169
  297. package/.claude/helpers/learning-hooks.sh +329 -329
  298. package/.claude/helpers/learning-optimizer.sh +127 -127
  299. package/.claude/helpers/learning-service.mjs +1144 -1144
  300. package/.claude/helpers/memory.cjs +84 -84
  301. package/.claude/helpers/metrics-db.mjs +503 -503
  302. package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
  303. package/.claude/helpers/pattern-consolidator.sh +86 -86
  304. package/.claude/helpers/perf-worker.sh +160 -160
  305. package/.claude/helpers/quick-start.sh +19 -19
  306. package/.claude/helpers/router.cjs +62 -62
  307. package/.claude/helpers/security-scanner.sh +127 -127
  308. package/.claude/helpers/session.cjs +125 -125
  309. package/.claude/helpers/setup-mcp.sh +18 -18
  310. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  311. package/.claude/helpers/statusline.cjs +0 -0
  312. package/.claude/helpers/swarm-comms.sh +353 -353
  313. package/.claude/helpers/swarm-hooks.sh +761 -761
  314. package/.claude/helpers/swarm-monitor.sh +210 -210
  315. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  316. package/.claude/helpers/update-v3-progress.sh +165 -165
  317. package/.claude/helpers/v3-quick-status.sh +57 -57
  318. package/.claude/helpers/v3.sh +110 -110
  319. package/.claude/helpers/validate-v3-config.sh +215 -215
  320. package/.claude/helpers/worker-manager.sh +170 -170
  321. package/.claude/mcp.json +12 -12
  322. package/.claude/settings.json +284 -284
  323. package/.claude/settings.json.bak +526 -526
  324. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  325. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  326. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  327. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  328. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  329. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
  330. package/.claude/skills/browser/SKILL.md +204 -204
  331. package/.claude/skills/dual-mode/README.md +71 -71
  332. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  333. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  334. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  335. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  336. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  337. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  338. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  339. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  340. package/.claude/skills/github-project-management/SKILL.md +1262 -1262
  341. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  342. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  343. package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
  344. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  345. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  346. package/.claude/skills/performance-analysis/SKILL.md +560 -560
  347. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  348. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  349. package/.claude/skills/skill-builder/SKILL.md +910 -910
  350. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  351. package/.claude/skills/stream-chain/SKILL.md +560 -560
  352. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  353. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  354. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  355. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  356. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  357. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  358. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  359. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  360. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  361. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  362. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  363. package/.claude/skills/verification-quality/SKILL.md +691 -691
  364. package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
  365. package/.claude/skills/worker-integration/SKILL.md +147 -147
  366. package/.claude/statusline-command.sh +176 -176
  367. package/.claude/statusline.mjs +109 -109
  368. package/.claude/statusline.sh +431 -431
  369. package/.claude/workflows/full-system-test.js +65 -65
  370. package/.claude/workflows/intelligence-system-hardening.js +120 -120
  371. package/.claude/workflows/plugin-contract-audit.js +91 -91
  372. package/.claude-plugin/README.md +720 -720
  373. package/.claude-plugin/docs/INSTALLATION.md +261 -261
  374. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
  375. package/.claude-plugin/docs/QUICKSTART.md +361 -361
  376. package/.claude-plugin/docs/STRUCTURE.md +128 -128
  377. package/.claude-plugin/hooks/hooks.json +77 -77
  378. package/.claude-plugin/marketplace.json +204 -204
  379. package/.claude-plugin/plugin.json +71 -71
  380. package/.claude-plugin/scripts/install.sh +234 -234
  381. package/.claude-plugin/scripts/ruflo-hook.cjs +304 -304
  382. package/.claude-plugin/scripts/ruflo-hook.sh +52 -52
  383. package/.claude-plugin/scripts/uninstall.sh +36 -36
  384. package/.claude-plugin/scripts/verify.sh +108 -108
  385. package/LICENSE +21 -21
  386. package/README.md +422 -422
  387. package/bin/cli.js +11 -11
  388. package/bin/npx-repair.js +7 -7
  389. package/bin/npx-safe-launch.js +9 -9
  390. package/node_modules/@claude-flow/codex/.agents/skills/github-automation/SKILL.md +32 -32
  391. package/node_modules/@claude-flow/codex/.agents/skills/memory-management/SKILL.md +45 -45
  392. package/node_modules/@claude-flow/codex/.agents/skills/performance-analysis/SKILL.md +32 -32
  393. package/node_modules/@claude-flow/codex/.agents/skills/security-audit/SKILL.md +46 -46
  394. package/node_modules/@claude-flow/codex/.agents/skills/sparc-methodology/SKILL.md +46 -46
  395. package/node_modules/@claude-flow/codex/.agents/skills/swarm-orchestration/SKILL.md +53 -53
  396. package/node_modules/@claude-flow/codex/README.md +1044 -1044
  397. package/node_modules/@claude-flow/codex/dist/dual-mode/orchestrator.js +13 -13
  398. package/node_modules/@claude-flow/codex/dist/generators/agents-md.js +664 -664
  399. package/node_modules/@claude-flow/codex/dist/generators/config-toml.js +455 -455
  400. package/node_modules/@claude-flow/codex/dist/generators/skill-md.js +45 -45
  401. package/node_modules/@claude-flow/codex/dist/initializer.js +167 -167
  402. package/node_modules/@claude-flow/codex/dist/templates/index.js +15 -15
  403. package/node_modules/@claude-flow/mcp/README.md +429 -429
  404. package/node_modules/@claude-flow/plugin-agent-federation/README.md +49 -49
  405. package/node_modules/@claude-flow/security/README.md +292 -292
  406. package/node_modules/@claude-flow/security/dist/credential-generator.js +9 -9
  407. package/node_modules/@claude-flow/security/dist/input-validator.d.ts +6 -6
  408. package/node_modules/@claude-flow/security/dist/oauth/callback-server.js +9 -9
  409. package/package.json +222 -222
  410. package/v3/@claude-flow/cli/README.md +422 -422
  411. package/v3/@claude-flow/cli/bin/cli.js +338 -338
  412. package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
  413. package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
  414. package/v3/@claude-flow/cli/catalog-manifest.json +2 -2
  415. package/v3/@claude-flow/cli/dist/src/benchmarks/gaia-critic.js +24 -24
  416. package/v3/@claude-flow/cli/dist/src/business-pods/bbs-budget-tracker.js +53 -53
  417. package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
  418. package/v3/@claude-flow/cli/dist/src/commands/daemon.js +44 -44
  419. package/v3/@claude-flow/cli/dist/src/commands/doctor.js +4 -4
  420. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
  421. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
  422. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
  423. package/v3/@claude-flow/cli/dist/src/commands/init.js +75 -75
  424. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
  425. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
  426. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
  427. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
  428. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
  429. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
  430. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
  431. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
  432. package/v3/@claude-flow/cli/dist/src/config/proven-config.js +2 -2
  433. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +273 -273
  434. package/v3/@claude-flow/cli/dist/src/init/executor.js +453 -453
  435. package/v3/@claude-flow/cli/dist/src/init/helper-signing.js +2 -2
  436. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +917 -917
  437. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +24 -24
  438. package/v3/@claude-flow/cli/dist/src/mcp-tools/agentdb-tools.js +15 -15
  439. package/v3/@claude-flow/cli/dist/src/mcp-tools/browser-intent-tools.js +19 -19
  440. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +6 -4
  441. package/v3/@claude-flow/cli/dist/src/mcp-tools/seraphina-tools.js +4 -4
  442. package/v3/@claude-flow/cli/dist/src/memory/graph-edge-writer.js +22 -22
  443. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +114 -114
  444. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +416 -416
  445. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
  446. package/v3/@claude-flow/cli/dist/src/proxy/verify.js +2 -2
  447. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  448. package/v3/@claude-flow/cli/dist/src/services/distill-tuning.js +7 -7
  449. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  450. package/v3/@claude-flow/cli/dist/src/services/memory-distillation.js +18 -18
  451. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
  452. package/v3/@claude-flow/cli/package.json +181 -181
  453. package/v3/@claude-flow/guidance/README.md +1195 -1195
  454. package/v3/@claude-flow/guidance/package.json +198 -198
  455. package/v3/@claude-flow/shared/README.md +323 -323
  456. package/v3/@claude-flow/shared/dist/events/event-store.js +31 -31
  457. package/v3/@claude-flow/shared/dist/hooks/safety/git-commit.js +3 -3
  458. package/v3/@claude-flow/shared/package.json +43 -43
  459. package/v3/README.md +493 -493
  460. package/.claude/.proven-config-version +0 -1
  461. package/.claude/proven-config.json +0 -42
  462. package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.d.ts +0 -78
  463. package/v3/@claude-flow/cli/dist/src/ruvector/diskann-backend.js +0 -310
@@ -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.