claude-flow-novice 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (353) hide show
  1. package/.claude/agents/cfn-dev-team/CLAUDE.md +1086 -0
  2. package/.claude/agents/cfn-dev-team/README.md +116 -0
  3. package/.claude/agents/cfn-dev-team/architecture/api-designer-persona.md +149 -0
  4. package/.claude/agents/cfn-dev-team/architecture/base-template-generator.md +196 -0
  5. package/.claude/agents/cfn-dev-team/architecture/goal-planner.md +183 -0
  6. package/.claude/agents/cfn-dev-team/architecture/planner.md +182 -0
  7. package/.claude/agents/cfn-dev-team/architecture/system-architect.md +162 -0
  8. package/.claude/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +540 -0
  9. package/.claude/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +20 -14
  10. package/.claude/agents/cfn-dev-team/coordinators/consensus-builder.md +167 -0
  11. package/.claude/agents/cfn-dev-team/dev-ops/devops-engineer.md +148 -0
  12. package/.claude/agents/cfn-dev-team/dev-ops/github-commit-agent.md +118 -0
  13. package/.claude/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +540 -0
  14. package/.claude/agents/cfn-dev-team/developers/backend-dev.md +20 -0
  15. package/.claude/agents/cfn-dev-team/developers/data/data-engineer.md +585 -0
  16. package/.claude/agents/cfn-dev-team/developers/database/database-architect.md +276 -0
  17. package/.claude/agents/cfn-dev-team/developers/dev-backend-api.md +147 -0
  18. package/.claude/agents/cfn-dev-team/developers/frontend/mobile-dev.md +218 -0
  19. package/.claude/agents/cfn-dev-team/developers/{react-frontend-engineer.md → frontend/react-frontend-engineer.md} +53 -5
  20. package/.claude/agents/cfn-dev-team/developers/frontend/spec-mobile-react-native.md +199 -0
  21. package/.claude/agents/cfn-dev-team/developers/graphql-specialist.md +615 -0
  22. package/.claude/agents/cfn-dev-team/developers/rust-developer.md +174 -0
  23. package/.claude/agents/cfn-dev-team/documentation/README-VALIDATION.md +243 -0
  24. package/.claude/agents/cfn-dev-team/documentation/agent-type-guidelines.md +465 -0
  25. package/.claude/agents/cfn-dev-team/documentation/api-docs.md +103 -0
  26. package/.claude/agents/cfn-dev-team/documentation/docs-api-openapi.md +98 -0
  27. package/.claude/agents/cfn-dev-team/documentation/pseudocode.md +159 -0
  28. package/.claude/agents/cfn-dev-team/documentation/specification.md +157 -0
  29. package/.claude/agents/cfn-dev-team/product-owners/accessibility-advocate-persona.md +109 -0
  30. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/cto-agent.md +8 -6
  31. package/.claude/agents/cfn-dev-team/product-owners/power-user-persona.md +190 -0
  32. package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner.md +85 -59
  33. package/.claude/agents/cfn-dev-team/reviewers/quality/analyze-code-quality.md +141 -0
  34. package/.claude/agents/cfn-dev-team/reviewers/quality/code-analyzer.md +200 -0
  35. package/.claude/agents/cfn-dev-team/reviewers/quality/cyclomatic-complexity-reducer.md +321 -0
  36. package/.claude/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +238 -0
  37. package/.claude/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +101 -0
  38. package/.claude/agents/cfn-dev-team/reviewers/quality/quality-metrics.md +375 -0
  39. package/.claude/agents/cfn-dev-team/reviewers/quality/security-specialist.md +193 -0
  40. package/.claude/agents/cfn-dev-team/reviewers/reviewer.md +39 -0
  41. package/.claude/agents/cfn-dev-team/testers/interaction-tester.md +31 -0
  42. package/.claude/agents/cfn-dev-team/testers/load-testing-specialist.md +469 -0
  43. package/.claude/agents/cfn-dev-team/testers/playwright-tester.md +24 -0
  44. package/.claude/agents/cfn-dev-team/testers/tester.md +20 -0
  45. package/.claude/agents/cfn-dev-team/utility/agent-builder.md +151 -0
  46. package/.claude/agents/cfn-dev-team/utility/analyst.md +178 -0
  47. package/.claude/agents/cfn-dev-team/utility/claude-code-expert.md +1043 -0
  48. package/.claude/agents/cfn-dev-team/utility/code-booster.md +139 -0
  49. package/.claude/agents/cfn-dev-team/utility/context-curator.md +99 -0
  50. package/.claude/agents/cfn-dev-team/{developers → utility}/researcher.md +6 -4
  51. package/.claude/commands/cfn/CFN_LOOP_FRONTEND.md +741 -0
  52. package/.claude/commands/cfn/CFN_LOOP_TASK_MODE.md +353 -0
  53. package/.claude/commands/cfn/cfn-loop-frontend.md +555 -0
  54. package/.claude/commands/cfn/cfn-loop.md +168 -7
  55. package/{CFN-CLAUDE.md → .claude/root-claude-distribute/CFN-CLAUDE.md} +23 -3
  56. package/.claude/skills/cfn-ace-system/SKILL.md +364 -0
  57. package/.claude/skills/cfn-ace-system/add-bullet.sh +145 -0
  58. package/.claude/skills/cfn-ace-system/analyze-anti-pattern-effectiveness.sh +56 -0
  59. package/.claude/skills/cfn-ace-system/classify-task.sh +18 -0
  60. package/.claude/skills/cfn-ace-system/export-ace-metrics.sh +48 -0
  61. package/.claude/skills/cfn-ace-system/extract-tags.sh +385 -0
  62. package/.claude/skills/cfn-ace-system/format-negative-context.sh +180 -0
  63. package/.claude/skills/cfn-ace-system/init-indexes.sql +160 -0
  64. package/.claude/skills/cfn-ace-system/invoke-context-curate.sh +192 -0
  65. package/.claude/skills/cfn-ace-system/invoke-context-inject.sh +361 -0
  66. package/.claude/skills/cfn-ace-system/invoke-context-query.sh +139 -0
  67. package/.claude/skills/cfn-ace-system/invoke-context-reflect.sh +343 -0
  68. package/.claude/skills/cfn-ace-system/invoke-context-stats.sh +227 -0
  69. package/.claude/skills/cfn-ace-system/log-merge.sh +67 -0
  70. package/.claude/skills/cfn-ace-system/monitor-injection-performance.sh +138 -0
  71. package/.claude/skills/cfn-ace-system/optimize-injection-pipeline.sh +169 -0
  72. package/.claude/skills/cfn-ace-system/query-anti-patterns.sh +276 -0
  73. package/.claude/skills/cfn-ace-system/query-contexts.sh +150 -0
  74. package/.claude/skills/cfn-ace-system/query-reflections.sh +35 -0
  75. package/.claude/skills/cfn-ace-system/schema/001-create-context-reflections.sql +237 -0
  76. package/.claude/skills/cfn-ace-system/schema/README.md +723 -0
  77. package/.claude/skills/cfn-ace-system/schema/SCHEMA_DESIGN_SUMMARY.md +564 -0
  78. package/.claude/skills/cfn-ace-system/schema/populate-test-data-simple.sh +62 -0
  79. package/.claude/skills/cfn-ace-system/schema/populate-test-data.sh +247 -0
  80. package/.claude/skills/cfn-ace-system/schema/run-migration.sh +231 -0
  81. package/.claude/skills/cfn-ace-system/schema/validate-schema.sql +280 -0
  82. package/.claude/skills/cfn-ace-system/score-relevance-adapter.sh +138 -0
  83. package/.claude/skills/cfn-ace-system/score-relevance.sh +253 -0
  84. package/.claude/skills/cfn-ace-system/sprint-7-lessons.json +46 -0
  85. package/.claude/skills/cfn-ace-system/store-reflection.sh +46 -0
  86. package/.claude/skills/cfn-ace-system/test-ace-skill.sh +312 -0
  87. package/.claude/skills/cfn-ace-system/track-ab-test.sh +42 -0
  88. package/.claude/skills/cfn-ace-system/update-reflection.sh +41 -0
  89. package/.claude/skills/cfn-agent-discovery/SKILL.md +40 -0
  90. package/.claude/skills/cfn-agent-discovery/agents-registry-clean.json +0 -0
  91. package/.claude/skills/cfn-agent-discovery/agents-registry-fixed.json +19 -0
  92. package/.claude/skills/cfn-agent-discovery/agents-registry.json +718 -0
  93. package/.claude/skills/cfn-agent-discovery/discover-agents.py +184 -0
  94. package/.claude/skills/cfn-agent-discovery/discover-agents.sh +87 -0
  95. package/.claude/skills/cfn-agent-discovery/invoke-registry.sh +11 -0
  96. package/.claude/skills/cfn-agent-discovery/temp_script.py +0 -0
  97. package/.claude/skills/cfn-agent-execution/execute-agent.sh +126 -0
  98. package/.claude/skills/cfn-agent-output-processing/SKILL.md +359 -0
  99. package/.claude/skills/cfn-agent-selector/SKILL.md +90 -0
  100. package/.claude/skills/cfn-agent-selector/select-agents.sh +112 -0
  101. package/.claude/skills/cfn-agent-spawning/SKILL.md +135 -0
  102. package/.claude/skills/cfn-agent-spawning/agent-selection-guide.md +814 -0
  103. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +30 -0
  104. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +263 -0
  105. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +613 -0
  106. package/.claude/skills/cfn-analytics/description-refinement-guide.md +164 -0
  107. package/.claude/skills/cfn-analytics/log-skill-invocation.js +122 -0
  108. package/.claude/skills/cfn-analytics/run-production-criteria-tests.sh +126 -0
  109. package/.claude/skills/cfn-analytics/skill-analytics-dashboard.js +113 -0
  110. package/.claude/skills/cfn-analytics/skill-invocation-hook.sh +28 -0
  111. package/.claude/skills/cfn-analytics/skill-invocations.sql +58 -0
  112. package/.claude/skills/cfn-analytics/test-corpus.json +32 -0
  113. package/.claude/skills/cfn-analytics/test-data-generator.js +115 -0
  114. package/.claude/skills/cfn-analytics/test-manual-override-rate.js +285 -0
  115. package/.claude/skills/cfn-analytics/validate-skill-selection.js +188 -0
  116. package/.claude/skills/cfn-config-management/SKILL.md +34 -0
  117. package/.claude/skills/cfn-config-management/check-dependencies.sh +56 -0
  118. package/.claude/skills/cfn-config-management/config.json +32 -0
  119. package/.claude/skills/cfn-config-management/manage-config.sh +113 -0
  120. package/.claude/skills/cfn-event-bus/SKILL.md +412 -0
  121. package/.claude/skills/cfn-event-bus/config.json +111 -0
  122. package/.claude/skills/cfn-event-bus/eventbus-wrapper.cjs +69 -0
  123. package/.claude/skills/cfn-event-bus/invoke-event-publish.sh +147 -0
  124. package/.claude/skills/cfn-event-bus/invoke-event-subscribe.sh +171 -0
  125. package/.claude/skills/cfn-event-bus/invoke-lifecycle-track.sh +201 -0
  126. package/.claude/skills/cfn-event-bus/test-event-bus.sh +280 -0
  127. package/.claude/skills/cfn-fleet-manager/SKILL.md +412 -0
  128. package/.claude/skills/cfn-fleet-manager/config.json +60 -0
  129. package/.claude/skills/cfn-fleet-manager/invoke-fleet-allocate.sh +182 -0
  130. package/.claude/skills/cfn-fleet-manager/invoke-fleet-balance.sh +239 -0
  131. package/.claude/skills/cfn-fleet-manager/invoke-fleet-metrics.sh +193 -0
  132. package/.claude/skills/cfn-fleet-manager/invoke-fleet-register.sh +124 -0
  133. package/.claude/skills/cfn-fleet-manager/test-fleet-manager.sh +345 -0
  134. package/.claude/skills/cfn-hook-pipeline/SKILL.md +148 -0
  135. package/.claude/skills/cfn-hook-pipeline/auto-resolve.sh +66 -0
  136. package/.claude/skills/cfn-hook-pipeline/check-dependencies.sh +40 -0
  137. package/.claude/skills/cfn-hook-pipeline/feedback-resolver.sh +452 -0
  138. package/.claude/skills/cfn-hook-pipeline/post-edit-handler.sh +154 -0
  139. package/.claude/skills/cfn-hook-pipeline/security-scan.json +60 -0
  140. package/.claude/skills/cfn-hook-pipeline/security-scanner.sh +121 -0
  141. package/.claude/skills/cfn-hook-pipeline/test-root-warning-resolution.sh +148 -0
  142. package/.claude/skills/cfn-hybrid-routing/SKILL.md +46 -0
  143. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +52 -0
  144. package/.claude/skills/cfn-hybrid-routing/config.json +26 -0
  145. package/.claude/skills/cfn-hybrid-routing/spawn-worker.sh +44 -0
  146. package/.claude/skills/cfn-loop-orchestration/SKILL.md +299 -0
  147. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +228 -0
  148. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +84 -0
  149. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +142 -0
  150. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +359 -0
  151. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +71 -0
  152. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +90 -0
  153. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +87 -0
  154. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +271 -0
  155. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +51 -0
  156. package/.claude/skills/cfn-loop-orchestration/inject-loop-context.sh +41 -0
  157. package/.claude/skills/cfn-loop-orchestration/monitor-execution.sh +156 -0
  158. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +884 -0
  159. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +840 -0
  160. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +99 -0
  161. package/.claude/skills/cfn-loop-orchestration/test-cfn-orchestration.sh +281 -0
  162. package/.claude/skills/cfn-loop-orchestration/test-edge-cases.sh +188 -0
  163. package/.claude/skills/cfn-loop-validation/SKILL.md +353 -0
  164. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +31 -0
  165. package/.claude/skills/cfn-loop-validation/config.json +161 -0
  166. package/.claude/skills/cfn-loop-validation/consensus-calculator.js +477 -0
  167. package/.claude/skills/cfn-loop-validation/evidence-chain.sql +163 -0
  168. package/.claude/skills/cfn-loop-validation/examples/README.md +453 -0
  169. package/.claude/skills/cfn-loop-validation/examples/coordinator-full-cfn-loop.sh +234 -0
  170. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop2-consensus.sh +132 -0
  171. package/.claude/skills/cfn-loop-validation/examples/coordinator-loop3-gate.sh +115 -0
  172. package/.claude/skills/cfn-loop-validation/examples/coordinator-redis-integration.sh +186 -0
  173. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -0
  174. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +134 -0
  175. package/.claude/skills/cfn-process-lifecycle/SKILL.md +39 -0
  176. package/.claude/skills/cfn-process-lifecycle/check-dependencies.sh +58 -0
  177. package/.claude/skills/cfn-process-lifecycle/config.json +39 -0
  178. package/.claude/skills/cfn-process-lifecycle/process-manager.sh +144 -0
  179. package/.claude/skills/cfn-product-owner-decision/SKILL.md +332 -0
  180. package/.claude/skills/cfn-product-owner-decision/execute-decision.sh +176 -0
  181. package/.claude/skills/cfn-product-owner-decision/parse-decision.sh +66 -0
  182. package/.claude/skills/cfn-product-owner-decision/validate-deliverables.sh +82 -0
  183. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +280 -0
  184. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +209 -0
  185. package/.claude/skills/cfn-redis-coordination/HEARTBEAT.md +57 -0
  186. package/.claude/skills/cfn-redis-coordination/HEARTBEAT_MONITORING.md +267 -0
  187. package/.claude/skills/cfn-redis-coordination/LOGGING.md +260 -0
  188. package/.claude/skills/cfn-redis-coordination/SECURITY_REVIEW.md +25 -0
  189. package/.claude/skills/cfn-redis-coordination/SHUTDOWN_HANDLING.md +164 -0
  190. package/.claude/skills/cfn-redis-coordination/SKILL.md +720 -0
  191. package/.claude/skills/cfn-redis-coordination/agent-log.sh +124 -0
  192. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +75 -0
  193. package/.claude/skills/cfn-redis-coordination/analyze-task-complexity.sh +277 -0
  194. package/.claude/skills/cfn-redis-coordination/cancel-swarm.sh +221 -0
  195. package/.claude/skills/cfn-redis-coordination/cfn-loop-exec.sh +468 -0
  196. package/.claude/skills/cfn-redis-coordination/cfn-loop-relaunch.sh +29 -0
  197. package/.claude/skills/cfn-redis-coordination/check-dependencies.sh +32 -0
  198. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +179 -0
  199. package/.claude/skills/cfn-redis-coordination/collect-results.sh +75 -0
  200. package/.claude/skills/cfn-redis-coordination/complete-swarm.sh +75 -0
  201. package/.claude/skills/cfn-redis-coordination/config.json +61 -0
  202. package/.claude/skills/cfn-redis-coordination/data/cfn-loop.db +0 -0
  203. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +82 -0
  204. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +274 -0
  205. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +276 -0
  206. package/.claude/skills/cfn-redis-coordination/demos/test-dlq.sh +129 -0
  207. package/.claude/skills/cfn-redis-coordination/demos/test-iteration-feedback.sh +320 -0
  208. package/.claude/skills/cfn-redis-coordination/demos/test-orchestrator.sh +249 -0
  209. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4-unix.sh +148 -0
  210. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake-phase4.sh +163 -0
  211. package/.claude/skills/cfn-redis-coordination/demos/test-priority-wake.sh +138 -0
  212. package/.claude/skills/cfn-redis-coordination/demos/test-quick-fix.sh +81 -0
  213. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-absolute.sh +45 -0
  214. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-fallback.sh +68 -0
  215. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-percentage.sh +56 -0
  216. package/.claude/skills/cfn-redis-coordination/demos/test-quorum-with-retry.sh +81 -0
  217. package/.claude/skills/cfn-redis-coordination/demos/test-quorum.sh +57 -0
  218. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown-handling.sh +187 -0
  219. package/.claude/skills/cfn-redis-coordination/demos/test-shutdown.sh +160 -0
  220. package/.claude/skills/cfn-redis-coordination/demos/test-utils-unix.sh +97 -0
  221. package/.claude/skills/cfn-redis-coordination/demos/test-utils.sh +97 -0
  222. package/.claude/skills/cfn-redis-coordination/demos/test-waiting-mode.sh +59 -0
  223. package/.claude/skills/cfn-redis-coordination/examples/README.md +73 -0
  224. package/.claude/skills/cfn-redis-coordination/examples/grafana-dashboard.json +352 -0
  225. package/.claude/skills/cfn-redis-coordination/examples/hierarchical-pattern.sh +127 -0
  226. package/.claude/skills/cfn-redis-coordination/examples/mesh-pattern.sh +171 -0
  227. package/.claude/skills/cfn-redis-coordination/examples/timeout-handling.sh +227 -0
  228. package/.claude/skills/cfn-redis-coordination/examples/waiting-mode-pattern.sh +239 -0
  229. package/.claude/skills/cfn-redis-coordination/execute-product-owner-decision.sh +258 -0
  230. package/.claude/skills/cfn-redis-coordination/get-agent-timeout.sh +177 -0
  231. package/.claude/skills/cfn-redis-coordination/heartbeat-functions.sh +137 -0
  232. package/.claude/skills/cfn-redis-coordination/heartbeat-protocol.md +106 -0
  233. package/.claude/skills/cfn-redis-coordination/heartbeat.sh +126 -0
  234. package/.claude/skills/cfn-redis-coordination/init-swarm.sh +148 -0
  235. package/.claude/skills/cfn-redis-coordination/invoke-redis-pattern.sh +220 -0
  236. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +283 -0
  237. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh.backup-p7 +423 -0
  238. package/.claude/skills/cfn-redis-coordination/list-active-swarms.sh +147 -0
  239. package/.claude/skills/cfn-redis-coordination/log-event.sh +109 -0
  240. package/.claude/skills/cfn-redis-coordination/metrics-export.sh +674 -0
  241. package/.claude/skills/cfn-redis-coordination/metrics-schema.json +66 -0
  242. package/.claude/skills/cfn-redis-coordination/metrics-storage.md +31 -0
  243. package/.claude/skills/cfn-redis-coordination/monitor-cfn-violations.sh +391 -0
  244. package/.claude/skills/cfn-redis-coordination/monitor-heartbeats.sh +101 -0
  245. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop-v3.sh +141 -0
  246. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh +31 -0
  247. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup +38 -0
  248. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-1761167675 +1672 -0
  249. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-p5 +1604 -0
  250. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase1 +1550 -0
  251. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase2 +1621 -0
  252. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.backup-phase3 +1621 -0
  253. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.bak +0 -0
  254. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.broken +1627 -0
  255. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.corrupted +80 -0
  256. package/.claude/skills/cfn-redis-coordination/orchestrate-cfn-loop.sh.deprecated +1864 -0
  257. package/.claude/skills/cfn-redis-coordination/priority-wake-mechanism.md +75 -0
  258. package/.claude/skills/cfn-redis-coordination/priority_wake.py +134 -0
  259. package/.claude/skills/cfn-redis-coordination/query-dlq.sh +162 -0
  260. package/.claude/skills/cfn-redis-coordination/query-logs.sh +103 -0
  261. package/.claude/skills/cfn-redis-coordination/redis-pattern.sh +619 -0
  262. package/.claude/skills/cfn-redis-coordination/retrieve-context.sh +58 -0
  263. package/.claude/skills/cfn-redis-coordination/select-specialist-agent.sh +371 -0
  264. package/.claude/skills/cfn-redis-coordination/semantic-match-tfidf.py +252 -0
  265. package/.claude/skills/cfn-redis-coordination/send-heartbeat.sh +165 -0
  266. package/.claude/skills/cfn-redis-coordination/signal.sh +38 -0
  267. package/.claude/skills/cfn-redis-coordination/store-context.sh +86 -0
  268. package/.claude/skills/cfn-redis-coordination/store-epic-context.sh +123 -0
  269. package/.claude/skills/cfn-redis-coordination/test-context-injection.sh +354 -0
  270. package/.claude/skills/cfn-redis-coordination/test-timeout-enforcement.sh +513 -0
  271. package/.claude/skills/cfn-redis-coordination/tests/convert-line-endings.sh +15 -0
  272. package/.claude/skills/cfn-redis-coordination/tests/dlq-functionality-test.sh +102 -0
  273. package/.claude/skills/cfn-redis-coordination/tests/edge-cases-test.sh +99 -0
  274. package/.claude/skills/cfn-redis-coordination/tests/integration-test.sh +170 -0
  275. package/.claude/skills/cfn-redis-coordination/tests/retry-mechanism-test.sh +82 -0
  276. package/.claude/skills/cfn-redis-coordination/tests/run-test-suite.sh +92 -0
  277. package/.claude/skills/cfn-redis-coordination/tests/run-tests.sh +4 -0
  278. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-monitoring.sh +418 -0
  279. package/.claude/skills/cfn-redis-coordination/tests/test-heartbeat-simple.sh +124 -0
  280. package/.claude/skills/cfn-redis-coordination/tests/test-primitives.sh +166 -0
  281. package/.claude/skills/cfn-redis-coordination/tests/test-utils.sh +54 -0
  282. package/.claude/skills/cfn-redis-coordination/tests/test_coordination_primitives.sh.deprecated +20 -0
  283. package/.claude/skills/cfn-redis-coordination/tests/test_utils.sh +49 -0
  284. package/.claude/skills/cfn-redis-coordination/v2_modularization/core_orchestration.sh +76 -0
  285. package/.claude/skills/cfn-redis-coordination/validate-parameters.sh +492 -0
  286. package/.claude/skills/cfn-sqlite-memory/IMPLEMENTATION_REPORT.md +393 -0
  287. package/.claude/skills/cfn-sqlite-memory/QUICK_REFERENCE.md +204 -0
  288. package/.claude/skills/cfn-sqlite-memory/SKILL.md +415 -0
  289. package/.claude/skills/cfn-sqlite-memory/acl-queries.sql +452 -0
  290. package/.claude/skills/cfn-sqlite-memory/check-dependencies.sh +36 -0
  291. package/.claude/skills/cfn-sqlite-memory/config.json +45 -0
  292. package/.claude/skills/cfn-sqlite-memory/memory-cli.sh +88 -0
  293. package/.claude/skills/cfn-sqlite-memory/test-state-persistence.js +187 -0
  294. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +274 -0
  295. package/.claude/skills/cfn-test-execution/SKILL.md +128 -0
  296. package/.claude/skills/cfn-test-execution/check-dependencies.sh +36 -0
  297. package/.claude/skills/cfn-test-execution/test-cache-reader.sh +134 -0
  298. package/.claude/skills/cfn-test-execution/test-concurrent-conflicts.sh +115 -0
  299. package/.claude/skills/cfn-test-execution/test-coordinator-pattern.sh +109 -0
  300. package/.claude/skills/cfn-transparency-middleware/Cargo.toml +18 -0
  301. package/.claude/skills/cfn-transparency-middleware/SECURITY.md +41 -0
  302. package/.claude/skills/cfn-transparency-middleware/SKILL.md +91 -0
  303. package/.claude/skills/cfn-transparency-middleware/TEST_RESULTS.md +174 -0
  304. package/.claude/skills/cfn-transparency-middleware/config.json +31 -0
  305. package/.claude/skills/cfn-transparency-middleware/examples/basic-usage.ts +39 -0
  306. package/.claude/skills/cfn-transparency-middleware/examples/batch-processing.ts +52 -0
  307. package/.claude/skills/cfn-transparency-middleware/examples/custom-filtering.ts +61 -0
  308. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-filter.sh +98 -0
  309. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-init.sh +224 -0
  310. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-level.sh +333 -0
  311. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-metrics.sh +345 -0
  312. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-observe.sh +140 -0
  313. package/.claude/skills/cfn-transparency-middleware/invoke-transparency-stop.sh +235 -0
  314. package/.claude/skills/cfn-transparency-middleware/memory_query.rs +85 -0
  315. package/.claude/skills/cfn-transparency-middleware/memory_repository.rs +140 -0
  316. package/.claude/skills/cfn-transparency-middleware/memory_schema.rs +64 -0
  317. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +29 -0
  318. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +79 -0
  319. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +406 -0
  320. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +162 -0
  321. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +368 -0
  322. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh.unix +126 -0
  323. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +93 -0
  324. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +132 -0
  325. package/.claude/skills/cfn-webapp-testing/SCREENSHOT_NAMING_CONVENTION.md +547 -0
  326. package/.claude/skills/cfn-webapp-testing/SKILL.md +877 -0
  327. package/.claude/skills/cfn-webapp-testing/capture-screenshot.sh +238 -0
  328. package/.claude/skills/cfn-webapp-testing/cfn-loop-integration.sh +265 -0
  329. package/.claude/skills/cfn-webapp-testing/compare-screenshots.sh +199 -0
  330. package/.claude/skills/cfn-webapp-testing/init-storage.sh +150 -0
  331. package/.claude/skills/cfn-webapp-testing/set-baseline.sh +196 -0
  332. package/.claude/skills/cfn-webapp-testing/test-webapp-testing.sh +233 -0
  333. package/README.md +51 -2
  334. package/dist/ace/ace-reflector.js +109 -10
  335. package/dist/ace/ace-reflector.js.map +1 -1
  336. package/dist/agents/agent-loader.js +165 -146
  337. package/dist/agents/agent-loader.js.map +1 -1
  338. package/dist/cli/agent-executor.js +1 -1
  339. package/dist/cli/agent-executor.js.map +1 -1
  340. package/dist/cli/config-manager.js +109 -91
  341. package/dist/cli/config-manager.js.map +1 -1
  342. package/package.json +43 -7
  343. package/readme/README.md +15 -4
  344. package/scripts/init-project.js +84 -29
  345. package/scripts/run-marketing-tests.sh +43 -0
  346. package/scripts/update_paths.sh +47 -0
  347. package/tools/install-lizard.sh +37 -0
  348. package/tools/simple-complexity.sh +44 -0
  349. package/.claude/agents/cfn-dev-team/developers/coder.md +0 -270
  350. package/.claude/agents/cfn-dev-team/developers/state-architect.md +0 -127
  351. package/.claude/agents/cfn-dev-team/reviewers/code-quality-validator.md +0 -128
  352. /package/.claude/agents/cfn-dev-team/developers/{ui-designer.md → frontend/ui-designer.md} +0 -0
  353. /package/.claude/agents/cfn-dev-team/{coordinators → product-owners}/product-owner-agent.md +0 -0
