claude-flow-novice 2.15.3 → 2.15.4

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 (461) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/agent-loader.js +146 -165
  246. package/dist/agents/agent-loader.js.map +1 -1
  247. package/dist/agents/task-agent-integration.js +1 -1
  248. package/dist/agents/task-agent-integration.js.map +1 -1
  249. package/dist/api/health-endpoints.js +390 -0
  250. package/dist/api/health-endpoints.js.map +1 -0
  251. package/dist/cli/agent-executor.js +4 -1
  252. package/dist/cli/agent-executor.js.map +1 -1
  253. package/dist/cli/agent-prompt-builder.js +89 -1
  254. package/dist/cli/agent-prompt-builder.js.map +1 -1
  255. package/dist/cli/agent-spawn.js +130 -37
  256. package/dist/cli/agent-spawn.js.map +1 -1
  257. package/dist/cli/skill-cache-validator.js +412 -0
  258. package/dist/cli/skill-cache-validator.js.map +1 -0
  259. package/dist/cli/skill-cli.js +991 -0
  260. package/dist/cli/skill-cli.js.map +1 -0
  261. package/dist/cli/skill-execution-logger.js +284 -0
  262. package/dist/cli/skill-execution-logger.js.map +1 -0
  263. package/dist/cli/skill-loader.js +457 -0
  264. package/dist/cli/skill-loader.js.map +1 -0
  265. package/dist/coordination/event-bus.js +2 -2
  266. package/dist/coordination/event-bus.js.map +1 -1
  267. package/dist/coordination/fleet-manager.js +1 -1
  268. package/dist/coordination/fleet-manager.js.map +1 -1
  269. package/dist/coordination/index.js +23 -9
  270. package/dist/coordination/index.js.map +1 -1
  271. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  272. package/dist/db/migration-manager.js +483 -0
  273. package/dist/db/migration-manager.js.map +1 -0
  274. package/dist/db/skills-query.js +535 -0
  275. package/dist/db/skills-query.js.map +1 -0
  276. package/dist/integration/DatabaseHandoff.js +1 -1
  277. package/dist/integration/DatabaseHandoff.js.map +1 -1
  278. package/dist/jobs/edge-case-analyzer.js +367 -0
  279. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  280. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  281. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  282. package/dist/lib/agent-output-parser.js.map +1 -1
  283. package/dist/lib/agent-output-validator.js.map +1 -1
  284. package/dist/lib/agent-workspace.js +281 -0
  285. package/dist/lib/agent-workspace.js.map +1 -0
  286. package/dist/lib/atomic-file-writer.js +377 -0
  287. package/dist/lib/atomic-file-writer.js.map +1 -0
  288. package/dist/lib/backup-manager.js +779 -0
  289. package/dist/lib/backup-manager.js.map +1 -0
  290. package/dist/lib/checkpoint-manager.js +837 -0
  291. package/dist/lib/checkpoint-manager.js.map +1 -0
  292. package/dist/lib/circuit-breaker.js +340 -0
  293. package/dist/lib/circuit-breaker.js.map +1 -0
  294. package/dist/lib/completion-signal-handler.js +243 -0
  295. package/dist/lib/completion-signal-handler.js.map +1 -0
  296. package/dist/lib/config-manager.js +312 -0
  297. package/dist/lib/config-manager.js.map +1 -0
  298. package/dist/lib/config-migrator.js +386 -0
  299. package/dist/lib/config-migrator.js.map +1 -0
  300. package/dist/lib/config-validator.js.map +1 -1
  301. package/dist/lib/correlation-cache.js +311 -0
  302. package/dist/lib/correlation-cache.js.map +1 -0
  303. package/dist/lib/correlation.js +263 -0
  304. package/dist/lib/correlation.js.map +1 -0
  305. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  306. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  307. package/dist/lib/database-service/correlation.js +329 -0
  308. package/dist/lib/database-service/correlation.js.map +1 -0
  309. package/dist/lib/database-service/errors.js +120 -0
  310. package/dist/lib/database-service/errors.js.map +1 -0
  311. package/dist/lib/database-service/index.js +168 -0
  312. package/dist/lib/database-service/index.js.map +1 -0
  313. package/dist/lib/database-service/postgres-adapter.js +526 -0
  314. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  315. package/dist/lib/database-service/redis-adapter.js +360 -0
  316. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  317. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  318. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  319. package/dist/lib/database-service/transaction-manager.js +773 -0
  320. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  321. package/dist/lib/database-service/types.js +23 -0
  322. package/dist/lib/database-service/types.js.map +1 -0
  323. package/dist/lib/deadlock-resolver.js +292 -0
  324. package/dist/lib/deadlock-resolver.js.map +1 -0
  325. package/dist/lib/distributed-lock.js +451 -0
  326. package/dist/lib/distributed-lock.js.map +1 -0
  327. package/dist/lib/edge-case-deduplicator.js +227 -0
  328. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  329. package/dist/lib/encryption-manager.js +322 -0
  330. package/dist/lib/encryption-manager.js.map +1 -0
  331. package/dist/lib/error-aggregator.js +234 -0
  332. package/dist/lib/error-aggregator.js.map +1 -0
  333. package/dist/lib/errors.js +287 -0
  334. package/dist/lib/errors.js.map +1 -0
  335. package/dist/lib/file-lock-manager.js +578 -0
  336. package/dist/lib/file-lock-manager.js.map +1 -0
  337. package/dist/lib/file-operations.js +367 -0
  338. package/dist/lib/file-operations.js.map +1 -0
  339. package/dist/lib/idempotent-write.js +237 -0
  340. package/dist/lib/idempotent-write.js.map +1 -0
  341. package/dist/lib/integration-schema-validator.js +522 -0
  342. package/dist/lib/integration-schema-validator.js.map +1 -0
  343. package/dist/lib/lock-health-monitor.js +298 -0
  344. package/dist/lib/lock-health-monitor.js.map +1 -0
  345. package/dist/lib/log-shipper.js +422 -0
  346. package/dist/lib/log-shipper.js.map +1 -0
  347. package/dist/lib/logging.js +146 -0
  348. package/dist/lib/logging.js.map +1 -0
  349. package/dist/lib/message-deduplicator.js +439 -0
  350. package/dist/lib/message-deduplicator.js.map +1 -0
  351. package/dist/lib/multi-system-query.js +604 -0
  352. package/dist/lib/multi-system-query.js.map +1 -0
  353. package/dist/lib/orphan-detector.js +332 -0
  354. package/dist/lib/orphan-detector.js.map +1 -0
  355. package/dist/lib/password-generator.js +166 -0
  356. package/dist/lib/password-generator.js.map +1 -0
  357. package/dist/lib/path-validator.js +429 -0
  358. package/dist/lib/path-validator.js.map +1 -0
  359. package/dist/lib/query-translator.js +905 -0
  360. package/dist/lib/query-translator.js.map +1 -0
  361. package/dist/lib/queue-recovery.js +469 -0
  362. package/dist/lib/queue-recovery.js.map +1 -0
  363. package/dist/lib/redis-queue-manager.js +512 -0
  364. package/dist/lib/redis-queue-manager.js.map +1 -0
  365. package/dist/lib/reflection-archiver.js +272 -0
  366. package/dist/lib/reflection-archiver.js.map +1 -0
  367. package/dist/lib/retry-manager.js +453 -0
  368. package/dist/lib/retry-manager.js.map +1 -0
  369. package/dist/lib/retry.js +262 -0
  370. package/dist/lib/retry.js.map +1 -0
  371. package/dist/lib/schema-transform.js +695 -0
  372. package/dist/lib/schema-transform.js.map +1 -0
  373. package/dist/lib/schema-validator.js +491 -0
  374. package/dist/lib/schema-validator.js.map +1 -0
  375. package/dist/lib/skill-cache.js +297 -0
  376. package/dist/lib/skill-cache.js.map +1 -0
  377. package/dist/lib/skill-content-manager.js +337 -0
  378. package/dist/lib/skill-content-manager.js.map +1 -0
  379. package/dist/lib/skill-frontmatter-parser.js +237 -0
  380. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  381. package/dist/lib/skill-git-integration.js +275 -0
  382. package/dist/lib/skill-git-integration.js.map +1 -0
  383. package/dist/lib/skill-markdown-validator.js +396 -0
  384. package/dist/lib/skill-markdown-validator.js.map +1 -0
  385. package/dist/lib/skill-output-parser.js +312 -0
  386. package/dist/lib/skill-output-parser.js.map +1 -0
  387. package/dist/lib/unified-query-api.js +467 -0
  388. package/dist/lib/unified-query-api.js.map +1 -0
  389. package/dist/middleware/auth-middleware.js +350 -0
  390. package/dist/middleware/auth-middleware.js.map +1 -0
  391. package/dist/middleware/schema-validation.js +347 -0
  392. package/dist/middleware/schema-validation.js.map +1 -0
  393. package/dist/providers/anthropic-provider.js +1 -1
  394. package/dist/providers/anthropic-provider.js.map +1 -1
  395. package/dist/providers/provider-factory.js +2 -2
  396. package/dist/providers/provider-factory.js.map +1 -1
  397. package/dist/services/edge-case-analyzer.js +321 -0
  398. package/dist/services/edge-case-analyzer.js.map +1 -0
  399. package/dist/services/edge-case-deduplicator.js +266 -0
  400. package/dist/services/edge-case-deduplicator.js.map +1 -0
  401. package/dist/services/edge-case-detector.js +337 -0
  402. package/dist/services/edge-case-detector.js.map +1 -0
  403. package/dist/services/edge-case-tracker.js +547 -0
  404. package/dist/services/edge-case-tracker.js.map +1 -0
  405. package/dist/services/health-check-system.js +586 -0
  406. package/dist/services/health-check-system.js.map +1 -0
  407. package/dist/services/metrics-logger.js +412 -0
  408. package/dist/services/metrics-logger.js.map +1 -0
  409. package/dist/services/patch-generator.js +378 -0
  410. package/dist/services/patch-generator.js.map +1 -0
  411. package/dist/services/patch-validator.js +337 -0
  412. package/dist/services/patch-validator.js.map +1 -0
  413. package/dist/services/performance-monitor.js +811 -0
  414. package/dist/services/performance-monitor.js.map +1 -0
  415. package/dist/services/promotion-pipeline.js +918 -0
  416. package/dist/services/promotion-pipeline.js.map +1 -0
  417. package/dist/services/promotion-validator.js +394 -0
  418. package/dist/services/promotion-validator.js.map +1 -0
  419. package/dist/services/reflection-logger.js +388 -0
  420. package/dist/services/reflection-logger.js.map +1 -0
  421. package/dist/services/skill-deployment.js +472 -0
  422. package/dist/services/skill-deployment.js.map +1 -0
  423. package/dist/services/skill-loader.js +427 -0
  424. package/dist/services/skill-loader.js.map +1 -0
  425. package/dist/services/skill-promotion.js +372 -0
  426. package/dist/services/skill-promotion.js.map +1 -0
  427. package/dist/services/skill-validator.js +454 -0
  428. package/dist/services/skill-validator.js.map +1 -0
  429. package/dist/services/skill-versioning.js +244 -0
  430. package/dist/services/skill-versioning.js.map +1 -0
  431. package/dist/services/workspace-supervisor.js +597 -0
  432. package/dist/services/workspace-supervisor.js.map +1 -0
  433. package/dist/types/edge-case.js +45 -0
  434. package/dist/types/edge-case.js.map +1 -0
  435. package/package.json +201 -177
  436. package/readme/README.md +19 -4
  437. package/scripts/backup-cleanup.sh +627 -0
  438. package/scripts/cleanup-workspaces.sh +412 -0
  439. package/scripts/cleanup-yaml-configs.sh +141 -0
  440. package/scripts/deploy-approved-skills.sh +263 -0
  441. package/scripts/health-check.sh +447 -0
  442. package/scripts/log-aggregator.sh +554 -0
  443. package/scripts/log-monitor.sh +629 -0
  444. package/scripts/manage-agent-workspaces.sh +434 -0
  445. package/scripts/migrate-schema.sh +533 -0
  446. package/scripts/promote-staged-skills.sh +423 -0
  447. package/scripts/verify-no-secrets.sh +88 -35
  448. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  449. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  450. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  451. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  452. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  453. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  454. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  455. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  456. package/README.md.backup_before_replace +0 -781
  457. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  458. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  459. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  460. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  461. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,277 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ parse_jest_output() {
5
+ local output="$1"
6
+ local total=0 passed=0 failed=0 skipped=0 duration=0
7
+ local failed_names=()
8
+
9
+ local tests_line=$(echo "$output" | grep "^Tests:" || echo "")
10
+
11
+ if [ -n "$tests_line" ]; then
12
+ [[ "$tests_line" =~ ([0-9]+)[[:space:]]*passed ]] && passed="${BASH_REMATCH[1]}"
13
+ [[ "$tests_line" =~ ([0-9]+)[[:space:]]*failed ]] && failed="${BASH_REMATCH[1]}"
14
+ [[ "$tests_line" =~ ([0-9]+)[[:space:]]*skipped ]] && skipped="${BASH_REMATCH[1]}"
15
+ [[ "$tests_line" =~ ([0-9]+)[[:space:]]*total ]] && total="${BASH_REMATCH[1]}"
16
+ fi
17
+
18
+ # OPTIMIZATION: Replace bc with BASH arithmetic (75-150ms savings)
19
+ if [[ "$output" =~ Time:[[:space:]]*([0-9.]+)[[:space:]]*s ]]; then
20
+ duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
21
+ fi
22
+
23
+ while IFS= read -r line; do
24
+ [[ "$line" =~ ●[[:space:]]*(.*) ]] && failed_names+=("${BASH_REMATCH[1]}")
25
+ done <<< "$output"
26
+
27
+ # OPTIMIZATION: Replace bc with awk
28
+ local pass_rate="0.0000"
29
+ if [ "$total" -gt 0 ]; then
30
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
31
+ fi
32
+
33
+ # OPTIMIZATION: Single jq call
34
+ local failed_names_json="[]"
35
+ [ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
36
+
37
+ cat <<EOF
38
+ {"framework":"jest","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
39
+ EOF
40
+ }
41
+
42
+ parse_mocha_output() {
43
+ local output="$1"
44
+ local total=0 passed=0 failed=0 skipped=0 duration=0
45
+ local failed_names=()
46
+
47
+ [[ "$output" =~ ([0-9]+)[[:space:]]*passing ]] && passed="${BASH_REMATCH[1]}"
48
+ [[ "$output" =~ ([0-9]+)[[:space:]]*failing ]] && failed="${BASH_REMATCH[1]}"
49
+ [[ "$output" =~ ([0-9]+)[[:space:]]*pending ]] && skipped="${BASH_REMATCH[1]}"
50
+ total=$((passed + failed + skipped))
51
+
52
+ # OPTIMIZATION: Replace bc with awk
53
+ if [[ "$output" =~ passing[[:space:]]*\(([0-9]+)ms\) ]]; then
54
+ duration="${BASH_REMATCH[1]}"
55
+ elif [[ "$output" =~ passing[[:space:]]*\(([0-9.]+)s\) ]]; then
56
+ duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
57
+ fi
58
+
59
+ while IFS= read -r line; do
60
+ [[ "$line" =~ ^[[:space:]]*[0-9]+\)[[:space:]]*(.*): ]] && failed_names+=("${BASH_REMATCH[1]}")
61
+ done <<< "$output"
62
+
63
+ # OPTIMIZATION: Replace bc with awk
64
+ local pass_rate="0.0000"
65
+ if [ "$total" -gt 0 ]; then
66
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
67
+ fi
68
+
69
+ # OPTIMIZATION: Single jq call
70
+ local failed_names_json="[]"
71
+ [ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
72
+
73
+ cat <<EOF
74
+ {"framework":"mocha","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
75
+ EOF
76
+ }
77
+
78
+ parse_pytest_output() {
79
+ local output="$1"
80
+ local total=0 passed=0 failed=0 skipped=0 duration=0
81
+ local failed_names=()
82
+
83
+ [[ "$output" =~ ([0-9]+)[[:space:]]*passed ]] && passed="${BASH_REMATCH[1]}"
84
+ [[ "$output" =~ ([0-9]+)[[:space:]]*failed ]] && failed="${BASH_REMATCH[1]}"
85
+ [[ "$output" =~ ([0-9]+)[[:space:]]*skipped ]] && skipped="${BASH_REMATCH[1]}"
86
+ total=$((passed + failed + skipped))
87
+
88
+ # OPTIMIZATION: Replace bc with awk
89
+ [[ "$output" =~ in[[:space:]]+([0-9.]+)s ]] && duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
90
+
91
+ while IFS= read -r line; do
92
+ [[ "$line" =~ FAILED[[:space:]]+([^[:space:]]+) ]] && failed_names+=("${BASH_REMATCH[1]}")
93
+ done <<< "$output"
94
+
95
+ # OPTIMIZATION: Replace bc with awk
96
+ local pass_rate="0.0000"
97
+ if [ "$total" -gt 0 ]; then
98
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
99
+ fi
100
+
101
+ # OPTIMIZATION: Single jq call
102
+ local failed_names_json="[]"
103
+ [ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
104
+
105
+ cat <<EOF
106
+ {"framework":"pytest","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
107
+ EOF
108
+ }
109
+
110
+ parse_tap_output() {
111
+ local output="$1"
112
+ local total=0 passed=0 failed=0 skipped=0
113
+ local failed_names=()
114
+
115
+ [[ "$output" =~ 1\.\.([0-9]+) ]] && total="${BASH_REMATCH[1]}"
116
+ passed=$(echo "$output" | grep -c "^ok " || true)
117
+ failed=$(echo "$output" | grep -c "^not ok " || true)
118
+ skipped=$(echo "$output" | grep -c "^ok .* # SKIP" || true)
119
+ passed=$((passed - skipped))
120
+
121
+ while IFS= read -r line; do
122
+ [[ "$line" =~ ^not\ ok\ [0-9]+\ (.*) ]] && failed_names+=("${BASH_REMATCH[1]}")
123
+ done <<< "$output"
124
+
125
+ # OPTIMIZATION: Replace bc with awk
126
+ local pass_rate="0.0000"
127
+ if [ "$total" -gt 0 ]; then
128
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
129
+ fi
130
+
131
+ # OPTIMIZATION: Single jq call
132
+ local failed_names_json="[]"
133
+ [ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
134
+
135
+ cat <<EOF
136
+ {"framework":"tap","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":0,"failed_test_names":$failed_names_json}
137
+ EOF
138
+ }
139
+
140
+ parse_junit_xml() {
141
+ local xml_file="$1"
142
+ [ ! -f "$xml_file" ] && echo '{"error":"File not found"}' && return 1
143
+
144
+ local total=0 failures=0 errors=0 skipped=0 duration=0
145
+
146
+ if command -v xmllint &>/dev/null; then
147
+ total=$(xmllint --xpath "sum(//testsuite/@tests)" "$xml_file" 2>/dev/null || echo "0")
148
+ failures=$(xmllint --xpath "sum(//testsuite/@failures)" "$xml_file" 2>/dev/null || echo "0")
149
+ errors=$(xmllint --xpath "sum(//testsuite/@errors)" "$xml_file" 2>/dev/null || echo "0")
150
+ skipped=$(xmllint --xpath "sum(//testsuite/@skipped)" "$xml_file" 2>/dev/null || echo "0")
151
+ duration=$(xmllint --xpath "sum(//testsuite/@time)" "$xml_file" 2>/dev/null || echo "0")
152
+ else
153
+ total=$(grep -oP 'tests="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
154
+ failures=$(grep -oP 'failures="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
155
+ errors=$(grep -oP 'errors="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
156
+ skipped=$(grep -oP 'skipped="\K[0-9]+' "$xml_file" | awk '{s+=$1} END {print s}')
157
+ duration=$(grep -oP 'time="\K[0-9.]+' "$xml_file" | awk '{s+=$1} END {print s}')
158
+ fi
159
+
160
+ total=${total:-0} failures=${failures:-0} errors=${errors:-0} skipped=${skipped:-0} duration=${duration:-0}
161
+ local failed=$((failures + errors))
162
+ local passed=$((total - failed - skipped))
163
+
164
+ # OPTIMIZATION: Replace bc with awk
165
+ local duration_ms=$(awk "BEGIN {printf \"%.0f\", $duration * 1000}")
166
+
167
+ local pass_rate="0.0000"
168
+ if [ "$total" -gt 0 ]; then
169
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
170
+ fi
171
+
172
+ cat <<EOF
173
+ {"framework":"junit","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration_ms,"failed_test_names":[]}
174
+ EOF
175
+ }
176
+
177
+ parse_go_test_output() {
178
+ local output="$1"
179
+ local total=0 passed=0 failed=0 skipped=0 duration=0
180
+ local failed_names=()
181
+
182
+ passed=$(echo "$output" | grep -c "^--- PASS:" || true)
183
+ failed=$(echo "$output" | grep -c "^--- FAIL:" || true)
184
+ skipped=$(echo "$output" | grep -c "^--- SKIP:" || true)
185
+ total=$((passed + failed + skipped))
186
+
187
+ while IFS= read -r line; do
188
+ [[ "$line" =~ ^---\ FAIL:\ (.*) ]] && failed_names+=("${BASH_REMATCH[1]}")
189
+ done <<< "$output"
190
+
191
+ # OPTIMIZATION: Replace bc with awk
192
+ [[ "$output" =~ ok[[:space:]]+[^[:space:]]+[[:space:]]+([0-9.]+)s ]] && duration=$(awk "BEGIN {printf \"%.0f\", ${BASH_REMATCH[1]} * 1000}")
193
+
194
+ local pass_rate="0.0000"
195
+ if [ "$total" -gt 0 ]; then
196
+ pass_rate=$(awk "BEGIN {printf \"%.4f\", $passed / $total}")
197
+ fi
198
+
199
+ # OPTIMIZATION: Single jq call
200
+ local failed_names_json="[]"
201
+ [ ${#failed_names[@]} -gt 0 ] && failed_names_json=$(printf '%s\n' "${failed_names[@]}" | jq -Rs 'split("\n") | map(select(length > 0))')
202
+
203
+ cat <<EOF
204
+ {"framework":"go","total_tests":$total,"passed_tests":$passed,"failed_tests":$failed,"skipped_tests":$skipped,"pass_rate":$pass_rate,"duration_ms":$duration,"failed_test_names":$failed_names_json}
205
+ EOF
206
+ }
207
+
208
+ auto_detect_framework() {
209
+ local input="$1"
210
+
211
+ if [ -f "$input" ]; then
212
+ if grep -q "<testsuite" "$input" 2>/dev/null; then
213
+ echo "junit"
214
+ return 0
215
+ fi
216
+ input=$(cat "$input")
217
+ fi
218
+
219
+ if [[ "$input" =~ Test\ Suites: ]] || [[ "$input" =~ PASS[[:space:]]+.*\.test\.(js|ts) ]]; then
220
+ echo "jest"
221
+ return 0
222
+ fi
223
+
224
+ if [[ "$input" =~ [0-9]+\ passing ]] && [[ "$input" =~ [0-9]+\ failing ]]; then
225
+ echo "mocha"
226
+ return 0
227
+ fi
228
+
229
+ if [[ "$input" =~ ====.*passed.*==== ]] || [[ "$input" =~ FAILED.*\.py:: ]]; then
230
+ echo "pytest"
231
+ return 0
232
+ fi
233
+
234
+ if [[ "$input" =~ 1\.\.[0-9]+ ]] || [[ "$input" =~ ok\ [0-9]+ ]] || [[ "$input" =~ not\ ok\ [0-9]+ ]]; then
235
+ echo "tap"
236
+ return 0
237
+ fi
238
+
239
+ if [[ "$input" =~ ---\ PASS: ]] || [[ "$input" =~ ---\ FAIL: ]]; then
240
+ echo "go"
241
+ return 0
242
+ fi
243
+
244
+ echo "unknown"
245
+ return 1
246
+ }
247
+
248
+ parse_test_results() {
249
+ local framework="$1"
250
+ local input="$2"
251
+
252
+ if [ "$framework" = "auto" ]; then
253
+ framework=$(auto_detect_framework "$input")
254
+ if [ "$framework" = "unknown" ]; then
255
+ echo '{"error":"Unable to auto-detect testing framework"}'
256
+ return 1
257
+ fi
258
+ fi
259
+
260
+ local output="$input"
261
+ [ -f "$input" ] && output=$(cat "$input")
262
+
263
+ case "$framework" in
264
+ jest) parse_jest_output "$output" ;;
265
+ mocha) parse_mocha_output "$output" ;;
266
+ pytest) parse_pytest_output "$output" ;;
267
+ tap) parse_tap_output "$output" ;;
268
+ junit) parse_junit_xml "$input" ;;
269
+ go) parse_go_test_output "$output" ;;
270
+ *) echo '{"error":"Unknown framework"}' && return 1 ;;
271
+ esac
272
+ }
273
+
274
+ if [ "${BASH_SOURCE[0]}" = "${0}" ]; then
275
+ [ $# -lt 2 ] && echo "Usage: $0 <framework|auto> <output_file_or_string>" && exit 1
276
+ parse_test_results "$1" "$2"
277
+ fi
@@ -64,6 +64,16 @@ source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/security_utils.sh"
64
64
  HELPERS_DIR="$SCRIPT_DIR/helpers"
65
65
  REDIS_COORD_SKILL="$PROJECT_ROOT/.claude/skills/cfn-redis-coordination"
66
66
 
67
+ # Validate Redis connectivity
68
+ REDIS_PORT="${CFN_REDIS_PORT:-6379}"
69
+ REDIS_HOST="${CFN_REDIS_HOST:-localhost}"
70
+ if command -v redis-cli &>/dev/null; then
71
+ if ! redis-cli -h "${REDIS_HOST}" -p "${REDIS_PORT}" ping &>/dev/null; then
72
+ echo "⚠️ Warning: Redis not reachable at ${REDIS_HOST}:${REDIS_PORT}" >&2
73
+ echo " Redis coordination features may not function correctly" >&2
74
+ fi
75
+ fi
76
+
67
77
  # Configuration
68
78
  TASK_ID=""
69
79
  MODE="standard"
@@ -71,6 +81,7 @@ LOOP3_AGENTS=""
71
81
  LOOP2_AGENTS=""
72
82
  PRODUCT_OWNER=""
73
83
  MAX_ITERATIONS=10
84
+ MAX_ALLOWED_ITERATIONS=100 # Security: Prevent resource exhaustion via unbounded iterations
74
85
  MIN_QUORUM_LOOP3="0.66"
75
86
  MIN_QUORUM_LOOP2="0.66"
76
87
  EPIC_CONTEXT=""
@@ -82,8 +93,8 @@ PHASE_ID=""
82
93
  # Mode-specific thresholds
83
94
  declare -A GATE_THRESHOLD=(
84
95
  [mvp]=0.70
85
- [standard]=0.75
86
- [enterprise]=0.75
96
+ [standard]=0.95
97
+ [enterprise]=0.98
87
98
  )
88
99
 
89
100
  declare -A CONSENSUS_THRESHOLD=(
@@ -162,9 +173,20 @@ while [[ $# -gt 0 ]]; do
162
173
  echo "Max iterations must be a positive integer"
163
174
  exit 1
164
175
  fi
176
+ # SECURITY FIX: Enforce upper bound to prevent resource exhaustion
177
+ if [[ "$2" -gt "$MAX_ALLOWED_ITERATIONS" ]]; then
178
+ echo "❌ MAX_ITERATIONS=$2 exceeds limit of $MAX_ALLOWED_ITERATIONS" >&2
179
+ echo " (Use --max-iterations <N> where N <= $MAX_ALLOWED_ITERATIONS)" >&2
180
+ exit 1
181
+ fi
182
+ if [[ "$2" -lt 1 ]]; then
183
+ echo "❌ MAX_ITERATIONS must be at least 1" >&2
184
+ exit 1
185
+ fi
165
186
  MAX_ITERATIONS="$2"
166
187
  shift 2
167
188
  ;;
189
+
168
190
  --min-quorum-loop3)
169
191
  if [[ $# -lt 2 ]]; then
170
192
  echo "Error: --min-quorum-loop3 requires a value"
@@ -292,11 +314,11 @@ case "$MODE" in
292
314
  CONSENSUS=${CONSENSUS_THRESHOLD[mvp]:-0.80}
293
315
  ;;
294
316
  standard)
295
- GATE=${GATE_THRESHOLD[standard]:-0.75}
317
+ GATE=${GATE_THRESHOLD[standard]:-0.95}
296
318
  CONSENSUS=${CONSENSUS_THRESHOLD[standard]:-0.90}
297
319
  ;;
298
320
  enterprise)
299
- GATE=${GATE_THRESHOLD[enterprise]:-0.85}
321
+ GATE=${GATE_THRESHOLD[enterprise]:-0.98}
300
322
  CONSENSUS=${CONSENSUS_THRESHOLD[enterprise]:-0.95}
301
323
  ;;
302
324
  *)
@@ -420,6 +442,41 @@ build_agent_context() {
420
442
 
421
443
  context="$context | Iteration: $iteration"
422
444
 
445
+ # Check if jq is available before attempting JSON parsing
446
+ if ! command -v jq &>/dev/null; then
447
+ echo "⚠️ Warning: jq not installed. Test context injection will be skipped" >&2
448
+ echo "$context"
449
+ return
450
+ fi
451
+
452
+ # Inject test failure diagnostics from previous iteration
453
+ if [ "$iteration" -gt 1 ]; then
454
+ local iteration_context_file="/tmp/cfn-iteration-context-${task_id}.json"
455
+
456
+ if [ -f "$iteration_context_file" ]; then
457
+ # Extract failed test summary from iteration context
458
+ local failed_summary=""
459
+ failed_summary=$(jq -r '
460
+ if (.pass_rate? != null)
461
+ and .failed_tests
462
+ and (.failed_tests | length > 0)
463
+ then
464
+ "Previous Test Results: Pass Rate " +
465
+ ((.pass_rate * 100) | floor | tostring) +
466
+ "% | Failed Tests: " +
467
+ ([.failed_tests[].failed_test_names[]? // empty] | join(", "))
468
+ else
469
+ empty
470
+ end
471
+ ' "$iteration_context_file" 2>/dev/null || echo "")
472
+
473
+ if [ -n "$failed_summary" ]; then
474
+ context="$context | $failed_summary"
475
+ echo "📊 Injected test diagnostics from previous iteration" >&2
476
+ fi
477
+ fi
478
+ fi
479
+
423
480
  if [[ -n "$feedback" ]]; then
424
481
  context="$context | Feedback: $feedback"
425
482
  fi
@@ -448,6 +505,32 @@ function spawn_loop3_agents() {
448
505
 
449
506
  echo "[Loop 3] Spawning implementer agents (iteration $iteration)..."
450
507
 
508
+ # Load success criteria from Redis (if available)
509
+ export AGENT_SUCCESS_CRITERIA=""
510
+ if [[ -n "$task_id" ]] && [[ -x "$SCRIPT_DIR/../cfn-redis-coordination/get-success-criteria.sh" ]]; then
511
+ SUCCESS_CRITERIA=$("$SCRIPT_DIR/../cfn-redis-coordination/get-success-criteria.sh" --task-id "$task_id" 2>/dev/null || echo "")
512
+
513
+ if [[ -n "$SUCCESS_CRITERIA" ]]; then
514
+ # SECURITY FIX: Validate JSON size before parsing (prevent DoS)
515
+ CRITERIA_SIZE=$(echo -n "$SUCCESS_CRITERIA" | wc -c)
516
+ MAX_SIZE=10485760 # 10MB
517
+
518
+ if [[ "$CRITERIA_SIZE" -gt "$MAX_SIZE" ]]; then
519
+ echo " ❌ Success criteria exceeds maximum size (10MB): ${CRITERIA_SIZE} bytes" >&2
520
+ exit 1
521
+ fi
522
+
523
+ # Validate JSON before exporting
524
+ if echo "$SUCCESS_CRITERIA" | jq empty 2>/dev/null; then
525
+ export AGENT_SUCCESS_CRITERIA="$SUCCESS_CRITERIA"
526
+ TEST_SUITE_COUNT=$(echo "$SUCCESS_CRITERIA" | jq -r '.test_suites | length' 2>/dev/null || echo "0")
527
+ echo " ✅ Success criteria loaded ($TEST_SUITE_COUNT test suites)" >&2
528
+ else
529
+ echo " ⚠️ Invalid success criteria JSON - skipping" >&2
530
+ fi
531
+ fi
532
+ fi
533
+
451
534
  # Convert comma-separated agents to array
452
535
  IFS=',' read -ra AGENT_ARRAY <<< "$agents"
453
536
 
@@ -476,21 +559,62 @@ function spawn_loop3_agents() {
476
559
  # Docker-based spawning (prevents WebAssembly OOM)
477
560
  echo " → Docker mode: spawning via container" >&2
478
561
 
479
- docker run --detach \
480
- --name "agent-${safe_agent_id}" \
481
- --memory "${CFN_MEMORY_LIMIT:-2g}" \
482
- --cpus 1.5 \
483
- --network "${CFN_DOCKER_NETWORK:-mcp-network}" \
484
- --env REDIS_URL=redis://redis:6379 \
485
- --env AGENT_ID="${safe_agent_id}" \
486
- --env AGENT_TYPE="${safe_agent_type}" \
487
- --env TASK_ID="${safe_task_id}" \
488
- --env ITERATION="${iteration}" \
489
- --volume "${PROJECT_ROOT}/.claude:/app/.claude:ro" \
490
- --volume "${PROJECT_ROOT}/packages:/app/packages" \
491
- --volume "/tmp/agent-workspace-${safe_agent_id}:/app/workspace" \
492
- "${CFN_DOCKER_IMAGE:-claude-flow-novice:agent}" \
493
- sh -c "npx claude-flow-novice agent \"${safe_agent_type}\" --task-id \"${safe_task_id}\" --agent-id \"${safe_agent_id}\" --iteration \"${iteration}\"" >/dev/null 2>&1 &
562
+ # SECURITY FIX: Sanitize Docker environment variables to prevent command injection
563
+ CFN_DOCKER_IMAGE_SAFE=$(sanitize_docker_var "${CFN_DOCKER_IMAGE:-claude-flow-novice:agent}") || {
564
+ echo "❌ Invalid CFN_DOCKER_IMAGE" >&2
565
+ exit 1
566
+ }
567
+ CFN_DOCKER_NETWORK_SAFE=$(sanitize_docker_var "${CFN_DOCKER_NETWORK:-mcp-network}") || {
568
+ echo "❌ Invalid CFN_DOCKER_NETWORK" >&2
569
+ exit 1
570
+ }
571
+ CFN_MEMORY_LIMIT_SAFE=$(sanitize_docker_var "${CFN_MEMORY_LIMIT:-2g}") || {
572
+ echo "❌ Invalid CFN_MEMORY_LIMIT" >&2
573
+ exit 1
574
+ }
575
+
576
+ # Build Docker command as array (prevents injection, no eval needed)
577
+ DOCKER_CMD=(
578
+ docker run --detach
579
+ --name "agent-${safe_agent_id}"
580
+ --memory "$CFN_MEMORY_LIMIT_SAFE"
581
+ --cpus 1.5
582
+ --network "$CFN_DOCKER_NETWORK_SAFE"
583
+ --env REDIS_URL=redis://redis:6379
584
+ --env "AGENT_ID=${safe_agent_id}"
585
+ --env "AGENT_TYPE=${safe_agent_type}"
586
+ --env "TASK_ID=${safe_task_id}"
587
+ --env "ITERATION=${iteration}"
588
+ )
589
+
590
+ # SECURITY FIX: Base64-encode success criteria to prevent shell injection
591
+ if [[ -n "${AGENT_SUCCESS_CRITERIA:-}" ]]; then
592
+ ENCODED_CRITERIA=$(echo -n "$AGENT_SUCCESS_CRITERIA" | base64 -w 0)
593
+
594
+ # SECURITY FIX: Validate size AFTER encoding to prevent expansion bypass (10MB → 13.9MB)
595
+ ENCODED_SIZE=$(echo -n "$ENCODED_CRITERIA" | wc -c)
596
+ MAX_ENCODED_SIZE=10485760 # 10MB
597
+
598
+ if [[ "$ENCODED_SIZE" -gt "$MAX_ENCODED_SIZE" ]]; then
599
+ echo "❌ Encoded success criteria exceeds 10MB limit: ${ENCODED_SIZE} bytes" >&2
600
+ echo " (Original: $(echo -n "$AGENT_SUCCESS_CRITERIA" | wc -c) bytes, Expanded: +33% via base64)" >&2
601
+ exit 1
602
+ fi
603
+
604
+ DOCKER_CMD+=(--env "AGENT_SUCCESS_CRITERIA_B64=${ENCODED_CRITERIA}")
605
+ fi
606
+
607
+ # Add volumes and image
608
+ DOCKER_CMD+=(
609
+ --volume "${PROJECT_ROOT}/.claude:/app/.claude:ro"
610
+ --volume "${PROJECT_ROOT}/packages:/app/packages"
611
+ --volume "/tmp/agent-workspace-${safe_agent_id}:/app/workspace"
612
+ "$CFN_DOCKER_IMAGE_SAFE"
613
+ sh -c "npx claude-flow-novice agent \"${safe_agent_type}\" --task-id \"${safe_task_id}\" --agent-id \"${safe_agent_id}\" --iteration \"${iteration}\""
614
+ )
615
+
616
+ # Execute safely without eval (prevents command injection)
617
+ "${DOCKER_CMD[@]}" >/dev/null 2>&1 &
494
618
 
495
619
  AGENT_PID=$!
496
620
  else
@@ -534,8 +658,13 @@ function spawn_loop3_agents() {
534
658
  echo "🔍 Started monitoring for $UNIQUE_AGENT_ID (Agent PID: $AGENT_PID, Monitor PID: $MONITOR_PID)" >&2
535
659
  fi
536
660
 
537
- # Store agent ID mapping for later retrieval using Redis SADD for set storage
538
- redis-cli -h "${REDIS_HOST:-localhost}" -p "${REDIS_PORT:-6379}" SADD "swarm:${task_id}:loop3:agent_ids:iteration${iteration}" "$UNIQUE_AGENT_ID" >/dev/null
661
+ # SECURITY FIX: Atomic SADD + EXPIRE using Lua script (prevent race condition)
662
+ redis-cli -h "${REDIS_HOST:-localhost}" -p "${REDIS_PORT:-6379}" --eval - \
663
+ "swarm:${task_id}:loop3:agent_ids:iteration${iteration}" "$UNIQUE_AGENT_ID" <<'LUA' >/dev/null
664
+ redis.call('SADD', KEYS[1], ARGV[1])
665
+ redis.call('EXPIRE', KEYS[1], 86400)
666
+ return redis.call('SCARD', KEYS[1])
667
+ LUA
539
668
  done
540
669
 
541
670
  echo "[Loop 3] All agents spawned"
@@ -747,6 +876,32 @@ function spawn_loop2_agents() {
747
876
 
748
877
  echo "[Loop 2] Spawning validator agents (iteration $iteration)..."
749
878
 
879
+ # Load success criteria from Redis (if available)
880
+ export AGENT_SUCCESS_CRITERIA=""
881
+ if [[ -n "$task_id" ]] && [[ -x "$SCRIPT_DIR/../cfn-redis-coordination/get-success-criteria.sh" ]]; then
882
+ SUCCESS_CRITERIA=$("$SCRIPT_DIR/../cfn-redis-coordination/get-success-criteria.sh" --task-id "$task_id" 2>/dev/null || echo "")
883
+
884
+ if [[ -n "$SUCCESS_CRITERIA" ]]; then
885
+ # SECURITY FIX: Validate JSON size before parsing (prevent DoS)
886
+ CRITERIA_SIZE=$(echo -n "$SUCCESS_CRITERIA" | wc -c)
887
+ MAX_SIZE=10485760 # 10MB
888
+
889
+ if [[ "$CRITERIA_SIZE" -gt "$MAX_SIZE" ]]; then
890
+ echo " ❌ Success criteria exceeds maximum size (10MB): ${CRITERIA_SIZE} bytes" >&2
891
+ exit 1
892
+ fi
893
+
894
+ # Validate JSON before exporting
895
+ if echo "$SUCCESS_CRITERIA" | jq empty 2>/dev/null; then
896
+ export AGENT_SUCCESS_CRITERIA="$SUCCESS_CRITERIA"
897
+ TEST_SUITE_COUNT=$(echo "$SUCCESS_CRITERIA" | jq -r '.test_suites | length' 2>/dev/null || echo "0")
898
+ echo " ✅ Success criteria loaded ($TEST_SUITE_COUNT test suites)" >&2
899
+ else
900
+ echo " ⚠️ Invalid success criteria JSON - skipping" >&2
901
+ fi
902
+ fi
903
+ fi
904
+
750
905
  # Convert comma-separated agents to array
751
906
  IFS=',' read -ra AGENT_ARRAY <<< "$agents"
752
907
 
@@ -788,7 +943,13 @@ function spawn_loop2_agents() {
788
943
  --namespace "swarm" >/dev/null
789
944
 
790
945
  # Store agent ID mapping for later retrieval using Redis SADD for set storage
791
- redis-cli -h "${REDIS_HOST:-localhost}" -p "${REDIS_PORT:-6379}" SADD "swarm:${task_id}:loop2:agent_ids:iteration${iteration}" "$UNIQUE_VALIDATOR_ID" >/dev/null
946
+ # SECURITY FIX: Atomic SADD + EXPIRE using Lua script (prevent race condition)
947
+ redis-cli -h "${REDIS_HOST:-localhost}" -p "${REDIS_PORT:-6379}" --eval - \
948
+ "swarm:${task_id}:loop2:agent_ids:iteration${iteration}" "$UNIQUE_VALIDATOR_ID" <<'LUA' >/dev/null
949
+ redis.call('SADD', KEYS[1], ARGV[1])
950
+ redis.call('EXPIRE', KEYS[1], 86400)
951
+ return redis.call('SCARD', KEYS[1])
952
+ LUA
792
953
  done
793
954
 
794
955
  echo "[Loop 2] All agents spawned"
@@ -804,7 +965,7 @@ function spawn_product_owner() {
804
965
  # BLOCKER #2 FIX: Match execute-decision.sh actual parameters
805
966
  # Required: --task-id, --agent-id, --consensus, --threshold, --iteration, --max-iterations
806
967
  local decision_output
807
- decision_output=$("$SCRIPT_DIR/.claude/skills/cfn-product-owner-decision/execute-decision.sh" \
968
+ decision_output=$("$PROJECT_ROOT/.claude/skills/cfn-product-owner-decision/execute-decision.sh" \
808
969
  --task-id "$task_id" \
809
970
  --agent-id "$PRODUCT_OWNER" \
810
971
  --consensus "$LOOP2_FINAL_CONSENSUS" \
@@ -96,4 +96,28 @@ function validate_agent_list() {
96
96
  done
97
97
 
98
98
  return 0
99
+ }
100
+
101
+ # SECURITY FIX: Sanitize Docker environment variables to prevent command injection
102
+ # Allowed characters: alphanumeric, dash, colon, slash, dot, underscore
103
+ # This prevents injection attacks via malicious CFN_DOCKER_IMAGE, CFN_DOCKER_NETWORK, etc.
104
+ function sanitize_docker_var() {
105
+ local var="$1"
106
+ local pattern="^[a-zA-Z0-9._:/-]+$"
107
+
108
+ # Check if input is empty
109
+ if [ -z "$var" ]; then
110
+ echo "Error: Docker variable cannot be empty" >&2
111
+ return 1
112
+ fi
113
+
114
+ # Validate against allowed pattern (no semicolons, backticks, pipes, etc.)
115
+ if [[ ! "$var" =~ $pattern ]]; then
116
+ echo "❌ Invalid characters in Docker variable: $var" >&2
117
+ echo " Only alphanumeric, dash, colon, slash, dot, and underscore allowed" >&2
118
+ return 1
119
+ fi
120
+
121
+ # If all checks pass, echo the sanitized input
122
+ echo "$var"
99
123
  }