claude-flow 3.7.0-alpha.11 → 3.7.0-alpha.13

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 (430) 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 +201 -201
  27. package/.claude/agents/dual-mode/codex-worker.md +183 -183
  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 +335 -335
  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 +547 -547
  48. package/.claude/agents/github/swarm-pr.md +398 -398
  49. package/.claude/agents/github/sync-coordinator.md +422 -422
  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/README.md +96 -96
  281. package/.claude/helpers/adr-compliance.sh +186 -186
  282. package/.claude/helpers/aggressive-microcompact.mjs +36 -36
  283. package/.claude/helpers/auto-commit.sh +178 -178
  284. package/.claude/helpers/auto-memory-hook.mjs +564 -564
  285. package/.claude/helpers/checkpoint-manager.sh +251 -251
  286. package/.claude/helpers/context-persistence-hook.mjs +1979 -1979
  287. package/.claude/helpers/daemon-manager.sh +252 -252
  288. package/.claude/helpers/ddd-tracker.sh +144 -144
  289. package/.claude/helpers/github-safe.js +106 -106
  290. package/.claude/helpers/github-setup.sh +28 -28
  291. package/.claude/helpers/guidance-hook.sh +13 -13
  292. package/.claude/helpers/guidance-hooks.sh +102 -102
  293. package/.claude/helpers/health-monitor.sh +108 -108
  294. package/.claude/helpers/hook-handler.cjs +263 -263
  295. package/.claude/helpers/intelligence.cjs +230 -230
  296. package/.claude/helpers/learning-hooks.sh +329 -329
  297. package/.claude/helpers/learning-optimizer.sh +127 -127
  298. package/.claude/helpers/learning-service.mjs +1144 -1144
  299. package/.claude/helpers/memory.cjs +84 -84
  300. package/.claude/helpers/metrics-db.mjs +488 -488
  301. package/.claude/helpers/patch-aggressive-prune.mjs +184 -184
  302. package/.claude/helpers/pattern-consolidator.sh +86 -86
  303. package/.claude/helpers/perf-worker.sh +160 -160
  304. package/.claude/helpers/quick-start.sh +19 -19
  305. package/.claude/helpers/router.cjs +62 -62
  306. package/.claude/helpers/security-scanner.sh +127 -127
  307. package/.claude/helpers/session.cjs +125 -125
  308. package/.claude/helpers/setup-mcp.sh +18 -18
  309. package/.claude/helpers/standard-checkpoint-hooks.sh +189 -189
  310. package/.claude/helpers/statusline.cjs +819 -819
  311. package/.claude/helpers/swarm-comms.sh +353 -353
  312. package/.claude/helpers/swarm-hooks.sh +761 -761
  313. package/.claude/helpers/swarm-monitor.sh +210 -210
  314. package/.claude/helpers/sync-v3-metrics.sh +245 -245
  315. package/.claude/helpers/update-v3-progress.sh +165 -165
  316. package/.claude/helpers/v3-quick-status.sh +57 -57
  317. package/.claude/helpers/v3.sh +110 -110
  318. package/.claude/helpers/validate-v3-config.sh +215 -215
  319. package/.claude/helpers/worker-manager.sh +170 -170
  320. package/.claude/mcp.json +12 -12
  321. package/.claude/scheduled_tasks.lock +1 -1
  322. package/.claude/settings.json +285 -283
  323. package/.claude/settings.json.bak +526 -526
  324. package/.claude/settings.local.json +1 -0
  325. package/.claude/skills/agentdb-advanced/SKILL.md +550 -550
  326. package/.claude/skills/agentdb-learning/SKILL.md +545 -545
  327. package/.claude/skills/agentdb-memory-patterns/SKILL.md +339 -339
  328. package/.claude/skills/agentdb-optimization/SKILL.md +509 -509
  329. package/.claude/skills/agentdb-vector-search/SKILL.md +339 -339
  330. package/.claude/skills/agentic-jujutsu/SKILL.md +645 -645
  331. package/.claude/skills/browser/SKILL.md +204 -0
  332. package/.claude/skills/dual-mode/README.md +71 -71
  333. package/.claude/skills/dual-mode/dual-collect.md +103 -103
  334. package/.claude/skills/dual-mode/dual-coordinate.md +85 -85
  335. package/.claude/skills/dual-mode/dual-spawn.md +81 -81
  336. package/.claude/skills/flow-nexus-neural/SKILL.md +727 -727
  337. package/.claude/skills/flow-nexus-platform/SKILL.md +1154 -1154
  338. package/.claude/skills/flow-nexus-swarm/SKILL.md +604 -604
  339. package/.claude/skills/github-code-review/SKILL.md +1125 -1125
  340. package/.claude/skills/github-multi-repo/SKILL.md +862 -862
  341. package/.claude/skills/github-project-management/SKILL.md +1263 -1263
  342. package/.claude/skills/github-release-management/SKILL.md +1064 -1064
  343. package/.claude/skills/github-workflow-automation/SKILL.md +1047 -1047
  344. package/.claude/skills/hive-mind-advanced/SKILL.md +709 -709
  345. package/.claude/skills/hooks-automation/SKILL.md +1201 -1201
  346. package/.claude/skills/pair-programming/SKILL.md +1202 -1202
  347. package/.claude/skills/performance-analysis/SKILL.md +560 -560
  348. package/.claude/skills/reasoningbank-agentdb/SKILL.md +446 -446
  349. package/.claude/skills/reasoningbank-intelligence/SKILL.md +201 -201
  350. package/.claude/skills/skill-builder/SKILL.md +910 -910
  351. package/.claude/skills/sparc-methodology/SKILL.md +1106 -1106
  352. package/.claude/skills/stream-chain/SKILL.md +560 -560
  353. package/.claude/skills/swarm-advanced/SKILL.md +970 -970
  354. package/.claude/skills/swarm-orchestration/SKILL.md +179 -179
  355. package/.claude/skills/v3-cli-modernization/SKILL.md +871 -871
  356. package/.claude/skills/v3-core-implementation/SKILL.md +796 -796
  357. package/.claude/skills/v3-ddd-architecture/SKILL.md +441 -441
  358. package/.claude/skills/v3-integration-deep/SKILL.md +240 -240
  359. package/.claude/skills/v3-mcp-optimization/SKILL.md +776 -776
  360. package/.claude/skills/v3-memory-unification/SKILL.md +173 -173
  361. package/.claude/skills/v3-performance-optimization/SKILL.md +389 -389
  362. package/.claude/skills/v3-security-overhaul/SKILL.md +81 -81
  363. package/.claude/skills/v3-swarm-coordination/SKILL.md +339 -339
  364. package/.claude/skills/verification-quality/SKILL.md +647 -647
  365. package/.claude/skills/worker-benchmarks/SKILL.md +129 -129
  366. package/.claude/skills/worker-integration/SKILL.md +147 -147
  367. package/.claude/statusline-command.sh +176 -176
  368. package/.claude/statusline.mjs +109 -109
  369. package/.claude/statusline.sh +431 -431
  370. package/.claude-plugin/README.md +720 -720
  371. package/.claude-plugin/docs/INSTALLATION.md +261 -261
  372. package/.claude-plugin/docs/PLUGIN_SUMMARY.md +361 -361
  373. package/.claude-plugin/docs/QUICKSTART.md +361 -361
  374. package/.claude-plugin/docs/STRUCTURE.md +128 -128
  375. package/.claude-plugin/hooks/hooks.json +74 -74
  376. package/.claude-plugin/marketplace.json +170 -170
  377. package/.claude-plugin/plugin.json +71 -71
  378. package/.claude-plugin/scripts/install.sh +234 -234
  379. package/.claude-plugin/scripts/uninstall.sh +36 -36
  380. package/.claude-plugin/scripts/verify.sh +108 -108
  381. package/LICENSE +21 -21
  382. package/README.md +393 -393
  383. package/bin/cli.js +11 -11
  384. package/bin/npx-repair.js +7 -7
  385. package/bin/npx-safe-launch.js +9 -9
  386. package/package.json +1 -1
  387. package/v3/@claude-flow/cli/README.md +393 -393
  388. package/v3/@claude-flow/cli/bin/cli.js +220 -220
  389. package/v3/@claude-flow/cli/bin/mcp-server.js +224 -224
  390. package/v3/@claude-flow/cli/bin/preinstall.cjs +2 -2
  391. package/v3/@claude-flow/cli/dist/src/commands/completions.js +409 -409
  392. package/v3/@claude-flow/cli/dist/src/commands/doctor.js +57 -17
  393. package/v3/@claude-flow/cli/dist/src/commands/embeddings.js +26 -26
  394. package/v3/@claude-flow/cli/dist/src/commands/hive-mind.js +97 -97
  395. package/v3/@claude-flow/cli/dist/src/commands/hooks.js +9 -9
  396. package/v3/@claude-flow/cli/dist/src/commands/memory.js +22 -3
  397. package/v3/@claude-flow/cli/dist/src/commands/ruvector/backup.js +23 -23
  398. package/v3/@claude-flow/cli/dist/src/commands/ruvector/benchmark.js +31 -31
  399. package/v3/@claude-flow/cli/dist/src/commands/ruvector/import.js +14 -14
  400. package/v3/@claude-flow/cli/dist/src/commands/ruvector/init.js +115 -115
  401. package/v3/@claude-flow/cli/dist/src/commands/ruvector/migrate.js +99 -99
  402. package/v3/@claude-flow/cli/dist/src/commands/ruvector/optimize.js +51 -51
  403. package/v3/@claude-flow/cli/dist/src/commands/ruvector/setup.js +624 -624
  404. package/v3/@claude-flow/cli/dist/src/commands/ruvector/status.js +38 -38
  405. package/v3/@claude-flow/cli/dist/src/config-adapter.js +1 -1
  406. package/v3/@claude-flow/cli/dist/src/index.js +14 -12
  407. package/v3/@claude-flow/cli/dist/src/init/claudemd-generator.js +226 -226
  408. package/v3/@claude-flow/cli/dist/src/init/executor.js +490 -456
  409. package/v3/@claude-flow/cli/dist/src/init/helpers-generator.js +645 -645
  410. package/v3/@claude-flow/cli/dist/src/init/mcp-generator.js +4 -4
  411. package/v3/@claude-flow/cli/dist/src/init/statusline-generator.js +858 -858
  412. package/v3/@claude-flow/cli/dist/src/mcp-tools/hooks-tools.js +44 -5
  413. package/v3/@claude-flow/cli/dist/src/mcp-tools/memory-tools.js +71 -46
  414. package/v3/@claude-flow/cli/dist/src/mcp-tools/system-tools.js +36 -11
  415. package/v3/@claude-flow/cli/dist/src/memory/memory-bridge.js +84 -84
  416. package/v3/@claude-flow/cli/dist/src/memory/memory-initializer.js +360 -360
  417. package/v3/@claude-flow/cli/dist/src/memory/rabitq-index.js +5 -5
  418. package/v3/@claude-flow/cli/dist/src/memory/sona-optimizer.js +0 -1
  419. package/v3/@claude-flow/cli/dist/src/runtime/headless.js +28 -28
  420. package/v3/@claude-flow/cli/dist/src/services/headless-worker-executor.js +84 -84
  421. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.d.ts +25 -2
  422. package/v3/@claude-flow/cli/dist/src/services/worker-daemon.js +186 -10
  423. package/v3/@claude-flow/cli/dist/src/transfer/deploy-seraphine.js +23 -23
  424. package/v3/@claude-flow/cli/package.json +3 -2
  425. package/v3/@claude-flow/guidance/README.md +1195 -1195
  426. package/v3/@claude-flow/guidance/dist/analyzer.js +9 -0
  427. package/v3/@claude-flow/guidance/package.json +198 -198
  428. package/v3/@claude-flow/shared/README.md +323 -323
  429. package/v3/@claude-flow/shared/package.json +43 -43
  430. 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.