@@ -0,0 +1,274 @@
1
+ #!/bin/bash
2
+ #
3
+ # Test script to verify BZPOPMIN implementation fixes
4
+ #
5
+ # Tests:
6
+ # 1. Compact JSON storage (no newlines breaking Redis)
7
+ # 2. Priority ordering (high priority messages processed first)
8
+ # 3. JSON validation on retrieval
9
+ # 4. Timeout handling
10
+ #
11
+
12
+ set -euo pipefail
13
+
14
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
15
+ INVOKE_SCRIPT="${SCRIPT_DIR}/invoke-waiting-mode.sh"
16
+
17
+ # Test counter
18
+ TESTS_PASSED=0
19
+ TESTS_FAILED=0
20
+
21
+ # Cleanup function
22
+ cleanup() {
23
+ local task_id="$1"
24
+ echo ""
25
+ echo "Cleaning up Redis keys for task: $task_id"
26
+ redis-cli KEYS "swarm:${task_id}:*" | xargs -r redis-cli DEL >/dev/null 2>&1 || true
27
+ }
28
+
29
+ # Test function
30
+ run_test() {
31
+ local test_name="$1"
32
+ local test_func="$2"
33
+
34
+ echo ""
35
+ echo "=========================================="
36
+ echo "TEST: $test_name"
37
+ echo "=========================================="
38
+
39
+ if $test_func; then
40
+ echo "✅ PASSED: $test_name"
41
+ ((TESTS_PASSED++))
42
+ else
43
+ echo "❌ FAILED: $test_name"
44
+ ((TESTS_FAILED++))
45
+ fi
46
+ }
47
+
48
+ # Test 1: Compact JSON storage (verify no newlines)
49
+ test_compact_json() {
50
+ local task_id="test-compact-$(date +%s)"
51
+ local agent_id="agent-1"
52
+
53
+ # Send wake message
54
+ "$INVOKE_SCRIPT" wake \
55
+ --task-id "$task_id" \
56
+ --agent-id "$agent_id" \
57
+ --reason "test_reason" \
58
+ --priority 50 >/dev/null
59
+
60
+ # Retrieve message directly from Redis
61
+ local queue_key="swarm:${task_id}:${agent_id}:wake-queue"
62
+ local stored_msg=$(redis-cli ZRANGE "$queue_key" 0 0 2>/dev/null | head -1)
63
+
64
+ cleanup "$task_id"
65
+
66
+ # Check if message is valid JSON
67
+ if echo "$stored_msg" | jq empty 2>/dev/null; then
68
+ # Check if message is compact (no newlines)
69
+ if [[ "$stored_msg" != *$'\n'* ]]; then
70
+ echo " ✓ Message stored as compact JSON"
71
+ return 0
72
+ else
73
+ echo " ✗ Message contains newlines"
74
+ return 1
75
+ fi
76
+ else
77
+ echo " ✗ Message is not valid JSON"
78
+ return 1
79
+ fi
80
+ }
81
+
82
+ # Test 2: Priority ordering (high priority first)
83
+ test_priority_ordering() {
84
+ local task_id="test-priority-$(date +%s)"
85
+ local agent_id="agent-1"
86
+
87
+ # Send 3 messages with different priorities
88
+ "$INVOKE_SCRIPT" wake --task-id "$task_id" --agent-id "$agent_id" --reason "low" --priority 20 >/dev/null
89
+ sleep 0.1
90
+ "$INVOKE_SCRIPT" wake --task-id "$task_id" --agent-id "$agent_id" --reason "medium" --priority 50 >/dev/null
91
+ sleep 0.1
92
+ "$INVOKE_SCRIPT" wake --task-id "$task_id" --agent-id "$agent_id" --reason "high" --priority 90 >/dev/null
93
+
94
+ # Agent should receive in order: high (90), medium (50), low (20)
95
+ local queue_key="swarm:${task_id}:${agent_id}:wake-queue"
96
+
97
+ # Get all messages in priority order
98
+ local msg1=$(redis-cli ZPOPMIN "$queue_key" 2>/dev/null | sed -n '1p')
99
+ local msg2=$(redis-cli ZPOPMIN "$queue_key" 2>/dev/null | sed -n '1p')
100
+ local msg3=$(redis-cli ZPOPMIN "$queue_key" 2>/dev/null | sed -n '1p')
101
+
102
+ cleanup "$task_id"
103
+
104
+ # Verify order
105
+ local reason1=$(echo "$msg1" | jq -r '.reason' 2>/dev/null)
106
+ local reason2=$(echo "$msg2" | jq -r '.reason' 2>/dev/null)
107
+ local reason3=$(echo "$msg3" | jq -r '.reason' 2>/dev/null)
108
+
109
+ if [ "$reason1" = "high" ] && [ "$reason2" = "medium" ] && [ "$reason3" = "low" ]; then
110
+ echo " ✓ Messages retrieved in correct priority order: $reason1 → $reason2 → $reason3"
111
+ return 0
112
+ else
113
+ echo " ✗ Incorrect order: $reason1 → $reason2 → $reason3 (expected: high → medium → low)"
114
+ return 1
115
+ fi
116
+ }
117
+
118
+ # Test 3: JSON validation on retrieval
119
+ test_json_validation() {
120
+ local task_id="test-validation-$(date +%s)"
121
+ local agent_id="agent-1"
122
+
123
+ # Send valid message
124
+ "$INVOKE_SCRIPT" wake --task-id "$task_id" --agent-id "$agent_id" --reason "valid_test" --priority 50 >/dev/null
125
+
126
+ # Start agent in background
127
+ timeout 5 "$INVOKE_SCRIPT" enter --task-id "$task_id" --agent-id "$agent_id" --context "test" >test_output.txt 2>&1 &
128
+ local agent_pid=$!
129
+
130
+ # Wait for agent to process message
131
+ sleep 2
132
+
133
+ # Check if agent received valid JSON
134
+ if wait $agent_pid 2>/dev/null; then
135
+ if grep -q "✅ Woken up!" test_output.txt && grep -q "valid_test" test_output.txt; then
136
+ echo " ✓ Agent validated and processed JSON message"
137
+ rm -f test_output.txt
138
+ cleanup "$task_id"
139
+ return 0
140
+ fi
141
+ fi
142
+
143
+ echo " ✗ Agent failed to validate JSON message"
144
+ rm -f test_output.txt
145
+ cleanup "$task_id"
146
+ return 1
147
+ }
148
+
149
+ # Test 4: Timeout handling (no deadlock)
150
+ test_timeout_handling() {
151
+ local task_id="test-timeout-$(date +%s)"
152
+ local agent_id="agent-1"
153
+
154
+ # Start agent without sending wake message
155
+ # Should timeout after a few seconds
156
+ timeout 3 "$INVOKE_SCRIPT" enter --task-id "$task_id" --agent-id "$agent_id" --context "test" >/dev/null 2>&1 &
157
+ local agent_pid=$!
158
+
159
+ sleep 4
160
+
161
+ # Check if agent is still running (should have timed out)
162
+ if ! kill -0 $agent_pid 2>/dev/null; then
163
+ echo " ✓ Agent handled timeout correctly"
164
+ cleanup "$task_id"
165
+ return 0
166
+ else
167
+ echo " ✗ Agent did not timeout"
168
+ kill $agent_pid 2>/dev/null || true
169
+ cleanup "$task_id"
170
+ return 1
171
+ fi
172
+ }
173
+
174
+ # Test 5: End-to-end wake-up flow
175
+ test_e2e_wakeup() {
176
+ local task_id="test-e2e-$(date +%s)"
177
+ local agent_id="agent-1"
178
+
179
+ # Start agent in background
180
+ timeout 10 "$INVOKE_SCRIPT" enter --task-id "$task_id" --agent-id "$agent_id" --context "e2e-test" >test_e2e_output.txt 2>&1 &
181
+ local agent_pid=$!
182
+
183
+ # Give agent time to enter waiting mode
184
+ sleep 1
185
+
186
+ # Send wake message
187
+ "$INVOKE_SCRIPT" wake \
188
+ --task-id "$task_id" \
189
+ --agent-id "$agent_id" \
190
+ --reason "e2e_test" \
191
+ --priority 80 \
192
+ --iteration 1 >/dev/null
193
+
194
+ # Wait for agent to complete
195
+ sleep 2
196
+
197
+ # Check results
198
+ if grep -q "✅ Woken up!" test_e2e_output.txt && grep -q "e2e_test" test_e2e_output.txt; then
199
+ echo " ✓ End-to-end wake-up flow successful"
200
+ rm -f test_e2e_output.txt
201
+ cleanup "$task_id"
202
+ return 0
203
+ else
204
+ echo " ✗ End-to-end wake-up flow failed"
205
+ cat test_e2e_output.txt
206
+ rm -f test_e2e_output.txt
207
+ cleanup "$task_id"
208
+ return 1
209
+ fi
210
+ }
211
+
212
+ # Test 6: Debug mode functionality
213
+ test_debug_mode() {
214
+ local task_id="test-debug-$(date +%s)"
215
+ local agent_id="agent-1"
216
+
217
+ # Send wake message with debug mode enabled
218
+ DEBUG=true "$INVOKE_SCRIPT" wake \
219
+ --task-id "$task_id" \
220
+ --agent-id "$agent_id" \
221
+ --reason "debug_test" \
222
+ --priority 75 >test_debug_output.txt 2>&1
223
+
224
+ cleanup "$task_id"
225
+
226
+ # Check if debug output is present
227
+ if grep -q "\[DEBUG\]" test_debug_output.txt; then
228
+ echo " ✓ Debug mode produces verbose output"
229
+ rm -f test_debug_output.txt
230
+ return 0
231
+ else
232
+ echo " ✗ Debug mode did not produce expected output"
233
+ rm -f test_debug_output.txt
234
+ return 1
235
+ fi
236
+ }
237
+
238
+ # Main execution
239
+ echo "=========================================="
240
+ echo "BZPOPMIN Implementation Fix Test Suite"
241
+ echo "=========================================="
242
+ echo ""
243
+ echo "Testing fixes for:"
244
+ echo " 1. Compact JSON storage (no newlines)"
245
+ echo " 2. Priority ordering"
246
+ echo " 3. JSON validation on retrieval"
247
+ echo " 4. Timeout handling"
248
+ echo " 5. End-to-end wake-up flow"
249
+ echo " 6. Debug mode"
250
+
251
+ # Run all tests
252
+ run_test "Compact JSON Storage" test_compact_json
253
+ run_test "Priority Ordering" test_priority_ordering
254
+ run_test "JSON Validation" test_json_validation
255
+ run_test "Timeout Handling" test_timeout_handling
256
+ run_test "End-to-End Wake-Up Flow" test_e2e_wakeup
257
+ run_test "Debug Mode" test_debug_mode
258
+
259
+ # Summary
260
+ echo ""
261
+ echo "=========================================="
262
+ echo "TEST SUMMARY"
263
+ echo "=========================================="
264
+ echo "Tests passed: $TESTS_PASSED"
265
+ echo "Tests failed: $TESTS_FAILED"
266
+ echo ""
267
+
268
+ if [ $TESTS_FAILED -eq 0 ]; then
269
+ echo "✅ All tests passed!"
270
+ exit 0
271
+ else
272
+ echo "❌ Some tests failed"
273
+ exit 1
274
+ fi
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ##############################################################################
4
+ # Test Cancel Swarm - Validates graceful shutdown functionality
5
+ #
6
+ # Tests:
7
+ # 1. Cancel active swarm (success path)
8
+ # 2. Cancel with custom reason and initiator
9
+ # 3. Cancel non-existent swarm (error handling)
10
+ # 4. Verify shutdown signals delivered to all agents
11
+ # 5. Verify swarm metadata updated correctly
12
+ # 6. Test force flag (skip confirmation)
13
+ ##############################################################################
14
+
15
+ # Disable strict error handling for tests
16
+ set -uo pipefail
17
+
18
+ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
19
+ TEST_TASK_ID="test-cancel-$(date +%s)"
20
+ FAILED_TESTS=0
21
+ PASSED_TESTS=0
22
+
23
+ # Colors for output
24
+ RED='\033[0;31m'
25
+ GREEN='\033[0;32m'
26
+ YELLOW='\033[1;33m'
27
+ NC='\033[0m' # No Color
28
+
29
+ log_test() {
30
+ echo ""
31
+ echo "========================================="
32
+ echo "TEST: $1"
33
+ echo "========================================="
34
+ }
35
+
36
+ log_pass() {
37
+ echo -e "${GREEN}✓ PASS:${NC} $1"
38
+ ((PASSED_TESTS++))
39
+ }
40
+
41
+ log_fail() {
42
+ echo -e "${RED}✗ FAIL:${NC} $1"
43
+ ((FAILED_TESTS++))
44
+ }
45
+
46
+ log_info() {
47
+ echo -e "${YELLOW}ℹ INFO:${NC} $1"
48
+ }
49
+
50
+ cleanup() {
51
+ log_info "Cleaning up test data..."
52
+
53
+ # Delete test keys matching patterns
54
+ KEYS=$(redis-cli --scan --pattern "swarm:${TEST_TASK_ID}*" 2>/dev/null || true)
55
+ if [ -n "$KEYS" ]; then
56
+ echo "$KEYS" | while read -r KEY; do
57
+ redis-cli del "$KEY" > /dev/null 2>&1 || true
58
+ done
59
+ fi
60
+
61
+ KEYS=$(redis-cli --scan --pattern "swarm:test-cancel-*" 2>/dev/null || true)
62
+ if [ -n "$KEYS" ]; then
63
+ echo "$KEYS" | while read -r KEY; do
64
+ redis-cli del "$KEY" > /dev/null 2>&1 || true
65
+ done
66
+ fi
67
+ }
68
+
69
+ # Cleanup on exit
70
+ trap cleanup EXIT
71
+
72
+ echo "========================================="
73
+ echo "Cancel Swarm Test Suite"
74
+ echo "========================================="
75
+ echo "Test Task ID: $TEST_TASK_ID"
76
+ echo ""
77
+
78
+ # =============================================================================
79
+ # Test 1: Cancel active swarm (success path)
80
+ # =============================================================================
81
+ log_test "Cancel Active Swarm"
82
+
83
+ # Initialize test swarm
84
+ SWARM_ID="${TEST_TASK_ID}-swarm1"
85
+ AGENTS="coder-1,reviewer-1,tester-1"
86
+
87
+ "$SCRIPT_DIR/init-swarm.sh" \
88
+ --swarm-id "$SWARM_ID" \
89
+ --task-id "$TEST_TASK_ID" \
90
+ --agents "$AGENTS" > /dev/null
91
+
92
+ log_info "Swarm initialized: $SWARM_ID"
93
+
94
+ # Cancel swarm with force flag (skip confirmation)
95
+ OUTPUT=$("$SCRIPT_DIR/cancel-swarm.sh" \
96
+ --task-id "$TEST_TASK_ID" \
97
+ --force 2>&1 || true)
98
+
99
+ # Verify status updated
100
+ STATUS=$(redis-cli hget "swarm:${SWARM_ID}:metadata" status)
101
+ if [ "$STATUS" = "cancelled" ]; then
102
+ log_pass "Swarm status updated to 'cancelled'"
103
+ else
104
+ log_fail "Expected status 'cancelled', got: $STATUS"
105
+ fi
106
+
107
+ # Verify agents_notified count
108
+ NOTIFIED=$(redis-cli hget "swarm:${SWARM_ID}:metadata" agents_notified)
109
+ if [ "$NOTIFIED" = "3" ]; then
110
+ log_pass "All 3 agents notified"
111
+ else
112
+ log_fail "Expected 3 agents notified, got: $NOTIFIED"
113
+ fi
114
+
115
+ # Verify shutdown signal broadcasted
116
+ SHUTDOWN_KEY="swarm:${TEST_TASK_ID}:shutdown"
117
+ SHUTDOWN_MSG=$(redis-cli --raw lindex "$SHUTDOWN_KEY" 0 2>/dev/null || echo "{}")
118
+
119
+ if [ -n "$SHUTDOWN_MSG" ] && [ "$SHUTDOWN_MSG" != "(nil)" ]; then
120
+ log_pass "Shutdown signal broadcasted to $SHUTDOWN_KEY"
121
+
122
+ # Verify message content
123
+ REASON=$(echo "$SHUTDOWN_MSG" | jq -r '.reason // empty')
124
+ INITIATOR=$(echo "$SHUTDOWN_MSG" | jq -r '.initiator // empty')
125
+
126
+ if [ "$REASON" = "user_requested_cancellation" ]; then
127
+ log_pass "Shutdown signal has correct reason"
128
+ else
129
+ log_fail "Expected reason 'user_requested_cancellation', got: $REASON"
130
+ fi
131
+
132
+ if [ "$INITIATOR" = "main-chat" ]; then
133
+ log_pass "Shutdown signal has correct initiator"
134
+ else
135
+ log_fail "Expected initiator 'main-chat', got: $INITIATOR"
136
+ fi
137
+ else
138
+ log_fail "No shutdown signal found"
139
+ fi
140
+
141
+ # =============================================================================
142
+ # Test 2: Cancel with custom reason and initiator
143
+ # =============================================================================
144
+ log_test "Cancel with Custom Reason and Initiator"
145
+
146
+ SWARM_ID2="${TEST_TASK_ID}-swarm2"
147
+ "$SCRIPT_DIR/init-swarm.sh" \
148
+ --swarm-id "$SWARM_ID2" \
149
+ --task-id "${TEST_TASK_ID}-custom" \
150
+ --agents "backend-dev-1" > /dev/null
151
+
152
+ OUTPUT=$("$SCRIPT_DIR/cancel-swarm.sh" \
153
+ --task-id "${TEST_TASK_ID}-custom" \
154
+ --reason "integration_test_timeout" \
155
+ --initiator "test-runner" \
156
+ --force 2>&1 || true)
157
+
158
+ CANCEL_REASON=$(redis-cli hget "swarm:${SWARM_ID2}:metadata" cancellation_reason)
159
+ CANCEL_INIT=$(redis-cli hget "swarm:${SWARM_ID2}:metadata" cancellation_initiator)
160
+
161
+ if [ "$CANCEL_REASON" = "integration_test_timeout" ]; then
162
+ log_pass "Custom cancellation reason recorded"
163
+ else
164
+ log_fail "Expected reason 'integration_test_timeout', got: $CANCEL_REASON"
165
+ fi
166
+
167
+ if [ "$CANCEL_INIT" = "test-runner" ]; then
168
+ log_pass "Custom initiator recorded"
169
+ else
170
+ log_fail "Expected initiator 'test-runner', got: $CANCEL_INIT"
171
+ fi
172
+
173
+ # =============================================================================
174
+ # Test 3: Cancel non-existent swarm (error handling)
175
+ # =============================================================================
176
+ log_test "Cancel Non-Existent Swarm (Error Handling)"
177
+
178
+ OUTPUT=$("$SCRIPT_DIR/cancel-swarm.sh" \
179
+ --task-id "non-existent-task-id-12345" \
180
+ --force 2>&1 || true)
181
+
182
+ if echo "$OUTPUT" | grep -q "No swarm found"; then
183
+ log_pass "Error message displayed for non-existent swarm"
184
+ else
185
+ log_fail "Expected error message, got: $OUTPUT"
186
+ fi
187
+
188
+ # =============================================================================
189
+ # Test 4: Verify shutdown message format
190
+ # =============================================================================
191
+ log_test "Verify Shutdown Message Format"
192
+
193
+ SWARM_ID3="${TEST_TASK_ID}-swarm3"
194
+ "$SCRIPT_DIR/init-swarm.sh" \
195
+ --swarm-id "$SWARM_ID3" \
196
+ --task-id "${TEST_TASK_ID}-format" \
197
+ --agents "security-1" > /dev/null
198
+
199
+ "$SCRIPT_DIR/cancel-swarm.sh" \
200
+ --task-id "${TEST_TASK_ID}-format" \
201
+ --reason "test_message_format" \
202
+ --initiator "validator" \
203
+ --force > /dev/null 2>&1
204
+
205
+ SHUTDOWN_KEY="swarm:${TEST_TASK_ID}-format:shutdown"
206
+ MSG=$(redis-cli --raw lindex "$SHUTDOWN_KEY" 0 2>/dev/null || echo "{}")
207
+
208
+ # Validate JSON structure
209
+ REASON=$(echo "$MSG" | jq -r '.reason // empty')
210
+ TIMESTAMP=$(echo "$MSG" | jq -r '.timestamp // empty')
211
+ INITIATOR=$(echo "$MSG" | jq -r '.initiator // empty')
212
+
213
+ if [ "$REASON" = "test_message_format" ] && \
214
+ [ -n "$TIMESTAMP" ] && \
215
+ [ "$INITIATOR" = "validator" ]; then
216
+ log_pass "Shutdown message has correct format"
217
+ else
218
+ log_fail "Shutdown message format incorrect: $MSG"
219
+ fi
220
+
221
+ # =============================================================================
222
+ # Test 5: Verify cancelled_at timestamp
223
+ # =============================================================================
224
+ log_test "Verify Cancelled Timestamp"
225
+
226
+ CANCELLED_AT=$(redis-cli hget "swarm:${SWARM_ID3}:metadata" cancelled_at)
227
+
228
+ if [[ "$CANCELLED_AT" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z$ ]]; then
229
+ log_pass "Cancelled timestamp in ISO 8601 format: $CANCELLED_AT"
230
+ else
231
+ log_fail "Invalid timestamp format: $CANCELLED_AT"
232
+ fi
233
+
234
+ # =============================================================================
235
+ # Test 6: Empty agent list handling
236
+ # =============================================================================
237
+ log_test "Handle Swarm with Empty Agent List"
238
+
239
+ SWARM_ID4="${TEST_TASK_ID}-swarm4"
240
+ redis-cli hset "swarm:${SWARM_ID4}:metadata" \
241
+ swarm_id "$SWARM_ID4" \
242
+ task_id "${TEST_TASK_ID}-empty" \
243
+ agents "" \
244
+ status "in_progress" > /dev/null
245
+
246
+ OUTPUT=$("$SCRIPT_DIR/cancel-swarm.sh" \
247
+ --task-id "${TEST_TASK_ID}-empty" \
248
+ --force 2>&1 || true)
249
+
250
+ STATUS=$(redis-cli hget "swarm:${SWARM_ID4}:metadata" status)
251
+ NOTIFIED=$(redis-cli hget "swarm:${SWARM_ID4}:metadata" agents_notified)
252
+
253
+ if [ "$STATUS" = "cancelled" ] && [ "$NOTIFIED" = "0" ]; then
254
+ log_pass "Empty agent list handled correctly"
255
+ else
256
+ log_fail "Empty agent list handling failed (status: $STATUS, notified: $NOTIFIED)"
257
+ fi
258
+
259
+ # =============================================================================
260
+ # Summary
261
+ # =============================================================================
262
+ echo ""
263
+ echo "========================================="
264
+ echo "Test Summary"
265
+ echo "========================================="
266
+ echo -e "${GREEN}Passed:${NC} $PASSED_TESTS"
267
+ echo -e "${RED}Failed:${NC} $FAILED_TESTS"
268
+ echo "========================================="
269
+
270
+ if [ $FAILED_TESTS -eq 0 ]; then
271
+ echo -e "${GREEN}✓ All tests passed!${NC}"
272
+ exit 0
273
+ else
274
+ echo -e "${RED}✗ Some tests failed${NC}"
275
+ exit 1
276
+ fi
@@ -0,0 +1,129 @@
1
+ #!/usr/bin/env bash
2
+
3
+ ##############################################################################
4
+ # Test Dead Letter Queue (DLQ) Functionality
5
+ # Validates DLQ write and query operations with simulated failures
6
+ ##############################################################################
7
+
8
+ set -euo pipefail
9
+
10
+ TASK_ID="test-dlq-$(date +%s)"
11
+ TEST_AGENT="test-agent-1"
12
+
13
+ echo "=== DLQ Functionality Test ==="
14
+ echo "Task ID: $TASK_ID"
15
+ echo "Test Agent: $TEST_AGENT"
16
+ echo ""
17
+
18
+ ##############################################################################
19
+ # Test 1: Simulate DLQ Write
20
+ ##############################################################################
21
+ echo "[Test 1] Simulating DLQ write for failed agent..."
22
+
23
+ DLQ_KEY="swarm:${TASK_ID}:dlq:${TEST_AGENT}"
24
+ DLQ_ENTRY=$(jq -n \
25
+ --arg reason "timeout_after_retries" \
26
+ --arg retries "3" \
27
+ --arg ts "$(date +%s)" \
28
+ '{reason: $reason, retry_count: ($retries | tonumber), timestamp: ($ts | tonumber)}')
29
+
30
+ echo "$DLQ_ENTRY" | redis-cli -x LPUSH "$DLQ_KEY" >/dev/null
31
+ redis-cli EXPIRE "$DLQ_KEY" 604800 >/dev/null # 7 days TTL
32
+
33
+ echo " ✓ DLQ entry written"
34
+ echo ""
35
+
36
+ ##############################################################################
37
+ # Test 2: Query Specific Agent DLQ
38
+ ##############################################################################
39
+ echo "[Test 2] Querying DLQ for specific agent..."
40
+ ./.claude/skills/cfn-redis-coordination/query-dlq.sh \
41
+ --task-id "$TASK_ID" \
42
+ --agent-id "$TEST_AGENT"
43
+ echo ""
44
+
45
+ ##############################################################################
46
+ # Test 3: Add Multiple Failures
47
+ ##############################################################################
48
+ echo "[Test 3] Adding multiple failure entries..."
49
+
50
+ TEST_AGENT_2="test-agent-2"
51
+ DLQ_KEY_2="swarm:${TASK_ID}:dlq:${TEST_AGENT_2}"
52
+
53
+ for i in {1..3}; do
54
+ DLQ_ENTRY=$(jq -n \
55
+ --arg reason "timeout_after_retries" \
56
+ --arg retries "$i" \
57
+ --arg ts "$(date +%s)" \
58
+ '{reason: $reason, retry_count: ($retries | tonumber), timestamp: ($ts | tonumber)}')
59
+
60
+ echo "$DLQ_ENTRY" | redis-cli -x LPUSH "$DLQ_KEY_2" >/dev/null
61
+ sleep 1
62
+ done
63
+
64
+ redis-cli EXPIRE "$DLQ_KEY_2" 604800 >/dev/null
65
+
66
+ echo " ✓ Added 3 failure entries for $TEST_AGENT_2"
67
+ echo ""
68
+
69
+ ##############################################################################
70
+ # Test 4: Query All DLQ Entries for Task
71
+ ##############################################################################
72
+ echo "[Test 4] Querying all DLQ entries for task..."
73
+ ./.claude/skills/cfn-redis-coordination/query-dlq.sh --task-id "$TASK_ID"
74
+ echo ""
75
+
76
+ ##############################################################################
77
+ # Test 5: Verify TTL
78
+ ##############################################################################
79
+ echo "[Test 5] Verifying TTL..."
80
+ TTL=$(redis-cli TTL "$DLQ_KEY")
81
+ EXPECTED_TTL=604800 # 7 days
82
+
83
+ if [ "$TTL" -gt 0 ] && [ "$TTL" -le "$EXPECTED_TTL" ]; then
84
+ echo " ✓ TTL correctly set: ${TTL}s (~7 days)"
85
+ else
86
+ echo " ✗ TTL verification failed: ${TTL}s"
87
+ exit 1
88
+ fi
89
+ echo ""
90
+
91
+ ##############################################################################
92
+ # Test 6: Verify Entry Count
93
+ ##############################################################################
94
+ echo "[Test 6] Verifying entry counts..."
95
+
96
+ COUNT_1=$(redis-cli LLEN "$DLQ_KEY")
97
+ COUNT_2=$(redis-cli LLEN "$DLQ_KEY_2")
98
+
99
+ echo " Agent 1 entries: $COUNT_1 (expected: 1)"
100
+ echo " Agent 2 entries: $COUNT_2 (expected: 3)"
101
+
102
+ if [ "$COUNT_1" = "1" ] && [ "$COUNT_2" = "3" ]; then
103
+ echo " ✓ Entry counts correct"
104
+ else
105
+ echo " ✗ Entry count mismatch"
106
+ exit 1
107
+ fi
108
+ echo ""
109
+
110
+ ##############################################################################
111
+ # Cleanup
112
+ ##############################################################################
113
+ echo "[Cleanup] Removing test DLQ entries..."
114
+ redis-cli DEL "$DLQ_KEY" "$DLQ_KEY_2" >/dev/null
115
+ echo " ✓ Cleanup complete"
116
+ echo ""
117
+
118
+ ##############################################################################
119
+ # Summary
120
+ ##############################################################################
121
+ echo "=== Test Summary ==="
122
+ echo "✅ All DLQ tests passed!"
123
+ echo ""
124
+ echo "Validated:"
125
+ echo " - DLQ write functionality"
126
+ echo " - Single agent query"
127
+ echo " - Multi-agent query"
128
+ echo " - TTL expiration (7 days)"
129
+ echo " - Entry counting"