claude-flow-novice 2.15.4 → 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 (456) 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 +44 -14
  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 +147 -16
  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/invoke-waiting-mode.sh +3 -2
  138. package/.claude/skills/cfn-redis-coordination/jest.config.js +23 -0
  139. package/.claude/skills/cfn-redis-coordination/package-lock.json +5272 -0
  140. package/.claude/skills/cfn-redis-coordination/package.json +45 -0
  141. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  142. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +3 -2
  143. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  144. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  145. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  146. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  147. package/.claude/skills/cfn-redis-coordination/src/index.ts +82 -0
  148. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  149. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  150. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  151. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  152. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  153. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  154. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  155. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  156. package/.claude/skills/cfn-redis-coordination/src/types.ts +235 -0
  157. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  158. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  159. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  160. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  161. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  162. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  163. package/.claude/skills/cfn-redis-coordination/tsconfig.json +31 -0
  164. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +172 -2
  165. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +1 -1
  166. package/claude-assets/agents/custom/cfn-redis-operations.md +530 -0
  167. package/claude-assets/agents/custom/cfn-system-expert.md +77 -0
  168. package/claude-assets/cfn-extras/.gs-api-quota.json +16 -0
  169. package/claude-assets/cfn-extras/.gs-progress-state.json +22 -0
  170. package/claude-assets/cfn-extras/GOOGLE_SHEETS_IMPLEMENTATION_SUMMARY.md +414 -0
  171. package/claude-assets/cfn-extras/agents/google-sheets/README.md +114 -0
  172. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-advanced-analytics-specialist.md +288 -0
  173. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-api-integrator.md +127 -0
  174. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-automation-scripting-specialist.md +195 -0
  175. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-business-validator.md +179 -0
  176. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-collaboration-security-specialist.md +240 -0
  177. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-coordinator.md +214 -0
  178. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-transformer.md +127 -0
  179. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validation-quality-specialist.md +177 -0
  180. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-validator.md +119 -0
  181. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-data-visualization-specialist.md +135 -0
  182. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-design-layout-specialist.md +109 -0
  183. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineer.md +127 -0
  184. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-engineering-specialist.md +138 -0
  185. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-formula-validator.md +128 -0
  186. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-generalist.md +645 -0
  187. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-integration-api-specialist.md +258 -0
  188. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-analyst.md +125 -0
  189. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-performance-optimization-specialist.md +211 -0
  190. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-schema-designer.md +130 -0
  191. package/claude-assets/cfn-extras/agents/google-sheets/google-sheets-template-architecture-specialist.md +259 -0
  192. package/claude-assets/cfn-extras/docs/GOOGLE_SHEETS_CFN_LOOP.md +617 -0
  193. package/claude-assets/cfn-extras/skills/GOOGLE_SHEETS_SKILLS_README.md +453 -0
  194. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/SKILL.md +272 -0
  195. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/api-call.sh +254 -0
  196. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/test.sh +174 -0
  197. package/claude-assets/cfn-extras/skills/google-sheets-api-coordinator/validate.sh +98 -0
  198. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/SKILL.md +269 -0
  199. package/claude-assets/cfn-extras/skills/google-sheets-decomposition/decompose.sh +313 -0
  200. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/SKILL.md +237 -0
  201. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/build-formula.sh +220 -0
  202. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/test.sh +172 -0
  203. package/claude-assets/cfn-extras/skills/google-sheets-formula-builder/validate.sh +98 -0
  204. package/claude-assets/cfn-extras/skills/google-sheets-progress/SKILL.md +287 -0
  205. package/claude-assets/cfn-extras/skills/google-sheets-progress/test.sh +385 -0
  206. package/claude-assets/cfn-extras/skills/google-sheets-progress/track-progress.sh +516 -0
  207. package/claude-assets/cfn-extras/skills/google-sheets-progress/validate.sh +119 -0
  208. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/SKILL.md +277 -0
  209. package/claude-assets/cfn-extras/skills/google-sheets-sprint-order/order-sprints.sh +233 -0
  210. package/claude-assets/cfn-extras/skills/google-sheets-validation/SKILL.md +352 -0
  211. package/claude-assets/cfn-extras/skills/google-sheets-validation/test.sh +355 -0
  212. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate-state.sh +374 -0
  213. package/claude-assets/cfn-extras/skills/google-sheets-validation/validate.sh +128 -0
  214. package/claude-assets/commands/cfn-context.md +10 -0
  215. package/claude-assets/commands/cfn-loop-cli.md +44 -14
  216. package/claude-assets/commands/google-sheets/google-sheets-loop.md +289 -0
  217. package/claude-assets/hooks/cfn-pre-execution/SESSION_START_README.md +87 -0
  218. package/claude-assets/hooks/cfn-pre-execution/TEST_SESSION_START.md +128 -0
  219. package/claude-assets/hooks/cfn-pre-execution/session-start-context.sh +111 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_EXAMPLE.md +209 -0
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/README.md +130 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +243 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/agent-mappings.json +142 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +173 -0
  225. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +71 -0
  226. package/claude-assets/skills/cfn-agent-selection-with-fallback/test-agent-selection.sh +282 -0
  227. package/claude-assets/skills/cfn-agent-selector/SKILL.md +143 -0
  228. package/claude-assets/skills/cfn-agent-selector/select-agents.sh +94 -0
  229. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -2
  230. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +21 -2
  231. package/claude-assets/skills/cfn-docker-coordination/.eslintrc.json +33 -0
  232. package/claude-assets/skills/cfn-docker-coordination/README.md +349 -0
  233. package/claude-assets/skills/cfn-docker-coordination/docker-helpers.sh +433 -0
  234. package/claude-assets/skills/cfn-docker-coordination/jest.config.js +25 -0
  235. package/claude-assets/skills/cfn-docker-coordination/package-lock.json +6827 -0
  236. package/claude-assets/skills/cfn-docker-coordination/package.json +38 -0
  237. package/claude-assets/skills/cfn-docker-coordination/src/agent-container.ts +471 -0
  238. package/claude-assets/skills/cfn-docker-coordination/src/docker-client.ts +483 -0
  239. package/claude-assets/skills/cfn-docker-coordination/src/health-checker.ts +418 -0
  240. package/claude-assets/skills/cfn-docker-coordination/src/index.ts +45 -0
  241. package/claude-assets/skills/cfn-docker-coordination/src/network-manager.ts +377 -0
  242. package/claude-assets/skills/cfn-docker-coordination/src/types.ts +412 -0
  243. package/claude-assets/skills/cfn-docker-coordination/src/volume-manager.ts +389 -0
  244. package/claude-assets/skills/cfn-docker-coordination/tests/agent-container.test.ts +379 -0
  245. package/claude-assets/skills/cfn-docker-coordination/tests/docker-client.test.ts +345 -0
  246. package/claude-assets/skills/cfn-docker-coordination/tests/health-checker.test.ts +535 -0
  247. package/claude-assets/skills/cfn-docker-coordination/tests/integration.test.ts +193 -0
  248. package/claude-assets/skills/cfn-docker-coordination/tests/network-manager.test.ts +352 -0
  249. package/claude-assets/skills/cfn-docker-coordination/tests/setup.ts +36 -0
  250. package/claude-assets/skills/cfn-docker-coordination/tsconfig.json +29 -0
  251. package/claude-assets/skills/cfn-docker-logging/INTEGRATION.md +268 -0
  252. package/claude-assets/skills/cfn-docker-logging/SAMPLE_OUTPUTS.md +237 -0
  253. package/claude-assets/skills/cfn-docker-logging/SKILL.md +442 -0
  254. package/claude-assets/skills/cfn-docker-logging/capture-container-logs.sh +120 -0
  255. package/claude-assets/skills/cfn-docker-logging/enable-logging.sh +430 -0
  256. package/claude-assets/skills/cfn-docker-logging/init-hybrid-logging.sh +210 -0
  257. package/claude-assets/skills/cfn-docker-logging/queries/analytics-summary.sh +87 -0
  258. package/claude-assets/skills/cfn-docker-logging/queries/query-agent-timeline.sh +51 -0
  259. package/claude-assets/skills/cfn-docker-logging/queries/query-consensus-history.sh +56 -0
  260. package/claude-assets/skills/cfn-docker-logging/queries/query-coordination-timeline.sh +39 -0
  261. package/claude-assets/skills/cfn-docker-logging/queries/query-failed-containers.sh +40 -0
  262. package/claude-assets/skills/cfn-docker-logging/queries/query-gate-checks.sh +39 -0
  263. package/claude-assets/skills/cfn-docker-logging/schema.sql +111 -0
  264. package/claude-assets/skills/cfn-docker-logging/sqlite-helpers.sh +240 -0
  265. package/claude-assets/skills/cfn-docker-logging/test-hybrid-logging.sh +331 -0
  266. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +11 -5
  267. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +348 -0
  268. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +294 -0
  269. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +37 -0
  270. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +5259 -0
  271. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +40 -0
  272. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +801 -0
  273. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +42 -0
  274. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +351 -0
  275. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +1464 -0
  276. package/claude-assets/skills/cfn-docker-redis-coordination/tsconfig.json +30 -0
  277. package/claude-assets/skills/cfn-error-logging/.eslintrc.json +57 -0
  278. package/claude-assets/skills/cfn-error-logging/.prettierrc.json +10 -0
  279. package/claude-assets/skills/cfn-error-logging/MIGRATION_SUMMARY.md +485 -0
  280. package/claude-assets/skills/cfn-error-logging/package.json +47 -0
  281. package/claude-assets/skills/cfn-error-logging/src/error-logger.ts +1042 -0
  282. package/claude-assets/skills/cfn-error-logging/src/index.ts +12 -0
  283. package/claude-assets/skills/cfn-error-logging/src/types.ts +456 -0
  284. package/claude-assets/skills/cfn-error-logging/tests/error-logger.test.ts +1302 -0
  285. package/claude-assets/skills/cfn-error-logging/tsconfig.json +38 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/.eslintrc.js +56 -0
  287. package/claude-assets/skills/cfn-loop-orchestration/.prettierrc.json +18 -0
  288. package/claude-assets/skills/cfn-loop-orchestration/README.md +149 -41
  289. package/claude-assets/skills/cfn-loop-orchestration/jest.config.js +67 -0
  290. package/claude-assets/skills/cfn-loop-orchestration/orchestrate-wrapper.sh +268 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +147 -16
  292. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +5470 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/package.json +49 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/src/agent-spawner/agent-spawner.ts +34 -0
  295. package/claude-assets/skills/cfn-loop-orchestration/src/gate-checker/gate-checker.ts +36 -0
  296. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +14 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrator/orchestrator.ts +31 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/redis/redis-coordinator.ts +72 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +188 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/src/utils/logger.ts +32 -0
  301. package/claude-assets/skills/cfn-loop-orchestration/tests/setup.ts +22 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/tests/types.test.ts +132 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/tsconfig.json +54 -0
  304. package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/store-context.sh +23 -0
  305. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts +92 -0
  306. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.d.ts.map +1 -0
  307. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js +329 -0
  308. package/claude-assets/skills/cfn-redis-coordination/dist/agent-logger.js.map +1 -0
  309. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts +75 -0
  310. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.d.ts.map +1 -0
  311. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js +302 -0
  312. package/claude-assets/skills/cfn-redis-coordination/dist/agent-recovery.js.map +1 -0
  313. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts +58 -0
  314. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.d.ts.map +1 -0
  315. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js +237 -0
  316. package/claude-assets/skills/cfn-redis-coordination/dist/completion-reporter.js.map +1 -0
  317. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts +63 -0
  318. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.d.ts.map +1 -0
  319. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js +230 -0
  320. package/claude-assets/skills/cfn-redis-coordination/dist/context-manager.js.map +1 -0
  321. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts +45 -0
  322. package/claude-assets/skills/cfn-redis-coordination/dist/index.d.ts.map +1 -0
  323. package/claude-assets/skills/cfn-redis-coordination/dist/index.js +114 -0
  324. package/claude-assets/skills/cfn-redis-coordination/dist/index.js.map +1 -0
  325. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts +31 -0
  326. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.d.ts.map +1 -0
  327. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js +185 -0
  328. package/claude-assets/skills/cfn-redis-coordination/dist/mode-detector.js.map +1 -0
  329. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts +191 -0
  330. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.d.ts.map +1 -0
  331. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js +509 -0
  332. package/claude-assets/skills/cfn-redis-coordination/dist/redis-client.js.map +1 -0
  333. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts +75 -0
  334. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.d.ts.map +1 -0
  335. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js +281 -0
  336. package/claude-assets/skills/cfn-redis-coordination/dist/result-collector.js.map +1 -0
  337. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts +75 -0
  338. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.d.ts.map +1 -0
  339. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js +354 -0
  340. package/claude-assets/skills/cfn-redis-coordination/dist/swarm-manager.js.map +1 -0
  341. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts +62 -0
  342. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.d.ts.map +1 -0
  343. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js +305 -0
  344. package/claude-assets/skills/cfn-redis-coordination/dist/task-analyzer.js.map +1 -0
  345. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts +97 -0
  346. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.d.ts.map +1 -0
  347. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js +283 -0
  348. package/claude-assets/skills/cfn-redis-coordination/dist/task-executor.js.map +1 -0
  349. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts +176 -0
  350. package/claude-assets/skills/cfn-redis-coordination/dist/types.d.ts.map +1 -0
  351. package/claude-assets/skills/cfn-redis-coordination/dist/types.js +81 -0
  352. package/claude-assets/skills/cfn-redis-coordination/dist/types.js.map +1 -0
  353. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts +86 -0
  354. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.d.ts.map +1 -0
  355. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js +419 -0
  356. package/claude-assets/skills/cfn-redis-coordination/dist/waiting-coordinator.js.map +1 -0
  357. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +553 -0
  358. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -2
  359. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +23 -0
  360. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +5272 -0
  361. package/claude-assets/skills/cfn-redis-coordination/package.json +45 -0
  362. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +21 -8
  363. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +3 -2
  364. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +446 -0
  365. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +454 -0
  366. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +396 -0
  367. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +327 -0
  368. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +82 -0
  369. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +155 -0
  370. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +305 -0
  371. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +283 -0
  372. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +654 -0
  373. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +437 -0
  374. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +494 -0
  375. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +404 -0
  376. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +423 -0
  377. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +235 -0
  378. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +587 -0
  379. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +70 -0
  380. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +121 -0
  381. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +84 -0
  382. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +391 -0
  383. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +779 -0
  384. package/claude-assets/skills/cfn-redis-coordination/tsconfig.json +31 -0
  385. package/claude-assets/skills/cfn-skill-propagation/README.md +233 -0
  386. package/claude-assets/skills/cfn-skill-propagation/package-lock.json +5174 -0
  387. package/claude-assets/skills/cfn-skill-propagation/package.json +52 -0
  388. package/claude-assets/skills/cfn-skill-propagation/propagate-skill-update.sh +32 -0
  389. package/claude-assets/skills/cfn-skill-propagation/src/cli.ts +75 -0
  390. package/claude-assets/skills/cfn-skill-propagation/src/database-adapter.ts +239 -0
  391. package/claude-assets/skills/cfn-skill-propagation/src/file-system-adapter.ts +113 -0
  392. package/claude-assets/skills/cfn-skill-propagation/src/index.ts +72 -0
  393. package/claude-assets/skills/cfn-skill-propagation/src/logger.ts +43 -0
  394. package/claude-assets/skills/cfn-skill-propagation/src/metadata-parser.ts +154 -0
  395. package/claude-assets/skills/cfn-skill-propagation/src/skill-propagator.ts +274 -0
  396. package/claude-assets/skills/cfn-skill-propagation/src/skill-validator.ts +179 -0
  397. package/claude-assets/skills/cfn-skill-propagation/src/types.ts +143 -0
  398. package/claude-assets/skills/cfn-skill-propagation/src/version-manager.ts +118 -0
  399. package/claude-assets/skills/cfn-skill-propagation/tests/file-system-adapter.test.ts +91 -0
  400. package/claude-assets/skills/cfn-skill-propagation/tests/metadata-parser.test.ts +176 -0
  401. package/claude-assets/skills/cfn-skill-propagation/tests/skill-propagator.test.ts +209 -0
  402. package/claude-assets/skills/cfn-skill-propagation/tests/skill-validator.test.ts +203 -0
  403. package/claude-assets/skills/cfn-skill-propagation/tests/version-manager.test.ts +115 -0
  404. package/claude-assets/skills/cfn-skill-propagation/tsconfig.json +34 -0
  405. package/claude-assets/skills/task-classifier/SKILL.md +81 -0
  406. package/claude-assets/skills/task-classifier/classify-task.sh +62 -0
  407. package/claude-assets/skills/workflow-codification/package-lock.json +5170 -0
  408. package/claude-assets/skills/workflow-codification/package.json +30 -0
  409. package/claude-assets/skills/workflow-codification/src/index.ts +24 -0
  410. package/claude-assets/skills/workflow-codification/src/pattern-analyzer.ts +537 -0
  411. package/claude-assets/skills/workflow-codification/src/types.ts +180 -0
  412. package/claude-assets/skills/workflow-codification/tests/pattern-analyzer.test.ts +960 -0
  413. package/claude-assets/skills/workflow-codification/tsconfig.json +34 -0
  414. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  415. package/dist/agent-spawner/agent-spawner.js +448 -0
  416. package/dist/agent-spawner/agent-spawner.js.map +1 -0
  417. package/dist/agent-spawner/index.js +10 -0
  418. package/dist/agent-spawner/index.js.map +1 -0
  419. package/dist/agent-spawner/types.js +14 -0
  420. package/dist/agent-spawner/types.js.map +1 -0
  421. package/dist/cli/agent-executor.js +47 -1
  422. package/dist/cli/agent-executor.js.map +1 -1
  423. package/dist/cli/agent-spawn.js +4 -1
  424. package/dist/cli/agent-spawn.js.map +1 -1
  425. package/dist/cli/config-manager.js +109 -91
  426. package/dist/cli/config-manager.js.map +1 -1
  427. package/dist/cli/conversation-fork-cleanup.js +201 -0
  428. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  429. package/dist/cli/conversation-fork.js +16 -3
  430. package/dist/cli/conversation-fork.js.map +1 -1
  431. package/dist/cli/tool-executor.js +3 -1
  432. package/dist/cli/tool-executor.js.map +1 -1
  433. package/dist/gate-checker/gate-checker.js +292 -0
  434. package/dist/gate-checker/gate-checker.js.map +1 -0
  435. package/dist/gate-checker/types.js +94 -0
  436. package/dist/gate-checker/types.js.map +1 -0
  437. package/dist/lib/database-service/connection-pool-manager.js +2 -1
  438. package/dist/lib/database-service/connection-pool-manager.js.map +1 -1
  439. package/dist/orchestrator/index.js +10 -0
  440. package/dist/orchestrator/index.js.map +1 -0
  441. package/dist/orchestrator/orchestrate.js +496 -0
  442. package/dist/orchestrator/orchestrate.js.map +1 -0
  443. package/dist/orchestrator/types.js +58 -0
  444. package/dist/orchestrator/types.js.map +1 -0
  445. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  446. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  447. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  448. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  449. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  450. package/package.json +208 -201
  451. package/readme/README.md +34 -1
  452. package/scripts/switch-api.sh +142 -4
  453. package/scripts/verify-no-secrets.sh +6 -13
  454. package/scripts/verify-redis-cleanup.sh +173 -0
  455. package/tests/README.md +201 -0
  456. package/tests/test-memory-leak-task-mode.sh +435 -0
