claude-flow-novice 2.15.3 → 2.15.5

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 (473) 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 +29 -6
  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 +238 -29
  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 +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -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 +29 -6
  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 +238 -29
  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 +6 -2
  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 +34 -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/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. 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