claude-flow-novice 2.5.2 → 2.8.1

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 (370) hide show
  1. package/.claude/adaptive-context/cfn-v3-reflection.json +21 -0
  2. package/.claude/agents/AGENT_LIFECYCLE.md +495 -0
  3. package/.claude/agents/CLAUDE.md +1002 -1233
  4. package/.claude/agents/accessibility-advocate.md +457 -0
  5. package/.claude/agents/agent-principles/README.md +226 -226
  6. package/.claude/agents/agent-principles/agent-type-guidelines.md +10 -0
  7. package/.claude/agents/agent-principles/format-selection.md +10 -0
  8. package/.claude/agents/agent-principles/phase4-template-optimization.md +502 -494
  9. package/.claude/agents/agent-principles/prompt-engineering.md +8 -0
  10. package/.claude/agents/agent-principles/quality-metrics.md +8 -0
  11. package/.claude/agents/analysis/code-analyzer.md +7 -17
  12. package/.claude/agents/analysis/code-review/analyze-code-quality.md +2 -104
  13. package/.claude/agents/analysis/perf-analyzer.md +2 -196
  14. package/.claude/agents/context/context-curator.md +78 -84
  15. package/.claude/agents/context/context-reflector.md +27 -81
  16. package/.claude/agents/coordinators/README.md +42 -0
  17. package/.claude/agents/coordinators/cfn-v3-coordinator.md +440 -0
  18. package/.claude/agents/{product-owner-team → coordinators}/cto-agent.md +154 -187
  19. package/.claude/agents/coordinators/multi-sprint-coordinator.md +50 -0
  20. package/.claude/agents/{product-owner-team → coordinators}/product-owner-agent.md +6 -39
  21. package/.claude/agents/{cfn-loop → coordinators}/product-owner.md +72 -17
  22. package/.claude/agents/core-agents/reviewer.md +114 -135
  23. package/.claude/agents/custom/agent-builder.md +637 -0
  24. package/.claude/agents/developers/README.md +69 -0
  25. package/.claude/agents/developers/backend-dev.md +77 -0
  26. package/.claude/agents/{core-agents → developers}/coder.md +131 -26
  27. package/.claude/agents/developers/react-frontend-engineer.md +121 -0
  28. package/.claude/agents/{frontend → developers}/state-architect.md +1 -0
  29. package/.claude/agents/{frontend → developers}/ui-designer.md +1 -0
  30. package/.claude/agents/development/backend/dev-backend-api.md +0 -29
  31. package/.claude/agents/development/npm-package-specialist.md +355 -347
  32. package/.claude/agents/documentation/api-docs/docs-api-openapi.md +8 -0
  33. package/.claude/agents/documentation/api-docs.md +8 -0
  34. package/.claude/agents/github/github-commit-agent.md +125 -117
  35. package/.claude/agents/goal/goal-planner.md +8 -0
  36. package/.claude/agents/infrastructure/README.md +100 -0
  37. package/.claude/agents/{specialized → infrastructure}/devops-engineer.md +131 -150
  38. package/.claude/agents/planners/README.md +94 -0
  39. package/.claude/agents/{core-agents → planners}/analyst.md +1 -22
  40. package/.claude/agents/{planning-team → planners}/api-designer-persona.md +8 -0
  41. package/.claude/agents/{core-agents → planners}/architect.md +7 -20
  42. package/.claude/agents/{core-agents → planners}/planner.md +0 -21
  43. package/.claude/agents/{planning-team → planners}/security-architect-persona.md +8 -28
  44. package/.claude/agents/{planning-team → planners}/system-architect-persona.md +6 -38
  45. package/.claude/agents/{architecture → planners}/system-architect.md +12 -17
  46. package/.claude/agents/product-owner-team/accessibility-advocate-persona.md +132 -161
  47. package/.claude/agents/product-owner-team/power-user-persona.md +149 -182
  48. package/.claude/agents/retrospective-analyst.md +84 -0
  49. package/.claude/agents/reviewers/README.md +58 -0
  50. package/.claude/agents/{analysis → reviewers}/code-quality-validator.md +8 -17
  51. package/.claude/agents/reviewers/reviewer.md +181 -0
  52. package/.claude/agents/sparc/architecture.md +6 -25
  53. package/.claude/agents/sparc/pseudocode.md +6 -0
  54. package/.claude/agents/sparc/refinement.md +6 -0
  55. package/.claude/agents/sparc/specification.md +1 -0
  56. package/.claude/agents/specialists/README.md +60 -0
  57. package/.claude/agents/{core-agents → specialists}/base-template-generator.md +8 -21
  58. package/.claude/agents/{specialized → specialists}/cli-agent-optimizer.md +1 -1
  59. package/.claude/agents/{specialized → specialists}/code-booster.md +1 -0
  60. package/.claude/agents/{consensus → specialists}/consensus-builder.md +1 -17
  61. package/.claude/agents/{specialized/mobile → specialists}/mobile-dev.md +0 -20
  62. package/.claude/agents/{core-agents → specialists}/performance-benchmarker.md +134 -148
  63. package/.claude/agents/{specialized → specialists}/rust-developer.md +1 -20
  64. package/.claude/agents/{specialized → specialists}/rust-enterprise-developer.md +1 -20
  65. package/.claude/agents/{specialized → specialists}/rust-mvp-developer.md +1 -20
  66. package/.claude/agents/{core-agents → specialists}/security-manager.md +68 -88
  67. package/.claude/agents/{security → specialists}/security-specialist-existing.md +6 -57
  68. package/.claude/agents/{security → specialists}/security-specialist.md +6 -30
  69. package/.claude/agents/{specialized/mobile → specialists}/spec-mobile-react-native.md +2 -21
  70. package/.claude/agents/testers/README.md +94 -0
  71. package/.claude/agents/{testing → testers}/e2e/playwright-agent.md +1 -20
  72. package/.claude/agents/{testing → testers}/interaction-tester.md +1 -20
  73. package/.claude/agents/{testing → testers}/playwright-tester.md +1 -1
  74. package/.claude/agents/testers/tester.md +139 -0
  75. package/.claude/agents/testers/unit/tdd-london-swarm.md +49 -0
  76. package/.claude/agents/testers/validation/production-validator.md +33 -0
  77. package/.claude/agents-ignore/cfn-loop-coordinator.md +157 -0
  78. package/.claude/agents-ignore/cfn-loop-coordinator.md.backup +156 -0
  79. package/.claude/agents-ignore/coordinator.md.backup +182 -0
  80. package/.claude/agents-ignore/cost-savings-cfn-loop-coordinator.md +760 -0
  81. package/.claude/agents-ignore/cost-savings-coordinator.md +173 -0
  82. package/.claude/artifacts/ace-reflections/REFLECT-001-summary.json +39 -0
  83. package/.claude/artifacts/ace-reflections/sprint-7_$(date -u +/"%Y%m%d_%H%M%S/").json" +47 -0
  84. package/.claude/artifacts/reflection-merge-logs/cli-agent-spawning-v2.5.2-merge-report.md +61 -0
  85. package/.claude/commands/CFN_COORDINATOR_PARAMETERS.md +10 -10
  86. package/.claude/commands/cfn-loop-epic.md +43 -19
  87. package/.claude/commands/cfn-loop-single.md +3 -3
  88. package/.claude/commands/cfn-loop-sprints.md +1 -1
  89. package/.claude/commands/cfn-loop.md +45 -32
  90. package/.claude/commands/cfn-mode.md +20 -0
  91. package/.claude/commands/custom-routing-activate.md +37 -123
  92. package/.claude/commands/custom-routing-deactivate.md +27 -124
  93. package/.claude/commands/switch-api.md +41 -16
  94. package/.claude/commands/write-plan.md +104 -0
  95. package/.claude/data/cfn-loop.db +0 -0
  96. package/.claude/data/cfn_loop_logs.db +0 -0
  97. package/.claude/hooks/BACKUP_USAGE.md +243 -0
  98. package/.claude/hooks/post-edit-cfn-retrospective.sh +79 -0
  99. package/.claude/hooks/post-edit.sh +21 -0
  100. package/.claude/hooks/pre-edit-backup.sh +71 -0
  101. package/.claude/hooks/restore-from-backup.sh +37 -0
  102. package/.claude/prompts/cfn-loop-context.md +115 -0
  103. package/.claude/prompts/loop-specific/loop2.md +50 -0
  104. package/.claude/prompts/loop-specific/loop3.md +43 -0
  105. package/.claude/prompts/loop-specific/loop4.md +54 -0
  106. package/.claude/root-claude-distribute/CLAUDE.md +76 -2
  107. package/.claude/skills/ace-system/sprint-7-lessons.json +46 -0
  108. package/.claude/skills/ace-system/store-reflection.sh +33 -136
  109. package/.claude/skills/agent-discovery/SKILL.md +40 -0
  110. package/.claude/skills/agent-discovery/agents-registry-clean.json +0 -0
  111. package/.claude/skills/agent-discovery/agents-registry-fixed.json +19 -0
  112. package/.claude/skills/agent-discovery/agents-registry.json +718 -0
  113. package/.claude/skills/agent-discovery/discover-agents.py +175 -0
  114. package/.claude/skills/agent-discovery/discover-agents.sh +87 -0
  115. package/.claude/skills/agent-discovery/invoke-registry.sh +11 -0
  116. package/.claude/skills/agent-discovery/temp_script.py +0 -0
  117. package/.claude/skills/agent-execution/execute-agent.sh +126 -0
  118. package/.claude/skills/agent-output-processing/SKILL.md +359 -0
  119. package/.claude/skills/agent-selector/SKILL.md +90 -0
  120. package/.claude/skills/agent-selector/select-agents.sh +96 -0
  121. package/.claude/skills/agent-spawning/agent-selection-guide.md +1 -1
  122. package/.claude/skills/agent-swap/SKILL.md +36 -0
  123. package/.claude/skills/agent-swap/recommend-swap.sh +60 -0
  124. package/.claude/skills/api-validation/test-endpoints.sh +54 -0
  125. package/.claude/skills/automatic-memory-persistence/SKILL.md +73 -0
  126. package/.claude/skills/automatic-memory-persistence/persist-agent-output.sh +49 -0
  127. package/.claude/skills/automatic-memory-persistence/query-agent-history.sh +35 -0
  128. package/.claude/skills/automatic-memory-persistence/test-memory-persistence.sh +235 -0
  129. package/.claude/skills/cfn-loop-orchestration/README.md +41 -0
  130. package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
  131. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
  132. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
  133. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
  134. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
  135. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
  136. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
  137. package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
  138. package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
  139. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +840 -0
  140. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
  141. package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
  142. package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
  143. package/.claude/skills/cfn-loop-validation/SKILL.md +307 -217
  144. package/.claude/skills/complexity-estimator/SKILL.md +96 -0
  145. package/.claude/skills/complexity-estimator/estimate-complexity.sh +144 -0
  146. package/.claude/skills/context-pruner/SKILL.md +75 -0
  147. package/.claude/skills/context-pruner/prune-context.sh +73 -0
  148. package/.claude/skills/defense-in-depth/SKILL.md +133 -0
  149. package/.claude/skills/dependency-extractor/SKILL.md +35 -0
  150. package/.claude/skills/dependency-extractor/extract-dependencies.sh +66 -0
  151. package/.claude/skills/epic-decomposer/SKILL.md +44 -0
  152. package/.claude/skills/epic-decomposer/decompose-epic.sh +104 -0
  153. package/.claude/skills/improvement-recommender/SKILL.md +33 -0
  154. package/.claude/skills/improvement-recommender/recommend-improvements.sh +92 -0
  155. package/.claude/skills/intervention-detector/SKILL.md +39 -0
  156. package/.claude/skills/intervention-detector/detect-intervention.sh +111 -0
  157. package/.claude/skills/intervention-orchestrator/SKILL.md +43 -0
  158. package/.claude/skills/intervention-orchestrator/execute-intervention.sh +59 -0
  159. package/.claude/skills/loop2-output-processing/SKILL.md +163 -0
  160. package/.claude/skills/loop2-output-processing/execute-and-extract.sh +77 -0
  161. package/.claude/skills/loop2-output-processing/execute-and-extract.sh.backup +36 -0
  162. package/.claude/skills/loop2-output-processing/parse-feedback.sh +147 -0
  163. package/.claude/skills/loop2-output-processing/process-validator-output.sh +275 -0
  164. package/.claude/skills/loop2-output-processing/test-bug27-fix.sh +200 -0
  165. package/.claude/skills/loop2-output-processing/test-loop2-processing.sh +113 -0
  166. package/.claude/skills/loop3-output-processing/AGENT_COMPLETION_PROTOCOL.md +206 -0
  167. package/.claude/skills/loop3-output-processing/SKILL.md +421 -0
  168. package/.claude/skills/loop3-output-processing/calculate-confidence.sh +28 -0
  169. package/.claude/skills/loop3-output-processing/execute-and-extract.sh +85 -0
  170. package/.claude/skills/loop3-output-processing/parse-confidence.sh +31 -0
  171. package/.claude/skills/loop3-output-processing/test-agent-timeout.sh +327 -0
  172. package/.claude/skills/loop3-output-processing/test-loop3-processing.sh +155 -0
  173. package/.claude/skills/loop3-output-processing/verify-deliverables.sh +42 -0
  174. package/.claude/skills/pattern-extraction/SKILL.md +30 -0
  175. package/.claude/skills/pattern-extraction/extract-patterns.sh +80 -0
  176. package/.claude/skills/playbook/SKILL.md +113 -0
  177. package/.claude/skills/playbook/init-playbook.sh +54 -0
  178. package/.claude/skills/playbook/playbook.db +0 -0
  179. package/.claude/skills/playbook/query-playbook.sh +79 -0
  180. package/.claude/skills/playbook/update-playbook.sh +69 -0
  181. package/.claude/skills/playbook-auto-update/SKILL.md +29 -0
  182. package/.claude/skills/playbook-auto-update/auto-update-playbook.sh +86 -0
  183. package/.claude/skills/product-owner-decision/SKILL.md +332 -0
  184. package/.claude/skills/product-owner-decision/execute-decision.sh +176 -0
  185. package/.claude/skills/product-owner-decision/parse-decision.sh +66 -0
  186. package/.claude/skills/product-owner-decision/validate-deliverables.sh +82 -0
  187. package/.claude/skills/redis-coordination/AGENT_LOGGING.md +280 -0
  188. package/.claude/skills/redis-coordination/LOGGING.md +260 -0
  189. package/.claude/skills/redis-coordination/README.md +30 -29
  190. package/.claude/skills/redis-coordination/SKILL.md +685 -83
  191. package/.claude/skills/redis-coordination/agent-log.sh +124 -0
  192. package/.claude/skills/redis-coordination/analyze-task-complexity.sh +277 -0
  193. package/.claude/skills/redis-coordination/cfn-loop-exec.sh +468 -0
  194. package/.claude/skills/redis-coordination/collect-confidence-scores.sh +179 -0
  195. package/.claude/skills/redis-coordination/collect-results.sh +75 -0
  196. package/.claude/skills/redis-coordination/data/cfn-loop.db +0 -0
  197. package/.claude/skills/redis-coordination/demos/test-iteration-feedback.sh +320 -0
  198. package/.claude/skills/redis-coordination/{test-orchestrator.sh → demos/test-orchestrator.sh} +25 -0
  199. package/.claude/skills/redis-coordination/execute-product-owner-decision.sh +258 -0
  200. package/.claude/skills/redis-coordination/get-agent-timeout.sh +176 -176
  201. package/.claude/skills/redis-coordination/init-swarm.sh +6 -1
  202. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh +106 -183
  203. package/.claude/skills/redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
  204. package/.claude/skills/redis-coordination/log-event.sh +109 -0
  205. package/.claude/skills/redis-coordination/monitor-cfn-violations.sh +391 -0
  206. package/.claude/skills/redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
  207. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh +31 -933
  208. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
  209. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
  210. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
  211. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
  212. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
  213. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
  214. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  215. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
  216. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
  217. package/.claude/skills/redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
  218. package/.claude/skills/redis-coordination/query-logs.sh +103 -0
  219. package/.claude/skills/redis-coordination/retrieve-context.sh +58 -0
  220. package/.claude/skills/redis-coordination/select-specialist-agent.sh +371 -0
  221. package/.claude/skills/redis-coordination/semantic-match-tfidf.py +252 -0
  222. package/.claude/skills/redis-coordination/send-heartbeat.sh +164 -72
  223. package/.claude/skills/redis-coordination/signal.sh +38 -0
  224. package/.claude/skills/redis-coordination/store-context.sh +86 -0
  225. package/.claude/skills/redis-coordination/store-epic-context.sh +123 -0
  226. package/.claude/skills/redis-coordination/test-context-injection.sh +354 -0
  227. package/.claude/skills/redis-coordination/test-timeout-enforcement.sh +513 -0
  228. package/.claude/skills/redis-coordination/tests/convert-line-endings.sh +15 -0
  229. package/.claude/skills/redis-coordination/tests/dlq-functionality-test.sh +101 -101
  230. package/.claude/skills/redis-coordination/tests/edge-cases-test.sh +98 -98
  231. package/.claude/skills/redis-coordination/tests/integration-test.sh +169 -169
  232. package/.claude/skills/redis-coordination/tests/retry-mechanism-test.sh +81 -81
  233. package/.claude/skills/redis-coordination/tests/run-test-suite.sh +91 -91
  234. package/.claude/skills/redis-coordination/tests/run-tests.sh +4 -0
  235. package/.claude/skills/redis-coordination/tests/test-primitives.sh +166 -0
  236. package/.claude/skills/redis-coordination/tests/test-utils.sh +53 -121
  237. package/.claude/skills/redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
  238. package/.claude/skills/redis-coordination/tests/test_utils.sh +49 -0
  239. package/.claude/skills/redis-coordination/v2_modularization/core_orchestration.sh +76 -0
  240. package/.claude/skills/redis-coordination/validate-parameters.sh +492 -0
  241. package/.claude/skills/retrospective-report/SKILL.md +31 -0
  242. package/.claude/skills/retrospective-report/generate-report.sh +101 -0
  243. package/.claude/skills/run-all-skill-tests.sh +124 -0
  244. package/.claude/skills/scope-simplifier/SKILL.md +37 -0
  245. package/.claude/skills/scope-simplifier/simplify-scope.sh +68 -0
  246. package/.claude/skills/simplified-agent-lifecycle/COST_ANALYSIS.md +49 -0
  247. package/.claude/skills/simplified-agent-lifecycle/DESIGN.md +98 -0
  248. package/.claude/skills/simplified-agent-lifecycle/MIGRATION_PLAN.md +74 -0
  249. package/.claude/skills/skill-builder/SKILL.md +910 -0
  250. package/.claude/skills/specialist-injection/SKILL.md +41 -0
  251. package/.claude/skills/specialist-injection/recommend-specialist.sh +57 -0
  252. package/.claude/skills/sprint-execution/SKILL.md +27 -0
  253. package/.claude/skills/sprint-execution/execute-sprint-task.sh +59 -0
  254. package/.claude/skills/sprint-execution/execute-sprint.sh +65 -0
  255. package/.claude/skills/sprint-planner/SKILL.md +37 -0
  256. package/.claude/skills/sprint-planner/plan-sprint.sh +85 -0
  257. package/.claude/skills/standardized-error-handling/SKILL.md +56 -0
  258. package/.claude/skills/standardized-error-handling/capture-agent-error.sh +87 -0
  259. package/.claude/skills/standardized-error-handling/test-error-handling.sh +166 -0
  260. package/.claude/skills/task-classifier/SKILL.md +94 -0
  261. package/.claude/skills/task-classifier/classify-task.sh +115 -0
  262. package/.claude/skills/validation-templates/SKILL.md +47 -0
  263. package/.claude/skills/validation-templates/content.json +38 -0
  264. package/.claude/skills/validation-templates/data.json +38 -0
  265. package/.claude/skills/validation-templates/design.json +38 -0
  266. package/.claude/skills/validation-templates/infrastructure.json +38 -0
  267. package/.claude/skills/validation-templates/research.json +38 -0
  268. package/.claude/skills/validation-templates/software.json +38 -0
  269. package/.claude/skills/webapp-testing/README.md +142 -0
  270. package/.claude/skills/webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
  271. package/.claude/skills/webapp-testing/SKILL.md +877 -0
  272. package/.claude/skills/webapp-testing/capture-screenshot.sh +238 -0
  273. package/.claude/skills/webapp-testing/cfn-loop-integration.sh +265 -0
  274. package/.claude/skills/webapp-testing/compare-screenshots.sh +199 -0
  275. package/.claude/skills/webapp-testing/init-storage.sh +150 -0
  276. package/.claude/skills/webapp-testing/set-baseline.sh +196 -0
  277. package/.claude/skills/webapp-testing/test-webapp-testing.sh +233 -0
  278. package/.claude/spawn-pattern-examples.md +3 -3
  279. package/CLAUDE.md +364 -16
  280. package/README.md +598 -251
  281. package/dist/agents/agent-loader.js +146 -165
  282. package/dist/agents/agent-loader.js.map +1 -1
  283. package/dist/cli/agent-command.js +153 -0
  284. package/dist/cli/agent-command.js.map +1 -0
  285. package/dist/cli/agent-definition-parser.js +183 -0
  286. package/dist/cli/agent-definition-parser.js.map +1 -0
  287. package/dist/cli/agent-executor.js +310 -0
  288. package/dist/cli/agent-executor.js.map +1 -0
  289. package/dist/cli/agent-prompt-builder.js +268 -0
  290. package/dist/cli/agent-prompt-builder.js.map +1 -0
  291. package/dist/cli/agent-spawn.js +56 -2
  292. package/dist/cli/agent-spawn.js.map +1 -1
  293. package/dist/cli/anthropic-client.js +421 -0
  294. package/dist/cli/anthropic-client.js.map +1 -0
  295. package/dist/cli/cfn-context.js +150 -0
  296. package/dist/cli/cfn-context.js.map +1 -1
  297. package/dist/cli/cfn-fork.js +159 -0
  298. package/dist/cli/cfn-fork.js.map +1 -0
  299. package/dist/cli/cli-agent-context.js +358 -0
  300. package/dist/cli/cli-agent-context.js.map +1 -0
  301. package/dist/cli/config-manager.js +109 -91
  302. package/dist/cli/config-manager.js.map +1 -1
  303. package/dist/cli/conversation-fork.js +201 -0
  304. package/dist/cli/conversation-fork.js.map +1 -0
  305. package/dist/cli/index.js +119 -2
  306. package/dist/cli/index.js.map +1 -1
  307. package/dist/cli/iteration-history.js +188 -0
  308. package/dist/cli/iteration-history.js.map +1 -0
  309. package/dist/cli/tool-definitions.js +263 -0
  310. package/dist/cli/tool-definitions.js.map +1 -0
  311. package/dist/cli/tool-executor.js +247 -0
  312. package/dist/cli/tool-executor.js.map +1 -0
  313. package/dist/hello.js +8 -0
  314. package/dist/hello.js.map +1 -0
  315. package/package.json +16 -6
  316. package/scripts/README.md +68 -0
  317. package/scripts/cfn-intervention-example.sh +21 -0
  318. package/scripts/migrate-test-infrastructure.sh +40 -0
  319. package/scripts/switch-api.sh +233 -0
  320. package/scripts/validate-test-migration.sh +49 -0
  321. package/scripts/verify-no-secrets.sh +55 -0
  322. package/.claude/agents/architecture/system-architect.md.backup +0 -603
  323. package/.claude/agents/code-booster.md +0 -131
  324. package/.claude/agents/consensus/performance-benchmarker.md +0 -101
  325. package/.claude/agents/consensus/security-manager.md +0 -107
  326. package/.claude/agents/context-curator.md +0 -167
  327. package/.claude/agents/context-reflector.md +0 -65
  328. package/.claude/agents/core-agents/cfn-loop-coordinator.md +0 -134
  329. package/.claude/agents/core-agents/code-quality-validator.md +0 -149
  330. package/.claude/agents/core-agents/context-curator.md +0 -452
  331. package/.claude/agents/core-agents/context-reflector.md +0 -273
  332. package/.claude/agents/core-agents/cost-savings-cfn-loop-coordinator.md +0 -190
  333. package/.claude/agents/core-agents/tester.md +0 -170
  334. package/.claude/agents/development/backend-dev.md +0 -165
  335. package/.claude/agents/devops/devops-engineer.md +0 -148
  336. package/.claude/agents/frontend/interaction-tester.md +0 -139
  337. package/.claude/agents/frontend/react-frontend-engineer.md +0 -9
  338. package/.claude/agents/personas/accessibility-advocate-persona.md +0 -107
  339. package/.claude/agents/testing/production-validator.md +0 -179
  340. package/.claude/agents/testing/tdd-london-swarm.md +0 -209
  341. package/.claude/agents/testing/unit/tdd-london-swarm.md +0 -43
  342. package/.claude/agents/testing/validation/production-validator.md +0 -43
  343. package/dist/coordination/fleet-manager.test.js +0 -141
  344. package/dist/coordination/fleet-manager.test.js.map +0 -1
  345. package/dist/middleware/transparency-middleware.test.js +0 -184
  346. package/dist/middleware/transparency-middleware.test.js.map +0 -1
  347. /package/.claude/agents/{core-agents → developers}/researcher.md +0 -0
  348. /package/.claude/agents/{consensus → specialists}/crdt-synchronizer.md +0 -0
  349. /package/.claude/agents/{consensus → specialists}/quorum-manager.md +0 -0
  350. /package/.claude/agents/{consensus → specialists}/raft-manager.md +0 -0
  351. /package/.claude/{agents/core-agents → agents-ignore}/coordinator.md +0 -0
  352. /package/.claude/{agents/core-agents/cost-savings-coordinator.md → agents-ignore/cost-savings-coordinator.md.backup} +0 -0
  353. /package/.claude/skills/redis-coordination/{phase4-wake-queue-test-report.md → demos/phase4-wake-queue-test-report.md} +0 -0
  354. /package/.claude/skills/redis-coordination/{test-bzpopmin-fix.sh → demos/test-bzpopmin-fix.sh} +0 -0
  355. /package/.claude/skills/redis-coordination/{test-cancel-swarm.sh → demos/test-cancel-swarm.sh} +0 -0
  356. /package/.claude/skills/redis-coordination/{test-dlq.sh → demos/test-dlq.sh} +0 -0
  357. /package/.claude/skills/redis-coordination/{test-priority-wake-phase4-unix.sh → demos/test-priority-wake-phase4-unix.sh} +0 -0
  358. /package/.claude/skills/redis-coordination/{test-priority-wake-phase4.sh → demos/test-priority-wake-phase4.sh} +0 -0
  359. /package/.claude/skills/redis-coordination/{test-priority-wake.sh → demos/test-priority-wake.sh} +0 -0
  360. /package/.claude/skills/redis-coordination/{test-quick-fix.sh → demos/test-quick-fix.sh} +0 -0
  361. /package/.claude/skills/redis-coordination/{test-quorum-absolute.sh → demos/test-quorum-absolute.sh} +0 -0
  362. /package/.claude/skills/redis-coordination/{test-quorum-fallback.sh → demos/test-quorum-fallback.sh} +0 -0
  363. /package/.claude/skills/redis-coordination/{test-quorum-percentage.sh → demos/test-quorum-percentage.sh} +0 -0
  364. /package/.claude/skills/redis-coordination/{test-quorum-with-retry.sh → demos/test-quorum-with-retry.sh} +0 -0
  365. /package/.claude/skills/redis-coordination/{test-quorum.sh → demos/test-quorum.sh} +0 -0
  366. /package/.claude/skills/redis-coordination/{test-shutdown-handling.sh → demos/test-shutdown-handling.sh} +0 -0
  367. /package/.claude/skills/redis-coordination/{test-shutdown.sh → demos/test-shutdown.sh} +0 -0
  368. /package/.claude/skills/redis-coordination/{test-utils-unix.sh → demos/test-utils-unix.sh} +0 -0
  369. /package/.claude/skills/redis-coordination/{test-utils.sh → demos/test-utils.sh} +0 -0
  370. /package/.claude/skills/redis-coordination/{test-waiting-mode.sh → demos/test-waiting-mode.sh} +0 -0