@@ -0,0 +1,82 @@
1
+ /**
2
+ * CFN Redis Coordination - TypeScript Entry Point
3
+ *
4
+ * Complete Redis coordination layer with Task Mode graceful fallback
5
+ */
6
+
7
+ // Core types
8
+ export * from './types';
9
+
10
+ // Mode detection
11
+ export { detectMode, ConsoleLogger } from './mode-detector';
12
+
13
+ // Redis client
14
+ export { RedisCoordinator } from './redis-client';
15
+
16
+ // Coordination modules
17
+ export { ContextManager } from './context-manager';
18
+ export type { SuccessCriteria } from './context-manager';
19
+
20
+ export { CompletionReporter } from './completion-reporter';
21
+ export type { CompletionReportOptions } from './completion-reporter';
22
+
23
+ export { ResultCollector } from './result-collector';
24
+ export type { CollectionResult, AggregatedScores } from './result-collector';
25
+
26
+ export { WaitingCoordinator } from './waiting-coordinator';
27
+ export type { WaitResult, SignalResult } from './waiting-coordinator';
28
+
29
+ export { SwarmManager } from './swarm-manager';
30
+ export type { SwarmMetadata, CancellationSignal } from './swarm-manager';
31
+
32
+ export { AgentRecoveryManager } from './agent-recovery';
33
+ export type { AgentHealth } from './agent-recovery';
34
+
35
+ export { AgentLogger, storeAgentLog, getAgentLogs, getTaskLogs, clearLogs } from './agent-logger';
36
+ export type { LogLevel, LogEntry } from './agent-logger';
37
+
38
+ export { TaskAnalyzer } from './task-analyzer';
39
+ export type { ComplexityAnalysis, DifficultyLevel } from './task-analyzer';
40
+
41
+ export { TaskExecutor } from './task-executor';
42
+ export type { ExecutionConfig, ExecutionResult, ExecutionProgress } from './task-executor';
43
+
44
+ /**
45
+ * Factory function to initialize all coordination modules
46
+ *
47
+ * Lazy-loaded to avoid circular dependencies
48
+ */
49
+ export async function initializeCoordination() {
50
+ // Dynamic imports to avoid circular dep issues
51
+ const { RedisCoordinator } = await import('./redis-client');
52
+ const { ConsoleLogger } = await import('./mode-detector');
53
+ const { ContextManager: CM } = await import('./context-manager');
54
+ const { CompletionReporter: CR } = await import('./completion-reporter');
55
+ const { ResultCollector: RC } = await import('./result-collector');
56
+ const { WaitingCoordinator: WC } = await import('./waiting-coordinator');
57
+ const { SwarmManager: SM } = await import('./swarm-manager');
58
+ const { AgentRecoveryManager: ARM } = await import('./agent-recovery');
59
+ const { TaskAnalyzer: TA } = await import('./task-analyzer');
60
+ const { TaskExecutor: TE } = await import('./task-executor');
61
+
62
+ const redis = new RedisCoordinator();
63
+ await redis.initialize();
64
+
65
+ const logger = new ConsoleLogger('[CFN-Coord]');
66
+
67
+ return {
68
+ redis,
69
+ logger,
70
+ context: new CM(redis, logger),
71
+ completion: new CR(redis, logger),
72
+ results: new RC(redis, logger),
73
+ waiting: new WC(redis, logger),
74
+ swarm: new SM(redis, logger),
75
+ recovery: new ARM(redis, logger),
76
+ analyzer: new TA(redis, logger),
77
+ executor: new TE(redis, logger)
78
+ };
79
+ }
80
+
81
+ // Re-export mode detection for convenience
82
+ export { detectMode as default } from './mode-detector';
@@ -0,0 +1,155 @@
1
+ /**
2
+ * Mode Detection for CFN Loop Agents
3
+ *
4
+ * Detects whether an agent is running in Task Mode or CLI Mode,
5
+ * and whether Redis operations are safe to execute.
6
+ *
7
+ * CRITICAL: Task Mode agents should NOT use Redis (per CLAUDE.md).
8
+ * This module enforces that distinction at runtime.
9
+ */
10
+
11
+ import type { ExecutionMode, ModeDetection, Logger } from './types';
12
+
13
+ /**
14
+ * Detect execution mode and Redis availability
15
+ *
16
+ * @param logger Optional logger for diagnostics
17
+ * @returns ModeDetection with full context
18
+ */
19
+ export async function detectMode(logger?: Logger): Promise<ModeDetection> {
20
+ // Check environment variables
21
+ const cfnMode = process.env.CFN_MODE?.toLowerCase();
22
+ const taskId = process.env.TASK_ID;
23
+ const agentId = process.env.AGENT_ID;
24
+
25
+ // Check Redis availability (quick test)
26
+ const redisAvailable = await checkRedisAvailability();
27
+
28
+ // Determine mode
29
+ let mode: ExecutionMode = 'unknown';
30
+ let canUseRedis = false;
31
+ let reason = '';
32
+
33
+ // Explicit CFN_MODE takes precedence
34
+ if (cfnMode === 'task') {
35
+ mode = 'task';
36
+ canUseRedis = false;
37
+ reason = 'CFN_MODE=task (explicit Task Mode - Redis operations disabled)';
38
+ } else if (cfnMode === 'cli') {
39
+ mode = 'cli';
40
+ canUseRedis = redisAvailable;
41
+ reason = redisAvailable
42
+ ? 'CFN_MODE=cli (CLI Mode - Redis operations enabled)'
43
+ : 'CFN_MODE=cli but Redis unavailable (Redis operations disabled)';
44
+ }
45
+ // Fallback: Infer mode from environment variables
46
+ else if (taskId && agentId) {
47
+ mode = 'cli';
48
+ canUseRedis = redisAvailable;
49
+ reason = redisAvailable
50
+ ? 'TASK_ID and AGENT_ID present, Redis available (inferred CLI Mode)'
51
+ : 'TASK_ID and AGENT_ID present but Redis unavailable (Redis operations disabled)';
52
+ } else {
53
+ mode = 'task';
54
+ canUseRedis = false;
55
+ reason = 'No TASK_ID or AGENT_ID (inferred Task Mode - Redis operations disabled)';
56
+ }
57
+
58
+ const detection: ModeDetection = {
59
+ mode,
60
+ redisAvailable,
61
+ taskIdPresent: !!taskId,
62
+ agentIdPresent: !!agentId,
63
+ canUseRedis,
64
+ reason
65
+ };
66
+
67
+ // Log detection result
68
+ if (logger) {
69
+ logger.info('Mode detection complete', detection as unknown as Record<string, unknown>);
70
+
71
+ if (mode === 'task') {
72
+ logger.info('⚠️ Task Mode detected: Redis operations will be stubbed');
73
+ logger.info('💡 Task Mode agents return results directly to Main Chat');
74
+ logger.info('🔧 Redis coordination is only for CLI Mode agents');
75
+ } else if (mode === 'cli' && !redisAvailable) {
76
+ logger.warn('⚠️ CLI Mode but Redis unavailable: Operations will soft-fail');
77
+ logger.warn('💡 Check Redis connection: REDIS_HOST, REDIS_PORT');
78
+ } else if (mode === 'cli' && redisAvailable) {
79
+ logger.info('✅ CLI Mode with Redis: Full coordination available');
80
+ }
81
+ }
82
+
83
+ return detection;
84
+ }
85
+
86
+ /**
87
+ * Check if Redis is available
88
+ *
89
+ * Quick connectivity test with 1 second timeout.
90
+ * Returns false instead of throwing errors.
91
+ */
92
+ async function checkRedisAvailability(): Promise<boolean> {
93
+ try {
94
+ // Dynamic import to avoid loading Redis in Task Mode
95
+ const Redis = (await import('ioredis')).default;
96
+
97
+ const host = process.env.REDIS_HOST || 'localhost';
98
+ const port = parseInt(process.env.REDIS_PORT || '6379', 10);
99
+ const password = process.env.REDIS_PASSWORD || process.env.CFN_REDIS_PASSWORD;
100
+
101
+ const client = new Redis({
102
+ host,
103
+ port,
104
+ password: password || undefined,
105
+ connectTimeout: 1000,
106
+ maxRetriesPerRequest: 0,
107
+ retryStrategy: () => null, // Don't retry
108
+ lazyConnect: true
109
+ });
110
+
111
+ try {
112
+ await client.connect();
113
+ const result = await client.ping();
114
+ await client.quit();
115
+ return result === 'PONG';
116
+ } catch {
117
+ try {
118
+ await client.disconnect();
119
+ } catch {
120
+ // Ignore disconnect errors
121
+ }
122
+ return false;
123
+ }
124
+ } catch {
125
+ // Redis module not available or connection failed
126
+ return false;
127
+ }
128
+ }
129
+
130
+ /**
131
+ * Console logger implementation for mode detection
132
+ *
133
+ * Simple console-based logger that doesn't require external dependencies.
134
+ */
135
+ export class ConsoleLogger implements Logger {
136
+ constructor(private prefix: string = '[CFN-Redis]') {}
137
+
138
+ debug(message: string, context?: Record<string, unknown>): void {
139
+ if (process.env.DEBUG) {
140
+ console.log(`${this.prefix} DEBUG: ${message}`, context || '');
141
+ }
142
+ }
143
+
144
+ info(message: string, context?: Record<string, unknown>): void {
145
+ console.log(`${this.prefix} ${message}`, context || '');
146
+ }
147
+
148
+ warn(message: string, context?: Record<string, unknown>): void {
149
+ console.warn(`${this.prefix} ⚠️ ${message}`, context || '');
150
+ }
151
+
152
+ error(message: string, error?: Error, context?: Record<string, unknown>): void {
153
+ console.error(`${this.prefix} ❌ ${message}`, error?.message || '', context || '');
154
+ }
155
+ }
@@ -0,0 +1,305 @@
1
+ /**
2
+ * Redis Client Wrapper
3
+ *
4
+ * Provides graceful fallback for Task mode and robust connection management
5
+ * Replaces: redis-cli-wrapper.sh, redis-functions.sh
6
+ *
7
+ * Security:
8
+ * - CWE-400: Connection timeouts and circuit breaker
9
+ * - CWE-78: No shell execution
10
+ * - Input validation via branded types
11
+ */
12
+
13
+ import Redis, { Redis as RedisClient, RedisOptions } from 'ioredis';
14
+ import {
15
+ RedisConfig,
16
+ RedisConnectionError,
17
+ TimeoutError,
18
+ CircuitBreakerOpenError,
19
+ } from '../types';
20
+
21
+ export interface RedisClientOptions extends RedisConfig {
22
+ gracefulFallback?: boolean; // If true, soft-fail when Redis unavailable (Task mode)
23
+ logger?: Logger;
24
+ }
25
+
26
+ export interface Logger {
27
+ info(message: string, ...args: unknown[]): void;
28
+ warn(message: string, ...args: unknown[]): void;
29
+ error(message: string, ...args: unknown[]): void;
30
+ debug(message: string, ...args: unknown[]): void;
31
+ }
32
+
33
+ class ConsoleLogger implements Logger {
34
+ info(message: string, ...args: unknown[]): void {
35
+ console.log(`[INFO] ${message}`, ...args);
36
+ }
37
+ warn(message: string, ...args: unknown[]): void {
38
+ console.warn(`[WARN] ${message}`, ...args);
39
+ }
40
+ error(message: string, ...args: unknown[]): void {
41
+ console.error(`[ERROR] ${message}`, ...args);
42
+ }
43
+ debug(message: string, ...args: unknown[]): void {
44
+ if (process.env.DEBUG === 'true') {
45
+ console.log(`[DEBUG] ${message}`, ...args);
46
+ }
47
+ }
48
+ }
49
+
50
+ type CircuitBreakerState = 'CLOSED' | 'OPEN' | 'HALF_OPEN';
51
+
52
+ /**
53
+ * Redis Client with graceful fallback and circuit breaker
54
+ */
55
+ export class CFNRedisClient {
56
+ private client: RedisClient | null = null;
57
+ private readonly options: RedisClientOptions;
58
+ private readonly logger: Logger;
59
+ private isConnected: boolean = false;
60
+ private connectionAttempts: number = 0;
61
+ private lastConnectionAttempt: number = 0;
62
+ private circuitBreakerState: CircuitBreakerState = 'CLOSED';
63
+ private circuitBreakerFailures: number = 0;
64
+ private readonly CIRCUIT_BREAKER_THRESHOLD = 5;
65
+ private readonly CIRCUIT_BREAKER_RESET_TIMEOUT = 60000; // 1 minute
66
+
67
+ constructor(options: RedisClientOptions) {
68
+ this.options = {
69
+ host: options.host || process.env.REDIS_HOST || 'localhost',
70
+ port: options.port || parseInt(process.env.REDIS_PORT || '6379', 10),
71
+ password: options.password || process.env.REDIS_PASSWORD || process.env.CFN_REDIS_PASSWORD,
72
+ db: options.db || parseInt(process.env.REDIS_DB || '0', 10),
73
+ connectTimeout: options.connectTimeout || 1000,
74
+ commandTimeout: options.commandTimeout || 5000,
75
+ enableOfflineQueue: options.enableOfflineQueue ?? false,
76
+ lazyConnect: options.lazyConnect ?? true,
77
+ gracefulFallback: options.gracefulFallback ?? false,
78
+ retryStrategy: options.retryStrategy || this.defaultRetryStrategy.bind(this),
79
+ };
80
+ this.logger = options.logger || new ConsoleLogger();
81
+ }
82
+
83
+ /**
84
+ * Default retry strategy: exponential backoff with max 3 attempts
85
+ */
86
+ private defaultRetryStrategy(times: number): number | null {
87
+ if (times > 3) {
88
+ this.logger.warn('Redis connection failed after 3 attempts');
89
+ return null; // Stop retrying
90
+ }
91
+ const delay = Math.min(times * 200, 3000);
92
+ this.logger.debug(`Redis retry ${times} in ${delay}ms`);
93
+ return delay;
94
+ }
95
+
96
+ /**
97
+ * Connect to Redis (lazy connection)
98
+ */
99
+ async connect(): Promise<void> {
100
+ if (this.isConnected && this.client) {
101
+ return;
102
+ }
103
+
104
+ if (this.circuitBreakerState === 'OPEN') {
105
+ const now = Date.now();
106
+ if (now - this.lastConnectionAttempt < this.CIRCUIT_BREAKER_RESET_TIMEOUT) {
107
+ throw new CircuitBreakerOpenError(
108
+ 'Circuit breaker is OPEN. Redis connection attempts blocked.'
109
+ );
110
+ }
111
+ // Transition to HALF_OPEN to test connection
112
+ this.circuitBreakerState = 'HALF_OPEN';
113
+ this.logger.info('Circuit breaker transitioning to HALF_OPEN');
114
+ }
115
+
116
+ this.lastConnectionAttempt = Date.now();
117
+ this.connectionAttempts++;
118
+
119
+ try {
120
+ const redisOptions: RedisOptions = {
121
+ host: this.options.host,
122
+ port: this.options.port,
123
+ password: this.options.password,
124
+ db: this.options.db,
125
+ connectTimeout: this.options.connectTimeout,
126
+ commandTimeout: this.options.commandTimeout,
127
+ enableOfflineQueue: this.options.enableOfflineQueue,
128
+ lazyConnect: this.options.lazyConnect,
129
+ retryStrategy: this.options.retryStrategy,
130
+ maxRetriesPerRequest: 1,
131
+ };
132
+
133
+ this.client = new Redis(redisOptions);
134
+
135
+ // Wait for connection with timeout
136
+ await Promise.race([
137
+ new Promise<void>((resolve, reject) => {
138
+ this.client!.once('ready', () => {
139
+ this.isConnected = true;
140
+ this.circuitBreakerState = 'CLOSED';
141
+ this.circuitBreakerFailures = 0;
142
+ this.logger.info(
143
+ `Redis connected: ${this.options.host}:${this.options.port} (db: ${this.options.db})`
144
+ );
145
+ resolve();
146
+ });
147
+ this.client!.once('error', (err) => {
148
+ reject(err);
149
+ });
150
+ }),
151
+ new Promise<void>((_, reject) =>
152
+ setTimeout(() => reject(new Error('Connection timeout')), this.options.connectTimeout!)
153
+ ),
154
+ ]);
155
+
156
+ // Verify connection with PING
157
+ await this.client.ping();
158
+
159
+ } catch (error) {
160
+ this.isConnected = false;
161
+ this.circuitBreakerFailures++;
162
+
163
+ if (this.circuitBreakerFailures >= this.CIRCUIT_BREAKER_THRESHOLD) {
164
+ this.circuitBreakerState = 'OPEN';
165
+ this.logger.error(
166
+ `Circuit breaker opened after ${this.circuitBreakerFailures} failures`
167
+ );
168
+ }
169
+
170
+ if (this.options.gracefulFallback) {
171
+ this.logger.warn('⚠️ Redis unavailable - graceful fallback mode (Task mode)');
172
+ this.logger.info('💡 This is expected in Task mode (Main Chat coordination)');
173
+ this.logger.info('🔧 Agents should output JSON directly instead of Redis coordination');
174
+ return; // Soft fail - don't throw
175
+ }
176
+
177
+ const errorMessage = error instanceof Error ? error.message : String(error);
178
+ throw new RedisConnectionError(
179
+ `Failed to connect to Redis at ${this.options.host}:${this.options.port}: ${errorMessage}`,
180
+ error instanceof Error ? error : undefined
181
+ );
182
+ }
183
+ }
184
+
185
+ /**
186
+ * Check if Redis is available
187
+ */
188
+ isAvailable(): boolean {
189
+ return this.isConnected && this.client !== null;
190
+ }
191
+
192
+ /**
193
+ * Get the underlying Redis client (throws if not connected)
194
+ */
195
+ getClient(): RedisClient {
196
+ if (!this.client || !this.isConnected) {
197
+ if (this.options.gracefulFallback) {
198
+ throw new Error('Redis not available in graceful fallback mode');
199
+ }
200
+ throw new RedisConnectionError('Redis client is not connected');
201
+ }
202
+ return this.client;
203
+ }
204
+
205
+ /**
206
+ * Execute Redis command with timeout and error handling
207
+ */
208
+ async execute<T>(
209
+ operation: (client: RedisClient) => Promise<T>,
210
+ operationName: string = 'command'
211
+ ): Promise<T | null> {
212
+ if (!this.isAvailable()) {
213
+ if (this.options.gracefulFallback) {
214
+ this.logger.debug(`Redis unavailable, skipping: ${operationName}`);
215
+ return null;
216
+ }
217
+ throw new RedisConnectionError('Redis not available');
218
+ }
219
+
220
+ try {
221
+ const client = this.getClient();
222
+ const result = await Promise.race([
223
+ operation(client),
224
+ new Promise<never>((_, reject) =>
225
+ setTimeout(
226
+ () => reject(new TimeoutError(`Redis ${operationName} timeout`, this.options.commandTimeout!)),
227
+ this.options.commandTimeout
228
+ )
229
+ ),
230
+ ]);
231
+
232
+ return result;
233
+ } catch (error) {
234
+ this.logger.error(`Redis ${operationName} failed:`, error);
235
+
236
+ if (error instanceof TimeoutError) {
237
+ throw error;
238
+ }
239
+
240
+ if (this.options.gracefulFallback) {
241
+ this.logger.warn(`Graceful fallback for failed ${operationName}`);
242
+ return null;
243
+ }
244
+
245
+ throw error;
246
+ }
247
+ }
248
+
249
+ /**
250
+ * Ping Redis to check connectivity
251
+ */
252
+ async ping(): Promise<boolean> {
253
+ try {
254
+ const result = await this.execute(
255
+ (client) => client.ping(),
256
+ 'PING'
257
+ );
258
+ return result === 'PONG';
259
+ } catch {
260
+ return false;
261
+ }
262
+ }
263
+
264
+ /**
265
+ * Disconnect from Redis
266
+ */
267
+ async disconnect(): Promise<void> {
268
+ if (this.client) {
269
+ await this.client.quit();
270
+ this.client = null;
271
+ this.isConnected = false;
272
+ this.logger.info('Redis disconnected');
273
+ }
274
+ }
275
+
276
+ /**
277
+ * Get connection statistics
278
+ */
279
+ getStats(): {
280
+ isConnected: boolean;
281
+ connectionAttempts: number;
282
+ circuitBreakerState: CircuitBreakerState;
283
+ circuitBreakerFailures: number;
284
+ } {
285
+ return {
286
+ isConnected: this.isConnected,
287
+ connectionAttempts: this.connectionAttempts,
288
+ circuitBreakerState: this.circuitBreakerState,
289
+ circuitBreakerFailures: this.circuitBreakerFailures,
290
+ };
291
+ }
292
+ }
293
+
294
+ /**
295
+ * Create a CFNRedisClient instance from environment variables
296
+ */
297
+ export function createRedisClientFromEnv(gracefulFallback: boolean = false): CFNRedisClient {
298
+ return new CFNRedisClient({
299
+ host: process.env.REDIS_HOST || 'localhost',
300
+ port: parseInt(process.env.REDIS_PORT || '6379', 10),
301
+ password: process.env.REDIS_PASSWORD || process.env.CFN_REDIS_PASSWORD,
302
+ db: parseInt(process.env.REDIS_DB || '0', 10),
303
+ gracefulFallback,
304
+ });
305
+ }