claude-flow-novice 2.15.10 → 2.16.0

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 (652) hide show
  1. package/.claude/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  2. package/.claude/commands/cfn-loop-cli.md +158 -464
  3. package/.claude/commands/cfn-loop-trigger.md +114 -0
  4. package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  5. package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  6. package/.claude/hooks/cfn-invoke-post-edit.sh +22 -0
  7. package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  8. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  9. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  10. package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
  11. package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  12. package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
  13. package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  14. package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  15. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  16. package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
  17. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  18. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  19. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  20. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  21. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  22. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  23. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  24. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  25. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  26. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  27. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  28. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  29. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  30. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  31. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  32. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  33. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  34. package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  35. package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  36. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  37. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  38. package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  39. package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  40. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  41. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  42. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  43. package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
  44. package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  45. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  46. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  47. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  48. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  49. package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  50. package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  51. package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  52. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  53. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  54. package/{claude-assets/skills/cfn-loop-orchestration → .claude/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  55. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  56. package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  57. package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  58. package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
  59. package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
  60. package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  61. package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  62. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  63. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  64. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  65. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  66. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  67. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  68. package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  69. package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  70. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  71. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  72. package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  73. package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  74. package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  79. package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
  80. package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  81. package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  82. package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  83. package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  84. package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  85. package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  86. package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  87. package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  88. package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  89. package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  90. package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  91. package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  92. package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  93. package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  94. package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  95. package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
  96. package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  97. package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
  98. package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  99. package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  100. package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  101. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  102. package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
  103. package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  104. package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  105. package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  106. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  107. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  108. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  109. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  110. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  111. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  112. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  113. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  114. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  115. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  116. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  117. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  118. package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  119. package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  120. package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
  121. package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
  122. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  123. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  124. package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
  125. package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  126. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  127. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  128. package/.claude/skills/cfn-loop-validation/package.json +93 -0
  129. package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  130. package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  131. package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  132. package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
  133. package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
  134. package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  135. package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  136. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  137. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  138. package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
  139. package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  140. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  141. package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  142. package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
  143. package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  144. package/{claude-assets/skills/cfn-product-owner-decision → .claude/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  145. package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
  146. package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
  147. package/.claude/skills/pre-edit-backup/backup.sh +22 -0
  148. package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
  149. package/claude-assets/agents/cfn-dev-team/CLAUDE.md +9 -81
  150. package/claude-assets/agents/cfn-dev-team/architecture/base-template-generator.md +4 -4
  151. package/claude-assets/agents/cfn-dev-team/architecture/planner.md +4 -4
  152. package/claude-assets/agents/cfn-dev-team/architecture/system-architect.md +5 -5
  153. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +1 -0
  154. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
  155. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +1 -0
  156. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
  157. package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +14 -4
  158. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +63 -70
  159. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +50 -70
  160. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +13 -4
  161. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +27 -58
  162. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
  163. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +18 -20
  164. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +19 -28
  165. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
  166. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
  167. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -10
  168. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +15 -25
  169. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +17 -21
  170. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
  171. package/claude-assets/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +4 -4
  172. package/claude-assets/agents/cfn-dev-team/product-owners/cto-agent.md +4 -4
  173. package/claude-assets/agents/cfn-dev-team/product-owners/power-user-persona.md +4 -4
  174. package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +19 -27
  175. package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
  176. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
  177. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
  178. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
  179. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -67
  180. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +14 -70
  181. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +25 -73
  182. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +26 -65
  183. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +5 -5
  184. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +27 -67
  185. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +16 -73
  186. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +27 -67
  187. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +27 -60
  188. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +15 -74
  189. package/claude-assets/agents/cfn-dev-team/testers/tester.md +14 -60
  190. package/claude-assets/agents/cfn-dev-team/testers/unit/tdd-london-unit-swarm.md +5 -5
  191. package/claude-assets/agents/cfn-dev-team/testers/validation/validation-production-validator.md +4 -4
  192. package/claude-assets/agents/cfn-dev-team/testing/test-validation-agent.md +4 -4
  193. package/claude-assets/agents/cfn-dev-team/utility/agent-builder.md +16 -16
  194. package/claude-assets/agents/cfn-dev-team/utility/analyst.md +16 -32
  195. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +17 -17
  196. package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +10 -5
  197. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +12 -102
  198. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +127 -814
  199. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +16 -25
  200. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +157 -667
  201. package/claude-assets/agents/custom/cfn-docker-expert.md +102 -0
  202. package/claude-assets/agents/custom/cfn-loops-cli-expert.md +129 -0
  203. package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  204. package/claude-assets/commands/cfn-loop-cli.md +158 -464
  205. package/claude-assets/commands/cfn-loop-trigger.md +114 -0
  206. package/claude-assets/hooks/SKILL.md +518 -0
  207. package/claude-assets/hooks/SKILL.md.backup +471 -0
  208. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  209. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  210. package/claude-assets/hooks/cfn-invoke-post-edit.sh +22 -0
  211. package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  212. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  213. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  214. package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
  215. package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  216. package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
  217. package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
  218. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
  219. package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
  225. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
  226. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
  227. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
  228. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
  229. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
  230. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
  231. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
  232. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
  233. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
  234. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
  235. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
  236. package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
  237. package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
  238. package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  239. package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  240. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  241. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
  242. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  243. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  244. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  245. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  246. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  247. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  248. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  249. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  250. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  251. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  252. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  253. package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
  254. package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
  255. package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
  256. package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
  257. package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +369 -0
  258. package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
  259. package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
  260. package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
  261. package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
  262. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  263. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  264. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  265. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  266. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  267. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  268. package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  269. package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  270. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  271. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  272. package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  273. package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  274. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  275. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  276. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  277. package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
  278. package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  279. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  280. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  281. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  282. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  283. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  284. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  285. package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  287. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  288. package/{.claude/skills/cfn-loop-orchestration → claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  289. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  290. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  292. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  295. package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  296. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  301. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  304. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  305. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  306. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  307. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  308. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  309. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  310. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  311. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
  312. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  313. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
  314. package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  315. package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  316. package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  317. package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  318. package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  319. package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  320. package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  321. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  322. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  323. package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  324. package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  325. package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  326. package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  327. package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  328. package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
  329. package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
  330. package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
  331. package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
  332. package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
  333. package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
  334. package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
  335. package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
  336. package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
  337. package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
  338. package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
  339. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
  340. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
  341. package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
  342. package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
  343. package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
  344. package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  345. package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
  346. package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  347. package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
  348. package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  349. package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  350. package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  351. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  352. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
  353. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  354. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  355. package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  356. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  357. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  358. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  359. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  360. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  361. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  362. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  363. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  364. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  365. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  366. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  367. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  368. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  369. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  370. package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
  371. package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
  372. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  373. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  374. package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
  375. package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  376. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  377. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  378. package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
  379. package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  380. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  381. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  382. package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
  383. package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
  384. package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  385. package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  386. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  387. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  388. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
  389. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  390. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  391. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  392. package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
  393. package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  394. package/{.claude/skills/cfn-product-owner-decision → claude-assets/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  395. package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
  396. package/claude-assets/skills/cfn-provider-routing/SKILL.md +192 -0
  397. package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
  398. package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
  399. package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
  400. package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
  401. package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
  402. package/dist/agents/agent-loader.js +146 -165
  403. package/dist/agents/agent-loader.js.map +1 -1
  404. package/dist/api/auth-endpoints.js +415 -0
  405. package/dist/api/auth-endpoints.js.map +1 -0
  406. package/dist/api/task-endpoints.js +562 -0
  407. package/dist/api/task-endpoints.js.map +1 -0
  408. package/dist/backend/server.js +418 -0
  409. package/dist/backend/server.js.map +1 -0
  410. package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
  411. package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
  412. package/dist/cfn-loop/product-owner/index.js +1 -0
  413. package/dist/cfn-loop/product-owner/index.js.map +1 -1
  414. package/dist/cli/agent-command.js +1 -1
  415. package/dist/cli/agent-command.js.map +1 -1
  416. package/dist/cli/agent-completion.js +273 -0
  417. package/dist/cli/agent-completion.js.map +1 -0
  418. package/dist/cli/agent-definition-parser.js +37 -4
  419. package/dist/cli/agent-definition-parser.js.map +1 -1
  420. package/dist/cli/agent-executor.js +32 -2
  421. package/dist/cli/agent-executor.js.map +1 -1
  422. package/dist/cli/agent-prompt-builder.js +83 -48
  423. package/dist/cli/agent-prompt-builder.js.map +1 -1
  424. package/dist/cli/agent-spawner.js +499 -0
  425. package/dist/cli/agent-spawner.js.map +1 -0
  426. package/dist/cli/anthropic-client.js +10 -3
  427. package/dist/cli/anthropic-client.js.map +1 -1
  428. package/dist/cli/config-manager.js.map +1 -1
  429. package/dist/cli/index.js +11 -0
  430. package/dist/cli/index.js.map +1 -1
  431. package/dist/cli/parse-decision-cli.js +268 -0
  432. package/dist/cli/parse-decision-cli.js.map +1 -0
  433. package/dist/cli/post-edit-hook.js +83 -0
  434. package/dist/cli/post-edit-hook.js.map +1 -0
  435. package/dist/cli/pre-edit-hook.js +77 -0
  436. package/dist/cli/pre-edit-hook.js.map +1 -0
  437. package/dist/cli/spawn-agent-cli.js +209 -0
  438. package/dist/cli/spawn-agent-cli.js.map +1 -0
  439. package/dist/coordination/coordination-wrapper.js +383 -0
  440. package/dist/coordination/coordination-wrapper.js.map +1 -0
  441. package/dist/coordination/store-success-criteria.js +68 -0
  442. package/dist/coordination/store-success-criteria.js.map +1 -0
  443. package/dist/coordination/store-task-context.js +65 -0
  444. package/dist/coordination/store-task-context.js.map +1 -0
  445. package/dist/hooks/backup-manager.js +273 -0
  446. package/dist/hooks/backup-manager.js.map +1 -0
  447. package/dist/hooks/post-edit-validator.js +388 -0
  448. package/dist/hooks/post-edit-validator.js.map +1 -0
  449. package/dist/integration/index.js +19 -0
  450. package/dist/integration/index.js.map +1 -0
  451. package/dist/integration/task-mode-adapter.js +297 -0
  452. package/dist/integration/task-mode-adapter.js.map +1 -0
  453. package/dist/integration/trigger-dev-client.js +253 -0
  454. package/dist/integration/trigger-dev-client.js.map +1 -0
  455. package/dist/integration/trigger-dev-webhooks.js +362 -0
  456. package/dist/integration/trigger-dev-webhooks.js.map +1 -0
  457. package/dist/lib/path-validator.js +14 -5
  458. package/dist/lib/path-validator.js.map +1 -1
  459. package/dist/lib/redis-queue-manager.js +5 -1
  460. package/dist/lib/redis-queue-manager.js.map +1 -1
  461. package/dist/middleware/authentication.js +317 -0
  462. package/dist/middleware/authentication.js.map +1 -0
  463. package/dist/services/authentication.js +669 -0
  464. package/dist/services/authentication.js.map +1 -0
  465. package/dist/services/session-management.js +436 -0
  466. package/dist/services/session-management.js.map +1 -0
  467. package/dist/services/skill-deployment.js +8 -6
  468. package/dist/services/skill-deployment.js.map +1 -1
  469. package/dist/services/user-service.js +710 -0
  470. package/dist/services/user-service.js.map +1 -0
  471. package/dist/types/trigger-dev-events.d.js +10 -0
  472. package/dist/types/trigger-dev-events.d.js.map +1 -0
  473. package/docs/README.md +240 -0
  474. package/package.json +13 -4
  475. package/scripts/compare-workflow-performance.sh +556 -0
  476. package/scripts/migrate-to-optimized-workflows.sh +438 -0
  477. package/scripts/organize-docs.sh +338 -0
  478. package/scripts/trigger-dev-setup.sh +267 -0
  479. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  480. package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
  481. package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  482. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  483. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  484. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  485. package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
  486. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  487. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  488. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  489. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  490. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
  491. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  492. package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  493. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  494. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  495. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  496. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  497. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  498. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  499. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  500. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  501. package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  502. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  503. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  504. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  505. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  506. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  507. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  508. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  509. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  510. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  511. package/.claude/skills/cfn-redis-coordination/config.json +0 -61
  512. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  513. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  514. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  515. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  516. package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
  517. package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
  518. package/.claude/skills/cfn-redis-coordination/package.json +0 -45
  519. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  520. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  521. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  522. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  523. package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
  524. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  525. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  526. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  527. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  528. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  529. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  530. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  531. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  532. package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
  533. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  534. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  535. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  536. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  537. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  538. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  539. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  540. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  541. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -976
  542. package/claude-assets/agents/typescript-specialist.md +0 -280
  543. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  544. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
  545. package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  546. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  547. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  548. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
  549. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  550. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
  551. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  552. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  553. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  554. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  555. package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  556. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  557. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  558. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  559. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  560. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  561. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  562. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  563. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  564. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  565. package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  566. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  567. package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  568. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  569. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  570. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  571. package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
  572. package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  573. package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  574. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  575. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  576. package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
  577. package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  578. package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  579. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  580. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  581. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
  582. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
  583. package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
  584. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  585. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  586. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  587. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  588. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
  589. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  590. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  591. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  592. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  593. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  594. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  595. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  596. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  597. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
  598. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  599. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  600. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  601. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  602. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  603. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  604. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  605. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  606. package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
  607. package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
  608. package/dist/coordination/index.js +0 -25
  609. package/dist/coordination/index.js.map +0 -1
  610. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
  611. package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
  612. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
  613. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
  614. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
  615. /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  616. /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  617. /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  618. /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  619. /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  620. /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  621. /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  622. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  623. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  624. /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  625. /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  626. /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  627. /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  628. /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  629. /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  630. /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  631. /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  632. /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  633. /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
  634. /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  635. /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  636. /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  637. /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  638. /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  639. /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  640. /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  641. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  642. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  643. /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  644. /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  645. /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  646. /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  647. /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  648. /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  649. /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  650. /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  651. /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  652. /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Unified TypeScript Coordination Wrapper
3
+ *
4
+ * Provides a type-safe interface for all Redis-based coordination operations
5
+ * in the CFN Loop critical path. Wraps the existing redis-coordinator with
6
+ * semantic coordination methods for:
7
+ * - Agent lifecycle management
8
+ * - Signal/wait primitives
9
+ * - Consensus collection
10
+ * - Task state management
11
+ *
12
+ * Key patterns:
13
+ * - swarm:* namespace for unified coordination
14
+ * - Backward compatible with cfn_loop:task:* legacy namespace
15
+ * - Type-safe agent state tracking
16
+ * - Automatic timeout handling
17
+ */ import Redis from 'ioredis';
18
+ import { EventEmitter } from 'events';
19
+ /**
20
+ * Unified Coordination Wrapper
21
+ *
22
+ * Provides semantic coordination methods that abstract away Redis key patterns
23
+ * and protocol details while maintaining type safety.
24
+ */ export class CoordinationWrapper extends EventEmitter {
25
+ redis;
26
+ taskId;
27
+ namespace;
28
+ defaultTimeout;
29
+ isConnected = false;
30
+ constructor(config){
31
+ super();
32
+ this.taskId = config.taskId;
33
+ this.namespace = config.namespace || 'swarm';
34
+ this.defaultTimeout = config.defaultTimeout || 120000; // 120 seconds
35
+ // Create Redis client with provided configuration
36
+ this.redis = new Redis({
37
+ host: config.redisHost,
38
+ port: config.redisPort,
39
+ db: config.redisDb || 0,
40
+ lazyConnect: true,
41
+ maxRetriesPerRequest: null,
42
+ enableReadyCheck: false
43
+ });
44
+ // Set up error handling
45
+ this.redis.on('error', (error)=>{
46
+ this.emit('redis-error', error);
47
+ });
48
+ this.redis.on('connect', ()=>{
49
+ this.isConnected = true;
50
+ this.emit('connected');
51
+ });
52
+ this.redis.on('disconnect', ()=>{
53
+ this.isConnected = false;
54
+ this.emit('disconnected');
55
+ });
56
+ }
57
+ /**
58
+ * Connect to Redis
59
+ */ async connect() {
60
+ if (!this.isConnected) {
61
+ await this.redis.connect();
62
+ }
63
+ }
64
+ /**
65
+ * Disconnect from Redis
66
+ */ async disconnect() {
67
+ if (this.isConnected) {
68
+ await this.redis.disconnect();
69
+ }
70
+ }
71
+ /**
72
+ * Check if connected to Redis
73
+ */ isReady() {
74
+ return this.isConnected;
75
+ }
76
+ /**
77
+ * AGENT LIFECYCLE MANAGEMENT
78
+ */ /**
79
+ * Register a spawned agent in the coordination system
80
+ */ async registerAgent(agentId, agentType) {
81
+ const state = {
82
+ agentId,
83
+ type: agentType,
84
+ status: 'spawned',
85
+ timestamp: new Date().toISOString()
86
+ };
87
+ const key = this.getAgentStateKey(agentId);
88
+ await this.redis.set(key, JSON.stringify(state), 'EX', 86400); // 24h expiry
89
+ }
90
+ /**
91
+ * Update agent status
92
+ */ async updateAgentStatus(agentId, status) {
93
+ const key = this.getAgentStateKey(agentId);
94
+ const state = await this.getAgentState(agentId);
95
+ if (!state) {
96
+ throw new Error(`Agent ${agentId} not registered`);
97
+ }
98
+ state.status = status;
99
+ state.timestamp = new Date().toISOString();
100
+ await this.redis.set(key, JSON.stringify(state), 'EX', 86400);
101
+ }
102
+ /**
103
+ * Signal agent completion with confidence score
104
+ */ async signalCompletion(agentId, confidence, options) {
105
+ const key = this.getAgentStateKey(agentId);
106
+ const state = await this.getAgentState(agentId);
107
+ if (!state) {
108
+ throw new Error(`Agent ${agentId} not registered`);
109
+ }
110
+ state.status = 'completed';
111
+ state.confidence = confidence;
112
+ state.testPassRate = options?.testPassRate;
113
+ state.testsRun = options?.testsRun;
114
+ state.testsPassed = options?.testsPassed;
115
+ state.result = options?.result;
116
+ state.iteration = options?.iteration;
117
+ state.timestamp = new Date().toISOString();
118
+ // Store in agent state with 24h expiry
119
+ await this.redis.set(key, JSON.stringify(state), 'EX', 86400);
120
+ // Also publish completion signal to waiting agents
121
+ const channel = this.getCompletionChannel(agentId);
122
+ await this.redis.publish(channel, JSON.stringify(state));
123
+ // Add to completion leaderboard for consensus collection
124
+ const leaderboardKey = this.getCompletionLeaderboardKey();
125
+ await this.redis.zadd(leaderboardKey, confidence * 100, JSON.stringify({
126
+ agentId,
127
+ confidence,
128
+ timestamp: state.timestamp
129
+ }));
130
+ }
131
+ /**
132
+ * Get agent state
133
+ */ async getAgentState(agentId) {
134
+ const key = this.getAgentStateKey(agentId);
135
+ const data = await this.redis.get(key);
136
+ if (!data) {
137
+ return null;
138
+ }
139
+ return JSON.parse(data);
140
+ }
141
+ /**
142
+ * Get all agents in current task
143
+ */ async getAllAgents() {
144
+ const pattern = this.getAgentStateKeyPattern();
145
+ const keys = await this.redis.keys(pattern);
146
+ const agents = [];
147
+ for (const key of keys){
148
+ const data = await this.redis.get(key);
149
+ if (data) {
150
+ agents.push(JSON.parse(data));
151
+ }
152
+ }
153
+ return agents;
154
+ }
155
+ /**
156
+ * COORDINATION PRIMITIVES
157
+ */ /**
158
+ * Wait for a coordination signal with timeout
159
+ */ async waitForSignal(channel, timeoutMs) {
160
+ const timeout = timeoutMs || this.defaultTimeout;
161
+ const timeoutSeconds = Math.ceil(timeout / 1000);
162
+ try {
163
+ // Use BLPOP to block-wait on a list
164
+ const listKey = this.getSignalKey(channel);
165
+ const result = await this.redis.blpop(listKey, timeoutSeconds);
166
+ if (result === null) {
167
+ return {
168
+ received: false,
169
+ timeout: true
170
+ };
171
+ }
172
+ return {
173
+ received: true,
174
+ message: result[1],
175
+ timestamp: new Date().toISOString(),
176
+ timeout: false
177
+ };
178
+ } catch (error) {
179
+ return {
180
+ received: false,
181
+ timeout: false
182
+ };
183
+ }
184
+ }
185
+ /**
186
+ * Broadcast a signal to all waiting agents
187
+ */ async broadcastSignal(channel, message) {
188
+ // Use pub/sub for broadcast (fire-and-forget to subscribers)
189
+ await this.redis.publish(channel, message);
190
+ // Also store in a list for new subscribers (via BLPOP pattern)
191
+ const listKey = this.getSignalKey(channel);
192
+ await this.redis.lpush(listKey, message);
193
+ // Keep only recent signals (last 100)
194
+ await this.redis.ltrim(listKey, 0, 99);
195
+ // Expire the list after 1 hour
196
+ await this.redis.expire(listKey, 3600);
197
+ }
198
+ /**
199
+ * Subscribe to signal channel (pub/sub pattern)
200
+ */ subscribeToSignal(channel, callback) {
201
+ // Create a separate subscriber for pub/sub
202
+ const subscriber = this.redis.duplicate();
203
+ subscriber.on('message', (chan, message)=>{
204
+ if (chan === channel) {
205
+ callback(message);
206
+ }
207
+ });
208
+ subscriber.subscribe(channel);
209
+ // Return unsubscribe function
210
+ return ()=>{
211
+ subscriber.unsubscribe(channel);
212
+ subscriber.disconnect();
213
+ };
214
+ }
215
+ /**
216
+ * CONSENSUS & VALIDATION
217
+ */ /**
218
+ * Collect consensus scores from multiple validators
219
+ */ async collectConsensus(agentIds, timeoutMs) {
220
+ const timeout = timeoutMs || this.defaultTimeout;
221
+ const startTime = Date.now();
222
+ const scores = [];
223
+ for (const agentId of agentIds){
224
+ const elapsed = Date.now() - startTime;
225
+ const remaining = Math.max(1, timeout - elapsed);
226
+ const remainingSeconds = Math.ceil(remaining / 1000);
227
+ // Wait for each validator to report consensus
228
+ const scoreKey = this.getConsensusKey(agentId);
229
+ const data = await this.redis.blpop(scoreKey, remainingSeconds);
230
+ if (data) {
231
+ const score = JSON.parse(data[1]);
232
+ scores.push(score);
233
+ }
234
+ }
235
+ return scores;
236
+ }
237
+ /**
238
+ * Report a consensus score
239
+ */ async reportConsensusScore(agentId, score, feedback) {
240
+ const consensusScore = {
241
+ agentId,
242
+ score,
243
+ feedback,
244
+ timestamp: new Date().toISOString()
245
+ };
246
+ const key = this.getConsensusKey(agentId);
247
+ await this.redis.lpush(key, JSON.stringify(consensusScore));
248
+ await this.redis.expire(key, 86400); // 24h expiry
249
+ }
250
+ /**
251
+ * Calculate average consensus from scores
252
+ */ calculateAverageConsensus(scores) {
253
+ if (scores.length === 0) {
254
+ return 0;
255
+ }
256
+ const sum = scores.reduce((acc, score)=>acc + score.score, 0);
257
+ return sum / scores.length;
258
+ }
259
+ /**
260
+ * TASK STATE MANAGEMENT
261
+ */ /**
262
+ * Store task context (usually CFN Loop parameters)
263
+ */ async storeTaskContext(context) {
264
+ const key = this.getTaskContextKey();
265
+ await this.redis.set(key, JSON.stringify(context), 'EX', 86400);
266
+ }
267
+ /**
268
+ * Load task context
269
+ */ async loadTaskContext() {
270
+ const key = this.getTaskContextKey();
271
+ const data = await this.redis.get(key);
272
+ if (!data) {
273
+ return null;
274
+ }
275
+ return JSON.parse(data);
276
+ }
277
+ /**
278
+ * Update task status
279
+ */ async updateTaskStatus(status, iteration) {
280
+ const key = this.getTaskStatusKey();
281
+ const state = {
282
+ taskId: this.taskId,
283
+ status,
284
+ updatedAt: new Date().toISOString()
285
+ };
286
+ if (iteration !== undefined) {
287
+ state.iteration = iteration;
288
+ }
289
+ // Get existing context if available
290
+ const contextData = await this.loadTaskContext();
291
+ if (contextData) {
292
+ state.context = contextData;
293
+ }
294
+ // Get all agents
295
+ state.agents = await this.getAllAgents();
296
+ await this.redis.set(key, JSON.stringify(state), 'EX', 86400);
297
+ }
298
+ /**
299
+ * Get full task state snapshot
300
+ */ async getTaskState() {
301
+ const key = this.getTaskStatusKey();
302
+ const data = await this.redis.get(key);
303
+ if (!data) {
304
+ return null;
305
+ }
306
+ return JSON.parse(data);
307
+ }
308
+ /**
309
+ * HELPER METHODS FOR KEY GENERATION
310
+ */ getAgentStateKey(agentId) {
311
+ if (this.namespace === 'cfn_loop') {
312
+ return `cfn_loop:task:${this.taskId}:agent:${agentId}`;
313
+ }
314
+ return `${this.namespace}:${this.taskId}:agent:${agentId}`;
315
+ }
316
+ getAgentStateKeyPattern() {
317
+ if (this.namespace === 'cfn_loop') {
318
+ return `cfn_loop:task:${this.taskId}:agent:*`;
319
+ }
320
+ return `${this.namespace}:${this.taskId}:agent:*`;
321
+ }
322
+ getCompletionChannel(agentId) {
323
+ if (this.namespace === 'cfn_loop') {
324
+ return `cfn_loop:task:${this.taskId}:completion:${agentId}`;
325
+ }
326
+ return `${this.namespace}:${this.taskId}:completion`;
327
+ }
328
+ getCompletionLeaderboardKey() {
329
+ if (this.namespace === 'cfn_loop') {
330
+ return `cfn_loop:task:${this.taskId}:completions`;
331
+ }
332
+ return `${this.namespace}:${this.taskId}:completions`;
333
+ }
334
+ getSignalKey(channel) {
335
+ if (this.namespace === 'cfn_loop') {
336
+ return `cfn_loop:task:${this.taskId}:signal:${channel}`;
337
+ }
338
+ return `${this.namespace}:${this.taskId}:signal:${channel}`;
339
+ }
340
+ getConsensusKey(agentId) {
341
+ if (this.namespace === 'cfn_loop') {
342
+ return `cfn_loop:task:${this.taskId}:consensus:${agentId}`;
343
+ }
344
+ return `${this.namespace}:${this.taskId}:consensus:${agentId}`;
345
+ }
346
+ getTaskContextKey() {
347
+ if (this.namespace === 'cfn_loop') {
348
+ return `cfn_loop:task:${this.taskId}:context`;
349
+ }
350
+ return `${this.namespace}:${this.taskId}:context`;
351
+ }
352
+ getTaskStatusKey() {
353
+ if (this.namespace === 'cfn_loop') {
354
+ return `cfn_loop:task:${this.taskId}:status`;
355
+ }
356
+ return `${this.namespace}:${this.taskId}:status`;
357
+ }
358
+ /**
359
+ * CLEANUP & UTILITIES
360
+ */ /**
361
+ * Clear all coordination state for this task
362
+ */ async clearTaskState() {
363
+ const pattern = this.getTaskKeysPattern();
364
+ const keys = await this.redis.keys(pattern);
365
+ if (keys.length > 0) {
366
+ await this.redis.del(...keys);
367
+ }
368
+ }
369
+ getTaskKeysPattern() {
370
+ if (this.namespace === 'cfn_loop') {
371
+ return `cfn_loop:task:${this.taskId}:*`;
372
+ }
373
+ return `${this.namespace}:${this.taskId}:*`;
374
+ }
375
+ /**
376
+ * Get Redis client for advanced operations
377
+ */ getRedisClient() {
378
+ return this.redis;
379
+ }
380
+ }
381
+ export default CoordinationWrapper;
382
+
383
+ //# sourceMappingURL=coordination-wrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/coordination/coordination-wrapper.ts"],"sourcesContent":["/**\r\n * Unified TypeScript Coordination Wrapper\r\n *\r\n * Provides a type-safe interface for all Redis-based coordination operations\r\n * in the CFN Loop critical path. Wraps the existing redis-coordinator with\r\n * semantic coordination methods for:\r\n * - Agent lifecycle management\r\n * - Signal/wait primitives\r\n * - Consensus collection\r\n * - Task state management\r\n *\r\n * Key patterns:\r\n * - swarm:* namespace for unified coordination\r\n * - Backward compatible with cfn_loop:task:* legacy namespace\r\n * - Type-safe agent state tracking\r\n * - Automatic timeout handling\r\n */\r\n\r\nimport Redis from 'ioredis';\nimport type { Redis as RedisClient } from 'ioredis';\nimport { EventEmitter } from 'events';\r\n\r\n/**\r\n * Configuration for coordination wrapper\r\n */\r\nexport interface CoordinationConfig {\r\n redisHost: string;\r\n redisPort: number;\r\n redisDb?: number;\r\n taskId: string;\r\n namespace?: 'swarm' | 'cfn_loop';\r\n defaultTimeout?: number;\r\n}\r\n\r\n/**\r\n * Agent state as tracked in Redis\r\n */\r\nexport interface AgentState {\r\n agentId: string;\r\n type: string;\r\n status: 'spawned' | 'running' | 'waiting' | 'completed' | 'failed';\r\n confidence?: number;\r\n testPassRate?: number;\r\n testsRun?: number;\r\n testsPassed?: number;\r\n result?: Record<string, unknown>;\r\n timestamp: string;\r\n iteration?: number;\r\n}\r\n\r\n/**\r\n * Consensus score from validator\r\n */\r\nexport interface ConsensusScore {\r\n agentId: string;\r\n score: number;\r\n feedback?: string;\r\n timestamp: string;\r\n}\r\n\r\n/**\r\n * Task state snapshot\r\n */\r\nexport interface TaskState {\r\n taskId: string;\r\n status: 'pending' | 'in_progress' | 'completed' | 'failed';\r\n context: Record<string, unknown>;\r\n agents: AgentState[];\r\n consensus?: number;\r\n iteration: number;\r\n updatedAt: string;\r\n}\r\n\r\n/**\r\n * Coordination signal/wait result\r\n */\r\nexport interface SignalResult {\r\n received: boolean;\r\n message?: string;\r\n timestamp?: string;\r\n timeout: boolean;\r\n}\r\n\r\n/**\r\n * Unified Coordination Wrapper\r\n *\r\n * Provides semantic coordination methods that abstract away Redis key patterns\r\n * and protocol details while maintaining type safety.\r\n */\r\nexport class CoordinationWrapper extends EventEmitter {\r\n private redis: RedisClient;\r\n private taskId: string;\r\n private namespace: 'swarm' | 'cfn_loop';\r\n private defaultTimeout: number;\r\n private isConnected: boolean = false;\r\n\r\n constructor(config: CoordinationConfig) {\r\n super();\r\n this.taskId = config.taskId;\r\n this.namespace = config.namespace || 'swarm';\r\n this.defaultTimeout = config.defaultTimeout || 120000; // 120 seconds\r\n\r\n // Create Redis client with provided configuration\r\n this.redis = new (Redis as any)({\r\n host: config.redisHost,\r\n port: config.redisPort,\r\n db: config.redisDb || 0,\r\n lazyConnect: true,\r\n maxRetriesPerRequest: null, // Needed for blocking operations\r\n enableReadyCheck: false\r\n });\r\n\r\n // Set up error handling\r\n this.redis.on('error', (error) => {\r\n this.emit('redis-error', error);\r\n });\r\n\r\n this.redis.on('connect', () => {\r\n this.isConnected = true;\r\n this.emit('connected');\r\n });\r\n\r\n this.redis.on('disconnect', () => {\r\n this.isConnected = false;\r\n this.emit('disconnected');\r\n });\r\n }\r\n\r\n /**\r\n * Connect to Redis\r\n */\r\n async connect(): Promise<void> {\r\n if (!this.isConnected) {\r\n await this.redis.connect();\r\n }\r\n }\r\n\r\n /**\r\n * Disconnect from Redis\r\n */\r\n async disconnect(): Promise<void> {\r\n if (this.isConnected) {\r\n await this.redis.disconnect();\r\n }\r\n }\r\n\r\n /**\r\n * Check if connected to Redis\r\n */\r\n isReady(): boolean {\r\n return this.isConnected;\r\n }\r\n\r\n /**\r\n * AGENT LIFECYCLE MANAGEMENT\r\n */\r\n\r\n /**\r\n * Register a spawned agent in the coordination system\r\n */\r\n async registerAgent(agentId: string, agentType: string): Promise<void> {\r\n const state: AgentState = {\r\n agentId,\r\n type: agentType,\r\n status: 'spawned',\r\n timestamp: new Date().toISOString()\r\n };\r\n\r\n const key = this.getAgentStateKey(agentId);\r\n await this.redis.set(key, JSON.stringify(state), 'EX', 86400); // 24h expiry\r\n }\r\n\r\n /**\r\n * Update agent status\r\n */\r\n async updateAgentStatus(\r\n agentId: string,\r\n status: AgentState['status']\r\n ): Promise<void> {\r\n const key = this.getAgentStateKey(agentId);\r\n const state = await this.getAgentState(agentId);\r\n\r\n if (!state) {\r\n throw new Error(`Agent ${agentId} not registered`);\r\n }\r\n\r\n state.status = status;\r\n state.timestamp = new Date().toISOString();\r\n\r\n await this.redis.set(key, JSON.stringify(state), 'EX', 86400);\r\n }\r\n\r\n /**\r\n * Signal agent completion with confidence score\r\n */\r\n async signalCompletion(\r\n agentId: string,\r\n confidence: number,\r\n options?: {\r\n testPassRate?: number;\r\n testsRun?: number;\r\n testsPassed?: number;\r\n result?: Record<string, unknown>;\r\n iteration?: number;\r\n }\r\n ): Promise<void> {\r\n const key = this.getAgentStateKey(agentId);\r\n const state = await this.getAgentState(agentId);\r\n\r\n if (!state) {\r\n throw new Error(`Agent ${agentId} not registered`);\r\n }\r\n\r\n state.status = 'completed';\r\n state.confidence = confidence;\r\n state.testPassRate = options?.testPassRate;\r\n state.testsRun = options?.testsRun;\r\n state.testsPassed = options?.testsPassed;\r\n state.result = options?.result;\r\n state.iteration = options?.iteration;\r\n state.timestamp = new Date().toISOString();\r\n\r\n // Store in agent state with 24h expiry\r\n await this.redis.set(key, JSON.stringify(state), 'EX', 86400);\r\n\r\n // Also publish completion signal to waiting agents\r\n const channel = this.getCompletionChannel(agentId);\r\n await this.redis.publish(channel, JSON.stringify(state));\r\n\r\n // Add to completion leaderboard for consensus collection\r\n const leaderboardKey = this.getCompletionLeaderboardKey();\r\n await this.redis.zadd(\r\n leaderboardKey,\r\n confidence * 100, // Score for sorting\r\n JSON.stringify({\r\n agentId,\r\n confidence,\r\n timestamp: state.timestamp\r\n })\r\n );\r\n }\r\n\r\n /**\r\n * Get agent state\r\n */\r\n async getAgentState(agentId: string): Promise<AgentState | null> {\r\n const key = this.getAgentStateKey(agentId);\r\n const data = await this.redis.get(key);\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(data) as AgentState;\r\n }\r\n\r\n /**\r\n * Get all agents in current task\r\n */\r\n async getAllAgents(): Promise<AgentState[]> {\r\n const pattern = this.getAgentStateKeyPattern();\r\n const keys = await this.redis.keys(pattern);\r\n\r\n const agents: AgentState[] = [];\r\n for (const key of keys) {\r\n const data = await this.redis.get(key);\r\n if (data) {\r\n agents.push(JSON.parse(data) as AgentState);\r\n }\r\n }\r\n\r\n return agents;\r\n }\r\n\r\n /**\r\n * COORDINATION PRIMITIVES\r\n */\r\n\r\n /**\r\n * Wait for a coordination signal with timeout\r\n */\r\n async waitForSignal(\r\n channel: string,\r\n timeoutMs?: number\r\n ): Promise<SignalResult> {\r\n const timeout = timeoutMs || this.defaultTimeout;\r\n const timeoutSeconds = Math.ceil(timeout / 1000);\r\n\r\n try {\r\n // Use BLPOP to block-wait on a list\r\n const listKey = this.getSignalKey(channel);\r\n const result = await this.redis.blpop(listKey, timeoutSeconds);\r\n\r\n if (result === null) {\r\n return {\r\n received: false,\r\n timeout: true\r\n };\r\n }\r\n\r\n return {\r\n received: true,\r\n message: result[1],\r\n timestamp: new Date().toISOString(),\r\n timeout: false\r\n };\r\n } catch (error) {\r\n return {\r\n received: false,\r\n timeout: false\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Broadcast a signal to all waiting agents\r\n */\r\n async broadcastSignal(channel: string, message: string): Promise<void> {\r\n // Use pub/sub for broadcast (fire-and-forget to subscribers)\r\n await this.redis.publish(channel, message);\r\n\r\n // Also store in a list for new subscribers (via BLPOP pattern)\r\n const listKey = this.getSignalKey(channel);\r\n await this.redis.lpush(listKey, message);\r\n\r\n // Keep only recent signals (last 100)\r\n await this.redis.ltrim(listKey, 0, 99);\r\n\r\n // Expire the list after 1 hour\r\n await this.redis.expire(listKey, 3600);\r\n }\r\n\r\n /**\r\n * Subscribe to signal channel (pub/sub pattern)\r\n */\r\n subscribeToSignal(\r\n channel: string,\r\n callback: (message: string) => void\r\n ): () => void {\r\n // Create a separate subscriber for pub/sub\r\n const subscriber = this.redis.duplicate();\r\n\r\n subscriber.on('message', (chan, message) => {\r\n if (chan === channel) {\r\n callback(message);\r\n }\r\n });\r\n\r\n subscriber.subscribe(channel);\r\n\r\n // Return unsubscribe function\r\n return () => {\r\n subscriber.unsubscribe(channel);\r\n subscriber.disconnect();\r\n };\r\n }\r\n\r\n /**\r\n * CONSENSUS & VALIDATION\r\n */\r\n\r\n /**\r\n * Collect consensus scores from multiple validators\r\n */\r\n async collectConsensus(\r\n agentIds: string[],\r\n timeoutMs?: number\r\n ): Promise<ConsensusScore[]> {\r\n const timeout = timeoutMs || this.defaultTimeout;\r\n const startTime = Date.now();\r\n const scores: ConsensusScore[] = [];\r\n\r\n for (const agentId of agentIds) {\r\n const elapsed = Date.now() - startTime;\r\n const remaining = Math.max(1, timeout - elapsed);\r\n const remainingSeconds = Math.ceil(remaining / 1000);\r\n\r\n // Wait for each validator to report consensus\r\n const scoreKey = this.getConsensusKey(agentId);\r\n const data = await this.redis.blpop(scoreKey, remainingSeconds);\r\n\r\n if (data) {\r\n const score = JSON.parse(data[1]) as ConsensusScore;\r\n scores.push(score);\r\n }\r\n }\r\n\r\n return scores;\r\n }\r\n\r\n /**\r\n * Report a consensus score\r\n */\r\n async reportConsensusScore(\r\n agentId: string,\r\n score: number,\r\n feedback?: string\r\n ): Promise<void> {\r\n const consensusScore: ConsensusScore = {\r\n agentId,\r\n score,\r\n feedback,\r\n timestamp: new Date().toISOString()\r\n };\r\n\r\n const key = this.getConsensusKey(agentId);\r\n await this.redis.lpush(key, JSON.stringify(consensusScore));\r\n await this.redis.expire(key, 86400); // 24h expiry\r\n }\r\n\r\n /**\r\n * Calculate average consensus from scores\r\n */\r\n calculateAverageConsensus(scores: ConsensusScore[]): number {\r\n if (scores.length === 0) {\r\n return 0;\r\n }\r\n\r\n const sum = scores.reduce((acc, score) => acc + score.score, 0);\r\n return sum / scores.length;\r\n }\r\n\r\n /**\r\n * TASK STATE MANAGEMENT\r\n */\r\n\r\n /**\r\n * Store task context (usually CFN Loop parameters)\r\n */\r\n async storeTaskContext(context: Record<string, unknown>): Promise<void> {\r\n const key = this.getTaskContextKey();\r\n await this.redis.set(key, JSON.stringify(context), 'EX', 86400);\r\n }\r\n\r\n /**\r\n * Load task context\r\n */\r\n async loadTaskContext(): Promise<Record<string, unknown> | null> {\r\n const key = this.getTaskContextKey();\r\n const data = await this.redis.get(key);\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(data) as Record<string, unknown>;\r\n }\r\n\r\n /**\r\n * Update task status\r\n */\r\n async updateTaskStatus(\r\n status: TaskState['status'],\r\n iteration?: number\r\n ): Promise<void> {\r\n const key = this.getTaskStatusKey();\r\n\r\n const state: Partial<TaskState> = {\r\n taskId: this.taskId,\r\n status,\r\n updatedAt: new Date().toISOString()\r\n };\r\n\r\n if (iteration !== undefined) {\r\n state.iteration = iteration;\r\n }\r\n\r\n // Get existing context if available\r\n const contextData = await this.loadTaskContext();\r\n if (contextData) {\r\n state.context = contextData;\r\n }\r\n\r\n // Get all agents\r\n state.agents = await this.getAllAgents();\r\n\r\n await this.redis.set(key, JSON.stringify(state), 'EX', 86400);\r\n }\r\n\r\n /**\r\n * Get full task state snapshot\r\n */\r\n async getTaskState(): Promise<TaskState | null> {\r\n const key = this.getTaskStatusKey();\r\n const data = await this.redis.get(key);\r\n\r\n if (!data) {\r\n return null;\r\n }\r\n\r\n return JSON.parse(data) as TaskState;\r\n }\r\n\r\n /**\r\n * HELPER METHODS FOR KEY GENERATION\r\n */\r\n\r\n private getAgentStateKey(agentId: string): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:agent:${agentId}`;\r\n }\r\n return `${this.namespace}:${this.taskId}:agent:${agentId}`;\r\n }\r\n\r\n private getAgentStateKeyPattern(): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:agent:*`;\r\n }\r\n return `${this.namespace}:${this.taskId}:agent:*`;\r\n }\r\n\r\n private getCompletionChannel(agentId: string): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:completion:${agentId}`;\r\n }\r\n return `${this.namespace}:${this.taskId}:completion`;\r\n }\r\n\r\n private getCompletionLeaderboardKey(): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:completions`;\r\n }\r\n return `${this.namespace}:${this.taskId}:completions`;\r\n }\r\n\r\n private getSignalKey(channel: string): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:signal:${channel}`;\r\n }\r\n return `${this.namespace}:${this.taskId}:signal:${channel}`;\r\n }\r\n\r\n private getConsensusKey(agentId: string): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:consensus:${agentId}`;\r\n }\r\n return `${this.namespace}:${this.taskId}:consensus:${agentId}`;\r\n }\r\n\r\n private getTaskContextKey(): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:context`;\r\n }\r\n return `${this.namespace}:${this.taskId}:context`;\r\n }\r\n\r\n private getTaskStatusKey(): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:status`;\r\n }\r\n return `${this.namespace}:${this.taskId}:status`;\r\n }\r\n\r\n /**\r\n * CLEANUP & UTILITIES\r\n */\r\n\r\n /**\r\n * Clear all coordination state for this task\r\n */\r\n async clearTaskState(): Promise<void> {\r\n const pattern = this.getTaskKeysPattern();\r\n const keys = await this.redis.keys(pattern);\r\n\r\n if (keys.length > 0) {\r\n await this.redis.del(...keys);\r\n }\r\n }\r\n\r\n private getTaskKeysPattern(): string {\r\n if (this.namespace === 'cfn_loop') {\r\n return `cfn_loop:task:${this.taskId}:*`;\r\n }\r\n return `${this.namespace}:${this.taskId}:*`;\r\n }\r\n\r\n /**\r\n * Get Redis client for advanced operations\r\n */\r\n getRedisClient(): RedisClient {\r\n return this.redis;\r\n }\r\n}\r\n\r\nexport default CoordinationWrapper;\r\n"],"names":["Redis","EventEmitter","CoordinationWrapper","redis","taskId","namespace","defaultTimeout","isConnected","config","host","redisHost","port","redisPort","db","redisDb","lazyConnect","maxRetriesPerRequest","enableReadyCheck","on","error","emit","connect","disconnect","isReady","registerAgent","agentId","agentType","state","type","status","timestamp","Date","toISOString","key","getAgentStateKey","set","JSON","stringify","updateAgentStatus","getAgentState","Error","signalCompletion","confidence","options","testPassRate","testsRun","testsPassed","result","iteration","channel","getCompletionChannel","publish","leaderboardKey","getCompletionLeaderboardKey","zadd","data","get","parse","getAllAgents","pattern","getAgentStateKeyPattern","keys","agents","push","waitForSignal","timeoutMs","timeout","timeoutSeconds","Math","ceil","listKey","getSignalKey","blpop","received","message","broadcastSignal","lpush","ltrim","expire","subscribeToSignal","callback","subscriber","duplicate","chan","subscribe","unsubscribe","collectConsensus","agentIds","startTime","now","scores","elapsed","remaining","max","remainingSeconds","scoreKey","getConsensusKey","score","reportConsensusScore","feedback","consensusScore","calculateAverageConsensus","length","sum","reduce","acc","storeTaskContext","context","getTaskContextKey","loadTaskContext","updateTaskStatus","getTaskStatusKey","updatedAt","undefined","contextData","getTaskState","clearTaskState","getTaskKeysPattern","del","getRedisClient"],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ import Redis from 'ioredis';
2
+ const argValue = (flag)=>{
3
+ const index = process.argv.indexOf(flag);
4
+ if (index === -1 || index + 1 >= process.argv.length) {
5
+ return undefined;
6
+ }
7
+ return process.argv[index + 1];
8
+ };
9
+ const parseArgs = ()=>{
10
+ const taskId = argValue('--task-id');
11
+ const criteriaRaw = argValue('--criteria');
12
+ if (!taskId) throw new Error('--task-id is required');
13
+ if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {
14
+ throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');
15
+ }
16
+ if (!criteriaRaw) throw new Error('--criteria is required');
17
+ return {
18
+ taskId,
19
+ criteriaRaw,
20
+ redisHost: process.env.REDIS_HOST || 'localhost',
21
+ redisPort: Number(process.env.REDIS_PORT || 6379),
22
+ ttlSeconds: 86400
23
+ };
24
+ };
25
+ const validateCriteria = (criteria)=>{
26
+ if (!Array.isArray(criteria.test_suites)) {
27
+ throw new Error('success criteria must include test_suites array');
28
+ }
29
+ if (criteria.test_suites.length === 0) {
30
+ throw new Error('test_suites cannot be empty');
31
+ }
32
+ };
33
+ const storeCriteria = async (args)=>{
34
+ let parsed;
35
+ try {
36
+ parsed = JSON.parse(args.criteriaRaw);
37
+ } catch {
38
+ throw new Error('criteria is not valid JSON');
39
+ }
40
+ validateCriteria(parsed);
41
+ const redis = new Redis({
42
+ host: args.redisHost,
43
+ port: args.redisPort,
44
+ lazyConnect: true
45
+ });
46
+ try {
47
+ await redis.connect();
48
+ const key = `swarm:${args.taskId}:context`;
49
+ const serialized = JSON.stringify(parsed);
50
+ await redis.hset(key, 'success-criteria', serialized);
51
+ await redis.expire(key, args.ttlSeconds);
52
+ console.log(`✅ Success criteria stored in Redis: ${key}`);
53
+ console.log(` Test suites: ${parsed.test_suites.length}`);
54
+ console.log(` TTL: ${args.ttlSeconds} seconds`);
55
+ } finally{
56
+ redis.disconnect();
57
+ }
58
+ };
59
+ const main = async ()=>{
60
+ const args = parseArgs();
61
+ await storeCriteria(args);
62
+ };
63
+ main().catch((error)=>{
64
+ console.error(`❌ Failed to store success criteria: ${error.message}`);
65
+ process.exitCode = 1;
66
+ });
67
+
68
+ //# sourceMappingURL=store-success-criteria.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/coordination/store-success-criteria.ts"],"sourcesContent":["import Redis from 'ioredis';\n\ninterface SuccessCriteriaArgs {\n taskId: string;\n criteriaRaw: string;\n redisHost: string;\n redisPort: number;\n ttlSeconds: number;\n}\n\ntype TestSuite = {\n name: string;\n command: string;\n required?: boolean;\n pass_threshold?: number;\n};\n\ninterface SuccessCriteria {\n test_suites: TestSuite[];\n gate_mode?: string;\n metadata?: Record<string, unknown>;\n}\n\nconst argValue = (flag: string): string | undefined => {\n const index = process.argv.indexOf(flag);\n if (index === -1 || index + 1 >= process.argv.length) {\n return undefined;\n }\n return process.argv[index + 1];\n};\n\nconst parseArgs = (): SuccessCriteriaArgs => {\n const taskId = argValue('--task-id');\n const criteriaRaw = argValue('--criteria');\n\n if (!taskId) throw new Error('--task-id is required');\n if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {\n throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');\n }\n\n if (!criteriaRaw) throw new Error('--criteria is required');\n\n return {\n taskId,\n criteriaRaw,\n redisHost: process.env.REDIS_HOST || 'localhost',\n redisPort: Number(process.env.REDIS_PORT || 6379),\n ttlSeconds: 86400,\n };\n};\n\nconst validateCriteria = (criteria: SuccessCriteria) => {\n if (!Array.isArray(criteria.test_suites)) {\n throw new Error('success criteria must include test_suites array');\n }\n if (criteria.test_suites.length === 0) {\n throw new Error('test_suites cannot be empty');\n }\n};\n\nconst storeCriteria = async (args: SuccessCriteriaArgs) => {\n let parsed: SuccessCriteria;\n try {\n parsed = JSON.parse(args.criteriaRaw) as SuccessCriteria;\n } catch {\n throw new Error('criteria is not valid JSON');\n }\n\n validateCriteria(parsed);\n\n const redis = new Redis({\n host: args.redisHost,\n port: args.redisPort,\n lazyConnect: true,\n });\n\n try {\n await redis.connect();\n const key = `swarm:${args.taskId}:context`;\n const serialized = JSON.stringify(parsed);\n\n await redis.hset(key, 'success-criteria', serialized);\n await redis.expire(key, args.ttlSeconds);\n\n console.log(`✅ Success criteria stored in Redis: ${key}`);\n console.log(` Test suites: ${parsed.test_suites.length}`);\n console.log(` TTL: ${args.ttlSeconds} seconds`);\n } finally {\n redis.disconnect();\n }\n};\n\nconst main = async () => {\n const args = parseArgs();\n await storeCriteria(args);\n};\n\nmain().catch((error) => {\n console.error(`❌ Failed to store success criteria: ${error.message}`);\n process.exitCode = 1;\n});\n"],"names":["Redis","argValue","flag","index","process","argv","indexOf","length","undefined","parseArgs","taskId","criteriaRaw","Error","test","redisHost","env","REDIS_HOST","redisPort","Number","REDIS_PORT","ttlSeconds","validateCriteria","criteria","Array","isArray","test_suites","storeCriteria","args","parsed","JSON","parse","redis","host","port","lazyConnect","connect","key","serialized","stringify","hset","expire","console","log","disconnect","main","catch","error","message","exitCode"],"mappings":"AAAA,OAAOA,WAAW,UAAU;AAuB5B,MAAMC,WAAW,CAACC;IAChB,MAAMC,QAAQC,QAAQC,IAAI,CAACC,OAAO,CAACJ;IACnC,IAAIC,UAAU,CAAC,KAAKA,QAAQ,KAAKC,QAAQC,IAAI,CAACE,MAAM,EAAE;QACpD,OAAOC;IACT;IACA,OAAOJ,QAAQC,IAAI,CAACF,QAAQ,EAAE;AAChC;AAEA,MAAMM,YAAY;IAChB,MAAMC,SAAST,SAAS;IACxB,MAAMU,cAAcV,SAAS;IAE7B,IAAI,CAACS,QAAQ,MAAM,IAAIE,MAAM;IAC7B,IAAI,CAAC,mBAAmBC,IAAI,CAACH,SAAS;QACpC,MAAM,IAAIE,MAAM;IAClB;IAEA,IAAI,CAACD,aAAa,MAAM,IAAIC,MAAM;IAElC,OAAO;QACLF;QACAC;QACAG,WAAWV,QAAQW,GAAG,CAACC,UAAU,IAAI;QACrCC,WAAWC,OAAOd,QAAQW,GAAG,CAACI,UAAU,IAAI;QAC5CC,YAAY;IACd;AACF;AAEA,MAAMC,mBAAmB,CAACC;IACxB,IAAI,CAACC,MAAMC,OAAO,CAACF,SAASG,WAAW,GAAG;QACxC,MAAM,IAAIb,MAAM;IAClB;IACA,IAAIU,SAASG,WAAW,CAAClB,MAAM,KAAK,GAAG;QACrC,MAAM,IAAIK,MAAM;IAClB;AACF;AAEA,MAAMc,gBAAgB,OAAOC;IAC3B,IAAIC;IACJ,IAAI;QACFA,SAASC,KAAKC,KAAK,CAACH,KAAKhB,WAAW;IACtC,EAAE,OAAM;QACN,MAAM,IAAIC,MAAM;IAClB;IAEAS,iBAAiBO;IAEjB,MAAMG,QAAQ,IAAI/B,MAAM;QACtBgC,MAAML,KAAKb,SAAS;QACpBmB,MAAMN,KAAKV,SAAS;QACpBiB,aAAa;IACf;IAEA,IAAI;QACF,MAAMH,MAAMI,OAAO;QACnB,MAAMC,MAAM,CAAC,MAAM,EAAET,KAAKjB,MAAM,CAAC,QAAQ,CAAC;QAC1C,MAAM2B,aAAaR,KAAKS,SAAS,CAACV;QAElC,MAAMG,MAAMQ,IAAI,CAACH,KAAK,oBAAoBC;QAC1C,MAAMN,MAAMS,MAAM,CAACJ,KAAKT,KAAKP,UAAU;QAEvCqB,QAAQC,GAAG,CAAC,CAAC,oCAAoC,EAAEN,KAAK;QACxDK,QAAQC,GAAG,CAAC,CAAC,gBAAgB,EAAEd,OAAOH,WAAW,CAAClB,MAAM,EAAE;QAC1DkC,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEf,KAAKP,UAAU,CAAC,QAAQ,CAAC;IAClD,SAAU;QACRW,MAAMY,UAAU;IAClB;AACF;AAEA,MAAMC,OAAO;IACX,MAAMjB,OAAOlB;IACb,MAAMiB,cAAcC;AACtB;AAEAiB,OAAOC,KAAK,CAAC,CAACC;IACZL,QAAQK,KAAK,CAAC,CAAC,oCAAoC,EAAEA,MAAMC,OAAO,EAAE;IACpE3C,QAAQ4C,QAAQ,GAAG;AACrB"}
@@ -0,0 +1,65 @@
1
+ import Redis from 'ioredis';
2
+ const argValue = (flag)=>{
3
+ const index = process.argv.indexOf(flag);
4
+ if (index === -1 || index + 1 >= process.argv.length) {
5
+ return undefined;
6
+ }
7
+ return process.argv[index + 1];
8
+ };
9
+ const parseArgs = ()=>{
10
+ const taskId = argValue('--task-id');
11
+ const description = argValue('--description');
12
+ const mode = argValue('--mode');
13
+ const maxIterationsRaw = argValue('--max-iterations');
14
+ if (!taskId) throw new Error('--task-id is required');
15
+ if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {
16
+ throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');
17
+ }
18
+ if (!description) throw new Error('--description is required');
19
+ if (!mode) throw new Error('--mode is required');
20
+ if (!maxIterationsRaw) throw new Error('--max-iterations is required');
21
+ const maxIterations = Number(maxIterationsRaw);
22
+ if (!Number.isFinite(maxIterations) || maxIterations <= 0) {
23
+ throw new Error('--max-iterations must be a positive number');
24
+ }
25
+ return {
26
+ taskId,
27
+ description,
28
+ mode,
29
+ maxIterations,
30
+ redisHost: process.env.REDIS_HOST || 'localhost',
31
+ redisPort: Number(process.env.REDIS_PORT || 6379),
32
+ ttlSeconds: 86400
33
+ };
34
+ };
35
+ const storeContext = async (args)=>{
36
+ const redis = new Redis({
37
+ host: args.redisHost,
38
+ port: args.redisPort,
39
+ lazyConnect: true
40
+ });
41
+ try {
42
+ await redis.connect();
43
+ const key = `swarm:${args.taskId}:context`;
44
+ await redis.hset(key, {
45
+ 'task_description': args.description,
46
+ 'mode': args.mode,
47
+ 'max_iterations': String(args.maxIterations)
48
+ });
49
+ await redis.expire(key, args.ttlSeconds);
50
+ console.log(`✅ Task context stored in Redis: ${key}`);
51
+ console.log(` TTL: ${args.ttlSeconds} seconds`);
52
+ } finally{
53
+ redis.disconnect();
54
+ }
55
+ };
56
+ const main = async ()=>{
57
+ const args = parseArgs();
58
+ await storeContext(args);
59
+ };
60
+ main().catch((error)=>{
61
+ console.error(`❌ Failed to store task context: ${error.message}`);
62
+ process.exitCode = 1;
63
+ });
64
+
65
+ //# sourceMappingURL=store-task-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/coordination/store-task-context.ts"],"sourcesContent":["import Redis from 'ioredis';\n\ninterface TaskContextArgs {\n taskId: string;\n description: string;\n mode: string;\n maxIterations: number;\n redisHost: string;\n redisPort: number;\n ttlSeconds: number;\n}\n\nconst argValue = (flag: string): string | undefined => {\n const index = process.argv.indexOf(flag);\n if (index === -1 || index + 1 >= process.argv.length) {\n return undefined;\n }\n return process.argv[index + 1];\n};\n\nconst parseArgs = (): TaskContextArgs => {\n const taskId = argValue('--task-id');\n const description = argValue('--description');\n const mode = argValue('--mode');\n const maxIterationsRaw = argValue('--max-iterations');\n\n if (!taskId) throw new Error('--task-id is required');\n if (!/^[A-Za-z0-9_-]+$/.test(taskId)) {\n throw new Error('Invalid task id format; use alphanumeric, dash, underscore only');\n }\n\n if (!description) throw new Error('--description is required');\n if (!mode) throw new Error('--mode is required');\n if (!maxIterationsRaw) throw new Error('--max-iterations is required');\n\n const maxIterations = Number(maxIterationsRaw);\n if (!Number.isFinite(maxIterations) || maxIterations <= 0) {\n throw new Error('--max-iterations must be a positive number');\n }\n\n return {\n taskId,\n description,\n mode,\n maxIterations,\n redisHost: process.env.REDIS_HOST || 'localhost',\n redisPort: Number(process.env.REDIS_PORT || 6379),\n ttlSeconds: 86400,\n };\n};\n\nconst storeContext = async (args: TaskContextArgs) => {\n const redis = new Redis({\n host: args.redisHost,\n port: args.redisPort,\n lazyConnect: true,\n });\n\n try {\n await redis.connect();\n const key = `swarm:${args.taskId}:context`;\n\n await redis.hset(key, {\n 'task_description': args.description,\n 'mode': args.mode,\n 'max_iterations': String(args.maxIterations),\n });\n\n await redis.expire(key, args.ttlSeconds);\n\n console.log(`✅ Task context stored in Redis: ${key}`);\n console.log(` TTL: ${args.ttlSeconds} seconds`);\n } finally {\n redis.disconnect();\n }\n};\n\nconst main = async () => {\n const args = parseArgs();\n await storeContext(args);\n};\n\nmain().catch((error) => {\n console.error(`❌ Failed to store task context: ${error.message}`);\n process.exitCode = 1;\n});\n"],"names":["Redis","argValue","flag","index","process","argv","indexOf","length","undefined","parseArgs","taskId","description","mode","maxIterationsRaw","Error","test","maxIterations","Number","isFinite","redisHost","env","REDIS_HOST","redisPort","REDIS_PORT","ttlSeconds","storeContext","args","redis","host","port","lazyConnect","connect","key","hset","String","expire","console","log","disconnect","main","catch","error","message","exitCode"],"mappings":"AAAA,OAAOA,WAAW,UAAU;AAY5B,MAAMC,WAAW,CAACC;IAChB,MAAMC,QAAQC,QAAQC,IAAI,CAACC,OAAO,CAACJ;IACnC,IAAIC,UAAU,CAAC,KAAKA,QAAQ,KAAKC,QAAQC,IAAI,CAACE,MAAM,EAAE;QACpD,OAAOC;IACT;IACA,OAAOJ,QAAQC,IAAI,CAACF,QAAQ,EAAE;AAChC;AAEA,MAAMM,YAAY;IAChB,MAAMC,SAAST,SAAS;IACxB,MAAMU,cAAcV,SAAS;IAC7B,MAAMW,OAAOX,SAAS;IACtB,MAAMY,mBAAmBZ,SAAS;IAElC,IAAI,CAACS,QAAQ,MAAM,IAAII,MAAM;IAC7B,IAAI,CAAC,mBAAmBC,IAAI,CAACL,SAAS;QACpC,MAAM,IAAII,MAAM;IAClB;IAEA,IAAI,CAACH,aAAa,MAAM,IAAIG,MAAM;IAClC,IAAI,CAACF,MAAM,MAAM,IAAIE,MAAM;IAC3B,IAAI,CAACD,kBAAkB,MAAM,IAAIC,MAAM;IAEvC,MAAME,gBAAgBC,OAAOJ;IAC7B,IAAI,CAACI,OAAOC,QAAQ,CAACF,kBAAkBA,iBAAiB,GAAG;QACzD,MAAM,IAAIF,MAAM;IAClB;IAEA,OAAO;QACLJ;QACAC;QACAC;QACAI;QACAG,WAAWf,QAAQgB,GAAG,CAACC,UAAU,IAAI;QACrCC,WAAWL,OAAOb,QAAQgB,GAAG,CAACG,UAAU,IAAI;QAC5CC,YAAY;IACd;AACF;AAEA,MAAMC,eAAe,OAAOC;IAC1B,MAAMC,QAAQ,IAAI3B,MAAM;QACtB4B,MAAMF,KAAKP,SAAS;QACpBU,MAAMH,KAAKJ,SAAS;QACpBQ,aAAa;IACf;IAEA,IAAI;QACF,MAAMH,MAAMI,OAAO;QACnB,MAAMC,MAAM,CAAC,MAAM,EAAEN,KAAKhB,MAAM,CAAC,QAAQ,CAAC;QAE1C,MAAMiB,MAAMM,IAAI,CAACD,KAAK;YACpB,oBAAoBN,KAAKf,WAAW;YACpC,QAAQe,KAAKd,IAAI;YACjB,kBAAkBsB,OAAOR,KAAKV,aAAa;QAC7C;QAEA,MAAMW,MAAMQ,MAAM,CAACH,KAAKN,KAAKF,UAAU;QAEvCY,QAAQC,GAAG,CAAC,CAAC,gCAAgC,EAAEL,KAAK;QACpDI,QAAQC,GAAG,CAAC,CAAC,QAAQ,EAAEX,KAAKF,UAAU,CAAC,QAAQ,CAAC;IAClD,SAAU;QACRG,MAAMW,UAAU;IAClB;AACF;AAEA,MAAMC,OAAO;IACX,MAAMb,OAAOjB;IACb,MAAMgB,aAAaC;AACrB;AAEAa,OAAOC,KAAK,CAAC,CAACC;IACZL,QAAQK,KAAK,CAAC,CAAC,gCAAgC,EAAEA,MAAMC,OAAO,EAAE;IAChEtC,QAAQuC,QAAQ,GAAG;AACrB"}