claude-flow-novice 2.15.2 → 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 (533) 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-BACKUP_USAGE.md +243 -243
  36. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  37. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  38. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  39. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  40. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  41. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  42. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  43. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  44. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  45. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  46. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  47. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  48. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  49. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  50. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  51. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  52. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  53. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  54. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  55. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  56. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  57. package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
  58. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  59. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  60. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  61. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  62. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  63. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  64. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  65. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  66. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  67. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  68. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  69. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  70. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  71. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  72. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  73. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  74. package/README.md +116 -475
  75. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  76. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  77. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  78. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  79. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  80. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  81. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  82. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  83. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  84. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  85. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  86. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  87. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  88. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  89. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  90. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  91. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  92. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  93. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  94. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  95. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  96. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  97. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  98. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  99. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  100. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  101. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  102. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  103. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  104. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  105. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  106. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  107. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  108. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  109. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  110. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  111. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  112. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  113. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  114. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  115. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  116. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  117. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  118. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  119. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  120. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  121. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  122. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  123. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  124. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  125. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  126. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  127. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  128. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  129. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  130. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  131. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  137. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  138. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  139. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  140. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  141. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  142. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  143. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  144. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  145. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  146. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  147. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  148. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  149. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  150. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  151. package/claude-assets/commands/switch-api.md +31 -10
  152. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  153. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  154. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  155. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  156. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  157. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  158. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  159. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  160. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  161. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  162. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
  163. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
  164. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  165. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  166. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  167. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  168. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  169. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  170. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  171. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  172. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  173. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  174. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  175. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  176. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  177. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  178. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  179. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  180. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  181. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  182. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  183. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  184. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  185. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  186. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  187. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  188. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  189. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  190. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  191. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  192. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  193. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  194. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  195. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  196. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  197. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  198. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  199. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  200. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  201. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  202. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  203. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  204. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  205. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  206. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  207. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  208. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  209. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  210. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  211. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  212. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  213. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  214. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  215. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  216. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  217. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  218. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  219. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  220. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  221. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
  222. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  223. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  224. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  225. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  226. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  227. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  228. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  229. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  230. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  231. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  232. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  233. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  234. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  235. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  236. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  237. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  238. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  239. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  240. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  241. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  242. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  243. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  244. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  245. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  246. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  247. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  248. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  249. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  250. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  251. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  252. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  253. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  254. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  255. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  256. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  257. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  258. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  259. package/claude-assets/skills/docker-build/build.sh +73 -73
  260. package/claude-assets/skills/integration/agent-handoff.sh +492 -0
  261. package/claude-assets/skills/integration/file-operations.sh +414 -0
  262. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  263. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  264. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  265. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  266. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  267. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  268. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  269. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  270. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  271. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  272. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  273. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  274. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  275. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  276. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  277. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  278. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  279. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  280. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  281. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  282. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  283. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  284. package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
  285. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  286. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
  287. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  288. package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
  289. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  290. package/dist/ace/ace-curator.js +10 -2
  291. package/dist/ace/ace-curator.js.map +1 -1
  292. package/dist/ace/ace-generator.js +4 -0
  293. package/dist/ace/ace-generator.js.map +1 -1
  294. package/dist/ace/ace-reflector.js +1 -1
  295. package/dist/ace/ace-reflector.js.map +1 -1
  296. package/dist/ace/context-injection.js +24 -2
  297. package/dist/ace/context-injection.js.map +1 -1
  298. package/dist/agents/agent-loader.js +146 -165
  299. package/dist/agents/agent-loader.js.map +1 -1
  300. package/dist/agents/task-agent-integration.js +1 -1
  301. package/dist/agents/task-agent-integration.js.map +1 -1
  302. package/dist/api/health-endpoints.js +390 -0
  303. package/dist/api/health-endpoints.js.map +1 -0
  304. package/dist/cli/agent-executor.js +4 -1
  305. package/dist/cli/agent-executor.js.map +1 -1
  306. package/dist/cli/agent-prompt-builder.js +89 -1
  307. package/dist/cli/agent-prompt-builder.js.map +1 -1
  308. package/dist/cli/agent-spawn.js +130 -37
  309. package/dist/cli/agent-spawn.js.map +1 -1
  310. package/dist/cli/config-manager.js +91 -109
  311. package/dist/cli/config-manager.js.map +1 -1
  312. package/dist/cli/skill-cache-validator.js +412 -0
  313. package/dist/cli/skill-cache-validator.js.map +1 -0
  314. package/dist/cli/skill-cli.js +991 -0
  315. package/dist/cli/skill-cli.js.map +1 -0
  316. package/dist/cli/skill-execution-logger.js +284 -0
  317. package/dist/cli/skill-execution-logger.js.map +1 -0
  318. package/dist/cli/skill-loader.js +457 -0
  319. package/dist/cli/skill-loader.js.map +1 -0
  320. package/dist/coordination/event-bus.js +2 -2
  321. package/dist/coordination/event-bus.js.map +1 -1
  322. package/dist/coordination/fleet-manager.js +1 -1
  323. package/dist/coordination/fleet-manager.js.map +1 -1
  324. package/dist/coordination/index.js +23 -9
  325. package/dist/coordination/index.js.map +1 -1
  326. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  327. package/dist/db/migration-manager.js +483 -0
  328. package/dist/db/migration-manager.js.map +1 -0
  329. package/dist/db/skills-query.js +535 -0
  330. package/dist/db/skills-query.js.map +1 -0
  331. package/dist/integration/DatabaseHandoff.js +507 -0
  332. package/dist/integration/DatabaseHandoff.js.map +1 -0
  333. package/dist/integration/StandardAdapter.js +291 -0
  334. package/dist/integration/StandardAdapter.js.map +1 -0
  335. package/dist/jobs/edge-case-analyzer.js +367 -0
  336. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  337. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  338. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  339. package/dist/lib/agent-output-parser.js +518 -0
  340. package/dist/lib/agent-output-parser.js.map +1 -0
  341. package/dist/lib/agent-output-validator.js +950 -0
  342. package/dist/lib/agent-output-validator.js.map +1 -0
  343. package/dist/lib/agent-workspace.js +281 -0
  344. package/dist/lib/agent-workspace.js.map +1 -0
  345. package/dist/lib/artifact-registry.js +443 -0
  346. package/dist/lib/artifact-registry.js.map +1 -0
  347. package/dist/lib/atomic-file-writer.js +377 -0
  348. package/dist/lib/atomic-file-writer.js.map +1 -0
  349. package/dist/lib/backup-manager.js +779 -0
  350. package/dist/lib/backup-manager.js.map +1 -0
  351. package/dist/lib/checkpoint-manager.js +837 -0
  352. package/dist/lib/checkpoint-manager.js.map +1 -0
  353. package/dist/lib/circuit-breaker.js +340 -0
  354. package/dist/lib/circuit-breaker.js.map +1 -0
  355. package/dist/lib/completion-signal-handler.js +243 -0
  356. package/dist/lib/completion-signal-handler.js.map +1 -0
  357. package/dist/lib/config-manager.js +312 -0
  358. package/dist/lib/config-manager.js.map +1 -0
  359. package/dist/lib/config-migrator.js +386 -0
  360. package/dist/lib/config-migrator.js.map +1 -0
  361. package/dist/lib/config-validator.js +687 -0
  362. package/dist/lib/config-validator.js.map +1 -0
  363. package/dist/lib/correlation-cache.js +311 -0
  364. package/dist/lib/correlation-cache.js.map +1 -0
  365. package/dist/lib/correlation.js +263 -0
  366. package/dist/lib/correlation.js.map +1 -0
  367. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  368. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  369. package/dist/lib/database-service/correlation.js +329 -0
  370. package/dist/lib/database-service/correlation.js.map +1 -0
  371. package/dist/lib/database-service/errors.js +120 -0
  372. package/dist/lib/database-service/errors.js.map +1 -0
  373. package/dist/lib/database-service/index.js +168 -0
  374. package/dist/lib/database-service/index.js.map +1 -0
  375. package/dist/lib/database-service/postgres-adapter.js +526 -0
  376. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  377. package/dist/lib/database-service/redis-adapter.js +360 -0
  378. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  379. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  380. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  381. package/dist/lib/database-service/transaction-manager.js +773 -0
  382. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  383. package/dist/lib/database-service/types.js +23 -0
  384. package/dist/lib/database-service/types.js.map +1 -0
  385. package/dist/lib/deadlock-resolver.js +292 -0
  386. package/dist/lib/deadlock-resolver.js.map +1 -0
  387. package/dist/lib/distributed-lock.js +451 -0
  388. package/dist/lib/distributed-lock.js.map +1 -0
  389. package/dist/lib/edge-case-deduplicator.js +227 -0
  390. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  391. package/dist/lib/encryption-manager.js +322 -0
  392. package/dist/lib/encryption-manager.js.map +1 -0
  393. package/dist/lib/error-aggregator.js +234 -0
  394. package/dist/lib/error-aggregator.js.map +1 -0
  395. package/dist/lib/errors.js +287 -0
  396. package/dist/lib/errors.js.map +1 -0
  397. package/dist/lib/file-lock-manager.js +578 -0
  398. package/dist/lib/file-lock-manager.js.map +1 -0
  399. package/dist/lib/file-operations.js +367 -0
  400. package/dist/lib/file-operations.js.map +1 -0
  401. package/dist/lib/idempotent-write.js +237 -0
  402. package/dist/lib/idempotent-write.js.map +1 -0
  403. package/dist/lib/integration-schema-validator.js +522 -0
  404. package/dist/lib/integration-schema-validator.js.map +1 -0
  405. package/dist/lib/lock-health-monitor.js +298 -0
  406. package/dist/lib/lock-health-monitor.js.map +1 -0
  407. package/dist/lib/log-shipper.js +422 -0
  408. package/dist/lib/log-shipper.js.map +1 -0
  409. package/dist/lib/logging.js +146 -0
  410. package/dist/lib/logging.js.map +1 -0
  411. package/dist/lib/message-deduplicator.js +439 -0
  412. package/dist/lib/message-deduplicator.js.map +1 -0
  413. package/dist/lib/multi-system-query.js +604 -0
  414. package/dist/lib/multi-system-query.js.map +1 -0
  415. package/dist/lib/orphan-detector.js +332 -0
  416. package/dist/lib/orphan-detector.js.map +1 -0
  417. package/dist/lib/password-generator.js +166 -0
  418. package/dist/lib/password-generator.js.map +1 -0
  419. package/dist/lib/path-validator.js +429 -0
  420. package/dist/lib/path-validator.js.map +1 -0
  421. package/dist/lib/query-translator.js +905 -0
  422. package/dist/lib/query-translator.js.map +1 -0
  423. package/dist/lib/queue-recovery.js +469 -0
  424. package/dist/lib/queue-recovery.js.map +1 -0
  425. package/dist/lib/redis-queue-manager.js +512 -0
  426. package/dist/lib/redis-queue-manager.js.map +1 -0
  427. package/dist/lib/reflection-archiver.js +272 -0
  428. package/dist/lib/reflection-archiver.js.map +1 -0
  429. package/dist/lib/retry-manager.js +453 -0
  430. package/dist/lib/retry-manager.js.map +1 -0
  431. package/dist/lib/retry.js +262 -0
  432. package/dist/lib/retry.js.map +1 -0
  433. package/dist/lib/schema-transform.js +695 -0
  434. package/dist/lib/schema-transform.js.map +1 -0
  435. package/dist/lib/schema-validator.js +491 -0
  436. package/dist/lib/schema-validator.js.map +1 -0
  437. package/dist/lib/skill-cache.js +297 -0
  438. package/dist/lib/skill-cache.js.map +1 -0
  439. package/dist/lib/skill-content-manager.js +337 -0
  440. package/dist/lib/skill-content-manager.js.map +1 -0
  441. package/dist/lib/skill-frontmatter-parser.js +237 -0
  442. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  443. package/dist/lib/skill-git-integration.js +275 -0
  444. package/dist/lib/skill-git-integration.js.map +1 -0
  445. package/dist/lib/skill-markdown-validator.js +396 -0
  446. package/dist/lib/skill-markdown-validator.js.map +1 -0
  447. package/dist/lib/skill-output-parser.js +312 -0
  448. package/dist/lib/skill-output-parser.js.map +1 -0
  449. package/dist/lib/unified-query-api.js +467 -0
  450. package/dist/lib/unified-query-api.js.map +1 -0
  451. package/dist/middleware/auth-middleware.js +350 -0
  452. package/dist/middleware/auth-middleware.js.map +1 -0
  453. package/dist/middleware/schema-validation.js +347 -0
  454. package/dist/middleware/schema-validation.js.map +1 -0
  455. package/dist/providers/anthropic-provider.js +1 -1
  456. package/dist/providers/anthropic-provider.js.map +1 -1
  457. package/dist/providers/provider-factory.js +2 -2
  458. package/dist/providers/provider-factory.js.map +1 -1
  459. package/dist/services/edge-case-analyzer.js +321 -0
  460. package/dist/services/edge-case-analyzer.js.map +1 -0
  461. package/dist/services/edge-case-deduplicator.js +266 -0
  462. package/dist/services/edge-case-deduplicator.js.map +1 -0
  463. package/dist/services/edge-case-detector.js +337 -0
  464. package/dist/services/edge-case-detector.js.map +1 -0
  465. package/dist/services/edge-case-tracker.js +547 -0
  466. package/dist/services/edge-case-tracker.js.map +1 -0
  467. package/dist/services/health-check-system.js +586 -0
  468. package/dist/services/health-check-system.js.map +1 -0
  469. package/dist/services/metrics-logger.js +412 -0
  470. package/dist/services/metrics-logger.js.map +1 -0
  471. package/dist/services/patch-generator.js +378 -0
  472. package/dist/services/patch-generator.js.map +1 -0
  473. package/dist/services/patch-validator.js +337 -0
  474. package/dist/services/patch-validator.js.map +1 -0
  475. package/dist/services/performance-monitor.js +811 -0
  476. package/dist/services/performance-monitor.js.map +1 -0
  477. package/dist/services/promotion-pipeline.js +918 -0
  478. package/dist/services/promotion-pipeline.js.map +1 -0
  479. package/dist/services/promotion-validator.js +394 -0
  480. package/dist/services/promotion-validator.js.map +1 -0
  481. package/dist/services/reflection-logger.js +388 -0
  482. package/dist/services/reflection-logger.js.map +1 -0
  483. package/dist/services/skill-deployment.js +472 -0
  484. package/dist/services/skill-deployment.js.map +1 -0
  485. package/dist/services/skill-loader.js +427 -0
  486. package/dist/services/skill-loader.js.map +1 -0
  487. package/dist/services/skill-promotion.js +372 -0
  488. package/dist/services/skill-promotion.js.map +1 -0
  489. package/dist/services/skill-validator.js +454 -0
  490. package/dist/services/skill-validator.js.map +1 -0
  491. package/dist/services/skill-versioning.js +244 -0
  492. package/dist/services/skill-versioning.js.map +1 -0
  493. package/dist/services/workspace-supervisor.js +597 -0
  494. package/dist/services/workspace-supervisor.js.map +1 -0
  495. package/dist/types/agent-output.js +44 -0
  496. package/dist/types/agent-output.js.map +1 -0
  497. package/dist/types/config.js +28 -0
  498. package/dist/types/config.js.map +1 -0
  499. package/dist/types/edge-case.js +45 -0
  500. package/dist/types/edge-case.js.map +1 -0
  501. package/package.json +201 -176
  502. package/readme/README.md +19 -4
  503. package/scripts/artifact-cleanup.sh +392 -0
  504. package/scripts/backup-cleanup.sh +627 -0
  505. package/scripts/cleanup-workspaces.sh +412 -0
  506. package/scripts/cleanup-yaml-configs.sh +141 -0
  507. package/scripts/deploy-approved-skills.sh +263 -0
  508. package/scripts/deploy-production.sh +355 -355
  509. package/scripts/docker-playwright-fix.sh +311 -311
  510. package/scripts/docker-rebuild-all-agents.sh +127 -127
  511. package/scripts/health-check.sh +447 -0
  512. package/scripts/log-aggregator.sh +554 -0
  513. package/scripts/log-monitor.sh +629 -0
  514. package/scripts/manage-agent-workspaces.sh +434 -0
  515. package/scripts/memory-leak-prevention.sh +305 -305
  516. package/scripts/migrate-artifacts.sh +563 -0
  517. package/scripts/migrate-schema.sh +533 -0
  518. package/scripts/migrate-yaml-to-json.sh +465 -0
  519. package/scripts/promote-staged-skills.sh +423 -0
  520. package/scripts/run-marketing-tests.sh +42 -42
  521. package/scripts/update_paths.sh +46 -46
  522. package/scripts/verify-no-secrets.sh +88 -35
  523. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  524. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  525. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  526. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  527. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  528. package/README.md.backup_before_replace +0 -781
  529. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  530. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  531. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  532. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  533. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -1,183 +1,183 @@
