claude-flow-novice 2.15.5 → 2.15.6

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 (440) hide show
  1. package/.claude/cfn-extras/.gs-api-quota.json +16 -0
  2. package/.claude/cfn-extras/.gs-progress-state.json +22 -0
  3. package/.claude/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
  4. package/.claude/cfn-extras/agents/google-sheets/README.md +114 -0
  5. package/.claude/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
  6. package/.claude/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
  7. package/.claude/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
  8. package/.claude/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
  9. package/.claude/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
  10. package/.claude/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
  11. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
  12. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
  13. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
  14. package/.claude/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
  15. package/.claude/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
  16. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
  17. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
  18. package/.claude/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
  19. package/.claude/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
  20. package/.claude/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
  21. package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
  22. package/.claude/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
  23. package/.claude/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
  24. package/.claude/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
  25. package/.claude/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
  26. package/.claude/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
  27. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
  28. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
  29. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
  30. package/.claude/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
  31. package/.claude/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
  32. package/.claude/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
  33. package/.claude/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
  34. package/.claude/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
  35. package/.claude/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
  36. package/.claude/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
  37. package/.claude/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
  38. package/.claude/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
  39. package/.claude/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
  40. package/.claude/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
  41. package/.claude/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
  42. package/.claude/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
  43. package/.claude/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
  44. package/.claude/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
  45. package/.claude/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
  46. package/.claude/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
  47. package/.claude/commands/cfn-context.md +10 -0
  48. package/.claude/commands/cfn-loop-cli.md +36 -15
  49. package/.claude/commands/google-sheets/google-sheets-loop.md +289 -0
  50. package/.claude/skills/cfn-agent-selector/SKILL.md +143 -0
  51. package/.claude/skills/cfn-agent-selector/select-agents.sh +94 -0
  52. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
  53. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
  54. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
  55. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
  56. package/.claude/skills/cfn-docker-redis-coordination/README.md +294 -0
  57. package/.claude/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
  58. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
  59. package/.claude/skills/cfn-docker-redis-coordination/package.json +40 -0
  60. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
  61. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
  62. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
  63. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
  64. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
  65. package/.claude/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
  66. package/.claude/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
  67. package/.claude/skills/cfn-loop-orchestration/README.md +149 -41
  68. package/.claude/skills/cfn-loop-orchestration/jest.config.js +67 -0
  69. package/.claude/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
  70. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
  71. package/.claude/skills/cfn-loop-orchestration/package-lock.json +5470 -0
  72. package/.claude/skills/cfn-loop-orchestration/package.json +49 -0
  73. package/.claude/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
  74. package/.claude/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/index.ts +14 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/types.ts +188 -0
  79. package/.claude/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
  80. package/.claude/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
  81. package/.claude/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
  82. package/.claude/skills/cfn-loop-orchestration/tsconfig.json +54 -0
  83. package/.claude/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
  84. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
  85. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
  86. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
  87. package/.claude/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
  88. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
  89. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
  90. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
  91. package/.claude/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
  92. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
  93. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
  94. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
  95. package/.claude/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
  96. package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
  97. package/.claude/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
  98. package/.claude/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
  99. package/.claude/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
  100. package/.claude/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
  101. package/.claude/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
  102. package/.claude/skills/cfn-redis-coordination/dist/index.js +114 -0
  103. package/.claude/skills/cfn-redis-coordination/dist/index.js.map +1 -0
  104. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
  105. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
  106. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
  107. package/.claude/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
  108. package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
  109. package/.claude/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
  110. package/.claude/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
  111. package/.claude/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
  112. package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
  113. package/.claude/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
  114. package/.claude/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
  115. package/.claude/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
  116. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
  117. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
  118. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
  119. package/.claude/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
  120. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
  121. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
  122. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
  123. package/.claude/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
  124. package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
  125. package/.claude/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
  126. package/.claude/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
  127. package/.claude/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
  128. package/.claude/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
  129. package/.claude/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
  130. package/.claude/skills/cfn-redis-coordination/dist/types.js +81 -0
  131. package/.claude/skills/cfn-redis-coordination/dist/types.js.map +1 -0
  132. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
  133. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
  134. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
  135. package/.claude/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
  136. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
  137. package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
  138. package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
  139. package/.claude/skills/cfn-redis-coordination/package.json +45 -0
  140. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  141. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  142. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  143. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  144. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  145. package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
  146. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  147. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  148. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  149. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  150. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  151. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  152. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  153. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  154. package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
  155. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  156. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  157. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  158. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  159. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  160. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  161. package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
  162. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -2
  163. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +1 -1
  164. package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
  165. package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
  166. package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
  167. package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
  168. package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
  169. package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
  170. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
  171. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
  172. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
  173. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
  174. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
  175. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
  176. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
  177. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
  178. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
  179. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
  180. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
  181. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
  182. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
  183. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
  184. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
  185. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
  186. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
  187. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
  188. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
  189. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
  190. package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
  191. package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
  192. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
  193. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
  194. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
  195. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
  196. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
  197. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
  198. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
  199. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
  200. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
  201. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
  202. package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
  203. package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
  204. package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
  205. package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
  206. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
  207. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
  208. package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
  209. package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
  210. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
  211. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
  212. package/claude-assets/commands/cfn-context.md +10 -0
  213. package/claude-assets/commands/cfn-loop-cli.md +36 -15
  214. package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
  215. package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
  216. package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
  217. package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
  218. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
  219. package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
  225. package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
  226. package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
  227. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
  228. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
  229. package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
  230. package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
  231. package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
  232. package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
  233. package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
  234. package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
  235. package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
  236. package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
  237. package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
  238. package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
  239. package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
  240. package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
  241. package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
  242. package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
  243. package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
  244. package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
  245. package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
  246. package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
  247. package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
  248. package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
  249. package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
  250. package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
  251. package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
  252. package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
  253. package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
  254. package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
  255. package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
  256. package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
  257. package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
  258. package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
  259. package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
  260. package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
  261. package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
  262. package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
  263. package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
  264. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
  265. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
  266. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
  267. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
  268. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
  269. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
  270. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
  271. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
  272. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
  273. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
  274. package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
  275. package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
  276. package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
  277. package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
  278. package/claude-assets/skills/cfn-error-logging/package.json +47 -0
  279. package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
  280. package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
  281. package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
  282. package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
  283. package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
  284. package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
  285. package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
  287. package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
  288. package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
  289. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +91 -8
  290. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
  292. package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
  295. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
  296. package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
  301. package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
  302. package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
  303. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
  304. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
  305. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
  306. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
  307. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
  308. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
  309. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
  310. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
  311. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
  312. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
  313. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
  314. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
  315. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
  316. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
  317. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
  318. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
  319. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
  320. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
  321. package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
  322. package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
  323. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
  324. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
  325. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
  326. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
  327. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
  328. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
  329. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
  330. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
  331. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
  332. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
  333. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
  334. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
  335. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
  336. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
  337. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
  338. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
  339. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
  340. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
  341. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
  342. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
  343. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
  344. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
  345. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
  346. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
  347. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
  348. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
  349. package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
  350. package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
  351. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
  352. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
  353. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
  354. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
  355. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
  356. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
  357. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
  358. package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
  359. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  360. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  361. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  362. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  363. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  364. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
  365. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  366. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  367. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  368. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  369. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  370. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  371. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  372. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  373. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
  374. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  375. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  376. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  377. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  378. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  379. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  380. package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
  381. package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
  382. package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
  383. package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
  384. package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
  385. package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
  386. package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
  387. package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
  388. package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
  389. package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
  390. package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
  391. package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
  392. package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
  393. package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
  394. package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
  395. package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
  396. package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
  397. package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
  398. package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
  399. package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
  400. package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
  401. package/claude-assets/skills/task-classifier/SKILL.md +81 -0
  402. package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
  403. package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
  404. package/claude-assets/skills/workflow-codification/package.json +30 -0
  405. package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
  406. package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
  407. package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
  408. package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
  409. package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
  410. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  411. package/dist/agent-spawner/agent-spawner.js +448 -0
  412. package/dist/agent-spawner/agent-spawner.js.map +1 -0
  413. package/dist/agent-spawner/index.js +10 -0
  414. package/dist/agent-spawner/index.js.map +1 -0
  415. package/dist/agent-spawner/types.js +14 -0
  416. package/dist/agent-spawner/types.js.map +1 -0
  417. package/dist/agents/agent-loader.js +146 -165
  418. package/dist/agents/agent-loader.js.map +1 -1
  419. package/dist/cli/agent-executor.js +47 -1
  420. package/dist/cli/agent-executor.js.map +1 -1
  421. package/dist/cli/agent-spawn.js +4 -1
  422. package/dist/cli/agent-spawn.js.map +1 -1
  423. package/dist/cli/tool-executor.js +3 -1
  424. package/dist/cli/tool-executor.js.map +1 -1
  425. package/dist/gate-checker/gate-checker.js +292 -0
  426. package/dist/gate-checker/gate-checker.js.map +1 -0
  427. package/dist/gate-checker/types.js +94 -0
  428. package/dist/gate-checker/types.js.map +1 -0
  429. package/dist/lib/database-service/connection-pool-manager.js +2 -1
  430. package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
  431. package/dist/orchestrator/index.js +10 -0
  432. package/dist/orchestrator/index.js.map +1 -0
  433. package/dist/orchestrator/orchestrate.js +496 -0
  434. package/dist/orchestrator/orchestrate.js.map +1 -0
  435. package/dist/orchestrator/types.js +58 -0
  436. package/dist/orchestrator/types.js.map +1 -0
  437. package/package.json +1 -1
  438. package/scripts/switch-api.sh +142 -4
  439. package/scripts/verify-no-secrets.sh +6 -13
  440. package/tests/README.md +175 -58
