claude-flow-novice 2.15.3 → 2.15.5

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 (473) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +29 -6
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +29 -6
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -1,949 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- ##############################################################################
4
- # CFN Loop Orchestration - Main Coordinator
5
- # Version: 1.1.0 (Security Enhanced)
6
- #
7
- # Orchestrates the Complete Fail Never (CFN) Loop workflow using modular
8
- # helper scripts, Redis Coordination primitives, and enhanced security.
9
- #
10
- # Usage:
11
- # ./orchestrate.sh --task-id <id> \
12
- # --mode <mvp|standard|enterprise> \
13
- # --loop3-agents <agent1,agent2,...> \
14
- # --loop2-agents <agent1,agent2,...> \
15
- # --product-owner <agent-id> \
16
- # [--max-iterations <n>] \
17
- # [--epic-context <json>] \
18
- # [--phase-context <json>] \
19
- # [--success-criteria <json>]
20
- ##############################################################################
21
-
22
- set -euo pipefail
23
-
24
- # ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents
25
- # Task Mode agents spawn via Task() tool and should NOT use orchestration scripts
26
- if [[ -z "${TASK_ID:-}" || -z "${LOOP3_AGENTS:-}" ]]; then
27
- echo "❌ TASK MODE DETECTED - Orchestration forbidden" >&2
28
- echo "🚨 ANTI-023: This script is for CLI-spawned coordinators only" >&2
29
- echo "💡 Task Mode coordination should be handled directly by Main Chat" >&2
30
- echo "🔧 Coordinator spawned via Task() tool - Main Chat should coordinate directly" >&2
31
- exit 1
32
- fi
33
-
34
- # Load security utilities
35
- # shellcheck source=./security_utils.sh
36
- source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/security_utils.sh"
37
-
38
- # Determine script directory
39
- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
40
- HELPERS_DIR="$SCRIPT_DIR/helpers"
41
- PROJECT_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" && REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
42
-
43
- # Configuration
44
- TASK_ID=""
45
- MODE="standard"
46
- LOOP3_AGENTS=""
47
- LOOP2_AGENTS=""
48
- PRODUCT_OWNER=""
49
- MAX_ITERATIONS=10
50
- MIN_QUORUM_LOOP3="0.66"
51
- MIN_QUORUM_LOOP2="0.66"
52
- EPIC_CONTEXT=""
53
- PHASE_CONTEXT=""
54
- SUCCESS_CRITERIA=""
55
- EXPECTED_FILES=""
56
- PHASE_ID=""
57
-
58
- # Mode-specific thresholds
59
- declare -A GATE_THRESHOLD=(
60
- [mvp]=0.70
61
- [standard]=0.75
62
- [enterprise]=0.75
63
- )
64
-
65
- declare -A CONSENSUS_THRESHOLD=(
66
- [mvp]=0.80
67
- [standard]=0.90
68
- [enterprise]=0.95
69
- )
70
-
71
- # Execution tracking
72
- START_TIME=$(date +%s)
73
- ITERATIONS_COMPLETED=0
74
- FINAL_DECISION=""
75
- LOOP3_FINAL_CONFIDENCE=0.0
76
- LOOP2_FINAL_CONSENSUS=0.0
77
- DELIVERABLES_VERIFIED=false
78
-
79
- ##############################################################################
80
- # Argument Parsing
81
- ##############################################################################
82
- while [[ $# -gt 0 ]]; do
83
- case $1 in
84
- --task-id)
85
- if [[ $# -lt 2 ]]; then
86
- echo "Error: --task-id requires a value"
87
- exit 1
88
- fi
89
- TASK_ID=$(sanitize_input "$2") || { echo "Invalid task ID"; exit 1; }
90
- shift 2
91
- ;;
92
- --mode)
93
- if [[ $# -lt 2 ]]; then
94
- echo "Error: --mode requires a value"
95
- exit 1
96
- fi
97
- MODE="$2"
98
- # Whitelist allowed modes
99
- if [[ ! "$MODE" =~ ^(mvp|standard|enterprise)$ ]]; then
100
- echo "Invalid mode. Must be mvp, standard, or enterprise."
101
- exit 1
102
- fi
103
- shift 2
104
- ;;
105
- --loop3-agents)
106
- if [[ $# -lt 2 ]]; then
107
- echo "Error: --loop3-agents requires a value"
108
- exit 1
109
- fi
110
- validate_agent_list "$2" || { echo "Invalid Loop 3 agent list"; exit 1; }
111
- LOOP3_AGENTS="$2"
112
- shift 2
113
- ;;
114
- --loop2-agents)
115
- if [[ $# -lt 2 ]]; then
116
- echo "Error: --loop2-agents requires a value"
117
- exit 1
118
- fi
119
- validate_agent_list "$2" || { echo "Invalid Loop 2 agent list"; exit 1; }
120
- LOOP2_AGENTS="$2"
121
- shift 2
122
- ;;
123
- --product-owner)
124
- if [[ $# -lt 2 ]]; then
125
- echo "Error: --product-owner requires a value"
126
- exit 1
127
- fi
128
- PRODUCT_OWNER=$(sanitize_input "$2") || { echo "Invalid product owner"; exit 1; }
129
- shift 2
130
- ;;
131
- --max-iterations)
132
- if [[ $# -lt 2 ]]; then
133
- echo "Error: --max-iterations requires a value"
134
- exit 1
135
- fi
136
- # Validate max iterations is a positive integer
137
- if [[ ! "$2" =~ ^[1-9][0-9]*$ ]]; then
138
- echo "Max iterations must be a positive integer"
139
- exit 1
140
- fi
141
- MAX_ITERATIONS="$2"
142
- shift 2
143
- ;;
144
- --min-quorum-loop3)
145
- if [[ $# -lt 2 ]]; then
146
- echo "Error: --min-quorum-loop3 requires a value"
147
- exit 1
148
- fi
149
- # Validate quorum is a valid decimal between 0 and 1
150
- if [[ ! "$2" =~ ^0\.[0-9]+$ ]] || (( $(echo "$2 > 1" | bc -l) )); then
151
- echo "Invalid Loop 3 quorum. Must be between 0 and 1."
152
- exit 1
153
- fi
154
- MIN_QUORUM_LOOP3="$2"
155
- shift 2
156
- ;;
157
- --min-quorum-loop2)
158
- if [[ $# -lt 2 ]]; then
159
- echo "Error: --min-quorum-loop2 requires a value"
160
- exit 1
161
- fi
162
- # Validate quorum is a valid decimal between 0 and 1
163
- if [[ ! "$2" =~ ^0\.[0-9]+$ ]] || (( $(echo "$2 > 1" | bc -l) )); then
164
- echo "Invalid Loop 2 quorum. Must be between 0 and 1."
165
- exit 1
166
- fi
167
- MIN_QUORUM_LOOP2="$2"
168
- shift 2
169
- ;;
170
- --epic-context)
171
- if [[ $# -lt 2 ]]; then
172
- echo "Error: --epic-context requires a value"
173
- exit 1
174
- fi
175
- validate_json_context "$2" || { echo "Invalid epic context JSON"; exit 1; }
176
- EPIC_CONTEXT="$2"
177
- shift 2
178
- ;;
179
- --phase-context)
180
- if [[ $# -lt 2 ]]; then
181
- echo "Error: --phase-context requires a value"
182
- exit 1
183
- fi
184
- validate_json_context "$2" || { echo "Invalid phase context JSON"; exit 1; }
185
- PHASE_CONTEXT="$2"
186
- shift 2
187
- ;;
188
- --success-criteria)
189
- if [[ $# -lt 2 ]]; then
190
- echo "Error: --success-criteria requires a value"
191
- exit 1
192
- fi
193
- validate_json_context "$2" || { echo "Invalid success criteria JSON"; exit 1; }
194
- SUCCESS_CRITERIA="$2"
195
- shift 2
196
- ;;
197
- --expected-files)
198
- if [[ $# -lt 2 ]]; then
199
- echo "Error: --expected-files requires a value"
200
- exit 1
201
- fi
202
- # Optional: validate each expected file name if not empty
203
- if [ -n "$2" ]; then
204
- IFS=',' read -ra FILES <<< "$2"
205
- for file in "${FILES[@]}"; do
206
- sanitize_input "$file" 256 || { echo "Invalid expected filename: $file"; exit 1; }
207
- done
208
- fi
209
- EXPECTED_FILES="$2"
210
- shift 2
211
- ;;
212
- --phase-id)
213
- if [[ $# -lt 2 ]]; then
214
- echo "Error: --phase-id requires a value"
215
- exit 1
216
- fi
217
- PHASE_ID=$(sanitize_input "$2") || { echo "Invalid phase ID"; exit 1; }
218
- shift 2
219
- ;;
220
- *)
221
- echo "Error: Unknown option: '$1'"
222
- echo ""
223
- echo "Usage: $0 [OPTIONS]"
224
- echo ""
225
- echo "Required options:"
226
- echo " --task-id <id> Unique task identifier"
227
- echo " --loop3-agents <agents> Comma-separated list of Loop 3 agents"
228
- echo " --loop2-agents <agents> Comma-separated list of Loop 2 agents"
229
- echo " --product-owner <agent> Product owner agent ID"
230
- echo ""
231
- echo "Optional options:"
232
- echo " --mode <mode> CFN mode: mvp, standard, enterprise (default: standard)"
233
- echo " --max-iterations <n> Maximum iterations (default: 10)"
234
- echo " --min-quorum-loop3 <n> Loop 3 quorum threshold (default: 0.66)"
235
- echo " --min-quorum-loop2 <n> Loop 2 quorum threshold (default: 0.66)"
236
- echo " --epic-context <json> Epic context JSON"
237
- echo " --phase-context <json> Phase context JSON"
238
- echo " --success-criteria <json> Success criteria JSON"
239
- echo " --expected-files <files> Comma-separated expected deliverables"
240
- echo " --phase-id <id> Phase identifier for timeout calculation"
241
- exit 1
242
- ;;
243
- esac
244
- done
245
-
246
- # Validation
247
- if [ -z "$TASK_ID" ] || [ -z "$LOOP3_AGENTS" ] || [ -z "$LOOP2_AGENTS" ] || [ -z "$PRODUCT_OWNER" ]; then
248
- echo "Error: Required parameters missing"
249
- echo "Usage: $0 --task-id <id> --mode <mode> --loop3-agents <agents> --loop2-agents <agents> --product-owner <agent>"
250
- exit 1
251
- fi
252
-
253
- # Get thresholds for mode
254
- # Add additional mode validation with safe fallback
255
- case "$MODE" in
256
- mvp)
257
- GATE=${GATE_THRESHOLD[mvp]:-0.70}
258
- CONSENSUS=${CONSENSUS_THRESHOLD[mvp]:-0.80}
259
- ;;
260
- standard)
261
- GATE=${GATE_THRESHOLD[standard]:-0.75}
262
- CONSENSUS=${CONSENSUS_THRESHOLD[standard]:-0.90}
263
- ;;
264
- enterprise)
265
- GATE=${GATE_THRESHOLD[enterprise]:-0.85}
266
- CONSENSUS=${CONSENSUS_THRESHOLD[enterprise]:-0.95}
267
- ;;
268
- *)
269
- echo "Invalid mode: $MODE"
270
- exit 1
271
- ;;
272
- esac
273
-
274
- # Calculate timeout
275
- TIMEOUT=$("$HELPERS_DIR/timeout-calculator.sh" --phase-id "${PHASE_ID:-unknown}")
276
-
277
- echo "=============================================="
278
- echo "CFN Loop Orchestration v1.0.0"
279
- echo "=============================================="
280
- echo "Task ID: $TASK_ID"
281
- echo "Mode: $MODE"
282
- echo "Gate Threshold: $GATE"
283
- echo "Consensus Threshold: $CONSENSUS"
284
- echo "Max Iterations: $MAX_ITERATIONS"
285
- echo "Timeout: ${TIMEOUT}s"
286
- echo "=============================================="
287
- echo ""
288
-
289
- ##############################################################################
290
- # Helper Functions
291
- ##############################################################################
292
-
293
- function store_context() {
294
- local task_id="$1"
295
-
296
- # Store epic context if provided using Redis coordination primitive
297
- if [ -n "$EPIC_CONTEXT" ]; then
298
- "$REDIS_COORD_SKILL/store-context.sh" \
299
- --task-id "$task_id" \
300
- --key "epic-context" \
301
- --value "$EPIC_CONTEXT" \
302
- --namespace "swarm" >/dev/null
303
- echo "Stored epic context"
304
- fi
305
-
306
- # Store phase context if provided using Redis coordination primitive
307
- if [ -n "$PHASE_CONTEXT" ]; then
308
- "$REDIS_COORD_SKILL/store-context.sh" \
309
- --task-id "$task_id" \
310
- --key "phase-context" \
311
- --value "$PHASE_CONTEXT" \
312
- --namespace "swarm" >/dev/null
313
- echo "Stored phase context"
314
- fi
315
-
316
- # Store success criteria if provided using Redis coordination primitive
317
- if [ -n "$SUCCESS_CRITERIA" ]; then
318
- "$REDIS_COORD_SKILL/store-context.sh" \
319
- --task-id "$task_id" \
320
- --key "success-criteria" \
321
- --value "$SUCCESS_CRITERIA" \
322
- --namespace "swarm" >/dev/null
323
- echo "Stored success criteria"
324
- fi
325
-
326
- echo ""
327
- }
328
-
329
- build_agent_context() {
330
- local task_id="$1"
331
- local iteration="$2"
332
- local agent_type="$3"
333
- local feedback="$4"
334
- local loop_type="${5:-}" # NEW: loop3, loop2, or loop4 (optional)
335
-
336
- # Initialize context variables
337
- local task_desc="CFN Loop implementation"
338
- local deliverables=""
339
- local acceptance=""
340
- local epic_context=""
341
- local phase_context=""
342
- local target_files=""
343
-
344
- # Try to retrieve complete context from Redis
345
- if command -v "$REDIS_COORD_SKILL/get-context.sh" >/dev/null 2>&1; then
346
- if redis_context=$("$REDIS_COORD_SKILL/get-context.sh" --task-id "$task_id" --namespace "swarm" 2>/dev/null); then
347
- echo "📥 Retrieved Redis context for task: $task_id" >&2
348
-
349
- # Extract fields from Redis context
350
- task_desc=$(echo "$redis_context" | jq -r '.["epic-context"] // .epic_context // "CFN Loop implementation"' 2>/dev/null || echo "CFN Loop implementation")
351
- deliverables=$(echo "$redis_context" | jq -r '.deliverables // [] | if type == "array" then join(", ") else . end' 2>/dev/null || echo "")
352
- acceptance=$(echo "$redis_context" | jq -r '.acceptanceCriteria // .["acceptance-criteria"] // [] | if type == "array" then join(", ") else . end' 2>/dev/null || echo "")
353
- epic_context=$(echo "$redis_context" | jq -r '.["epic-context"] // ""' 2>/dev/null || echo "")
354
- phase_context=$(echo "$redis_context" | jq -r '.["phase-context"] // ""' 2>/dev/null || echo "")
355
- target_files=$(echo "$redis_context" | jq -r '.["target-files"] // ""' 2>/dev/null || echo "")
356
-
357
- echo "📋 Redis context extracted - Task: $task_desc" >&2
358
- else
359
- echo "⚠️ Failed to retrieve Redis context, using local SUCCESS_CRITERIA" >&2
360
- fi
361
- else
362
- echo "⚠️ get-context.sh not found, using local SUCCESS_CRITERIA" >&2
363
- fi
364
-
365
- # Fallback to local SUCCESS_CRITERIA if Redis retrieval failed or incomplete
366
- if [ -z "$deliverables" ] && [ -n "$SUCCESS_CRITERIA" ]; then
367
- deliverables=$(echo "$SUCCESS_CRITERIA" | jq -r '.deliverables // [] | join(", ")' 2>/dev/null || echo "")
368
- acceptance=$(echo "$SUCCESS_CRITERIA" | jq -r '.acceptanceCriteria // [] | join(", ")' 2>/dev/null || echo "")
369
- echo "🔄 Using local SUCCESS_CRITERIA as fallback" >&2
370
- fi
371
-
372
- # Build comprehensive context string
373
- local context="Task: $task_desc"
374
-
375
- if [ -n "$deliverables" ]; then
376
- context="$context | Deliverables: $deliverables"
377
- fi
378
-
379
- if [ -n "$acceptance" ]; then
380
- context="$context | Acceptance Criteria: $acceptance"
381
- fi
382
-
383
- if [ -n "$target_files" ]; then
384
- context="$context | Target Files: $target_files"
385
- fi
386
-
387
- context="$context | Iteration: $iteration"
388
-
389
- if [[ -n "$feedback" ]]; then
390
- context="$context | Feedback: $feedback"
391
- fi
392
-
393
- # Add epic/phase context if available
394
- if [ -n "$epic_context" ]; then
395
- context="$context | Epic: $epic_context"
396
- fi
397
-
398
- if [ -n "$phase_context" ]; then
399
- context="$context | Phase: $phase_context"
400
- fi
401
-
402
- # Inject CFN Loop context if injection script exists and loop_type provided
403
- if [[ -n "$loop_type" ]] && [[ -x "$SCRIPT_DIR/inject-loop-context.sh" ]]; then
404
- context=$("$SCRIPT_DIR/inject-loop-context.sh" "$loop_type" "$context" 2>/dev/null || echo "$context")
405
- fi
406
-
407
- echo "$context"
408
- }
409
-
410
- function spawn_loop3_agents() {
411
- local task_id="$1"
412
- local iteration="$2"
413
- local agents="$3"
414
-
415
- echo "[Loop 3] Spawning implementer agents (iteration $iteration)..."
416
-
417
- # Convert comma-separated agents to array
418
- IFS=',' read -ra AGENT_ARRAY <<< "$agents"
419
-
420
- # Track agent instance counts for unique ID generation
421
- declare -A AGENT_INSTANCE_COUNTS
422
-
423
- # Spawn each agent via CLI
424
- for agent_type in "${AGENT_ARRAY[@]}"; do
425
- # Generate unique agent ID (agent-type-iteration-instance)
426
- AGENT_INSTANCE_COUNTS["$agent_type"]=$((${AGENT_INSTANCE_COUNTS["$agent_type"]:-0} + 1))
427
- INSTANCE_NUM="${AGENT_INSTANCE_COUNTS["$agent_type"]}"
428
- UNIQUE_AGENT_ID="${agent_type}-${iteration}-${INSTANCE_NUM}"
429
-
430
- echo " Spawning: $agent_type (ID: $UNIQUE_AGENT_ID)"
431
-
432
- # Validate agent input
433
- local safe_agent_type safe_task_id safe_agent_id
434
- safe_agent_type=$(sanitize_input "$agent_type") || continue
435
- safe_task_id=$(sanitize_input "$task_id") || continue
436
- safe_agent_id=$(sanitize_input "$UNIQUE_AGENT_ID") || continue
437
-
438
- # Spawn agent in background with explicit agent ID
439
- npx claude-flow-novice agent "$safe_agent_type" \
440
- --task-id "$safe_task_id" \
441
- --agent-id "$safe_agent_id" \
442
- --iteration "$iteration" \
443
- --context "$(build_agent_context "$safe_task_id" "$iteration" "$safe_agent_type" "" "loop3")" &
444
-
445
- # Store PID for monitoring using unique agent ID
446
- AGENT_PID=$!
447
- "$REDIS_COORD_SKILL/store-context.sh" \
448
- --task-id "$task_id" \
449
- --key "${UNIQUE_AGENT_ID}:pid" \
450
- --value "{\"pid\": $AGENT_PID}" \
451
- --namespace "swarm" >/dev/null
452
-
453
- # Store agent ID mapping for later retrieval using Redis SADD for set storage
454
- redis-cli SADD "swarm:${task_id}:loop3:agent_ids:iteration${iteration}" "$UNIQUE_AGENT_ID" >/dev/null
455
- done
456
-
457
- echo "[Loop 3] All agents spawned"
458
- echo ""
459
- }
460
-
461
- function wait_for_agents() {
462
- local task_id="$1"
463
- local agents="$2"
464
- local timeout="$3"
465
- local iteration="${4:-1}"
466
-
467
- echo "Waiting for agents to complete (timeout: ${timeout}s)..."
468
-
469
- # Retrieve actual agent IDs from Redis (stored during spawn using SADD)
470
- local stored_ids
471
- stored_ids=$(redis-cli SMEMBERS "swarm:${task_id}:loop3:agent_ids:iteration${iteration}" 2>/dev/null | tr '\n' ',' | sed 's/,$//')
472
-
473
- # If stored IDs exist, use them; otherwise fallback to generating from agent types
474
- local -a AGENT_IDS
475
- if [ -n "$stored_ids" ]; then
476
- IFS=',' read -ra AGENT_IDS <<< "$stored_ids"
477
- echo " Retrieved ${#AGENT_IDS[@]} agent IDs from Redis"
478
- else
479
- # Fallback: Convert agent types to IDs (legacy compatibility)
480
- echo " Warning: No stored agent IDs, using agent types as fallback"
481
- IFS=',' read -ra AGENT_TYPES <<< "$agents"
482
-
483
- # Track instance counts to match spawn behavior
484
- declare -A AGENT_INSTANCE_COUNTS
485
- for agent_type in "${AGENT_TYPES[@]}"; do
486
- AGENT_INSTANCE_COUNTS["$agent_type"]=$((${AGENT_INSTANCE_COUNTS["$agent_type"]:-0} + 1))
487
- INSTANCE_NUM="${AGENT_INSTANCE_COUNTS["$agent_type"]}"
488
- AGENT_IDS+=("${agent_type}-${iteration}-${INSTANCE_NUM}")
489
- done
490
- fi
491
-
492
- # Parallel BLPOP implementation with shared timeout
493
- # Track start time for global timeout calculation
494
- local start_time=$(date +%s)
495
-
496
- # Spawn parallel BLPOP processes for each agent
497
- local pids=()
498
- local temp_files=()
499
-
500
- for unique_agent_id in "${AGENT_IDS[@]}"; do
501
- # Create temporary file for this agent's result
502
- local temp_file="/tmp/cfn-wait-${task_id}-${unique_agent_id}-$$.tmp"
503
- temp_files+=("$temp_file")
504
-
505
- echo " Waiting for: $unique_agent_id"
506
-
507
- # Spawn BLPOP in background, write result to temp file
508
- (
509
- local result
510
- if redis-cli blpop "swarm:${task_id}:${unique_agent_id}:done" "$timeout" >/dev/null 2>&1; then
511
- echo "success" > "$temp_file"
512
- else
513
- echo "timeout" > "$temp_file"
514
- fi
515
- exit 0
516
- ) &
517
-
518
- pids+=($!)
519
- done
520
-
521
- # Wait for all parallel BLPOP processes to complete
522
- # This ensures timeout is global (60s total), not per-agent (60s * N)
523
- for pid in "${pids[@]}"; do
524
- wait "$pid" 2>/dev/null || true
525
- done
526
-
527
- # Calculate actual elapsed time
528
- local end_time=$(date +%s)
529
- local elapsed=$((end_time - start_time))
530
-
531
- # Check results and report status
532
- local completed=0
533
- local timed_out=0
534
-
535
- for i in "${!AGENT_IDS[@]}"; do
536
- local unique_agent_id="${AGENT_IDS[$i]}"
537
- local temp_file="${temp_files[$i]}"
538
-
539
- if [ -f "$temp_file" ]; then
540
- local result=$(cat "$temp_file")
541
- if [ "$result" = "success" ]; then
542
- ((completed++))
543
- echo " ✅ $unique_agent_id completed"
544
- else
545
- ((timed_out++))
546
- echo " ⚠️ $unique_agent_id did not complete within timeout"
547
- fi
548
- rm -f "$temp_file"
549
- else
550
- ((timed_out++))
551
- echo " ❌ $unique_agent_id result file missing"
552
- fi
553
- done
554
-
555
- echo "Agents completed: $completed/${#AGENT_IDS[@]} (elapsed: ${elapsed}s)"
556
- echo ""
557
- }
558
-
559
- function wait_for_loop2_agents() {
560
- local task_id="$1"
561
- local agents="$2"
562
- local timeout="$3"
563
- local iteration="${4:-1}"
564
-
565
- echo "Waiting for Loop 2 validators to complete (timeout: ${timeout}s)..."
566
-
567
- # Retrieve actual agent IDs from Redis (stored during spawn using SADD)
568
- local stored_ids
569
- stored_ids=$(redis-cli SMEMBERS "swarm:${task_id}:loop2:agent_ids:iteration${iteration}" 2>/dev/null | tr '\n' ',' | sed 's/,$//')
570
-
571
- # If stored IDs exist, use them; otherwise fallback to generating from agent types
572
- local -a VALIDATOR_IDS
573
- if [ -n "$stored_ids" ]; then
574
- IFS=',' read -ra VALIDATOR_IDS <<< "$stored_ids"
575
- echo " Retrieved ${#VALIDATOR_IDS[@]} validator IDs from Redis"
576
- else
577
- # Fallback: Convert agent types to IDs (legacy compatibility)
578
- echo " Warning: No stored validator IDs, using agent types as fallback"
579
- IFS=',' read -ra AGENT_TYPES <<< "$agents"
580
-
581
- # Track instance counts to match spawn behavior
582
- declare -A AGENT_INSTANCE_COUNTS
583
- for agent_type in "${AGENT_TYPES[@]}"; do
584
- AGENT_INSTANCE_COUNTS["$agent_type"]=$((${AGENT_INSTANCE_COUNTS["$agent_type"]:-0} + 1))
585
- INSTANCE_NUM="${AGENT_INSTANCE_COUNTS["$agent_type"]}"
586
- VALIDATOR_IDS+=("${agent_type}-${iteration}-${INSTANCE_NUM}")
587
- done
588
- fi
589
-
590
- # Parallel BLPOP implementation
591
- local start_time=$(date +%s)
592
- local pids=()
593
- local temp_files=()
594
-
595
- for unique_validator_id in "${VALIDATOR_IDS[@]}"; do
596
- local temp_file="/tmp/cfn-wait-${task_id}-${unique_validator_id}-$$.tmp"
597
- temp_files+=("$temp_file")
598
-
599
- echo " Waiting for: $unique_validator_id"
600
-
601
- # Spawn BLPOP in background
602
- (
603
- if redis-cli blpop "swarm:${task_id}:${unique_validator_id}:done" "$timeout" >/dev/null 2>&1; then
604
- echo "success" > "$temp_file"
605
- else
606
- echo "timeout" > "$temp_file"
607
- fi
608
- exit 0
609
- ) &
610
-
611
- pids+=($!)
612
- done
613
-
614
- # Wait for all processes
615
- for pid in "${pids[@]}"; do
616
- wait "$pid" 2>/dev/null || true
617
- done
618
-
619
- # Check results
620
- local end_time=$(date +%s)
621
- local elapsed=$((end_time - start_time))
622
- local completed=0
623
- local timed_out=0
624
-
625
- for i in "${!VALIDATOR_IDS[@]}"; do
626
- local unique_validator_id="${VALIDATOR_IDS[$i]}"
627
- local temp_file="${temp_files[$i]}"
628
-
629
- if [ -f "$temp_file" ]; then
630
- local result=$(cat "$temp_file")
631
- if [ "$result" = "success" ]; then
632
- ((completed++))
633
- echo " ✅ $unique_validator_id completed"
634
- else
635
- ((timed_out++))
636
- echo " ⚠️ $unique_validator_id did not complete within timeout"
637
- fi
638
- rm -f "$temp_file"
639
- else
640
- ((timed_out++))
641
- echo " ❌ $unique_validator_id result file missing"
642
- fi
643
- done
644
-
645
- echo "Validators completed: $completed/${#VALIDATOR_IDS[@]} (elapsed: ${elapsed}s)"
646
- echo ""
647
- }
648
-
649
- function spawn_loop2_agents() {
650
- local task_id="$1"
651
- local iteration="$2"
652
- local agents="$3"
653
-
654
- echo "[Loop 2] Spawning validator agents (iteration $iteration)..."
655
-
656
- # Convert comma-separated agents to array
657
- IFS=',' read -ra AGENT_ARRAY <<< "$agents"
658
-
659
- # Track agent instance counts for unique ID generation
660
- declare -A AGENT_INSTANCE_COUNTS
661
-
662
- # Spawn each agent via CLI
663
- for agent_type in "${AGENT_ARRAY[@]}"; do
664
- # Generate unique agent ID (agent-type-iteration-instance)
665
- AGENT_INSTANCE_COUNTS["$agent_type"]=$((${AGENT_INSTANCE_COUNTS["$agent_type"]:-0} + 1))
666
- INSTANCE_NUM="${AGENT_INSTANCE_COUNTS["$agent_type"]}"
667
- UNIQUE_VALIDATOR_ID="${agent_type}-${iteration}-${INSTANCE_NUM}"
668
-
669
- echo " Spawning: $agent_type (ID: $UNIQUE_VALIDATOR_ID)"
670
-
671
- # Spawn agent in background with explicit agent ID
672
- npx claude-flow-novice agent "$agent_type" \
673
- --task-id "$task_id" \
674
- --agent-id "$UNIQUE_VALIDATOR_ID" \
675
- --iteration "$iteration" \
676
- --context "$(build_agent_context "$task_id" "$iteration" "$agent_type" "" "loop2")" &
677
-
678
- # Store PID for monitoring using unique agent ID
679
- AGENT_PID=$!
680
- "$REDIS_COORD_SKILL/store-context.sh" \
681
- --task-id "$task_id" \
682
- --key "${UNIQUE_VALIDATOR_ID}:pid" \
683
- --value "{\"pid\": $AGENT_PID}" \
684
- --namespace "swarm" >/dev/null
685
-
686
- # Store agent ID mapping for later retrieval using Redis SADD for set storage
687
- redis-cli SADD "swarm:${task_id}:loop2:agent_ids:iteration${iteration}" "$UNIQUE_VALIDATOR_ID" >/dev/null
688
- done
689
-
690
- echo "[Loop 2] All agents spawned"
691
- echo ""
692
- }
693
-
694
- function spawn_product_owner() {
695
- local task_id="$1"
696
- local iteration="$2"
697
-
698
- echo "[Product Owner] Spawning decision agent..."
699
-
700
- # BLOCKER #2 FIX: Match execute-decision.sh actual parameters
701
- # Required: --task-id, --agent-id, --consensus, --threshold, --iteration, --max-iterations
702
- local decision_output
703
- decision_output=$("$SCRIPT_DIR/.claude/skills/cfn-product-owner-decision/execute-decision.sh" \
704
- --task-id "$task_id" \
705
- --agent-id "$PRODUCT_OWNER" \
706
- --consensus "$LOOP2_FINAL_CONSENSUS" \
707
- --threshold "$CONSENSUS" \
708
- --iteration "$iteration" \
709
- --max-iterations "$MAX_ITERATIONS")
710
-
711
- # Parse decision from output
712
- if echo "$decision_output" | grep -q "PROCEED"; then
713
- FINAL_DECISION="PROCEED"
714
- elif echo "$decision_output" | grep -q "ITERATE"; then
715
- FINAL_DECISION="ITERATE"
716
- elif echo "$decision_output" | grep -q "ABORT"; then
717
- FINAL_DECISION="ABORT"
718
- else
719
- echo "Warning: Could not parse Product Owner decision, defaulting to ITERATE"
720
- FINAL_DECISION="ITERATE"
721
- fi
722
-
723
- echo "[Product Owner] Decision: $FINAL_DECISION"
724
- echo ""
725
- }
726
-
727
- function output_result() {
728
- local status="$1"
729
- local end_time=$(date +%s)
730
- local execution_time=$((end_time - START_TIME))
731
-
732
- echo "=============================================="
733
- echo "CFN Loop Execution Complete"
734
- echo "=============================================="
735
- echo "Status: $status"
736
- echo "Iterations: $ITERATIONS_COMPLETED"
737
- echo "Final Decision: $FINAL_DECISION"
738
- echo "Loop 3 Confidence: $LOOP3_FINAL_CONFIDENCE"
739
- echo "Loop 2 Consensus: $LOOP2_FINAL_CONSENSUS"
740
- echo "Deliverables Verified: $DELIVERABLES_VERIFIED"
741
- echo "Execution Time: ${execution_time}s"
742
- echo "=============================================="
743
-
744
- # Output structured JSON result
745
- cat <<EOF
746
- {
747
- "status": "$status",
748
- "iterations_completed": $ITERATIONS_COMPLETED,
749
- "final_decision": "$FINAL_DECISION",
750
- "loop3_confidence": $LOOP3_FINAL_CONFIDENCE,
751
- "loop2_consensus": $LOOP2_FINAL_CONSENSUS,
752
- "deliverables_verified": $DELIVERABLES_VERIFIED,
753
- "execution_time_seconds": $execution_time
754
- }
755
- EOF
756
- }
757
-
758
- ##############################################################################
759
- # Main CFN Loop
760
- ##############################################################################
761
-
762
- # Store context in Redis
763
- store_context "$TASK_ID"
764
-
765
- # Iteration loop
766
- for ((ITERATION=1; ITERATION<=MAX_ITERATIONS; ITERATION++)); do
767
- echo ""
768
- echo "=========================================="
769
- echo "Iteration $ITERATION / $MAX_ITERATIONS"
770
- echo "=========================================="
771
- echo ""
772
-
773
- ITERATIONS_COMPLETED=$ITERATION
774
-
775
- # Step 1: Spawn Loop 3 agents (implementers)
776
- spawn_loop3_agents "$TASK_ID" "$ITERATION" "$LOOP3_AGENTS"
777
-
778
- # Step 2: Wait for Loop 3 completion
779
- wait_for_agents "$TASK_ID" "$LOOP3_AGENTS" "$TIMEOUT" "$ITERATION"
780
-
781
- # Step 3: Verify deliverables (prevent "consensus on vapor")
782
- if [ -n "$EXPECTED_FILES" ] || [ -n "$EPIC_CONTEXT" ]; then
783
- # Extract task type from epic context for keyword detection
784
- TASK_TYPE=""
785
- if [ -n "$EPIC_CONTEXT" ]; then
786
- TASK_TYPE=$(echo "$EPIC_CONTEXT" | jq -r '.epicGoal // ""' 2>/dev/null || echo "")
787
- fi
788
-
789
- if "$HELPERS_DIR/deliverable-verifier.sh" \
790
- --expected-files "${EXPECTED_FILES:-}" \
791
- --task-type "${TASK_TYPE:-}"; then
792
- DELIVERABLES_VERIFIED=true
793
- else
794
- echo "❌ Deliverable verification failed - forcing Loop 3 iteration"
795
- # Use iteration manager to wake Loop 3 agents with explicit feedback
796
- "$HELPERS_DIR/iteration-manager.sh" \
797
- --task-id "$TASK_ID" \
798
- --iteration "$((ITERATION + 1))" \
799
- --agents "$LOOP3_AGENTS" \
800
- --feedback-source "swarm:${TASK_ID}:feedback"
801
- continue
802
- fi
803
- fi
804
-
805
- # Step 4: Gate check (Loop 3 self-validation)
806
- # Retrieve actual Loop 3 agent IDs for validation
807
- LOOP3_IDS=$(redis-cli SMEMBERS "swarm:${TASK_ID}:loop3:agent_ids:iteration${ITERATION}" 2>/dev/null | tr '\n' ',' | sed 's/,$//')
808
-
809
- if [ -z "$LOOP3_IDS" ]; then
810
- echo "⚠️ WARNING: No Loop 3 agent IDs found in Redis, using agent types as fallback"
811
- LOOP3_IDS="$LOOP3_AGENTS"
812
- fi
813
-
814
- if "$HELPERS_DIR/gate-check.sh" \
815
- --task-id "$TASK_ID" \
816
- --agents "$LOOP3_IDS" \
817
- --threshold "$GATE" \
818
- --min-quorum "$MIN_QUORUM_LOOP3"; then
819
- # Gate passed - store confidence
820
- LOOP3_FINAL_CONFIDENCE=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
821
- --task-id "$TASK_ID" \
822
- --agent-ids "$LOOP3_IDS" \
823
- --min-quorum "$MIN_QUORUM_LOOP3")
824
- else
825
- # Gate failed - iterate Loop 3
826
- echo "❌ Gate check failed - iterating Loop 3"
827
- "$HELPERS_DIR/iteration-manager.sh" \
828
- --task-id "$TASK_ID" \
829
- --iteration "$((ITERATION + 1))" \
830
- --agents "$LOOP3_AGENTS" \
831
- --feedback-source "swarm:${TASK_ID}:feedback"
832
- continue
833
- fi
834
-
835
- # Step 5: Spawn Loop 2 agents (validators)
836
- spawn_loop2_agents "$TASK_ID" "$ITERATION" "$LOOP2_AGENTS"
837
-
838
- # Step 6: Wait for Loop 2 completion
839
- wait_for_loop2_agents "$TASK_ID" "$LOOP2_AGENTS" "$TIMEOUT" "$ITERATION"
840
-
841
- # Step 7: Consensus check (Loop 2 validation)
842
- # Retrieve actual Loop 2 agent IDs for validation
843
- LOOP2_IDS=$(redis-cli SMEMBERS "swarm:${TASK_ID}:loop2:agent_ids:iteration${ITERATION}" 2>/dev/null | tr '\n' ',' | sed 's/,$//')
844
-
845
- if [ -z "$LOOP2_IDS" ]; then
846
- echo "⚠️ WARNING: No Loop 2 agent IDs found in Redis, using agent types as fallback"
847
- LOOP2_IDS="$LOOP2_AGENTS"
848
- fi
849
-
850
- if "$HELPERS_DIR/consensus.sh" \
851
- --task-id "$TASK_ID" \
852
- --agents "$LOOP2_IDS" \
853
- --threshold "$CONSENSUS" \
854
- --min-quorum "$MIN_QUORUM_LOOP2"; then
855
- # Consensus reached - store score
856
- LOOP2_FINAL_CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
857
- --task-id "$TASK_ID" \
858
- --agent-ids "$LOOP2_IDS" \
859
- --min-quorum "$MIN_QUORUM_LOOP2")
860
- else
861
- # Consensus failed - iterate all agents
862
- echo "❌ Consensus check failed - iterating all agents"
863
- "$HELPERS_DIR/iteration-manager.sh" \
864
- --task-id "$TASK_ID" \
865
- --iteration "$((ITERATION + 1))" \
866
- --agents "$LOOP3_AGENTS,$LOOP2_AGENTS" \
867
- --feedback-source "swarm:${TASK_ID}:feedback"
868
- continue
869
- fi
870
-
871
- # Step 8: Product Owner Decision
872
- spawn_product_owner "$TASK_ID" "$ITERATION"
873
-
874
- # Step 9: Execute decision
875
- case "$FINAL_DECISION" in
876
- PROCEED)
877
- # Launch ACE reflection in background (Loop 5)
878
- echo "[Loop 5] Launching reflection in background..."
879
-
880
- # Ensure log directory exists
881
- mkdir -p "$PROJECT_ROOT/.artifacts/logs"
882
-
883
- # Build reflection context from CFN Loop execution
884
- REFLECTION_CONTEXT=$(cat <<EOF
885
- {
886
- "task_id": "$TASK_ID",
887
- "task_type": "cfn_loop",
888
- "mode": "$MODE",
889
- "iterations_completed": $ITERATIONS_COMPLETED,
890
- "loop3_agents": "$LOOP3_AGENTS",
891
- "loop2_agents": "$LOOP2_AGENTS",
892
- "loop3_confidence": $LOOP3_FINAL_CONFIDENCE,
893
- "loop2_consensus": $LOOP2_FINAL_CONSENSUS,
894
- "gate_threshold": $GATE,
895
- "consensus_threshold": $CONSENSUS,
896
- "deliverables_verified": $DELIVERABLES_VERIFIED,
897
- "epic_context": $EPIC_CONTEXT,
898
- "phase_context": $PHASE_CONTEXT,
899
- "success_criteria": $SUCCESS_CRITERIA
900
- }
901
- EOF
902
- )
903
-
904
- # Launch reflection in background (non-blocking)
905
- (
906
- "$PROJECT_ROOT/.claude/skills/cfn-ace-system/invoke-context-reflect.sh" \
907
- --context "$REFLECTION_CONTEXT" \
908
- --output "/tmp/reflection-${TASK_ID}.json" 2>&1 | \
909
- tee -a "$PROJECT_ROOT/.artifacts/logs/ace-reflection-${TASK_ID}.log"
910
-
911
- # Log completion
912
- echo "[$(date -Iseconds)] Reflection complete for task $TASK_ID" >> \
913
- "$PROJECT_ROOT/.artifacts/logs/ace-reflection-${TASK_ID}.log"
914
- ) &
915
-
916
- REFLECTION_PID=$!
917
- echo "[Loop 5] Reflection launched (PID: $REFLECTION_PID)"
918
- echo ""
919
-
920
- # Continue with output (don't wait for reflection)
921
- output_result "success"
922
- exit 0
923
- ;;
924
- ABORT)
925
- output_result "aborted"
926
- exit 1
927
- ;;
928
- ITERATE)
929
- if [ $ITERATION -ge $MAX_ITERATIONS ]; then
930
- echo "❌ Max iterations reached"
931
- output_result "failed"
932
- exit 1
933
- fi
934
-
935
- echo "🔄 Product Owner requested iteration"
936
- "$HELPERS_DIR/iteration-manager.sh" \
937
- --task-id "$TASK_ID" \
938
- --iteration "$((ITERATION + 1))" \
939
- --agents "$LOOP3_AGENTS,$LOOP2_AGENTS" \
940
- --feedback-source "swarm:${TASK_ID}:feedback"
941
- continue
942
- ;;
943
- esac
944
- done
945
-
946
- # Max iterations reached without success
947
- echo "❌ Max iterations ($MAX_ITERATIONS) reached without PROCEED decision"
948
- output_result "failed"
949
- exit 1