1
- #!/bin/bash
2
- # CFN Marketing SMS Campaigns - Create Campaign Operation
3
- # Version: 1.0.0
4
- # Purpose: Create SMS campaign configuration
5
-
6
- set -euo pipefail
7
-
8
- # Parse arguments
9
- NAME=""
10
- MESSAGE=""
11
- AUDIENCE="{}"
12
- SENDER_ID="${SMS_SENDER_ID:-CFN Marketing}"
13
- SCHEDULE=""
14
-
15
- while [[ $# -gt 0 ]]; do
16
- case $1 in
17
- --name)
18
- NAME="$2"
19
- shift 2
20
- ;;
21
- --message)
22
- MESSAGE="$2"
23
- shift 2
24
- ;;
25
- --audience)
26
- AUDIENCE="$2"
27
- shift 2
28
- ;;
29
- --sender-id)
30
- SENDER_ID="$2"
31
- shift 2
32
- ;;
33
- --schedule)
34
- SCHEDULE="$2"
35
- shift 2
36
- ;;
37
- *)
38
- echo '{"error": "Unknown parameter: '$1'", "code": "INVALID_PARAMETER"}' >&2
39
- exit 1
40
- ;;
41
- esac
42
- done
43
-
44
- # Validate required parameters
45
- if [[ -z "$NAME" ]]; then
46
- echo '{"error": "Missing required parameter: --name", "code": "MISSING_PARAMETER"}' >&2
47
- exit 1
48
- fi
49
-
50
- if [[ -z "$MESSAGE" ]]; then
51
- echo '{"error": "Missing required parameter: --message", "code": "MISSING_PARAMETER"}' >&2
52
- exit 1
53
- fi
54
-
55
- if [[ -z "$AUDIENCE" || "$AUDIENCE" == "{}" ]]; then
56
- echo '{"error": "Missing required parameter: --audience", "code": "MISSING_PARAMETER"}' >&2
57
- exit 1
58
- fi
59
-
60
- # Validate message length
61
- if [[ ${#MESSAGE} -gt 160 ]]; then
62
- echo '{"error": "Message too long. Maximum 160 characters", "code": "MESSAGE_TOO_LONG", "length": '${#MESSAGE}'}' >&2
63
- exit 1
64
- fi
65
-
66
- # Ensure opt-out instructions included (TCPA requirement)
67
- if ! echo "$MESSAGE" | grep -qiE 'STOP|opt.*out|unsubscribe'; then
68
- echo '{"error": "Message must include opt-out instructions (TCPA requirement)", "code": "MISSING_OPT_OUT", "severity": "critical"}' >&2
69
- exit 3
70
- fi
71
-
72
- # Validate audience JSON
73
- if ! echo "$AUDIENCE" | jq empty 2>/dev/null; then
74
- echo '{"error": "Invalid audience JSON format", "code": "INVALID_AUDIENCE"}' >&2
75
- exit 1
76
- fi
77
-
78
- # Validate environment variables
79
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
80
- echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
81
- exit 2
82
- fi
83
-
84
- if [[ -z "${N8N_API_KEY:-}" ]]; then
85
- echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
86
- exit 2
87
- fi
88
-
89
- # CRITICAL: TCPA Compliance - Verify audience excludes opted-out numbers
90
- EXCLUDE_SEGMENTS=$(echo "$AUDIENCE" | jq -r '.exclude_segments // [] | @json' 2>/dev/null || echo "[]")
91
- if ! echo "$EXCLUDE_SEGMENTS" | grep -q "opted_out"; then
92
- echo '{"error": "Audience must explicitly exclude opted_out segment (TCPA requirement)", "code": "MISSING_EXCLUSION", "severity": "critical"}' >&2
93
- exit 3
94
- fi
95
-
96
- if ! echo "$EXCLUDE_SEGMENTS" | grep -q "dnc"; then
97
- echo '{"error": "Audience must explicitly exclude dnc segment (TCPA requirement)", "code": "MISSING_EXCLUSION", "severity": "critical"}' >&2
98
- exit 3
99
- fi
100
-
101
- # Generate campaign ID
102
- CAMPAIGN_ID="camp_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
103
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
104
-
105
- # Prepare request payload
106
- PAYLOAD=$(jq -n \
107
- --arg campaign_id "$CAMPAIGN_ID" \
108
- --arg name "$NAME" \
109
- --arg message "$MESSAGE" \
110
- --argjson audience "$AUDIENCE" \
111
- --arg sender_id "$SENDER_ID" \
112
- --arg schedule "$SCHEDULE" \
113
- --arg timestamp "$TIMESTAMP" \
114
- '{
115
- campaign_id: $campaign_id,
116
- name: $name,
117
- message: $message,
118
- audience: $audience,
119
- sender_id: $sender_id,
120
- schedule: $schedule,
121
- created_at: $timestamp,
122
- status: "draft",
123
- compliance_verified: true
124
- }')
125
-
126
- # Create campaign via n8n webhook
127
- RESPONSE=$(curl -s -w "\n%{http_code}" \
128
- -X POST \
129
- -H "Content-Type: application/json" \
130
- -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
131
- -d "$PAYLOAD" \
132
- "${N8N_BASE_URL}/webhook/sms/create-campaign" 2>&1) || {
133
- echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
134
- exit 2
135
- }
136
-
137
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
138
- BODY=$(echo "$RESPONSE" | sed '$d')
139
-
140
- # Handle HTTP errors
141
- if [[ "$HTTP_CODE" -ge 400 ]]; then
142
- if [[ "$HTTP_CODE" -eq 401 ]]; then
143
- echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
144
- exit 2
145
- else
146
- ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
147
- echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
148
- exit 2
149
- fi
150
- fi
151
-
152
- # Parse response
153
- if ! echo "$BODY" | jq empty 2>/dev/null; then
154
- echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
155
- exit 2
156
- fi
157
-
158
- # Store campaign metadata in Redis
159
- if command -v redis-cli &> /dev/null; then
160
- redis-cli HMSET "sms:campaign:${CAMPAIGN_ID}" \
161
- name "$NAME" \
162
- message "$MESSAGE" \
163
- created_at "$TIMESTAMP" \
164
- status "draft" \
165
- > /dev/null 2>&1 || true
166
- redis-cli EXPIRE "sms:campaign:${CAMPAIGN_ID}" 2592000 > /dev/null 2>&1 || true
167
- fi
168
-
169
- # Return success response
170
- echo "$BODY" | jq \
171
- --arg campaign_id "$CAMPAIGN_ID" \
172
- --arg name "$NAME" \
173
- --arg timestamp "$TIMESTAMP" \
174
- '{
175
- campaign_id: ($campaign_id),
176
- name: $name,
177
- status: (.status // "draft"),
178
- created_at: $timestamp,
179
- estimated_recipients: (.estimated_recipients // 0),
180
- compliance_cleared: true
181
- }'
182
-
183
- exit 0
1
+ #!/bin/bash
2
+ # CFN Marketing SMS Campaigns - Create Campaign Operation
3
+ # Version: 1.0.0
4
+ # Purpose: Create SMS campaign configuration
5
+
6
+ set -euo pipefail
7
+
8
+ # Parse arguments
9
+ NAME=""
10
+ MESSAGE=""
11
+ AUDIENCE="{}"
12
+ SENDER_ID="${SMS_SENDER_ID:-CFN Marketing}"
13
+ SCHEDULE=""
14
+
15
+ while [[ $# -gt 0 ]]; do
16
+ case $1 in
17
+ --name)
18
+ NAME="$2"
19
+ shift 2
20
+ ;;
21
+ --message)
22
+ MESSAGE="$2"
23
+ shift 2
24
+ ;;
25
+ --audience)
26
+ AUDIENCE="$2"
27
+ shift 2
28
+ ;;
29
+ --sender-id)
30
+ SENDER_ID="$2"
31
+ shift 2
32
+ ;;
33
+ --schedule)
34
+ SCHEDULE="$2"
35
+ shift 2
36
+ ;;
37
+ *)
38
+ echo '{"error": "Unknown parameter: '$1'", "code": "INVALID_PARAMETER"}' >&2
39
+ exit 1
40
+ ;;
41
+ esac
42
+ done
43
+
44
+ # Validate required parameters
45
+ if [[ -z "$NAME" ]]; then
46
+ echo '{"error": "Missing required parameter: --name", "code": "MISSING_PARAMETER"}' >&2
47
+ exit 1
48
+ fi
49
+
50
+ if [[ -z "$MESSAGE" ]]; then
51
+ echo '{"error": "Missing required parameter: --message", "code": "MISSING_PARAMETER"}' >&2
52
+ exit 1
53
+ fi
54
+
55
+ if [[ -z "$AUDIENCE" || "$AUDIENCE" == "{}" ]]; then
56
+ echo '{"error": "Missing required parameter: --audience", "code": "MISSING_PARAMETER"}' >&2
57
+ exit 1
58
+ fi
59
+
60
+ # Validate message length
61
+ if [[ ${#MESSAGE} -gt 160 ]]; then
62
+ echo '{"error": "Message too long. Maximum 160 characters", "code": "MESSAGE_TOO_LONG", "length": '${#MESSAGE}'}' >&2
63
+ exit 1
64
+ fi
65
+
66
+ # Ensure opt-out instructions included (TCPA requirement)
67
+ if ! echo "$MESSAGE" | grep -qiE 'STOP|opt.*out|unsubscribe'; then
68
+ echo '{"error": "Message must include opt-out instructions (TCPA requirement)", "code": "MISSING_OPT_OUT", "severity": "critical"}' >&2
69
+ exit 3
70
+ fi
71
+
72
+ # Validate audience JSON
73
+ if ! echo "$AUDIENCE" | jq empty 2>/dev/null; then
74
+ echo '{"error": "Invalid audience JSON format", "code": "INVALID_AUDIENCE"}' >&2
75
+ exit 1
76
+ fi
77
+
78
+ # Validate environment variables
79
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
80
+ echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
81
+ exit 2
82
+ fi
83
+
84
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
85
+ echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
86
+ exit 2
87
+ fi
88
+
89
+ # CRITICAL: TCPA Compliance - Verify audience excludes opted-out numbers
90
+ EXCLUDE_SEGMENTS=$(echo "$AUDIENCE" | jq -r '.exclude_segments // [] | @json' 2>/dev/null || echo "[]")
91
+ if ! echo "$EXCLUDE_SEGMENTS" | grep -q "opted_out"; then
92
+ echo '{"error": "Audience must explicitly exclude opted_out segment (TCPA requirement)", "code": "MISSING_EXCLUSION", "severity": "critical"}' >&2
93
+ exit 3
94
+ fi
95
+
96
+ if ! echo "$EXCLUDE_SEGMENTS" | grep -q "dnc"; then
97
+ echo '{"error": "Audience must explicitly exclude dnc segment (TCPA requirement)", "code": "MISSING_EXCLUSION", "severity": "critical"}' >&2
98
+ exit 3
99
+ fi
100
+
101
+ # Generate campaign ID
102
+ CAMPAIGN_ID="camp_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
103
+ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
104
+
105
+ # Prepare request payload
106
+ PAYLOAD=$(jq -n \
107
+ --arg campaign_id "$CAMPAIGN_ID" \
108
+ --arg name "$NAME" \
109
+ --arg message "$MESSAGE" \
110
+ --argjson audience "$AUDIENCE" \
111
+ --arg sender_id "$SENDER_ID" \
112
+ --arg schedule "$SCHEDULE" \
113
+ --arg timestamp "$TIMESTAMP" \
114
+ '{
115
+ campaign_id: $campaign_id,
116
+ name: $name,
117
+ message: $message,
118
+ audience: $audience,
119
+ sender_id: $sender_id,
120
+ schedule: $schedule,
121
+ created_at: $timestamp,
122
+ status: "draft",
123
+ compliance_verified: true
124
+ }')
125
+
126
+ # Create campaign via n8n webhook
127
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
128
+ -X POST \
129
+ -H "Content-Type: application/json" \
130
+ -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
131
+ -d "$PAYLOAD" \
132
+ "${N8N_BASE_URL}/webhook/sms/create-campaign" 2>&1) || {
133
+ echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
134
+ exit 2
135
+ }
136
+
137
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
138
+ BODY=$(echo "$RESPONSE" | sed '$d')
139
+
140
+ # Handle HTTP errors
141
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
142
+ if [[ "$HTTP_CODE" -eq 401 ]]; then
143
+ echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
144
+ exit 2
145
+ else
146
+ ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
147
+ echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
148
+ exit 2
149
+ fi
150
+ fi
151
+
152
+ # Parse response
153
+ if ! echo "$BODY" | jq empty 2>/dev/null; then
154
+ echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
155
+ exit 2
156
+ fi
157
+
158
+ # Store campaign metadata in Redis
159
+ if command -v redis-cli &> /dev/null; then
160
+ redis-cli HMSET "sms:campaign:${CAMPAIGN_ID}" \
161
+ name "$NAME" \
162
+ message "$MESSAGE" \
163
+ created_at "$TIMESTAMP" \
164
+ status "draft" \
165
+ > /dev/null 2>&1 || true
166
+ redis-cli EXPIRE "sms:campaign:${CAMPAIGN_ID}" 2592000 > /dev/null 2>&1 || true
167
+ fi
168
+
169
+ # Return success response
170
+ echo "$BODY" | jq \
171
+ --arg campaign_id "$CAMPAIGN_ID" \
172
+ --arg name "$NAME" \
173
+ --arg timestamp "$TIMESTAMP" \
174
+ '{
175
+ campaign_id: ($campaign_id),
176
+ name: $name,
177
+ status: (.status // "draft"),
178
+ created_at: $timestamp,
179
+ estimated_recipients: (.estimated_recipients // 0),
180
+ compliance_cleared: true
181
+ }'
182
+
183
+ exit 0
@@ -1,139 +1,139 @@
1
- #!/bin/bash
2
- # CFN Marketing SMS Campaigns - Get Delivery Status Operation
3
- # Version: 1.0.0
4
- # Purpose: Check SMS delivery status
5
-
6
- set -euo pipefail
7
-
8
- # Parse arguments
9
- MESSAGE_ID=""
10
- PHONE=""
11
- CAMPAIGN_ID=""
12
-
13
- while [[ $# -gt 0 ]]; do
14
- case $1 in
15
- --message-id)
16
- MESSAGE_ID="$2"
17
- shift 2
18
- ;;
19
- --phone)
20
- PHONE="$2"
21
- shift 2
22
- ;;
23
- --campaign-id)
24
- CAMPAIGN_ID="$2"
25
- shift 2
26
- ;;
27
- *)
28
- echo '{"error": "Unknown parameter: '$1'", "code": "INVALID_PARAMETER"}' >&2
29
- exit 1
30
- ;;
31
- esac
32
- done
33
-
34
- # Validate required parameters (at least one must be provided)
35
- if [[ -z "$MESSAGE_ID" && -z "$PHONE" && -z "$CAMPAIGN_ID" ]]; then
36
- echo '{"error": "Missing required parameter: --message-id, --phone, or --campaign-id", "code": "MISSING_PARAMETER"}' >&2
37
- exit 1
38
- fi
39
-
40
- # Validate phone format if provided
41
- if [[ -n "$PHONE" ]] && ! echo "$PHONE" | grep -qE '^\+[1-9][0-9]{1,14}$'; then
42
- echo '{"error": "Invalid phone format. Use E.164 format (+1XXXXXXXXXX)", "code": "INVALID_PHONE"}' >&2
43
- exit 1
44
- fi
45
-
46
- # Validate environment variables
47
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
48
- echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
49
- exit 2
50
- fi
51
-
52
- if [[ -z "${N8N_API_KEY:-}" ]]; then
53
- echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
54
- exit 2
55
- fi
56
-
57
- # Build query parameters
58
- QUERY_PARAMS=""
59
- if [[ -n "$MESSAGE_ID" ]]; then
60
- QUERY_PARAMS="message_id=${MESSAGE_ID}"
61
- fi
62
-
63
- if [[ -n "$PHONE" ]]; then
64
- if [[ -n "$QUERY_PARAMS" ]]; then
65
- QUERY_PARAMS="${QUERY_PARAMS}&phone=${PHONE}"
66
- else
67
- QUERY_PARAMS="phone=${PHONE}"
68
- fi
69
- fi
70
-
71
- if [[ -n "$CAMPAIGN_ID" ]]; then
72
- if [[ -n "$QUERY_PARAMS" ]]; then
73
- QUERY_PARAMS="${QUERY_PARAMS}&campaign_id=${CAMPAIGN_ID}"
74
- else
75
- QUERY_PARAMS="campaign_id=${CAMPAIGN_ID}"
76
- fi
77
- fi
78
-
79
- # Get delivery status via n8n webhook
80
- RESPONSE=$(curl -s -w "\n%{http_code}" \
81
- -X GET \
82
- -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
83
- "${N8N_BASE_URL}/webhook/sms/delivery-status?${QUERY_PARAMS}" 2>&1) || {
84
- echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
85
- exit 2
86
- }
87
-
88
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
89
- BODY=$(echo "$RESPONSE" | sed '$d')
90
-
91
- # Handle HTTP errors
92
- if [[ "$HTTP_CODE" -ge 400 ]]; then
93
- if [[ "$HTTP_CODE" -eq 404 ]]; then
94
- echo '{"error": "Message not found", "code": "MESSAGE_NOT_FOUND", "message_id": "'"$MESSAGE_ID"'"}' >&2
95
- exit 3
96
- elif [[ "$HTTP_CODE" -eq 401 ]]; then
97
- echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
98
- exit 2
99
- else
100
- ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
101
- echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
102
- exit 2
103
- fi
104
- fi
105
-
106
- # Parse response
107
- if ! echo "$BODY" | jq empty 2>/dev/null; then
108
- echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
109
- exit 2
110
- fi
111
-
112
- # Handle bulk status (campaign-level)
113
- if [[ -n "$CAMPAIGN_ID" ]]; then
114
- echo "$BODY" | jq \
115
- --arg campaign_id "$CAMPAIGN_ID" \
116
- '{
117
- campaign_id: $campaign_id,
118
- total_messages: (.total_messages // 0),
119
- delivered: (.delivered // 0),
120
- failed: (.failed // 0),
121
- pending: (.pending // 0),
122
- delivery_rate: (.delivery_rate // 0),
123
- messages: (.messages // [])
124
- }'
125
- else
126
- # Handle single message status
127
- echo "$BODY" | jq \
128
- --arg message_id "$MESSAGE_ID" \
129
- '{
130
- message_id: ($message_id),
131
- phone: (.phone // ""),
132
- status: (.status // "unknown"),
133
- delivered_at: (.delivered_at // null),
134
- carrier: (.carrier // "unknown"),
135
- error: (.error // null)
136
- }'
137
- fi
138
-
139
- exit 0
1
+ #!/bin/bash
2
+ # CFN Marketing SMS Campaigns - Get Delivery Status Operation
3
+ # Version: 1.0.0
4
+ # Purpose: Check SMS delivery status
5
+
6
+ set -euo pipefail
7
+
8
+ # Parse arguments
9
+ MESSAGE_ID=""
10
+ PHONE=""
11
+ CAMPAIGN_ID=""
12
+
13
+ while [[ $# -gt 0 ]]; do
14
+ case $1 in
15
+ --message-id)
16
+ MESSAGE_ID="$2"
17
+ shift 2
18
+ ;;
19
+ --phone)
20
+ PHONE="$2"
21
+ shift 2
22
+ ;;
23
+ --campaign-id)
24
+ CAMPAIGN_ID="$2"
25
+ shift 2
26
+ ;;
27
+ *)
28
+ echo '{"error": "Unknown parameter: '$1'", "code": "INVALID_PARAMETER"}' >&2
29
+ exit 1
30
+ ;;
31
+ esac
32
+ done
33
+
34
+ # Validate required parameters (at least one must be provided)
35
+ if [[ -z "$MESSAGE_ID" && -z "$PHONE" && -z "$CAMPAIGN_ID" ]]; then
36
+ echo '{"error": "Missing required parameter: --message-id, --phone, or --campaign-id", "code": "MISSING_PARAMETER"}' >&2
37
+ exit 1
38
+ fi
39
+
40
+ # Validate phone format if provided
41
+ if [[ -n "$PHONE" ]] && ! echo "$PHONE" | grep -qE '^\+[1-9][0-9]{1,14}$'; then
42
+ echo '{"error": "Invalid phone format. Use E.164 format (+1XXXXXXXXXX)", "code": "INVALID_PHONE"}' >&2
43
+ exit 1
44
+ fi
45
+
46
+ # Validate environment variables
47
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
48
+ echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
49
+ exit 2
50
+ fi
51
+
52
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
53
+ echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
54
+ exit 2
55
+ fi
56
+
57
+ # Build query parameters
58
+ QUERY_PARAMS=""
59
+ if [[ -n "$MESSAGE_ID" ]]; then
60
+ QUERY_PARAMS="message_id=${MESSAGE_ID}"
61
+ fi
62
+
63
+ if [[ -n "$PHONE" ]]; then
64
+ if [[ -n "$QUERY_PARAMS" ]]; then
65
+ QUERY_PARAMS="${QUERY_PARAMS}&phone=${PHONE}"
66
+ else
67
+ QUERY_PARAMS="phone=${PHONE}"
68
+ fi
69
+ fi
70
+
71
+ if [[ -n "$CAMPAIGN_ID" ]]; then
72
+ if [[ -n "$QUERY_PARAMS" ]]; then
73
+ QUERY_PARAMS="${QUERY_PARAMS}&campaign_id=${CAMPAIGN_ID}"
74
+ else
75
+ QUERY_PARAMS="campaign_id=${CAMPAIGN_ID}"
76
+ fi
77
+ fi
78
+
79
+ # Get delivery status via n8n webhook
80
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
81
+ -X GET \
82
+ -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
83
+ "${N8N_BASE_URL}/webhook/sms/delivery-status?${QUERY_PARAMS}" 2>&1) || {
84
+ echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
85
+ exit 2
86
+ }
87
+
88
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
89
+ BODY=$(echo "$RESPONSE" | sed '$d')
90
+
91
+ # Handle HTTP errors
92
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
93
+ if [[ "$HTTP_CODE" -eq 404 ]]; then
94
+ echo '{"error": "Message not found", "code": "MESSAGE_NOT_FOUND", "message_id": "'"$MESSAGE_ID"'"}' >&2
95
+ exit 3
96
+ elif [[ "$HTTP_CODE" -eq 401 ]]; then
97
+ echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
98
+ exit 2
99
+ else
100
+ ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
101
+ echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
102
+ exit 2
103
+ fi
104
+ fi
105
+
106
+ # Parse response
107
+ if ! echo "$BODY" | jq empty 2>/dev/null; then
108
+ echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
109
+ exit 2
110
+ fi
111
+
112
+ # Handle bulk status (campaign-level)
113
+ if [[ -n "$CAMPAIGN_ID" ]]; then
114
+ echo "$BODY" | jq \
115
+ --arg campaign_id "$CAMPAIGN_ID" \
116
+ '{
117
+ campaign_id: $campaign_id,
118
+ total_messages: (.total_messages // 0),
119
+ delivered: (.delivered // 0),
120
+ failed: (.failed // 0),
121
+ pending: (.pending // 0),
122
+ delivery_rate: (.delivery_rate // 0),
123
+ messages: (.messages // [])
124
+ }'
125
+ else
126
+ # Handle single message status
127
+ echo "$BODY" | jq \
128
+ --arg message_id "$MESSAGE_ID" \
129
+ '{
130
+ message_id: ($message_id),
131
+ phone: (.phone // ""),
132
+ status: (.status // "unknown"),
133
+ delivered_at: (.delivered_at // null),
134
+ carrier: (.carrier // "unknown"),
135
+ error: (.error // null)
136
+ }'
137
+ fi
138
+
139
+ exit 0