@@ -0,0 +1,396 @@
1
+ /**
2
+ * Agent Completion Reporter
3
+ *
4
+ * Handles reporting agent completion, confidence, and test results to Redis.
5
+ *
6
+ * Migrated from:
7
+ * - report-completion.sh (89 lines)
8
+ */
9
+
10
+ import type {
11
+ TaskId,
12
+ AgentId,
13
+ Logger,
14
+ CompletionReport,
15
+ TestResults
16
+ } from './types';
17
+ import {
18
+ CoordinationError,
19
+ CoordinationErrorType,
20
+ validateTaskId,
21
+ validateAgentId,
22
+ validateConfidence,
23
+ isValidTaskId,
24
+ isValidAgentId,
25
+ isValidConfidence
26
+ } from './types';
27
+ import { RedisCoordinator } from './redis-client';
28
+
29
+ export interface CompletionReportOptions {
30
+ result?: {
31
+ status: 'complete' | 'failed' | 'blocked';
32
+ deliverablesCreated?: string[];
33
+ testsRun?: number;
34
+ testsPassed?: number;
35
+ testsFailed?: number;
36
+ errors?: string[];
37
+ metadata?: Record<string, unknown>;
38
+ };
39
+ iteration?: number;
40
+ namespace?: string;
41
+ }
42
+
43
+ export class CompletionReporter {
44
+ constructor(
45
+ private redis: RedisCoordinator,
46
+ private logger: Logger
47
+ ) {}
48
+
49
+ /**
50
+ * Report agent completion with confidence score
51
+ *
52
+ * In Task Mode: Logs and returns gracefully
53
+ * In CLI Mode: Stores in Redis and signals completion
54
+ */
55
+ async reportCompletion(
56
+ taskId: TaskId,
57
+ agentId: AgentId,
58
+ confidence: number,
59
+ options: CompletionReportOptions = {}
60
+ ): Promise<void> {
61
+ // Validate inputs
62
+ if (!isValidTaskId(taskId)) {
63
+ throw new CoordinationError(
64
+ CoordinationErrorType.VALIDATION_ERROR,
65
+ `Invalid task ID: ${taskId}`
66
+ );
67
+ }
68
+
69
+ if (!isValidAgentId(agentId)) {
70
+ throw new CoordinationError(
71
+ CoordinationErrorType.VALIDATION_ERROR,
72
+ `Invalid agent ID: ${agentId}`
73
+ );
74
+ }
75
+
76
+ if (!isValidConfidence(confidence)) {
77
+ throw new CoordinationError(
78
+ CoordinationErrorType.VALIDATION_ERROR,
79
+ `Invalid confidence value: ${confidence}. Must be between 0.0 and 1.0.`
80
+ );
81
+ }
82
+
83
+ // Graceful no-op in Task Mode
84
+ if (!this.redis.canUseRedis) {
85
+ this.logger.info(
86
+ `Task Mode: Agent completion reported (no Redis storage) - Agent: ${agentId}, Confidence: ${confidence}`
87
+ );
88
+ return;
89
+ }
90
+
91
+ // CLI Mode: Report to Redis with optimized pipeline
92
+ const iteration = options.iteration || 1;
93
+ const namespace = options.namespace || 'swarm';
94
+ const timestamp = new Date().toISOString();
95
+
96
+ try {
97
+ // Signal completion (for waiting mode)
98
+ await this.redis.lpush(`${namespace}:${taskId}:${agentId}:done`, 'complete');
99
+
100
+ // Store confidence score
101
+ await this.redis.set(
102
+ `${namespace}:${taskId}:${agentId}:confidence`,
103
+ String(confidence),
104
+ 'EX',
105
+ 3600
106
+ );
107
+
108
+ // Store detailed result
109
+ const resultData: Record<string, string> = {
110
+ confidence: String(confidence),
111
+ iteration: String(iteration),
112
+ timestamp
113
+ };
114
+
115
+ if (options.result) {
116
+ resultData.status = options.result.status;
117
+ if (options.result.deliverablesCreated) {
118
+ resultData.deliverablesCreated = JSON.stringify(options.result.deliverablesCreated);
119
+ }
120
+ if (options.result.testsRun !== undefined) {
121
+ resultData.testsRun = String(options.result.testsRun);
122
+ }
123
+ if (options.result.testsPassed !== undefined) {
124
+ resultData.testsPassed = String(options.result.testsPassed);
125
+ }
126
+ if (options.result.testsFailed !== undefined) {
127
+ resultData.testsFailed = String(options.result.testsFailed);
128
+ }
129
+ if (options.result.errors) {
130
+ resultData.errors = JSON.stringify(options.result.errors);
131
+ }
132
+ if (options.result.metadata) {
133
+ resultData.metadata = JSON.stringify(options.result.metadata);
134
+ }
135
+ }
136
+
137
+ await this.redis.hset(
138
+ `${namespace}:${taskId}:${agentId}:result`,
139
+ ...Object.entries(resultData).flat()
140
+ );
141
+
142
+ // Track in completed agents list
143
+ await this.redis.lpush(`${namespace}:${taskId}:completed_agents`, agentId);
144
+
145
+ // Set TTLs
146
+ await this.redis.expire(`${namespace}:${taskId}:${agentId}:result`, 3600);
147
+ await this.redis.expire(`${namespace}:${taskId}:${agentId}:done`, 3600);
148
+
149
+ this.logger.info(
150
+ `✅ Completion reported: Agent ${agentId}, Confidence: ${confidence}, Iteration: ${iteration}`
151
+ );
152
+ } catch (error) {
153
+ this.logger.error('Failed to report completion', error as Error);
154
+ throw new CoordinationError(
155
+ CoordinationErrorType.REDIS_UNAVAILABLE,
156
+ `Failed to report completion for agent ${agentId}: ${(error as Error).message}`
157
+ );
158
+ }
159
+ }
160
+
161
+ /**
162
+ * Report test results with pass rate
163
+ *
164
+ * In Task Mode: Logs and returns gracefully
165
+ * In CLI Mode: Stores in Redis for gate checking
166
+ */
167
+ async reportTestResults(
168
+ taskId: TaskId,
169
+ agentId: AgentId,
170
+ results: TestResults,
171
+ iteration: number = 1,
172
+ namespace: string = 'swarm'
173
+ ): Promise<void> {
174
+ // Validate inputs
175
+ if (!isValidTaskId(taskId)) {
176
+ throw new CoordinationError(
177
+ CoordinationErrorType.VALIDATION_ERROR,
178
+ `Invalid task ID: ${taskId}`
179
+ );
180
+ }
181
+
182
+ if (!isValidAgentId(agentId)) {
183
+ throw new CoordinationError(
184
+ CoordinationErrorType.VALIDATION_ERROR,
185
+ `Invalid agent ID: ${agentId}`
186
+ );
187
+ }
188
+
189
+ if (!Number.isFinite(results.passRate) || results.passRate < 0 || results.passRate > 1) {
190
+ throw new CoordinationError(
191
+ CoordinationErrorType.VALIDATION_ERROR,
192
+ `Invalid pass rate: ${results.passRate}. Must be between 0.0 and 1.0.`
193
+ );
194
+ }
195
+
196
+ // Graceful no-op in Task Mode
197
+ if (!this.redis.canUseRedis) {
198
+ this.logger.info(
199
+ `Task Mode: Test results reported (no Redis storage) - Pass Rate: ${(results.passRate * 100).toFixed(1)}%`
200
+ );
201
+ return;
202
+ }
203
+
204
+ // CLI Mode: Store in Redis
205
+ const timestamp = new Date().toISOString();
206
+
207
+ try {
208
+ const testResultsKey = `${namespace}:${taskId}:${agentId}:test-results`;
209
+
210
+ await this.redis.hset(
211
+ testResultsKey,
212
+ 'pass', String(results.pass),
213
+ 'fail', String(results.fail),
214
+ 'skip', String(results.skip || 0),
215
+ 'total', String(results.total),
216
+ 'passRate', String(results.passRate),
217
+ 'iteration', String(iteration),
218
+ 'timestamp', timestamp
219
+ );
220
+
221
+ // Set TTL (24 hours)
222
+ await this.redis.expire(testResultsKey, 86400);
223
+
224
+ this.logger.info(
225
+ `✅ Test results reported: Pass Rate ${(results.passRate * 100).toFixed(1)}% (${results.pass}/${results.total})`
226
+ );
227
+ } catch (error) {
228
+ this.logger.error('Failed to report test results', error as Error);
229
+ throw new CoordinationError(
230
+ CoordinationErrorType.REDIS_UNAVAILABLE,
231
+ `Failed to report test results for agent ${agentId}: ${(error as Error).message}`
232
+ );
233
+ }
234
+ }
235
+
236
+ /**
237
+ * Signal agent done for waiting mode
238
+ *
239
+ * In Task Mode: Logs and returns gracefully
240
+ * In CLI Mode: Signals via Redis list
241
+ */
242
+ async signalDone(
243
+ taskId: TaskId,
244
+ agentId: AgentId,
245
+ namespace: string = 'swarm'
246
+ ): Promise<void> {
247
+ // Validate inputs
248
+ if (!isValidTaskId(taskId)) {
249
+ throw new CoordinationError(
250
+ CoordinationErrorType.VALIDATION_ERROR,
251
+ `Invalid task ID: ${taskId}`
252
+ );
253
+ }
254
+
255
+ if (!isValidAgentId(agentId)) {
256
+ throw new CoordinationError(
257
+ CoordinationErrorType.VALIDATION_ERROR,
258
+ `Invalid agent ID: ${agentId}`
259
+ );
260
+ }
261
+
262
+ // Graceful no-op in Task Mode
263
+ if (!this.redis.canUseRedis) {
264
+ this.logger.info(`Task Mode: Agent done signal ignored (no Redis) - Agent: ${agentId}`);
265
+ return;
266
+ }
267
+
268
+ // CLI Mode: Push to done list
269
+ try {
270
+ const doneKey = `${namespace}:${taskId}:${agentId}:done`;
271
+ await this.redis.lpush(doneKey, 'done');
272
+ await this.redis.expire(doneKey, 3600);
273
+
274
+ this.logger.info(`✅ Done signal sent for agent: ${agentId}`);
275
+ } catch (error) {
276
+ this.logger.error('Failed to signal done', error as Error);
277
+ throw new CoordinationError(
278
+ CoordinationErrorType.REDIS_UNAVAILABLE,
279
+ `Failed to signal done for agent ${agentId}: ${(error as Error).message}`
280
+ );
281
+ }
282
+ }
283
+
284
+ /**
285
+ * Get completion report for an agent
286
+ */
287
+ async getCompletionReport(
288
+ taskId: TaskId,
289
+ agentId: AgentId,
290
+ namespace: string = 'swarm'
291
+ ): Promise<CompletionReport | null> {
292
+ // Validate inputs
293
+ if (!isValidTaskId(taskId)) {
294
+ throw new CoordinationError(
295
+ CoordinationErrorType.VALIDATION_ERROR,
296
+ `Invalid task ID: ${taskId}`
297
+ );
298
+ }
299
+
300
+ if (!isValidAgentId(agentId)) {
301
+ throw new CoordinationError(
302
+ CoordinationErrorType.VALIDATION_ERROR,
303
+ `Invalid agent ID: ${agentId}`
304
+ );
305
+ }
306
+
307
+ // Graceful no-op in Task Mode
308
+ if (!this.redis.canUseRedis) {
309
+ this.logger.info('Task Mode: No completion reports available in Redis');
310
+ return null;
311
+ }
312
+
313
+ // CLI Mode: Retrieve from Redis
314
+ try {
315
+ const resultKey = `${namespace}:${taskId}:${agentId}:result`;
316
+ const data = await this.redis.hgetall(resultKey);
317
+
318
+ if (!data || Object.keys(data).length === 0) {
319
+ this.logger.warn(`No completion report found for agent: ${agentId}`);
320
+ return null;
321
+ }
322
+
323
+ const confidence = parseFloat(data.confidence || '0');
324
+ const report: CompletionReport = {
325
+ agentId,
326
+ taskId,
327
+ confidence,
328
+ iteration: parseInt(data.iteration || '1', 10),
329
+ result: {
330
+ status: (data.status as 'complete' | 'failed' | 'blocked') || 'complete',
331
+ deliverablesCreated: data.deliverablesCreated ? JSON.parse(data.deliverablesCreated) : undefined,
332
+ testsRun: data.testsRun ? parseInt(data.testsRun, 10) : undefined,
333
+ testsPassed: data.testsPassed ? parseInt(data.testsPassed, 10) : undefined,
334
+ testsFailed: data.testsFailed ? parseInt(data.testsFailed, 10) : undefined,
335
+ errors: data.errors ? JSON.parse(data.errors) : undefined,
336
+ metadata: data.metadata ? JSON.parse(data.metadata) : undefined
337
+ },
338
+ timestamp: data.timestamp || new Date().toISOString()
339
+ };
340
+
341
+ return report;
342
+ } catch (error) {
343
+ this.logger.error('Failed to get completion report', error as Error);
344
+ throw new CoordinationError(
345
+ CoordinationErrorType.REDIS_UNAVAILABLE,
346
+ `Failed to retrieve completion report for agent ${agentId}: ${(error as Error).message}`
347
+ );
348
+ }
349
+ }
350
+
351
+ /**
352
+ * Clear completion data for an agent
353
+ */
354
+ async clearCompletion(
355
+ taskId: TaskId,
356
+ agentId: AgentId,
357
+ namespace: string = 'swarm'
358
+ ): Promise<void> {
359
+ if (!isValidTaskId(taskId)) {
360
+ throw new CoordinationError(
361
+ CoordinationErrorType.VALIDATION_ERROR,
362
+ `Invalid task ID: ${taskId}`
363
+ );
364
+ }
365
+
366
+ if (!isValidAgentId(agentId)) {
367
+ throw new CoordinationError(
368
+ CoordinationErrorType.VALIDATION_ERROR,
369
+ `Invalid agent ID: ${agentId}`
370
+ );
371
+ }
372
+
373
+ if (!this.redis.canUseRedis) {
374
+ this.logger.info('Task Mode: Completion data cleanup skipped');
375
+ return;
376
+ }
377
+
378
+ try {
379
+ const keys = [
380
+ `${namespace}:${taskId}:${agentId}:done`,
381
+ `${namespace}:${taskId}:${agentId}:confidence`,
382
+ `${namespace}:${taskId}:${agentId}:result`,
383
+ `${namespace}:${taskId}:${agentId}:test-results`
384
+ ];
385
+
386
+ await this.redis.del(...keys);
387
+ this.logger.info(`✅ Completion data cleared for agent: ${agentId}`);
388
+ } catch (error) {
389
+ this.logger.error('Failed to clear completion data', error as Error);
390
+ throw new CoordinationError(
391
+ CoordinationErrorType.REDIS_UNAVAILABLE,
392
+ `Failed to clear completion data for agent ${agentId}: ${(error as Error).message}`
393
+ );
394
+ }
395
+ }
396
+ }
@@ -0,0 +1,327 @@
1
+ /**
2
+ * Task Context Manager
3
+ *
4
+ * Handles storing and retrieving task context in Redis (CLI Mode)
5
+ * or gracefully stubbing in Task Mode.
6
+ *
7
+ * Migrated from:
8
+ * - store-context.sh (93 lines)
9
+ * - get-context.sh (145 lines)
10
+ * - store-success-criteria.sh (85 lines)
11
+ * - get-success-criteria.sh (54 lines)
12
+ */
13
+
14
+ import type {
15
+ TaskId,
16
+ Logger,
17
+ TaskContext,
18
+ ValidationResult
19
+ } from './types';
20
+ import {
21
+ CoordinationError,
22
+ CoordinationErrorType,
23
+ validateTaskId,
24
+ isValidTaskId
25
+ } from './types';
26
+ import { RedisCoordinator } from './redis-client';
27
+
28
+ export interface SuccessCriteria {
29
+ taskId: TaskId;
30
+ criteria: string[];
31
+ testSuites?: string[];
32
+ passThreshold?: number;
33
+ timestamp?: string;
34
+ }
35
+
36
+ export class ContextManager {
37
+ constructor(
38
+ private redis: RedisCoordinator,
39
+ private logger: Logger
40
+ ) {}
41
+
42
+ /**
43
+ * Store task context in Redis
44
+ *
45
+ * In Task Mode: Logs and returns gracefully
46
+ * In CLI Mode: Stores in Redis with 24h TTL
47
+ */
48
+ async storeContext(taskId: TaskId, context: TaskContext): Promise<void> {
49
+ // Validate input
50
+ if (!isValidTaskId(taskId)) {
51
+ throw new CoordinationError(
52
+ CoordinationErrorType.VALIDATION_ERROR,
53
+ `Invalid task ID: ${taskId}`
54
+ );
55
+ }
56
+
57
+ // Graceful no-op in Task Mode
58
+ if (!this.redis.canUseRedis) {
59
+ this.logger.info('Task Mode: Context passed via Task() parameters (no Redis storage)');
60
+ return;
61
+ }
62
+
63
+ // CLI Mode: Store in Redis
64
+ const key = `swarm:${taskId}:context`;
65
+ const epic = context.epic || '';
66
+ const scope = JSON.stringify(context.scope || {});
67
+ const deliverables = JSON.stringify(context.deliverables || []);
68
+ const successCriteria = JSON.stringify(context.successCriteria || []);
69
+ const mode = context.mode || 'standard';
70
+ const timestamp = context.timestamp || new Date().toISOString();
71
+
72
+ try {
73
+ await this.redis.hset(
74
+ key,
75
+ 'epic', epic,
76
+ 'scope', scope,
77
+ 'deliverables', deliverables,
78
+ 'successCriteria', successCriteria,
79
+ 'mode', mode,
80
+ 'updated_at', timestamp
81
+ );
82
+
83
+ // Set TTL (24 hours)
84
+ await this.redis.expire(key, 86400);
85
+
86
+ this.logger.info(`✅ Context stored for task: ${taskId}`);
87
+ } catch (error) {
88
+ this.logger.error('Failed to store context', error as Error);
89
+ throw new CoordinationError(
90
+ CoordinationErrorType.REDIS_UNAVAILABLE,
91
+ `Failed to store context for task ${taskId}: ${(error as Error).message}`
92
+ );
93
+ }
94
+ }
95
+
96
+ /**
97
+ * Retrieve task context from Redis
98
+ *
99
+ * In Task Mode: Returns empty context
100
+ * In CLI Mode: Retrieves from Redis
101
+ */
102
+ async getContext(taskId: TaskId): Promise<TaskContext | null> {
103
+ // Validate input
104
+ if (!isValidTaskId(taskId)) {
105
+ throw new CoordinationError(
106
+ CoordinationErrorType.VALIDATION_ERROR,
107
+ `Invalid task ID: ${taskId}`
108
+ );
109
+ }
110
+
111
+ // Graceful no-op in Task Mode
112
+ if (!this.redis.canUseRedis) {
113
+ this.logger.info('Task Mode: No context available in Redis');
114
+ return null;
115
+ }
116
+
117
+ // CLI Mode: Retrieve from Redis
118
+ const key = `swarm:${taskId}:context`;
119
+
120
+ try {
121
+ const data = await this.redis.hgetall(key);
122
+
123
+ if (!data || Object.keys(data).length === 0) {
124
+ this.logger.warn(`No context found for task: ${taskId}`);
125
+ return null;
126
+ }
127
+
128
+ // Parse JSON fields
129
+ const scope = data.scope ? JSON.parse(data.scope) : {};
130
+ const deliverables = data.deliverables ? JSON.parse(data.deliverables) : [];
131
+ const successCriteria = data.successCriteria ? JSON.parse(data.successCriteria) : [];
132
+
133
+ const context: TaskContext = {
134
+ taskId,
135
+ epic: data.epic || undefined,
136
+ scope: Object.keys(scope).length > 0 ? scope : undefined,
137
+ deliverables: deliverables.length > 0 ? deliverables : undefined,
138
+ successCriteria: successCriteria.length > 0 ? successCriteria : undefined,
139
+ mode: (data.mode as 'mvp' | 'standard' | 'enterprise') || 'standard',
140
+ timestamp: data.updated_at
141
+ };
142
+
143
+ this.logger.info(`✅ Context retrieved for task: ${taskId}`);
144
+ return context;
145
+ } catch (error) {
146
+ this.logger.error('Failed to get context', error as Error);
147
+ throw new CoordinationError(
148
+ CoordinationErrorType.REDIS_UNAVAILABLE,
149
+ `Failed to retrieve context for task ${taskId}: ${(error as Error).message}`
150
+ );
151
+ }
152
+ }
153
+
154
+ /**
155
+ * Store success criteria for a task
156
+ *
157
+ * In Task Mode: Logs and returns gracefully
158
+ * In CLI Mode: Stores in Redis with 24h TTL
159
+ */
160
+ async storeSuccessCriteria(taskId: TaskId, criteria: SuccessCriteria): Promise<void> {
161
+ // Validate input
162
+ if (!isValidTaskId(taskId)) {
163
+ throw new CoordinationError(
164
+ CoordinationErrorType.VALIDATION_ERROR,
165
+ `Invalid task ID: ${taskId}`
166
+ );
167
+ }
168
+
169
+ if (!criteria.criteria || criteria.criteria.length === 0) {
170
+ throw new CoordinationError(
171
+ CoordinationErrorType.VALIDATION_ERROR,
172
+ 'Success criteria must contain at least one criterion'
173
+ );
174
+ }
175
+
176
+ // Graceful no-op in Task Mode
177
+ if (!this.redis.canUseRedis) {
178
+ this.logger.info('Task Mode: Success criteria passed via Task() parameters');
179
+ return;
180
+ }
181
+
182
+ // CLI Mode: Store in Redis
183
+ const key = `swarm:${taskId}:success_criteria`;
184
+
185
+ try {
186
+ const criteriaJson = JSON.stringify(criteria.criteria);
187
+ const testSuitesJson = JSON.stringify(criteria.testSuites || []);
188
+ const timestamp = criteria.timestamp || new Date().toISOString();
189
+
190
+ await this.redis.hset(
191
+ key,
192
+ 'criteria', criteriaJson,
193
+ 'testSuites', testSuitesJson,
194
+ 'passThreshold', String(criteria.passThreshold || 0.95),
195
+ 'stored_at', timestamp
196
+ );
197
+
198
+ // Set TTL (24 hours)
199
+ await this.redis.expire(key, 86400);
200
+
201
+ this.logger.info(`✅ Success criteria stored for task: ${taskId}`);
202
+ } catch (error) {
203
+ this.logger.error('Failed to store success criteria', error as Error);
204
+ throw new CoordinationError(
205
+ CoordinationErrorType.REDIS_UNAVAILABLE,
206
+ `Failed to store success criteria for task ${taskId}: ${(error as Error).message}`
207
+ );
208
+ }
209
+ }
210
+
211
+ /**
212
+ * Retrieve success criteria from Redis
213
+ *
214
+ * In Task Mode: Returns null
215
+ * In CLI Mode: Retrieves from Redis
216
+ */
217
+ async getSuccessCriteria(taskId: TaskId): Promise<SuccessCriteria | null> {
218
+ // Validate input
219
+ if (!isValidTaskId(taskId)) {
220
+ throw new CoordinationError(
221
+ CoordinationErrorType.VALIDATION_ERROR,
222
+ `Invalid task ID: ${taskId}`
223
+ );
224
+ }
225
+
226
+ // Graceful no-op in Task Mode
227
+ if (!this.redis.canUseRedis) {
228
+ this.logger.info('Task Mode: No success criteria available in Redis');
229
+ return null;
230
+ }
231
+
232
+ // CLI Mode: Retrieve from Redis
233
+ const key = `swarm:${taskId}:success_criteria`;
234
+
235
+ try {
236
+ const data = await this.redis.hgetall(key);
237
+
238
+ if (!data || Object.keys(data).length === 0) {
239
+ this.logger.warn(`No success criteria found for task: ${taskId}`);
240
+ return null;
241
+ }
242
+
243
+ // Parse JSON fields
244
+ const criteria = data.criteria ? JSON.parse(data.criteria) : [];
245
+ const testSuites = data.testSuites ? JSON.parse(data.testSuites) : [];
246
+ const passThreshold = data.passThreshold ? parseFloat(data.passThreshold) : 0.95;
247
+
248
+ const result: SuccessCriteria = {
249
+ taskId,
250
+ criteria,
251
+ testSuites: testSuites.length > 0 ? testSuites : undefined,
252
+ passThreshold,
253
+ timestamp: data.stored_at
254
+ };
255
+
256
+ this.logger.info(`✅ Success criteria retrieved for task: ${taskId}`);
257
+ return result;
258
+ } catch (error) {
259
+ this.logger.error('Failed to get success criteria', error as Error);
260
+ throw new CoordinationError(
261
+ CoordinationErrorType.REDIS_UNAVAILABLE,
262
+ `Failed to retrieve success criteria for task ${taskId}: ${(error as Error).message}`
263
+ );
264
+ }
265
+ }
266
+
267
+ /**
268
+ * Validate context structure
269
+ */
270
+ validateContext(context: TaskContext): ValidationResult {
271
+ const errors: string[] = [];
272
+
273
+ if (!isValidTaskId(context.taskId)) {
274
+ errors.push(`Invalid task ID: ${context.taskId}`);
275
+ }
276
+
277
+ if (context.deliverables && !Array.isArray(context.deliverables)) {
278
+ errors.push('Deliverables must be an array');
279
+ }
280
+
281
+ if (context.successCriteria && !Array.isArray(context.successCriteria)) {
282
+ errors.push('Success criteria must be an array');
283
+ }
284
+
285
+ if (context.mode && !['mvp', 'standard', 'enterprise'].includes(context.mode)) {
286
+ errors.push(`Invalid mode: ${context.mode}`);
287
+ }
288
+
289
+ return {
290
+ valid: errors.length === 0,
291
+ errors
292
+ };
293
+ }
294
+
295
+ /**
296
+ * Clear context for a task
297
+ */
298
+ async clearContext(taskId: TaskId): Promise<void> {
299
+ if (!isValidTaskId(taskId)) {
300
+ throw new CoordinationError(
301
+ CoordinationErrorType.VALIDATION_ERROR,
302
+ `Invalid task ID: ${taskId}`
303
+ );
304
+ }
305
+
306
+ if (!this.redis.canUseRedis) {
307
+ this.logger.info('Task Mode: Context cleanup skipped');
308
+ return;
309
+ }
310
+
311
+ try {
312
+ const keys = [
313
+ `swarm:${taskId}:context`,
314
+ `swarm:${taskId}:success_criteria`
315
+ ];
316
+
317
+ await this.redis.del(...keys);
318
+ this.logger.info(`✅ Context cleared for task: ${taskId}`);
319
+ } catch (error) {
320
+ this.logger.error('Failed to clear context', error as Error);
321
+ throw new CoordinationError(
322
+ CoordinationErrorType.REDIS_UNAVAILABLE,
323
+ `Failed to clear context for task ${taskId}: ${(error as Error).message}`
324
+ );
325
+ }
326
+ }
327
+ }