@@ -0,0 +1,468 @@
1
+ #!/usr/bin/env bash
2
+ ##############################################################################
3
+ # CFN Loop Executor - Self-Contained Orchestration
4
+ #
5
+ # Purpose: Eliminates need for coordinator agent by making orchestration
6
+ # fully deterministic and self-contained in CLI layer.
7
+ #
8
+ # Usage:
9
+ # ./cfn-loop-exec.sh --task "Build React dashboard" [options]
10
+ #
11
+ # What this does:
12
+ # 1. Analyzes task description
13
+ # 2. Selects optimal agents using registry
14
+ # 3. Spawns orchestrator in background
15
+ # 4. Monitors via Redis
16
+ # 5. Returns structured JSON result
17
+ #
18
+ # Benefits:
19
+ # - No coordinator agent needed (more cost savings)
20
+ # - Fully deterministic (no LLM interpretation)
21
+ # - Direct Main Chat → orchestrator
22
+ # - JSON output for easy parsing
23
+ ##############################################################################
24
+
25
+ set -euo pipefail
26
+
27
+ # Configuration
28
+ TASK_DESCRIPTION=""
29
+ MODE="standard"
30
+ OUTPUT_FORMAT="json"
31
+ MAX_ITERATIONS=10
32
+ VERBOSE=false
33
+ WAIT_FOR_COMPLETION=true
34
+ DIFFICULTY="auto" # auto | simple | standard | complex | enterprise
35
+
36
+ # Parse arguments
37
+ while [[ $# -gt 0 ]]; do
38
+ case $1 in
39
+ --task)
40
+ TASK_DESCRIPTION="$2"
41
+ shift 2
42
+ ;;
43
+ --mode)
44
+ MODE="$2"
45
+ shift 2
46
+ ;;
47
+ --difficulty)
48
+ DIFFICULTY="$2"
49
+ shift 2
50
+ ;;
51
+ --output)
52
+ OUTPUT_FORMAT="$2"
53
+ shift 2
54
+ ;;
55
+ --max-iterations)
56
+ MAX_ITERATIONS="$2"
57
+ shift 2
58
+ ;;
59
+ --verbose)
60
+ VERBOSE=true
61
+ shift
62
+ ;;
63
+ --background)
64
+ WAIT_FOR_COMPLETION=false
65
+ shift
66
+ ;;
67
+ *)
68
+ echo "Unknown option: $1"
69
+ exit 1
70
+ ;;
71
+ esac
72
+ done
73
+
74
+ # Validation
75
+ if [ -z "$TASK_DESCRIPTION" ]; then
76
+ echo "Error: --task required"
77
+ echo "Usage: $0 --task \"Build React dashboard\" [--mode standard] [--output json]"
78
+ exit 1
79
+ fi
80
+
81
+ ##############################################################################
82
+ # Step 1: Analyze Task Complexity
83
+ ##############################################################################
84
+
85
+ log() {
86
+ if [ "$VERBOSE" = true ]; then
87
+ echo "[CFN-EXEC] $*" >&2
88
+ fi
89
+ }
90
+
91
+ log "Analyzing task complexity: $TASK_DESCRIPTION"
92
+
93
+ # Get script directory
94
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
95
+
96
+ # Run complexity analyzer
97
+ COMPLEXITY_RESULT=$("$SCRIPT_DIR/analyze-task-complexity.sh" \
98
+ --task "$TASK_DESCRIPTION" \
99
+ --difficulty "$DIFFICULTY")
100
+
101
+ # Extract complexity metrics
102
+ CALCULATED_DIFFICULTY=$(echo "$COMPLEXITY_RESULT" | jq -r '.difficulty')
103
+ COMPLEXITY_SCORE=$(echo "$COMPLEXITY_RESULT" | jq -r '.complexity_score')
104
+ SUGGESTED_LOOP3=$(echo "$COMPLEXITY_RESULT" | jq -r '.suggested_agents.loop3_count')
105
+ SUGGESTED_LOOP2=$(echo "$COMPLEXITY_RESULT" | jq -r '.suggested_agents.loop2_count')
106
+ DETECTED_DOMAINS=$(echo "$COMPLEXITY_RESULT" | jq -r '.domains[]' | paste -sd ',' -)
107
+
108
+ log "Complexity: $CALCULATED_DIFFICULTY (score: $COMPLEXITY_SCORE)"
109
+ log "Suggested agents - Loop 3: $SUGGESTED_LOOP3, Loop 2: $SUGGESTED_LOOP2"
110
+ log "Detected domains: $DETECTED_DOMAINS"
111
+
112
+ ##############################################################################
113
+ # Step 2: Select Agents Based on Domain & Complexity
114
+ ##############################################################################
115
+
116
+ # Convert task to lowercase for matching
117
+ TASK_LOWER=$(echo "$TASK_DESCRIPTION" | tr '[:upper:]' '[:lower:]')
118
+
119
+ # Initialize agent lists with base validators
120
+ LOOP3_AGENTS=""
121
+ LOOP2_AGENTS="reviewer,tester"
122
+
123
+ # Track how many agents we need per domain
124
+ LOOP3_COUNT=0
125
+ LOOP3_MAX=$SUGGESTED_LOOP3
126
+
127
+ # Frontend detection (can add multiple frontend specialists if complex)
128
+ if [[ "$TASK_LOWER" =~ react|component|ui|frontend|dashboard|web.*app ]]; then
129
+ LOOP3_AGENTS="react-frontend-engineer"
130
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
131
+ LOOP2_AGENTS="${LOOP2_AGENTS},accessibility-advocate"
132
+ log "Added: Frontend specialist"
133
+
134
+ # Add UI designer for complex frontend work
135
+ if [ "$CALCULATED_DIFFICULTY" = "complex" ] || [ "$CALCULATED_DIFFICULTY" = "enterprise" ]; then
136
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
137
+ LOOP3_AGENTS="${LOOP3_AGENTS},ui-designer"
138
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
139
+ log "Added: UI designer (complex frontend)"
140
+ fi
141
+ fi
142
+ fi
143
+
144
+ # Backend detection
145
+ if [[ "$TASK_LOWER" =~ api|backend|server|endpoint|rest|graphql|database|auth ]]; then
146
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
147
+ if [ -n "$LOOP3_AGENTS" ]; then
148
+ LOOP3_AGENTS="${LOOP3_AGENTS},backend-dev"
149
+ else
150
+ LOOP3_AGENTS="backend-dev"
151
+ fi
152
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
153
+ LOOP2_AGENTS="${LOOP2_AGENTS},security-specialist"
154
+ log "Added: Backend specialist"
155
+ fi
156
+ fi
157
+
158
+ # Database specialist for complex data work
159
+ if [[ "$TASK_LOWER" =~ database|schema|migration|query|sql ]]; then
160
+ if [ "$CALCULATED_DIFFICULTY" = "complex" ] || [ "$CALCULATED_DIFFICULTY" = "enterprise" ]; then
161
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
162
+ LOOP3_AGENTS="${LOOP3_AGENTS},backend-dev" # Additional backend specialist for DB work
163
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
164
+ log "Added: Database specialist (complex data work)"
165
+ fi
166
+ fi
167
+ fi
168
+
169
+ # Rust detection
170
+ if [[ "$TASK_LOWER" =~ rust|cargo|tokio ]]; then
171
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
172
+ if [ -n "$LOOP3_AGENTS" ]; then
173
+ LOOP3_AGENTS="${LOOP3_AGENTS},rust-developer"
174
+ else
175
+ LOOP3_AGENTS="rust-developer"
176
+ fi
177
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
178
+ log "Added: Rust specialist"
179
+ fi
180
+
181
+ # Add enterprise Rust developer for production work
182
+ if [ "$CALCULATED_DIFFICULTY" = "enterprise" ]; then
183
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
184
+ LOOP3_AGENTS="${LOOP3_AGENTS},rust-enterprise-developer"
185
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
186
+ log "Added: Enterprise Rust specialist"
187
+ fi
188
+ fi
189
+ fi
190
+
191
+ # Infrastructure detection
192
+ if [[ "$TASK_LOWER" =~ infra|devops|deploy|docker|k8s|kubernetes|aws ]]; then
193
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
194
+ if [ -n "$LOOP3_AGENTS" ]; then
195
+ LOOP3_AGENTS="${LOOP3_AGENTS},devops-engineer"
196
+ else
197
+ LOOP3_AGENTS="devops-engineer"
198
+ fi
199
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
200
+ log "Added: DevOps specialist"
201
+ fi
202
+ fi
203
+
204
+ # Architecture detection (always add for complex tasks)
205
+ if [[ "$TASK_LOWER" =~ architect|design|system|scalab|pattern ]] || \
206
+ [ "$CALCULATED_DIFFICULTY" = "complex" ] || [ "$CALCULATED_DIFFICULTY" = "enterprise" ]; then
207
+ if [ $LOOP3_COUNT -lt $LOOP3_MAX ]; then
208
+ if [ -n "$LOOP3_AGENTS" ]; then
209
+ LOOP3_AGENTS="${LOOP3_AGENTS},system-architect"
210
+ else
211
+ LOOP3_AGENTS="system-architect"
212
+ fi
213
+ LOOP3_COUNT=$((LOOP3_COUNT + 1))
214
+ LOOP2_AGENTS="${LOOP2_AGENTS},architect"
215
+ log "Added: System architect"
216
+ fi
217
+ fi
218
+
219
+ # Research detection (prepend for complex/unclear tasks)
220
+ if [[ "$TASK_LOWER" =~ research|explore|investigate|analyze|study ]] || \
221
+ [ "$CALCULATED_DIFFICULTY" = "complex" ] || [ "$CALCULATED_DIFFICULTY" = "enterprise" ]; then
222
+ # Researcher doesn't count against Loop 3 max (research is always valuable)
223
+ if [ -n "$LOOP3_AGENTS" ]; then
224
+ LOOP3_AGENTS="researcher,${LOOP3_AGENTS}"
225
+ else
226
+ LOOP3_AGENTS="researcher"
227
+ fi
228
+ log "Added: Researcher (complex task)"
229
+ fi
230
+
231
+ # Fill remaining slots with general specialists based on difficulty
232
+ REMAINING_SLOTS=$((LOOP3_MAX - LOOP3_COUNT))
233
+ if [ $REMAINING_SLOTS -gt 0 ] && [ -n "$LOOP3_AGENTS" ]; then
234
+ log "Filling $REMAINING_SLOTS remaining slots with specialists..."
235
+
236
+ # Add coder for general implementation
237
+ if [ $REMAINING_SLOTS -gt 0 ]; then
238
+ LOOP3_AGENTS="${LOOP3_AGENTS},coder"
239
+ REMAINING_SLOTS=$((REMAINING_SLOTS - 1))
240
+ fi
241
+
242
+ # Add performance specialist for enterprise tasks
243
+ if [ "$CALCULATED_DIFFICULTY" = "enterprise" ] && [ $REMAINING_SLOTS -gt 0 ]; then
244
+ LOOP3_AGENTS="${LOOP3_AGENTS},perf-analyzer"
245
+ REMAINING_SLOTS=$((REMAINING_SLOTS - 1))
246
+ fi
247
+ fi
248
+
249
+ # Default fallback (if no agents selected)
250
+ if [ -z "$LOOP3_AGENTS" ]; then
251
+ LOOP3_AGENTS="coder"
252
+ log "No specific domain detected, using general coder"
253
+ fi
254
+
255
+ # Ensure Loop 2 count matches suggestion
256
+ CURRENT_LOOP2_COUNT=$(echo "$LOOP2_AGENTS" | tr ',' '\n' | wc -l)
257
+ if [ "$CURRENT_LOOP2_COUNT" -lt "$SUGGESTED_LOOP2" ]; then
258
+ ADDITIONAL_VALIDATORS=$((SUGGESTED_LOOP2 - CURRENT_LOOP2_COUNT))
259
+ log "Adding $ADDITIONAL_VALIDATORS additional validators for $CALCULATED_DIFFICULTY difficulty"
260
+
261
+ # Add code-quality-validator for comprehensive review
262
+ if [ $ADDITIONAL_VALIDATORS -gt 0 ]; then
263
+ LOOP2_AGENTS="${LOOP2_AGENTS},code-quality-validator"
264
+ ADDITIONAL_VALIDATORS=$((ADDITIONAL_VALIDATORS - 1))
265
+ fi
266
+
267
+ # Add performance benchmarker for enterprise
268
+ if [ "$CALCULATED_DIFFICULTY" = "enterprise" ] && [ $ADDITIONAL_VALIDATORS -gt 0 ]; then
269
+ LOOP2_AGENTS="${LOOP2_AGENTS},performance-benchmarker"
270
+ fi
271
+ fi
272
+
273
+ # Product Owner (always included)
274
+ PRODUCT_OWNER="product-owner"
275
+
276
+ # Generate unique task ID
277
+ TASK_ID="cfn-$(echo "$TASK_DESCRIPTION" | tr ' ' '-' | tr '[:upper:]' '[:lower:]' | cut -c1-30)-$(date +%s)"
278
+
279
+ log "Task ID: $TASK_ID"
280
+ log "Loop 3 agents: $LOOP3_AGENTS"
281
+ log "Loop 2 agents: $LOOP2_AGENTS"
282
+ log "Product Owner: $PRODUCT_OWNER"
283
+
284
+ ##############################################################################
285
+ # Step 2: Invoke Orchestrator in Background
286
+ ##############################################################################
287
+
288
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
289
+ ORCHESTRATOR="$SCRIPT_DIR/orchestrate-cfn-loop.sh"
290
+
291
+ if [ ! -f "$ORCHESTRATOR" ]; then
292
+ echo "Error: Orchestrator not found at $ORCHESTRATOR"
293
+ exit 1
294
+ fi
295
+
296
+ log "Launching orchestrator..."
297
+
298
+ # Build success criteria from task
299
+ SUCCESS_CRITERIA=$(jq -nc \
300
+ --arg task "$TASK_DESCRIPTION" \
301
+ '{
302
+ acceptanceCriteria: ["Implementation complete", "Tests passing", "Code reviewed"],
303
+ gateThreshold: 0.75,
304
+ consensusThreshold: 0.90
305
+ }')
306
+
307
+ # Launch orchestrator in background
308
+ "$ORCHESTRATOR" \
309
+ --task-id "$TASK_ID" \
310
+ --mode "$MODE" \
311
+ --loop3-agents "$LOOP3_AGENTS" \
312
+ --loop2-agents "$LOOP2_AGENTS" \
313
+ --product-owner "$PRODUCT_OWNER" \
314
+ --max-iterations "$MAX_ITERATIONS" \
315
+ --epic-context "{\"epicGoal\": \"$TASK_DESCRIPTION\"}" \
316
+ --success-criteria "$SUCCESS_CRITERIA" \
317
+ > "/tmp/cfn-exec-${TASK_ID}.log" 2>&1 &
318
+
319
+ ORCHESTRATOR_PID=$!
320
+
321
+ log "Orchestrator started (PID: $ORCHESTRATOR_PID)"
322
+
323
+ # If background mode, return immediately
324
+ if [ "$WAIT_FOR_COMPLETION" = false ]; then
325
+ if [ "$OUTPUT_FORMAT" = "json" ]; then
326
+ MONITOR_CMD="redis-cli get \"swarm:${TASK_ID}:status\""
327
+ jq -nc \
328
+ --arg task_id "$TASK_ID" \
329
+ --arg pid "$ORCHESTRATOR_PID" \
330
+ --arg loop3 "$LOOP3_AGENTS" \
331
+ --arg loop2 "$LOOP2_AGENTS" \
332
+ --arg monitor "$MONITOR_CMD" \
333
+ '{
334
+ status: "running",
335
+ task_id: $task_id,
336
+ orchestrator_pid: ($pid | tonumber),
337
+ agents: {
338
+ loop3: ($loop3 | split(",")),
339
+ loop2: ($loop2 | split(","))
340
+ },
341
+ monitor: $monitor
342
+ }'
343
+ else
344
+ echo "Task ID: $TASK_ID"
345
+ echo "PID: $ORCHESTRATOR_PID"
346
+ echo "Monitor: redis-cli get 'swarm:${TASK_ID}:status'"
347
+ fi
348
+ exit 0
349
+ fi
350
+
351
+ ##############################################################################
352
+ # Step 3: Monitor via Redis (Zero-Token Polling)
353
+ ##############################################################################
354
+
355
+ log "Monitoring orchestrator completion..."
356
+
357
+ TIMEOUT=21600 # 6 hours max (10 iterations × 60min = 10hrs worst case, but realistically much less)
358
+ ELAPSED=0
359
+ CHECK_INTERVAL=30
360
+
361
+ while [ $ELAPSED -lt $TIMEOUT ]; do
362
+ # Check orchestrator status
363
+ STATUS=$(redis-cli get "swarm:${TASK_ID}:status" 2>/dev/null || echo "")
364
+
365
+ log "Status: ${STATUS:-initializing} (elapsed: ${ELAPSED}s)"
366
+
367
+ # Check for completion
368
+ if [ "$STATUS" = "complete" ] || [ "$STATUS" = "cancelled" ] || [ "$STATUS" = "failed" ]; then
369
+ log "Orchestrator finished: $STATUS"
370
+ break
371
+ fi
372
+
373
+ # Check if orchestrator process still running
374
+ if ! kill -0 "$ORCHESTRATOR_PID" 2>/dev/null; then
375
+ log "Orchestrator process exited"
376
+ # Check final status
377
+ STATUS=$(redis-cli get "swarm:${TASK_ID}:status" 2>/dev/null || echo "failed")
378
+ break
379
+ fi
380
+
381
+ sleep $CHECK_INTERVAL
382
+ ELAPSED=$((ELAPSED + CHECK_INTERVAL))
383
+ done
384
+
385
+ if [ $ELAPSED -ge $TIMEOUT ]; then
386
+ log "Timeout reached, orchestrator still running"
387
+ STATUS="timeout"
388
+ fi
389
+
390
+ ##############################################################################
391
+ # Step 4: Collect Results from Redis
392
+ ##############################################################################
393
+
394
+ log "Collecting results..."
395
+
396
+ # Get final consensus
397
+ FINAL_CONSENSUS=$(redis-cli lindex "swarm:${TASK_ID}:metrics:loop2_consensus" 0 2>/dev/null || echo '{"consensus": 0}')
398
+ CONSENSUS_VALUE=$(echo "$FINAL_CONSENSUS" | jq -r '.consensus // 0')
399
+
400
+ # Get iteration count
401
+ ITERATIONS=$(redis-cli llen "swarm:${TASK_ID}:metrics:iteration_start" 2>/dev/null || echo "0")
402
+
403
+ # Get deliverables
404
+ DELIVERABLES=$(redis-cli smembers "swarm:${TASK_ID}:deliverables" 2>/dev/null | jq -R -s -c 'split("\n") | map(select(length > 0))')
405
+
406
+ # Get execution time (first iteration start to last iteration end)
407
+ FIRST_START=$(redis-cli lindex "swarm:${TASK_ID}:metrics:iteration_start" -1 2>/dev/null || echo "0")
408
+ LAST_END=$(redis-cli lindex "swarm:${TASK_ID}:metrics:iteration_duration" 0 2>/dev/null | jq -r '.duration_ms // 0')
409
+ TOTAL_DURATION=$((LAST_END))
410
+
411
+ ##############################################################################
412
+ # Step 5: Return Structured Output
413
+ ##############################################################################
414
+
415
+ if [ "$OUTPUT_FORMAT" = "json" ]; then
416
+ jq -nc \
417
+ --arg status "$STATUS" \
418
+ --arg task "$TASK_DESCRIPTION" \
419
+ --arg task_id "$TASK_ID" \
420
+ --arg iterations "$ITERATIONS" \
421
+ --arg consensus "$CONSENSUS_VALUE" \
422
+ --arg loop3 "$LOOP3_AGENTS" \
423
+ --arg loop2 "$LOOP2_AGENTS" \
424
+ --arg duration "$TOTAL_DURATION" \
425
+ --argjson deliverables "$DELIVERABLES" \
426
+ '{
427
+ status: $status,
428
+ task: $task,
429
+ task_id: $task_id,
430
+ iterations: ($iterations | tonumber),
431
+ final_consensus: ($consensus | tonumber),
432
+ agents_selected: {
433
+ loop3: ($loop3 | split(",")),
434
+ loop2: ($loop2 | split(","))
435
+ },
436
+ deliverables: $deliverables,
437
+ execution_time_ms: ($duration | tonumber),
438
+ cost_model: "cli-spawning-95-98pct-savings"
439
+ }'
440
+ else
441
+ cat <<EOF
442
+ === CFN Loop Execution Complete ===
443
+ Status: $STATUS
444
+ Task: $TASK_DESCRIPTION
445
+ Task ID: $TASK_ID
446
+ Iterations: $ITERATIONS
447
+ Final Consensus: $CONSENSUS_VALUE
448
+ Loop 3 Agents: $LOOP3_AGENTS
449
+ Loop 2 Agents: $LOOP2_AGENTS
450
+ Deliverables: $DELIVERABLES
451
+ Execution Time: ${TOTAL_DURATION}ms
452
+ EOF
453
+ fi
454
+
455
+ # Cleanup
456
+ if [ "$STATUS" != "timeout" ]; then
457
+ log "Cleaning up Redis keys..."
458
+ redis-cli --scan --pattern "swarm:${TASK_ID}:*" | xargs -r redis-cli DEL >/dev/null 2>&1 || true
459
+ fi
460
+
461
+ # Exit with appropriate code
462
+ if [ "$STATUS" = "complete" ]; then
463
+ exit 0
464
+ elif [ "$STATUS" = "timeout" ]; then
465
+ exit 124
466
+ else
467
+ exit 1
468
+ fi
@@ -0,0 +1,179 @@
1
+ #!/bin/bash
2
+ #
3
+ # Collect Confidence Scores - Stateless Agent Coordination
4
+ #
5
+ # Extracts confidence scores from multiple agents after they exit.
6
+ # Replaces the 'collect' function from invoke-waiting-mode.sh for stateless architecture.
7
+ #
8
+ # Usage:
9
+ # ./collect-confidence-scores.sh --task-id <task> --agent-ids <id1,id2,id3> [--min-quorum <0.66|66%|2>] [--namespace swarm]
10
+ #
11
+ # Returns:
12
+ # Average confidence score (0.0-1.0) to stdout
13
+ # Verbose messages to stderr
14
+ #
15
+ # Exit Codes:
16
+ # 0 - Success (consensus calculated)
17
+ # 1 - Quorum not met or missing required parameters
18
+
19
+ set -euo pipefail
20
+
21
+ # Debug mode (set DEBUG=true for verbose output)
22
+ DEBUG="${DEBUG:-false}"
23
+
24
+ # Parse arguments
25
+ TASK_ID=""
26
+ AGENT_IDS=""
27
+ MIN_QUORUM=""
28
+ NAMESPACE="swarm"
29
+
30
+ while [[ $# -gt 0 ]]; do
31
+ case $1 in
32
+ --task-id)
33
+ TASK_ID="$2"
34
+ shift 2
35
+ ;;
36
+ --agent-ids)
37
+ AGENT_IDS="$2"
38
+ shift 2
39
+ ;;
40
+ --min-quorum)
41
+ MIN_QUORUM="$2"
42
+ shift 2
43
+ ;;
44
+ --namespace)
45
+ NAMESPACE="$2"
46
+ shift 2
47
+ ;;
48
+ *)
49
+ echo "Unknown argument: $1" >&2
50
+ exit 1
51
+ ;;
52
+ esac
53
+ done
54
+
55
+ # Validate required parameters
56
+ if [ -z "$TASK_ID" ] || [ -z "$AGENT_IDS" ]; then
57
+ echo "Error: collect-confidence-scores requires --task-id and --agent-ids" >&2
58
+ echo "" >&2
59
+ echo "Usage:" >&2
60
+ echo " ./collect-confidence-scores.sh --task-id <task> --agent-ids <id1,id2,id3> [--min-quorum <0.66|66%|2>]" >&2
61
+ exit 1
62
+ fi
63
+
64
+ # Output verbose messages to stderr
65
+ echo "[Coordinator] Collecting confidence scores from agents..." >&2
66
+ echo "" >&2
67
+
68
+ # Split agent IDs
69
+ IFS=',' read -ra AGENTS <<< "$AGENT_IDS"
70
+
71
+ RESULTS=()
72
+ CONFIDENCES=()
73
+ ALL_FEEDBACK=()
74
+
75
+ for AGENT in "${AGENTS[@]}"; do
76
+ RESULT_KEY="${NAMESPACE}:${TASK_ID}:${AGENT}:result"
77
+
78
+ # Get latest result (non-blocking)
79
+ RESULT=$(redis-cli LPOP "$RESULT_KEY" 2>/dev/null || echo "")
80
+
81
+ if [ -n "$RESULT" ] && [ "$RESULT" != "(nil)" ]; then
82
+ # Handle both simple numeric format and JSON format
83
+ # Try to parse as JSON first, fall back to simple number
84
+ if CONF=$(echo "$RESULT" | jq -r '.confidence' 2>/dev/null) && [ "$CONF" != "null" ]; then
85
+ # JSON format: {"confidence":0.85,"iteration":1,...}
86
+ echo " [$AGENT] Confidence: $CONF" >&2
87
+ RESULTS+=("$RESULT")
88
+ CONFIDENCES+=("$CONF")
89
+
90
+ # Check if result includes feedback array
91
+ FEEDBACK=$(echo "$RESULT" | jq -r '.feedback // empty | .[]?' 2>/dev/null || echo "")
92
+ if [ -n "$FEEDBACK" ]; then
93
+ echo " [$AGENT] Feedback provided:" >&2
94
+ echo "$RESULT" | jq -r '.feedback[]' 2>/dev/null | sed 's/^/ - /' >&2
95
+
96
+ # Collect all feedback items
97
+ while IFS= read -r ITEM; do
98
+ [ -n "$ITEM" ] && ALL_FEEDBACK+=("$ITEM")
99
+ done < <(echo "$RESULT" | jq -r '.feedback[]' 2>/dev/null || echo "")
100
+ fi
101
+ elif [[ "$RESULT" =~ ^[0-9]+\.?[0-9]*$ ]]; then
102
+ # Simple numeric format: "0.85"
103
+ CONF="$RESULT"
104
+ echo " [$AGENT] Confidence: $CONF" >&2
105
+ CONFIDENCES+=("$CONF")
106
+ else
107
+ echo " [$AGENT] ⚠️ Invalid result format: $RESULT" >&2
108
+ fi
109
+ else
110
+ echo " [$AGENT] ⚠️ No result found" >&2
111
+ fi
112
+ done
113
+
114
+ # Validate quorum if specified
115
+ TOTAL_AGENTS=${#AGENTS[@]}
116
+ RESPONDING_AGENTS=${#CONFIDENCES[@]}
117
+
118
+ if [ -n "$MIN_QUORUM" ]; then
119
+ # Parse min-quorum (supports: absolute number, percentage, or decimal)
120
+ if [[ "$MIN_QUORUM" =~ ^[0-9]+%$ ]]; then
121
+ # Percentage format: "66%"
122
+ PCT=${MIN_QUORUM%\%}
123
+ REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $PCT) / 100" | bc)
124
+ elif [[ "$MIN_QUORUM" =~ ^0\.[0-9]+$ ]]; then
125
+ # Decimal format: "0.66"
126
+ REQUIRED=$(echo "scale=0; ($TOTAL_AGENTS * $MIN_QUORUM) / 1" | bc)
127
+ else
128
+ # Absolute number format: "2"
129
+ REQUIRED=$MIN_QUORUM
130
+ fi
131
+
132
+ if [ "$RESPONDING_AGENTS" -lt "$REQUIRED" ]; then
133
+ echo "" >&2
134
+ echo "[Coordinator] ❌ Quorum not met" >&2
135
+ echo " Required: $REQUIRED agents" >&2
136
+ echo " Responding: $RESPONDING_AGENTS agents" >&2
137
+ exit 1
138
+ fi
139
+ fi
140
+
141
+ # Calculate consensus
142
+ if [ ${#CONFIDENCES[@]} -gt 0 ]; then
143
+ SUM=0
144
+ for CONF in "${CONFIDENCES[@]}"; do
145
+ SUM=$(echo "$SUM + $CONF" | bc)
146
+ done
147
+ COUNT=${#CONFIDENCES[@]}
148
+ CONSENSUS=$(echo "scale=2; $SUM / $COUNT" | bc)
149
+
150
+ # Ensure leading zero for bc output (handles .87 -> 0.87)
151
+ if [[ "$CONSENSUS" =~ ^\. ]]; then
152
+ CONSENSUS="0$CONSENSUS"
153
+ fi
154
+
155
+ echo "" >&2
156
+ echo "[Coordinator] Average Confidence: $CONSENSUS" >&2
157
+
158
+ # Print aggregated feedback if available
159
+ if [ ${#ALL_FEEDBACK[@]} -gt 0 ]; then
160
+ echo "" >&2
161
+ echo "[Coordinator] Aggregated Feedback:" >&2
162
+ for ITEM in "${ALL_FEEDBACK[@]}"; do
163
+ echo " - $ITEM" >&2
164
+ done
165
+
166
+ # Store feedback in Redis for next iteration
167
+ FEEDBACK_JSON=$(jq -n --argjson items "$(printf '%s\n' "${ALL_FEEDBACK[@]}" | jq -R . | jq -s .)" '$items')
168
+ FEEDBACK_KEY="${NAMESPACE}:${TASK_ID}:aggregated-feedback"
169
+ echo "$FEEDBACK_JSON" | redis-cli -x SET "$FEEDBACK_KEY" >/dev/null
170
+ redis-cli EXPIRE "$FEEDBACK_KEY" 3600 >/dev/null
171
+ fi
172
+
173
+ # Output consensus to stdout (for script callers)
174
+ echo "$CONSENSUS"
175
+ else
176
+ echo "" >&2
177
+ echo "[Coordinator] ❌ No confidence scores collected" >&2
178
+ exit 1
179
+ fi