claude-flow-novice 2.15.3 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (461) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/agent-loader.js +146 -165
  246. package/dist/agents/agent-loader.js.map +1 -1
  247. package/dist/agents/task-agent-integration.js +1 -1
  248. package/dist/agents/task-agent-integration.js.map +1 -1
  249. package/dist/api/health-endpoints.js +390 -0
  250. package/dist/api/health-endpoints.js.map +1 -0
  251. package/dist/cli/agent-executor.js +4 -1
  252. package/dist/cli/agent-executor.js.map +1 -1
  253. package/dist/cli/agent-prompt-builder.js +89 -1
  254. package/dist/cli/agent-prompt-builder.js.map +1 -1
  255. package/dist/cli/agent-spawn.js +130 -37
  256. package/dist/cli/agent-spawn.js.map +1 -1
  257. package/dist/cli/skill-cache-validator.js +412 -0
  258. package/dist/cli/skill-cache-validator.js.map +1 -0
  259. package/dist/cli/skill-cli.js +991 -0
  260. package/dist/cli/skill-cli.js.map +1 -0
  261. package/dist/cli/skill-execution-logger.js +284 -0
  262. package/dist/cli/skill-execution-logger.js.map +1 -0
  263. package/dist/cli/skill-loader.js +457 -0
  264. package/dist/cli/skill-loader.js.map +1 -0
  265. package/dist/coordination/event-bus.js +2 -2
  266. package/dist/coordination/event-bus.js.map +1 -1
  267. package/dist/coordination/fleet-manager.js +1 -1
  268. package/dist/coordination/fleet-manager.js.map +1 -1
  269. package/dist/coordination/index.js +23 -9
  270. package/dist/coordination/index.js.map +1 -1
  271. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  272. package/dist/db/migration-manager.js +483 -0
  273. package/dist/db/migration-manager.js.map +1 -0
  274. package/dist/db/skills-query.js +535 -0
  275. package/dist/db/skills-query.js.map +1 -0
  276. package/dist/integration/DatabaseHandoff.js +1 -1
  277. package/dist/integration/DatabaseHandoff.js.map +1 -1
  278. package/dist/jobs/edge-case-analyzer.js +367 -0
  279. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  280. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  281. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  282. package/dist/lib/agent-output-parser.js.map +1 -1
  283. package/dist/lib/agent-output-validator.js.map +1 -1
  284. package/dist/lib/agent-workspace.js +281 -0
  285. package/dist/lib/agent-workspace.js.map +1 -0
  286. package/dist/lib/atomic-file-writer.js +377 -0
  287. package/dist/lib/atomic-file-writer.js.map +1 -0
  288. package/dist/lib/backup-manager.js +779 -0
  289. package/dist/lib/backup-manager.js.map +1 -0
  290. package/dist/lib/checkpoint-manager.js +837 -0
  291. package/dist/lib/checkpoint-manager.js.map +1 -0
  292. package/dist/lib/circuit-breaker.js +340 -0
  293. package/dist/lib/circuit-breaker.js.map +1 -0
  294. package/dist/lib/completion-signal-handler.js +243 -0
  295. package/dist/lib/completion-signal-handler.js.map +1 -0
  296. package/dist/lib/config-manager.js +312 -0
  297. package/dist/lib/config-manager.js.map +1 -0
  298. package/dist/lib/config-migrator.js +386 -0
  299. package/dist/lib/config-migrator.js.map +1 -0
  300. package/dist/lib/config-validator.js.map +1 -1
  301. package/dist/lib/correlation-cache.js +311 -0
  302. package/dist/lib/correlation-cache.js.map +1 -0
  303. package/dist/lib/correlation.js +263 -0
  304. package/dist/lib/correlation.js.map +1 -0
  305. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  306. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  307. package/dist/lib/database-service/correlation.js +329 -0
  308. package/dist/lib/database-service/correlation.js.map +1 -0
  309. package/dist/lib/database-service/errors.js +120 -0
  310. package/dist/lib/database-service/errors.js.map +1 -0
  311. package/dist/lib/database-service/index.js +168 -0
  312. package/dist/lib/database-service/index.js.map +1 -0
  313. package/dist/lib/database-service/postgres-adapter.js +526 -0
  314. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  315. package/dist/lib/database-service/redis-adapter.js +360 -0
  316. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  317. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  318. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  319. package/dist/lib/database-service/transaction-manager.js +773 -0
  320. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  321. package/dist/lib/database-service/types.js +23 -0
  322. package/dist/lib/database-service/types.js.map +1 -0
  323. package/dist/lib/deadlock-resolver.js +292 -0
  324. package/dist/lib/deadlock-resolver.js.map +1 -0
  325. package/dist/lib/distributed-lock.js +451 -0
  326. package/dist/lib/distributed-lock.js.map +1 -0
  327. package/dist/lib/edge-case-deduplicator.js +227 -0
  328. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  329. package/dist/lib/encryption-manager.js +322 -0
  330. package/dist/lib/encryption-manager.js.map +1 -0
  331. package/dist/lib/error-aggregator.js +234 -0
  332. package/dist/lib/error-aggregator.js.map +1 -0
  333. package/dist/lib/errors.js +287 -0
  334. package/dist/lib/errors.js.map +1 -0
  335. package/dist/lib/file-lock-manager.js +578 -0
  336. package/dist/lib/file-lock-manager.js.map +1 -0
  337. package/dist/lib/file-operations.js +367 -0
  338. package/dist/lib/file-operations.js.map +1 -0
  339. package/dist/lib/idempotent-write.js +237 -0
  340. package/dist/lib/idempotent-write.js.map +1 -0
  341. package/dist/lib/integration-schema-validator.js +522 -0
  342. package/dist/lib/integration-schema-validator.js.map +1 -0
  343. package/dist/lib/lock-health-monitor.js +298 -0
  344. package/dist/lib/lock-health-monitor.js.map +1 -0
  345. package/dist/lib/log-shipper.js +422 -0
  346. package/dist/lib/log-shipper.js.map +1 -0
  347. package/dist/lib/logging.js +146 -0
  348. package/dist/lib/logging.js.map +1 -0
  349. package/dist/lib/message-deduplicator.js +439 -0
  350. package/dist/lib/message-deduplicator.js.map +1 -0
  351. package/dist/lib/multi-system-query.js +604 -0
  352. package/dist/lib/multi-system-query.js.map +1 -0
  353. package/dist/lib/orphan-detector.js +332 -0
  354. package/dist/lib/orphan-detector.js.map +1 -0
  355. package/dist/lib/password-generator.js +166 -0
  356. package/dist/lib/password-generator.js.map +1 -0
  357. package/dist/lib/path-validator.js +429 -0
  358. package/dist/lib/path-validator.js.map +1 -0
  359. package/dist/lib/query-translator.js +905 -0
  360. package/dist/lib/query-translator.js.map +1 -0
  361. package/dist/lib/queue-recovery.js +469 -0
  362. package/dist/lib/queue-recovery.js.map +1 -0
  363. package/dist/lib/redis-queue-manager.js +512 -0
  364. package/dist/lib/redis-queue-manager.js.map +1 -0
  365. package/dist/lib/reflection-archiver.js +272 -0
  366. package/dist/lib/reflection-archiver.js.map +1 -0
  367. package/dist/lib/retry-manager.js +453 -0
  368. package/dist/lib/retry-manager.js.map +1 -0
  369. package/dist/lib/retry.js +262 -0
  370. package/dist/lib/retry.js.map +1 -0
  371. package/dist/lib/schema-transform.js +695 -0
  372. package/dist/lib/schema-transform.js.map +1 -0
  373. package/dist/lib/schema-validator.js +491 -0
  374. package/dist/lib/schema-validator.js.map +1 -0
  375. package/dist/lib/skill-cache.js +297 -0
  376. package/dist/lib/skill-cache.js.map +1 -0
  377. package/dist/lib/skill-content-manager.js +337 -0
  378. package/dist/lib/skill-content-manager.js.map +1 -0
  379. package/dist/lib/skill-frontmatter-parser.js +237 -0
  380. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  381. package/dist/lib/skill-git-integration.js +275 -0
  382. package/dist/lib/skill-git-integration.js.map +1 -0
  383. package/dist/lib/skill-markdown-validator.js +396 -0
  384. package/dist/lib/skill-markdown-validator.js.map +1 -0
  385. package/dist/lib/skill-output-parser.js +312 -0
  386. package/dist/lib/skill-output-parser.js.map +1 -0
  387. package/dist/lib/unified-query-api.js +467 -0
  388. package/dist/lib/unified-query-api.js.map +1 -0
  389. package/dist/middleware/auth-middleware.js +350 -0
  390. package/dist/middleware/auth-middleware.js.map +1 -0
  391. package/dist/middleware/schema-validation.js +347 -0
  392. package/dist/middleware/schema-validation.js.map +1 -0
  393. package/dist/providers/anthropic-provider.js +1 -1
  394. package/dist/providers/anthropic-provider.js.map +1 -1
  395. package/dist/providers/provider-factory.js +2 -2
  396. package/dist/providers/provider-factory.js.map +1 -1
  397. package/dist/services/edge-case-analyzer.js +321 -0
  398. package/dist/services/edge-case-analyzer.js.map +1 -0
  399. package/dist/services/edge-case-deduplicator.js +266 -0
  400. package/dist/services/edge-case-deduplicator.js.map +1 -0
  401. package/dist/services/edge-case-detector.js +337 -0
  402. package/dist/services/edge-case-detector.js.map +1 -0
  403. package/dist/services/edge-case-tracker.js +547 -0
  404. package/dist/services/edge-case-tracker.js.map +1 -0
  405. package/dist/services/health-check-system.js +586 -0
  406. package/dist/services/health-check-system.js.map +1 -0
  407. package/dist/services/metrics-logger.js +412 -0
  408. package/dist/services/metrics-logger.js.map +1 -0
  409. package/dist/services/patch-generator.js +378 -0
  410. package/dist/services/patch-generator.js.map +1 -0
  411. package/dist/services/patch-validator.js +337 -0
  412. package/dist/services/patch-validator.js.map +1 -0
  413. package/dist/services/performance-monitor.js +811 -0
  414. package/dist/services/performance-monitor.js.map +1 -0
  415. package/dist/services/promotion-pipeline.js +918 -0
  416. package/dist/services/promotion-pipeline.js.map +1 -0
  417. package/dist/services/promotion-validator.js +394 -0
  418. package/dist/services/promotion-validator.js.map +1 -0
  419. package/dist/services/reflection-logger.js +388 -0
  420. package/dist/services/reflection-logger.js.map +1 -0
  421. package/dist/services/skill-deployment.js +472 -0
  422. package/dist/services/skill-deployment.js.map +1 -0
  423. package/dist/services/skill-loader.js +427 -0
  424. package/dist/services/skill-loader.js.map +1 -0
  425. package/dist/services/skill-promotion.js +372 -0
  426. package/dist/services/skill-promotion.js.map +1 -0
  427. package/dist/services/skill-validator.js +454 -0
  428. package/dist/services/skill-validator.js.map +1 -0
  429. package/dist/services/skill-versioning.js +244 -0
  430. package/dist/services/skill-versioning.js.map +1 -0
  431. package/dist/services/workspace-supervisor.js +597 -0
  432. package/dist/services/workspace-supervisor.js.map +1 -0
  433. package/dist/types/edge-case.js +45 -0
  434. package/dist/types/edge-case.js.map +1 -0
  435. package/package.json +201 -177
  436. package/readme/README.md +19 -4
  437. package/scripts/backup-cleanup.sh +627 -0
  438. package/scripts/cleanup-workspaces.sh +412 -0
  439. package/scripts/cleanup-yaml-configs.sh +141 -0
  440. package/scripts/deploy-approved-skills.sh +263 -0
  441. package/scripts/health-check.sh +447 -0
  442. package/scripts/log-aggregator.sh +554 -0
  443. package/scripts/log-monitor.sh +629 -0
  444. package/scripts/manage-agent-workspaces.sh +434 -0
  445. package/scripts/migrate-schema.sh +533 -0
  446. package/scripts/promote-staged-skills.sh +423 -0
  447. package/scripts/verify-no-secrets.sh +88 -35
  448. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  449. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  450. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  451. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  452. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  453. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  454. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  455. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  456. package/README.md.backup_before_replace +0 -781
  457. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  458. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  459. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  460. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  461. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -1,181 +1,181 @@
1
- #!/bin/bash
2
- # CFN Marketing Ad Campaigns - Set Budget Operation
3
- # Updates campaign budget with validation
4
-
5
- set -euo pipefail
6
-
7
- # Budget limits (hard-coded)
8
- DAILY_MIN=1
9
- DAILY_MAX=500
10
- LIFETIME_MIN=10
11
- LIFETIME_MAX=5000
12
-
13
- # Initialize optional parameters
14
- DAILY_BUDGET=""
15
- LIFETIME_BUDGET=""
16
-
17
- # Parse arguments
18
- while [[ $# -gt 0 ]]; do
19
- case $1 in
20
- --campaign-id)
21
- CAMPAIGN_ID="$2"
22
- shift 2
23
- ;;
24
- --daily-budget)
25
- DAILY_BUDGET="$2"
26
- shift 2
27
- ;;
28
- --lifetime-budget)
29
- LIFETIME_BUDGET="$2"
30
- shift 2
31
- ;;
32
- *)
33
- echo '{"error": "Unknown parameter: '"$1"'", "code": "INVALID_PARAMETER"}' >&2
34
- exit 1
35
- ;;
36
- esac
37
- done
38
-
39
- # Validate required parameters
40
- if [[ -z "${CAMPAIGN_ID:-}" ]]; then
41
- echo '{"error": "Missing required parameter: --campaign-id", "code": "MISSING_PARAMETER"}' >&2
42
- exit 1
43
- fi
44
-
45
- if [[ -z "$DAILY_BUDGET" ]] && [[ -z "$LIFETIME_BUDGET" ]]; then
46
- echo '{"error": "At least one budget parameter required (--daily-budget or --lifetime-budget)", "code": "MISSING_PARAMETER"}' >&2
47
- exit 1
48
- fi
49
-
50
- # Validate daily budget if provided
51
- if [[ -n "$DAILY_BUDGET" ]]; then
52
- if (( $(echo "$DAILY_BUDGET < $DAILY_MIN" | bc -l) )); then
53
- echo '{"error": "Daily budget below minimum ($'"$DAILY_MIN"')", "code": "BUDGET_TOO_LOW", "details": {"field": "daily_budget", "min": '"$DAILY_MIN"', "provided": '"$DAILY_BUDGET"'}}' >&2
54
- exit 3
55
- fi
56
-
57
- if (( $(echo "$DAILY_BUDGET > $DAILY_MAX" | bc -l) )); then
58
- echo '{"error": "Daily budget exceeds maximum ($'"$DAILY_MAX"')", "code": "BUDGET_EXCEEDED", "details": {"field": "daily_budget", "max": '"$DAILY_MAX"', "provided": '"$DAILY_BUDGET"'}}' >&2
59
- exit 3
60
- fi
61
- fi
62
-
63
- # Validate lifetime budget if provided
64
- if [[ -n "$LIFETIME_BUDGET" ]]; then
65
- if (( $(echo "$LIFETIME_BUDGET < $LIFETIME_MIN" | bc -l) )); then
66
- echo '{"error": "Lifetime budget below minimum ($'"$LIFETIME_MIN"')", "code": "BUDGET_TOO_LOW", "details": {"field": "lifetime_budget", "min": '"$LIFETIME_MIN"', "provided": '"$LIFETIME_BUDGET"'}}' >&2
67
- exit 3
68
- fi
69
-
70
- if (( $(echo "$LIFETIME_BUDGET > $LIFETIME_MAX" | bc -l) )); then
71
- echo '{"error": "Lifetime budget exceeds maximum ($'"$LIFETIME_MAX"')", "code": "BUDGET_EXCEEDED", "details": {"field": "lifetime_budget", "max": '"$LIFETIME_MAX"', "provided": '"$LIFETIME_BUDGET"'}}' >&2
72
- exit 3
73
- fi
74
- fi
75
-
76
- # Validate environment variables
77
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
78
- echo '{"error": "N8N_BASE_URL environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
79
- exit 2
80
- fi
81
-
82
- if [[ -z "${N8N_API_KEY:-}" ]]; then
83
- echo '{"error": "N8N_API_KEY environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
84
- exit 2
85
- fi
86
-
87
- # Build request payload
88
- if [[ -n "$DAILY_BUDGET" ]] && [[ -n "$LIFETIME_BUDGET" ]]; then
89
- PAYLOAD=$(jq -n \
90
- --arg id "$CAMPAIGN_ID" \
91
- --argjson daily "$DAILY_BUDGET" \
92
- --argjson lifetime "$LIFETIME_BUDGET" \
93
- '{
94
- campaign_id: $id,
95
- daily_budget: $daily,
96
- lifetime_budget: $lifetime
97
- }'
98
- )
99
- elif [[ -n "$DAILY_BUDGET" ]]; then
100
- PAYLOAD=$(jq -n \
101
- --arg id "$CAMPAIGN_ID" \
102
- --argjson daily "$DAILY_BUDGET" \
103
- '{
104
- campaign_id: $id,
105
- daily_budget: $daily
106
- }'
107
- )
108
- else
109
- PAYLOAD=$(jq -n \
110
- --arg id "$CAMPAIGN_ID" \
111
- --argjson lifetime "$LIFETIME_BUDGET" \
112
- '{
113
- campaign_id: $id,
114
- lifetime_budget: $lifetime
115
- }'
116
- )
117
- fi
118
-
119
- # Make API request
120
- RESPONSE=$(curl -s -w "\n%{http_code}" \
121
- -X PATCH \
122
- -H "Content-Type: application/json" \
123
- -H "X-N8N-API-KEY: $N8N_API_KEY" \
124
- -d "$PAYLOAD" \
125
- "$N8N_BASE_URL/webhook/ad-campaigns/budget" 2>/dev/null || echo -e "\n000")
126
-
127
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
128
- BODY=$(echo "$RESPONSE" | sed '$d')
129
-
130
- # Handle response
131
- case "$HTTP_CODE" in
132
- 200)
133
- # Success - parse and format response
134
- echo "$BODY" | jq \
135
- --arg id "$CAMPAIGN_ID" \
136
- '{
137
- campaign_id: (.campaign_id // $id),
138
- daily_budget: (if .daily_budget then {
139
- previous: .daily_budget.previous,
140
- updated: .daily_budget.updated
141
- } else null end),
142
- lifetime_budget: (if .lifetime_budget then {
143
- previous: .lifetime_budget.previous,
144
- updated: .lifetime_budget.updated
145
- } else null end),
146
- budget_remaining: .budget_remaining,
147
- current_spend: .current_spend
148
- }'
149
- exit 0
150
- ;;
151
- 400)
152
- # Check if error is due to budget constraint
153
- if echo "$BODY" | jq -e '.code == "BUDGET_BELOW_SPEND"' >/dev/null 2>&1; then
154
- CURRENT_SPEND=$(echo "$BODY" | jq -r '.current_spend // "unknown"')
155
- echo '{"error": "Cannot reduce lifetime budget below current spend ($'"$CURRENT_SPEND"')", "code": "BUDGET_CONSTRAINT_VIOLATION", "details": '"${BODY:-null}"'}' >&2
156
- exit 3
157
- fi
158
- echo '{"error": "Bad request - invalid budget parameters", "code": "API_BAD_REQUEST", "details": '"${BODY:-null}"'}' >&2
159
- exit 2
160
- ;;
161
- 401)
162
- echo '{"error": "Authentication failed - check N8N_API_KEY", "code": "API_AUTH_FAILED"}' >&2
163
- exit 2
164
- ;;
165
- 404)
166
- echo '{"error": "Campaign not found: '"$CAMPAIGN_ID"'", "code": "CAMPAIGN_NOT_FOUND"}' >&2
167
- exit 1
168
- ;;
169
- 429)
170
- echo '{"error": "Rate limit exceeded - try again later", "code": "API_RATE_LIMIT"}' >&2
171
- exit 2
172
- ;;
173
- 000)
174
- echo '{"error": "Network error - unable to reach N8N instance", "code": "NETWORK_ERROR"}' >&2
175
- exit 2
176
- ;;
177
- *)
178
- echo '{"error": "Unexpected API response", "code": "API_ERROR", "http_code": '"$HTTP_CODE"', "details": '"${BODY:-null}"'}' >&2
179
- exit 2
180
- ;;
181
- esac
1
+ #!/bin/bash
2
+ # CFN Marketing Ad Campaigns - Set Budget Operation
3
+ # Updates campaign budget with validation
4
+
5
+ set -euo pipefail
6
+
7
+ # Budget limits (hard-coded)
8
+ DAILY_MIN=1
9
+ DAILY_MAX=500
10
+ LIFETIME_MIN=10
11
+ LIFETIME_MAX=5000
12
+
13
+ # Initialize optional parameters
14
+ DAILY_BUDGET=""
15
+ LIFETIME_BUDGET=""
16
+
17
+ # Parse arguments
18
+ while [[ $# -gt 0 ]]; do
19
+ case $1 in
20
+ --campaign-id)
21
+ CAMPAIGN_ID="$2"
22
+ shift 2
23
+ ;;
24
+ --daily-budget)
25
+ DAILY_BUDGET="$2"
26
+ shift 2
27
+ ;;
28
+ --lifetime-budget)
29
+ LIFETIME_BUDGET="$2"
30
+ shift 2
31
+ ;;
32
+ *)
33
+ echo '{"error": "Unknown parameter: '"$1"'", "code": "INVALID_PARAMETER"}' >&2
34
+ exit 1
35
+ ;;
36
+ esac
37
+ done
38
+
39
+ # Validate required parameters
40
+ if [[ -z "${CAMPAIGN_ID:-}" ]]; then
41
+ echo '{"error": "Missing required parameter: --campaign-id", "code": "MISSING_PARAMETER"}' >&2
42
+ exit 1
43
+ fi
44
+
45
+ if [[ -z "$DAILY_BUDGET" ]] && [[ -z "$LIFETIME_BUDGET" ]]; then
46
+ echo '{"error": "At least one budget parameter required (--daily-budget or --lifetime-budget)", "code": "MISSING_PARAMETER"}' >&2
47
+ exit 1
48
+ fi
49
+
50
+ # Validate daily budget if provided
51
+ if [[ -n "$DAILY_BUDGET" ]]; then
52
+ if (( $(echo "$DAILY_BUDGET < $DAILY_MIN" | bc -l) )); then
53
+ echo '{"error": "Daily budget below minimum ($'"$DAILY_MIN"')", "code": "BUDGET_TOO_LOW", "details": {"field": "daily_budget", "min": '"$DAILY_MIN"', "provided": '"$DAILY_BUDGET"'}}' >&2
54
+ exit 3
55
+ fi
56
+
57
+ if (( $(echo "$DAILY_BUDGET > $DAILY_MAX" | bc -l) )); then
58
+ echo '{"error": "Daily budget exceeds maximum ($'"$DAILY_MAX"')", "code": "BUDGET_EXCEEDED", "details": {"field": "daily_budget", "max": '"$DAILY_MAX"', "provided": '"$DAILY_BUDGET"'}}' >&2
59
+ exit 3
60
+ fi
61
+ fi
62
+
63
+ # Validate lifetime budget if provided
64
+ if [[ -n "$LIFETIME_BUDGET" ]]; then
65
+ if (( $(echo "$LIFETIME_BUDGET < $LIFETIME_MIN" | bc -l) )); then
66
+ echo '{"error": "Lifetime budget below minimum ($'"$LIFETIME_MIN"')", "code": "BUDGET_TOO_LOW", "details": {"field": "lifetime_budget", "min": '"$LIFETIME_MIN"', "provided": '"$LIFETIME_BUDGET"'}}' >&2
67
+ exit 3
68
+ fi
69
+
70
+ if (( $(echo "$LIFETIME_BUDGET > $LIFETIME_MAX" | bc -l) )); then
71
+ echo '{"error": "Lifetime budget exceeds maximum ($'"$LIFETIME_MAX"')", "code": "BUDGET_EXCEEDED", "details": {"field": "lifetime_budget", "max": '"$LIFETIME_MAX"', "provided": '"$LIFETIME_BUDGET"'}}' >&2
72
+ exit 3
73
+ fi
74
+ fi
75
+
76
+ # Validate environment variables
77
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
78
+ echo '{"error": "N8N_BASE_URL environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
79
+ exit 2
80
+ fi
81
+
82
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
83
+ echo '{"error": "N8N_API_KEY environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
84
+ exit 2
85
+ fi
86
+
87
+ # Build request payload
88
+ if [[ -n "$DAILY_BUDGET" ]] && [[ -n "$LIFETIME_BUDGET" ]]; then
89
+ PAYLOAD=$(jq -n \
90
+ --arg id "$CAMPAIGN_ID" \
91
+ --argjson daily "$DAILY_BUDGET" \
92
+ --argjson lifetime "$LIFETIME_BUDGET" \
93
+ '{
94
+ campaign_id: $id,
95
+ daily_budget: $daily,
96
+ lifetime_budget: $lifetime
97
+ }'
98
+ )
99
+ elif [[ -n "$DAILY_BUDGET" ]]; then
100
+ PAYLOAD=$(jq -n \
101
+ --arg id "$CAMPAIGN_ID" \
102
+ --argjson daily "$DAILY_BUDGET" \
103
+ '{
104
+ campaign_id: $id,
105
+ daily_budget: $daily
106
+ }'
107
+ )
108
+ else
109
+ PAYLOAD=$(jq -n \
110
+ --arg id "$CAMPAIGN_ID" \
111
+ --argjson lifetime "$LIFETIME_BUDGET" \
112
+ '{
113
+ campaign_id: $id,
114
+ lifetime_budget: $lifetime
115
+ }'
116
+ )
117
+ fi
118
+
119
+ # Make API request
120
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
121
+ -X PATCH \
122
+ -H "Content-Type: application/json" \
123
+ -H "X-N8N-API-KEY: $N8N_API_KEY" \
124
+ -d "$PAYLOAD" \
125
+ "$N8N_BASE_URL/webhook/ad-campaigns/budget" 2>/dev/null || echo -e "\n000")
126
+
127
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
128
+ BODY=$(echo "$RESPONSE" | sed '$d')
129
+
130
+ # Handle response
131
+ case "$HTTP_CODE" in
132
+ 200)
133
+ # Success - parse and format response
134
+ echo "$BODY" | jq \
135
+ --arg id "$CAMPAIGN_ID" \
136
+ '{
137
+ campaign_id: (.campaign_id // $id),
138
+ daily_budget: (if .daily_budget then {
139
+ previous: .daily_budget.previous,
140
+ updated: .daily_budget.updated
141
+ } else null end),
142
+ lifetime_budget: (if .lifetime_budget then {
143
+ previous: .lifetime_budget.previous,
144
+ updated: .lifetime_budget.updated
145
+ } else null end),
146
+ budget_remaining: .budget_remaining,
147
+ current_spend: .current_spend
148
+ }'
149
+ exit 0
150
+ ;;
151
+ 400)
152
+ # Check if error is due to budget constraint
153
+ if echo "$BODY" | jq -e '.code == "BUDGET_BELOW_SPEND"' >/dev/null 2>&1; then
154
+ CURRENT_SPEND=$(echo "$BODY" | jq -r '.current_spend // "unknown"')
155
+ echo '{"error": "Cannot reduce lifetime budget below current spend ($'"$CURRENT_SPEND"')", "code": "BUDGET_CONSTRAINT_VIOLATION", "details": '"${BODY:-null}"'}' >&2
156
+ exit 3
157
+ fi
158
+ echo '{"error": "Bad request - invalid budget parameters", "code": "API_BAD_REQUEST", "details": '"${BODY:-null}"'}' >&2
159
+ exit 2
160
+ ;;
161
+ 401)
162
+ echo '{"error": "Authentication failed - check N8N_API_KEY", "code": "API_AUTH_FAILED"}' >&2
163
+ exit 2
164
+ ;;
165
+ 404)
166
+ echo '{"error": "Campaign not found: '"$CAMPAIGN_ID"'", "code": "CAMPAIGN_NOT_FOUND"}' >&2
167
+ exit 1
168
+ ;;
169
+ 429)
170
+ echo '{"error": "Rate limit exceeded - try again later", "code": "API_RATE_LIMIT"}' >&2
171
+ exit 2
172
+ ;;
173
+ 000)
174
+ echo '{"error": "Network error - unable to reach N8N instance", "code": "NETWORK_ERROR"}' >&2
175
+ exit 2
176
+ ;;
177
+ *)
178
+ echo '{"error": "Unexpected API response", "code": "API_ERROR", "http_code": '"$HTTP_CODE"', "details": '"${BODY:-null}"'}' >&2
179
+ exit 2
180
+ ;;
181
+ esac
@@ -1,133 +1,133 @@
1
- #!/bin/bash
2
- # CFN Marketing Ad Campaigns - Update Bid Strategy Operation
3
- # Modifies campaign bidding strategy
4
-
5
- set -euo pipefail
6
-
7
- # Parse arguments
8
- while [[ $# -gt 0 ]]; do
9
- case $1 in
10
- --campaign-id)
11
- CAMPAIGN_ID="$2"
12
- shift 2
13
- ;;
14
- --bid-strategy)
15
- BID_STRATEGY="$2"
16
- shift 2
17
- ;;
18
- *)
19
- echo '{"error": "Unknown parameter: '"$1"'", "code": "INVALID_PARAMETER"}' >&2
20
- exit 1
21
- ;;
22
- esac
23
- done
24
-
25
- # Validate required parameters
26
- if [[ -z "${CAMPAIGN_ID:-}" ]]; then
27
- echo '{"error": "Missing required parameter: --campaign-id", "code": "MISSING_PARAMETER"}' >&2
28
- exit 1
29
- fi
30
-
31
- if [[ -z "${BID_STRATEGY:-}" ]]; then
32
- echo '{"error": "Missing required parameter: --bid-strategy", "code": "MISSING_PARAMETER"}' >&2
33
- exit 1
34
- fi
35
-
36
- # Validate bid strategy
37
- case "$BID_STRATEGY" in
38
- manual_cpc|enhanced_cpc|maximize_conversions|target_cpa|target_roas)
39
- ;;
40
- *)
41
- echo '{"error": "Invalid bid strategy: '"$BID_STRATEGY"'. Supported: manual_cpc, enhanced_cpc, maximize_conversions, target_cpa, target_roas", "code": "INVALID_BID_STRATEGY"}' >&2
42
- exit 1
43
- ;;
44
- esac
45
-
46
- # Validate environment variables
47
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
48
- echo '{"error": "N8N_BASE_URL environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
49
- exit 2
50
- fi
51
-
52
- if [[ -z "${N8N_API_KEY:-}" ]]; then
53
- echo '{"error": "N8N_API_KEY environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
54
- exit 2
55
- fi
56
-
57
- # Build request payload
58
- PAYLOAD=$(jq -n \
59
- --arg id "$CAMPAIGN_ID" \
60
- --arg strategy "$BID_STRATEGY" \
61
- '{
62
- campaign_id: $id,
63
- bid_strategy: $strategy
64
- }'
65
- )
66
-
67
- # Make API request
68
- RESPONSE=$(curl -s -w "\n%{http_code}" \
69
- -X PATCH \
70
- -H "Content-Type: application/json" \
71
- -H "X-N8N-API-KEY: $N8N_API_KEY" \
72
- -d "$PAYLOAD" \
73
- "$N8N_BASE_URL/webhook/ad-campaigns/bid-strategy" 2>/dev/null || echo -e "\n000")
74
-
75
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
76
- BODY=$(echo "$RESPONSE" | sed '$d')
77
-
78
- # Handle response
79
- case "$HTTP_CODE" in
80
- 200)
81
- # Success - parse and format response
82
- echo "$BODY" | jq \
83
- --arg id "$CAMPAIGN_ID" \
84
- --arg strategy "$BID_STRATEGY" \
85
- '{
86
- campaign_id: (.campaign_id // $id),
87
- bid_strategy: {
88
- previous: .bid_strategy.previous,
89
- updated: (.bid_strategy.updated // $strategy)
90
- },
91
- estimated_impact: (if .estimated_impact then {
92
- cpa_change: .estimated_impact.cpa_change,
93
- conversion_volume: .estimated_impact.conversion_volume,
94
- roas_change: .estimated_impact.roas_change
95
- } else {
96
- cpa_change: "calculating",
97
- conversion_volume: "calculating"
98
- } end),
99
- status: (.status // "active"),
100
- updated_at: (.updated_at // (now | strftime("%Y-%m-%dT%H:%M:%SZ")))
101
- }'
102
- exit 0
103
- ;;
104
- 400)
105
- echo '{"error": "Bad request - invalid bid strategy parameters", "code": "API_BAD_REQUEST", "details": '"${BODY:-null}"'}' >&2
106
- exit 2
107
- ;;
108
- 401)
109
- echo '{"error": "Authentication failed - check N8N_API_KEY", "code": "API_AUTH_FAILED"}' >&2
110
- exit 2
111
- ;;
112
- 404)
113
- echo '{"error": "Campaign not found: '"$CAMPAIGN_ID"'", "code": "CAMPAIGN_NOT_FOUND"}' >&2
114
- exit 1
115
- ;;
116
- 409)
117
- # Campaign in state that prevents bid strategy change
118
- echo '{"error": "Cannot change bid strategy - campaign must be active", "code": "INVALID_CAMPAIGN_STATE", "details": '"${BODY:-null}"'}' >&2
119
- exit 1
120
- ;;
121
- 429)
122
- echo '{"error": "Rate limit exceeded - try again later", "code": "API_RATE_LIMIT"}' >&2
123
- exit 2
124
- ;;
125
- 000)
126
- echo '{"error": "Network error - unable to reach N8N instance", "code": "NETWORK_ERROR"}' >&2
127
- exit 2
128
- ;;
129
- *)
130
- echo '{"error": "Unexpected API response", "code": "API_ERROR", "http_code": '"$HTTP_CODE"', "details": '"${BODY:-null}"'}' >&2
131
- exit 2
132
- ;;
133
- esac
1
+ #!/bin/bash
2
+ # CFN Marketing Ad Campaigns - Update Bid Strategy Operation
3
+ # Modifies campaign bidding strategy
4
+
5
+ set -euo pipefail
6
+
7
+ # Parse arguments
8
+ while [[ $# -gt 0 ]]; do
9
+ case $1 in
10
+ --campaign-id)
11
+ CAMPAIGN_ID="$2"
12
+ shift 2
13
+ ;;
14
+ --bid-strategy)
15
+ BID_STRATEGY="$2"
16
+ shift 2
17
+ ;;
18
+ *)
19
+ echo '{"error": "Unknown parameter: '"$1"'", "code": "INVALID_PARAMETER"}' >&2
20
+ exit 1
21
+ ;;
22
+ esac
23
+ done
24
+
25
+ # Validate required parameters
26
+ if [[ -z "${CAMPAIGN_ID:-}" ]]; then
27
+ echo '{"error": "Missing required parameter: --campaign-id", "code": "MISSING_PARAMETER"}' >&2
28
+ exit 1
29
+ fi
30
+
31
+ if [[ -z "${BID_STRATEGY:-}" ]]; then
32
+ echo '{"error": "Missing required parameter: --bid-strategy", "code": "MISSING_PARAMETER"}' >&2
33
+ exit 1
34
+ fi
35
+
36
+ # Validate bid strategy
37
+ case "$BID_STRATEGY" in
38
+ manual_cpc|enhanced_cpc|maximize_conversions|target_cpa|target_roas)
39
+ ;;
40
+ *)
41
+ echo '{"error": "Invalid bid strategy: '"$BID_STRATEGY"'. Supported: manual_cpc, enhanced_cpc, maximize_conversions, target_cpa, target_roas", "code": "INVALID_BID_STRATEGY"}' >&2
42
+ exit 1
43
+ ;;
44
+ esac
45
+
46
+ # Validate environment variables
47
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
48
+ echo '{"error": "N8N_BASE_URL environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
49
+ exit 2
50
+ fi
51
+
52
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
53
+ echo '{"error": "N8N_API_KEY environment variable not set", "code": "MISSING_ENV_VAR"}' >&2
54
+ exit 2
55
+ fi
56
+
57
+ # Build request payload
58
+ PAYLOAD=$(jq -n \
59
+ --arg id "$CAMPAIGN_ID" \
60
+ --arg strategy "$BID_STRATEGY" \
61
+ '{
62
+ campaign_id: $id,
63
+ bid_strategy: $strategy
64
+ }'
65
+ )
66
+
67
+ # Make API request
68
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
69
+ -X PATCH \
70
+ -H "Content-Type: application/json" \
71
+ -H "X-N8N-API-KEY: $N8N_API_KEY" \
72
+ -d "$PAYLOAD" \
73
+ "$N8N_BASE_URL/webhook/ad-campaigns/bid-strategy" 2>/dev/null || echo -e "\n000")
74
+
75
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
76
+ BODY=$(echo "$RESPONSE" | sed '$d')
77
+
78
+ # Handle response
79
+ case "$HTTP_CODE" in
80
+ 200)
81
+ # Success - parse and format response
82
+ echo "$BODY" | jq \
83
+ --arg id "$CAMPAIGN_ID" \
84
+ --arg strategy "$BID_STRATEGY" \
85
+ '{
86
+ campaign_id: (.campaign_id // $id),
87
+ bid_strategy: {
88
+ previous: .bid_strategy.previous,
89
+ updated: (.bid_strategy.updated // $strategy)
90
+ },
91
+ estimated_impact: (if .estimated_impact then {
92
+ cpa_change: .estimated_impact.cpa_change,
93
+ conversion_volume: .estimated_impact.conversion_volume,
94
+ roas_change: .estimated_impact.roas_change
95
+ } else {
96
+ cpa_change: "calculating",
97
+ conversion_volume: "calculating"
98
+ } end),
99
+ status: (.status // "active"),
100
+ updated_at: (.updated_at // (now | strftime("%Y-%m-%dT%H:%M:%SZ")))
101
+ }'
102
+ exit 0
103
+ ;;
104
+ 400)
105
+ echo '{"error": "Bad request - invalid bid strategy parameters", "code": "API_BAD_REQUEST", "details": '"${BODY:-null}"'}' >&2
106
+ exit 2
107
+ ;;
108
+ 401)
109
+ echo '{"error": "Authentication failed - check N8N_API_KEY", "code": "API_AUTH_FAILED"}' >&2
110
+ exit 2
111
+ ;;
112
+ 404)
113
+ echo '{"error": "Campaign not found: '"$CAMPAIGN_ID"'", "code": "CAMPAIGN_NOT_FOUND"}' >&2
114
+ exit 1
115
+ ;;
116
+ 409)
117
+ # Campaign in state that prevents bid strategy change
118
+ echo '{"error": "Cannot change bid strategy - campaign must be active", "code": "INVALID_CAMPAIGN_STATE", "details": '"${BODY:-null}"'}' >&2
119
+ exit 1
120
+ ;;
121
+ 429)
122
+ echo '{"error": "Rate limit exceeded - try again later", "code": "API_RATE_LIMIT"}' >&2
123
+ exit 2
124
+ ;;
125
+ 000)
126
+ echo '{"error": "Network error - unable to reach N8N instance", "code": "NETWORK_ERROR"}' >&2
127
+ exit 2
128
+ ;;
129
+ *)
130
+ echo '{"error": "Unexpected API response", "code": "API_ERROR", "http_code": '"$HTTP_CODE"', "details": '"${BODY:-null}"'}' >&2
131
+ exit 2
132
+ ;;
133
+ esac