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,181 +1,181 @@
1
- #!/bin/bash
2
- # CFN Marketing Chatbot Conversations - Schedule Demo Operation
3
- # Version: 1.0.0
4
- # Purpose: Book demo appointment
5
-
6
- set -euo pipefail
7
-
8
- # Parse arguments
9
- VISITOR_ID=""
10
- EMAIL=""
11
- PREFERRED_DATE=""
12
- TIMEZONE=""
13
- NOTES=""
14
-
15
- while [[ $# -gt 0 ]]; do
16
- case $1 in
17
- --visitor-id)
18
- VISITOR_ID="$2"
19
- shift 2
20
- ;;
21
- --email)
22
- EMAIL="$2"
23
- shift 2
24
- ;;
25
- --preferred-date)
26
- PREFERRED_DATE="$2"
27
- shift 2
28
- ;;
29
- --timezone)
30
- TIMEZONE="$2"
31
- shift 2
32
- ;;
33
- --notes)
34
- NOTES="$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 "$VISITOR_ID" ]]; then
46
- echo '{"error": "Missing required parameter: --visitor-id", "code": "MISSING_PARAMETER"}' >&2
47
- exit 1
48
- fi
49
-
50
- if [[ -z "$EMAIL" ]]; then
51
- echo '{"error": "Missing required parameter: --email", "code": "MISSING_PARAMETER"}' >&2
52
- exit 1
53
- fi
54
-
55
- if [[ -z "$PREFERRED_DATE" ]]; then
56
- echo '{"error": "Missing required parameter: --preferred-date", "code": "MISSING_PARAMETER"}' >&2
57
- exit 1
58
- fi
59
-
60
- if [[ -z "$TIMEZONE" ]]; then
61
- echo '{"error": "Missing required parameter: --timezone", "code": "MISSING_PARAMETER"}' >&2
62
- exit 1
63
- fi
64
-
65
- # Validate email format
66
- if ! echo "$EMAIL" | grep -qE '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'; then
67
- echo '{"error": "Invalid email format", "code": "INVALID_EMAIL"}' >&2
68
- exit 1
69
- fi
70
-
71
- # Validate ISO 8601 date format (basic check)
72
- if ! echo "$PREFERRED_DATE" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}'; then
73
- echo '{"error": "Invalid date format. Use ISO 8601 (YYYY-MM-DDTHH:MM:SS)", "code": "INVALID_DATE"}' >&2
74
- exit 1
75
- fi
76
-
77
- # Validate environment variables
78
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
79
- echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
80
- exit 2
81
- fi
82
-
83
- if [[ -z "${N8N_API_KEY:-}" ]]; then
84
- echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
85
- exit 2
86
- fi
87
-
88
- # Check lead qualification status (optional verification)
89
- QUALIFICATION_SCORE=0
90
- if command -v redis-cli &> /dev/null; then
91
- QUALIFICATION_SCORE=$(redis-cli GET "chatbot:qualification:${VISITOR_ID}" 2>/dev/null || echo "0")
92
- fi
93
-
94
- # Warn if scheduling demo for unqualified lead
95
- if [[ "$QUALIFICATION_SCORE" -lt 60 ]] && [[ "$QUALIFICATION_SCORE" -gt 0 ]]; then
96
- echo "Warning: Scheduling demo for potentially unqualified lead (BANT score: $QUALIFICATION_SCORE)" >&2
97
- fi
98
-
99
- # Generate appointment ID
100
- APPOINTMENT_ID="apt_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
101
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
102
-
103
- # Prepare request payload
104
- PAYLOAD=$(jq -n \
105
- --arg visitor_id "$VISITOR_ID" \
106
- --arg email "$EMAIL" \
107
- --arg preferred_date "$PREFERRED_DATE" \
108
- --arg timezone "$TIMEZONE" \
109
- --arg notes "$NOTES" \
110
- --arg appointment_id "$APPOINTMENT_ID" \
111
- --arg timestamp "$TIMESTAMP" \
112
- '{
113
- visitor_id: $visitor_id,
114
- email: $email,
115
- preferred_date: $preferred_date,
116
- timezone: $timezone,
117
- notes: $notes,
118
- appointment_id: $appointment_id,
119
- requested_at: $timestamp
120
- }')
121
-
122
- # Schedule demo via n8n webhook
123
- RESPONSE=$(curl -s -w "\n%{http_code}" \
124
- -X POST \
125
- -H "Content-Type: application/json" \
126
- -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
127
- -d "$PAYLOAD" \
128
- "${N8N_BASE_URL}/webhook/chatbot/schedule-demo" 2>&1) || {
129
- echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
130
- exit 2
131
- }
132
-
133
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
134
- BODY=$(echo "$RESPONSE" | sed '$d')
135
-
136
- # Handle HTTP errors
137
- if [[ "$HTTP_CODE" -ge 400 ]]; then
138
- if [[ "$HTTP_CODE" -eq 404 ]]; then
139
- echo '{"error": "No available slots for preferred date", "code": "NO_AVAILABLE_SLOTS"}' >&2
140
- exit 3
141
- elif [[ "$HTTP_CODE" -eq 401 ]]; then
142
- echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
143
- exit 2
144
- else
145
- ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
146
- echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
147
- exit 2
148
- fi
149
- fi
150
-
151
- # Parse response
152
- if ! echo "$BODY" | jq empty 2>/dev/null; then
153
- echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
154
- exit 2
155
- fi
156
-
157
- # Store appointment in Redis (optional - for tracking)
158
- if command -v redis-cli &> /dev/null; then
159
- redis-cli HMSET "chatbot:appointment:${APPOINTMENT_ID}" \
160
- visitor_id "$VISITOR_ID" \
161
- email "$EMAIL" \
162
- scheduled_at "$PREFERRED_DATE" \
163
- timezone "$TIMEZONE" \
164
- status "scheduled" \
165
- > /dev/null 2>&1 || true
166
- redis-cli EXPIRE "chatbot:appointment:${APPOINTMENT_ID}" 2592000 > /dev/null 2>&1 || true
167
- fi
168
-
169
- # Return success response
170
- echo "$BODY" | jq \
171
- --arg appointment_id "$APPOINTMENT_ID" \
172
- --arg visitor_id "$VISITOR_ID" \
173
- '{
174
- appointment_id: ($appointment_id),
175
- visitor_id: $visitor_id,
176
- scheduled_at: (.scheduled_at // .preferred_date),
177
- calendar_link: (.calendar_link // ""),
178
- confirmation_sent: (.confirmation_sent // true)
179
- }'
180
-
181
- exit 0
1
+ #!/bin/bash
2
+ # CFN Marketing Chatbot Conversations - Schedule Demo Operation
3
+ # Version: 1.0.0
4
+ # Purpose: Book demo appointment
5
+
6
+ set -euo pipefail
7
+
8
+ # Parse arguments
9
+ VISITOR_ID=""
10
+ EMAIL=""
11
+ PREFERRED_DATE=""
12
+ TIMEZONE=""
13
+ NOTES=""
14
+
15
+ while [[ $# -gt 0 ]]; do
16
+ case $1 in
17
+ --visitor-id)
18
+ VISITOR_ID="$2"
19
+ shift 2
20
+ ;;
21
+ --email)
22
+ EMAIL="$2"
23
+ shift 2
24
+ ;;
25
+ --preferred-date)
26
+ PREFERRED_DATE="$2"
27
+ shift 2
28
+ ;;
29
+ --timezone)
30
+ TIMEZONE="$2"
31
+ shift 2
32
+ ;;
33
+ --notes)
34
+ NOTES="$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 "$VISITOR_ID" ]]; then
46
+ echo '{"error": "Missing required parameter: --visitor-id", "code": "MISSING_PARAMETER"}' >&2
47
+ exit 1
48
+ fi
49
+
50
+ if [[ -z "$EMAIL" ]]; then
51
+ echo '{"error": "Missing required parameter: --email", "code": "MISSING_PARAMETER"}' >&2
52
+ exit 1
53
+ fi
54
+
55
+ if [[ -z "$PREFERRED_DATE" ]]; then
56
+ echo '{"error": "Missing required parameter: --preferred-date", "code": "MISSING_PARAMETER"}' >&2
57
+ exit 1
58
+ fi
59
+
60
+ if [[ -z "$TIMEZONE" ]]; then
61
+ echo '{"error": "Missing required parameter: --timezone", "code": "MISSING_PARAMETER"}' >&2
62
+ exit 1
63
+ fi
64
+
65
+ # Validate email format
66
+ if ! echo "$EMAIL" | grep -qE '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$'; then
67
+ echo '{"error": "Invalid email format", "code": "INVALID_EMAIL"}' >&2
68
+ exit 1
69
+ fi
70
+
71
+ # Validate ISO 8601 date format (basic check)
72
+ if ! echo "$PREFERRED_DATE" | grep -qE '^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}'; then
73
+ echo '{"error": "Invalid date format. Use ISO 8601 (YYYY-MM-DDTHH:MM:SS)", "code": "INVALID_DATE"}' >&2
74
+ exit 1
75
+ fi
76
+
77
+ # Validate environment variables
78
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
79
+ echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
80
+ exit 2
81
+ fi
82
+
83
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
84
+ echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
85
+ exit 2
86
+ fi
87
+
88
+ # Check lead qualification status (optional verification)
89
+ QUALIFICATION_SCORE=0
90
+ if command -v redis-cli &> /dev/null; then
91
+ QUALIFICATION_SCORE=$(redis-cli GET "chatbot:qualification:${VISITOR_ID}" 2>/dev/null || echo "0")
92
+ fi
93
+
94
+ # Warn if scheduling demo for unqualified lead
95
+ if [[ "$QUALIFICATION_SCORE" -lt 60 ]] && [[ "$QUALIFICATION_SCORE" -gt 0 ]]; then
96
+ echo "Warning: Scheduling demo for potentially unqualified lead (BANT score: $QUALIFICATION_SCORE)" >&2
97
+ fi
98
+
99
+ # Generate appointment ID
100
+ APPOINTMENT_ID="apt_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
101
+ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
102
+
103
+ # Prepare request payload
104
+ PAYLOAD=$(jq -n \
105
+ --arg visitor_id "$VISITOR_ID" \
106
+ --arg email "$EMAIL" \
107
+ --arg preferred_date "$PREFERRED_DATE" \
108
+ --arg timezone "$TIMEZONE" \
109
+ --arg notes "$NOTES" \
110
+ --arg appointment_id "$APPOINTMENT_ID" \
111
+ --arg timestamp "$TIMESTAMP" \
112
+ '{
113
+ visitor_id: $visitor_id,
114
+ email: $email,
115
+ preferred_date: $preferred_date,
116
+ timezone: $timezone,
117
+ notes: $notes,
118
+ appointment_id: $appointment_id,
119
+ requested_at: $timestamp
120
+ }')
121
+
122
+ # Schedule demo via n8n webhook
123
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
124
+ -X POST \
125
+ -H "Content-Type: application/json" \
126
+ -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
127
+ -d "$PAYLOAD" \
128
+ "${N8N_BASE_URL}/webhook/chatbot/schedule-demo" 2>&1) || {
129
+ echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
130
+ exit 2
131
+ }
132
+
133
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
134
+ BODY=$(echo "$RESPONSE" | sed '$d')
135
+
136
+ # Handle HTTP errors
137
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
138
+ if [[ "$HTTP_CODE" -eq 404 ]]; then
139
+ echo '{"error": "No available slots for preferred date", "code": "NO_AVAILABLE_SLOTS"}' >&2
140
+ exit 3
141
+ elif [[ "$HTTP_CODE" -eq 401 ]]; then
142
+ echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
143
+ exit 2
144
+ else
145
+ ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
146
+ echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
147
+ exit 2
148
+ fi
149
+ fi
150
+
151
+ # Parse response
152
+ if ! echo "$BODY" | jq empty 2>/dev/null; then
153
+ echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
154
+ exit 2
155
+ fi
156
+
157
+ # Store appointment in Redis (optional - for tracking)
158
+ if command -v redis-cli &> /dev/null; then
159
+ redis-cli HMSET "chatbot:appointment:${APPOINTMENT_ID}" \
160
+ visitor_id "$VISITOR_ID" \
161
+ email "$EMAIL" \
162
+ scheduled_at "$PREFERRED_DATE" \
163
+ timezone "$TIMEZONE" \
164
+ status "scheduled" \
165
+ > /dev/null 2>&1 || true
166
+ redis-cli EXPIRE "chatbot:appointment:${APPOINTMENT_ID}" 2592000 > /dev/null 2>&1 || true
167
+ fi
168
+
169
+ # Return success response
170
+ echo "$BODY" | jq \
171
+ --arg appointment_id "$APPOINTMENT_ID" \
172
+ --arg visitor_id "$VISITOR_ID" \
173
+ '{
174
+ appointment_id: ($appointment_id),
175
+ visitor_id: $visitor_id,
176
+ scheduled_at: (.scheduled_at // .preferred_date),
177
+ calendar_link: (.calendar_link // ""),
178
+ confirmation_sent: (.confirmation_sent // true)
179
+ }'
180
+
181
+ exit 0
@@ -1,137 +1,137 @@
1
- #!/bin/bash
2
- # CFN Marketing Chatbot Conversations - Send Message Operation
3
- # Version: 1.0.0
4
- # Purpose: Send chatbot message to visitor
5
-
6
- set -euo pipefail
7
-
8
- # Parse arguments
9
- VISITOR_ID=""
10
- MESSAGE=""
11
- PLATFORM=""
12
- CONTEXT="{}"
13
-
14
- while [[ $# -gt 0 ]]; do
15
- case $1 in
16
- --visitor-id)
17
- VISITOR_ID="$2"
18
- shift 2
19
- ;;
20
- --message)
21
- MESSAGE="$2"
22
- shift 2
23
- ;;
24
- --platform)
25
- PLATFORM="$2"
26
- shift 2
27
- ;;
28
- --context)
29
- CONTEXT="$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 "$VISITOR_ID" ]]; then
41
- echo '{"error": "Missing required parameter: --visitor-id", "code": "MISSING_PARAMETER"}' >&2
42
- exit 1
43
- fi
44
-
45
- if [[ -z "$MESSAGE" ]]; then
46
- echo '{"error": "Missing required parameter: --message", "code": "MISSING_PARAMETER"}' >&2
47
- exit 1
48
- fi
49
-
50
- if [[ -z "$PLATFORM" ]]; then
51
- echo '{"error": "Missing required parameter: --platform", "code": "MISSING_PARAMETER"}' >&2
52
- exit 1
53
- fi
54
-
55
- # Validate platform
56
- if [[ "$PLATFORM" != "intercom" && "$PLATFORM" != "drift" ]]; then
57
- echo '{"error": "Invalid platform. Must be intercom or drift", "code": "INVALID_PLATFORM"}' >&2
58
- exit 1
59
- fi
60
-
61
- # Validate environment variables
62
- if [[ -z "${N8N_BASE_URL:-}" ]]; then
63
- echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
64
- exit 2
65
- fi
66
-
67
- if [[ -z "${N8N_API_KEY:-}" ]]; then
68
- echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
69
- exit 2
70
- fi
71
-
72
- # Prepare request payload
73
- TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
74
- MESSAGE_ID="msg_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
75
-
76
- PAYLOAD=$(jq -n \
77
- --arg visitor_id "$VISITOR_ID" \
78
- --arg message "$MESSAGE" \
79
- --arg platform "$PLATFORM" \
80
- --argjson context "$CONTEXT" \
81
- --arg timestamp "$TIMESTAMP" \
82
- '{
83
- visitor_id: $visitor_id,
84
- message: $message,
85
- platform: $platform,
86
- context: $context,
87
- timestamp: $timestamp
88
- }')
89
-
90
- # Send message via n8n webhook
91
- RESPONSE=$(curl -s -w "\n%{http_code}" \
92
- -X POST \
93
- -H "Content-Type: application/json" \
94
- -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
95
- -d "$PAYLOAD" \
96
- "${N8N_BASE_URL}/webhook/chatbot/send-message" 2>&1) || {
97
- echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
98
- exit 2
99
- }
100
-
101
- HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
102
- BODY=$(echo "$RESPONSE" | sed '$d')
103
-
104
- # Handle HTTP errors
105
- if [[ "$HTTP_CODE" -ge 400 ]]; then
106
- if [[ "$HTTP_CODE" -eq 404 ]]; then
107
- echo '{"error": "Visitor not found", "code": "VISITOR_NOT_FOUND", "visitor_id": "'"$VISITOR_ID"'"}' >&2
108
- exit 3
109
- elif [[ "$HTTP_CODE" -eq 401 ]]; then
110
- echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
111
- exit 2
112
- else
113
- ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
114
- echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
115
- exit 2
116
- fi
117
- fi
118
-
119
- # Parse response
120
- if ! echo "$BODY" | jq empty 2>/dev/null; then
121
- echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
122
- exit 2
123
- fi
124
-
125
- # Return success response
126
- echo "$BODY" | jq \
127
- --arg message_id "$MESSAGE_ID" \
128
- --arg visitor_id "$VISITOR_ID" \
129
- --arg timestamp "$TIMESTAMP" \
130
- '{
131
- message_id: ($message_id),
132
- visitor_id: $visitor_id,
133
- sent_at: $timestamp,
134
- status: (.status // "delivered")
135
- }'
136
-
137
- exit 0
1
+ #!/bin/bash
2
+ # CFN Marketing Chatbot Conversations - Send Message Operation
3
+ # Version: 1.0.0
4
+ # Purpose: Send chatbot message to visitor
5
+
6
+ set -euo pipefail
7
+
8
+ # Parse arguments
9
+ VISITOR_ID=""
10
+ MESSAGE=""
11
+ PLATFORM=""
12
+ CONTEXT="{}"
13
+
14
+ while [[ $# -gt 0 ]]; do
15
+ case $1 in
16
+ --visitor-id)
17
+ VISITOR_ID="$2"
18
+ shift 2
19
+ ;;
20
+ --message)
21
+ MESSAGE="$2"
22
+ shift 2
23
+ ;;
24
+ --platform)
25
+ PLATFORM="$2"
26
+ shift 2
27
+ ;;
28
+ --context)
29
+ CONTEXT="$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 "$VISITOR_ID" ]]; then
41
+ echo '{"error": "Missing required parameter: --visitor-id", "code": "MISSING_PARAMETER"}' >&2
42
+ exit 1
43
+ fi
44
+
45
+ if [[ -z "$MESSAGE" ]]; then
46
+ echo '{"error": "Missing required parameter: --message", "code": "MISSING_PARAMETER"}' >&2
47
+ exit 1
48
+ fi
49
+
50
+ if [[ -z "$PLATFORM" ]]; then
51
+ echo '{"error": "Missing required parameter: --platform", "code": "MISSING_PARAMETER"}' >&2
52
+ exit 1
53
+ fi
54
+
55
+ # Validate platform
56
+ if [[ "$PLATFORM" != "intercom" && "$PLATFORM" != "drift" ]]; then
57
+ echo '{"error": "Invalid platform. Must be intercom or drift", "code": "INVALID_PLATFORM"}' >&2
58
+ exit 1
59
+ fi
60
+
61
+ # Validate environment variables
62
+ if [[ -z "${N8N_BASE_URL:-}" ]]; then
63
+ echo '{"error": "Environment variable N8N_BASE_URL not set", "code": "MISSING_ENV_VAR"}' >&2
64
+ exit 2
65
+ fi
66
+
67
+ if [[ -z "${N8N_API_KEY:-}" ]]; then
68
+ echo '{"error": "Environment variable N8N_API_KEY not set", "code": "MISSING_ENV_VAR"}' >&2
69
+ exit 2
70
+ fi
71
+
72
+ # Prepare request payload
73
+ TIMESTAMP=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
74
+ MESSAGE_ID="msg_$(date +%s)_$(shuf -i 10000-99999 -n 1)"
75
+
76
+ PAYLOAD=$(jq -n \
77
+ --arg visitor_id "$VISITOR_ID" \
78
+ --arg message "$MESSAGE" \
79
+ --arg platform "$PLATFORM" \
80
+ --argjson context "$CONTEXT" \
81
+ --arg timestamp "$TIMESTAMP" \
82
+ '{
83
+ visitor_id: $visitor_id,
84
+ message: $message,
85
+ platform: $platform,
86
+ context: $context,
87
+ timestamp: $timestamp
88
+ }')
89
+
90
+ # Send message via n8n webhook
91
+ RESPONSE=$(curl -s -w "\n%{http_code}" \
92
+ -X POST \
93
+ -H "Content-Type: application/json" \
94
+ -H "X-N8N-API-KEY: ${N8N_API_KEY}" \
95
+ -d "$PAYLOAD" \
96
+ "${N8N_BASE_URL}/webhook/chatbot/send-message" 2>&1) || {
97
+ echo '{"error": "Network error: Failed to connect to n8n", "code": "NETWORK_ERROR"}' >&2
98
+ exit 2
99
+ }
100
+
101
+ HTTP_CODE=$(echo "$RESPONSE" | tail -n1)
102
+ BODY=$(echo "$RESPONSE" | sed '$d')
103
+
104
+ # Handle HTTP errors
105
+ if [[ "$HTTP_CODE" -ge 400 ]]; then
106
+ if [[ "$HTTP_CODE" -eq 404 ]]; then
107
+ echo '{"error": "Visitor not found", "code": "VISITOR_NOT_FOUND", "visitor_id": "'"$VISITOR_ID"'"}' >&2
108
+ exit 3
109
+ elif [[ "$HTTP_CODE" -eq 401 ]]; then
110
+ echo '{"error": "Authentication failed", "code": "AUTH_ERROR"}' >&2
111
+ exit 2
112
+ else
113
+ ERROR_MSG=$(echo "$BODY" | jq -r '.error // "Unknown API error"' 2>/dev/null || echo "Unknown API error")
114
+ echo '{"error": "'"$ERROR_MSG"'", "code": "API_ERROR", "http_code": '$HTTP_CODE'}' >&2
115
+ exit 2
116
+ fi
117
+ fi
118
+
119
+ # Parse response
120
+ if ! echo "$BODY" | jq empty 2>/dev/null; then
121
+ echo '{"error": "Invalid JSON response from API", "code": "INVALID_RESPONSE"}' >&2
122
+ exit 2
123
+ fi
124
+
125
+ # Return success response
126
+ echo "$BODY" | jq \
127
+ --arg message_id "$MESSAGE_ID" \
128
+ --arg visitor_id "$VISITOR_ID" \
129
+ --arg timestamp "$TIMESTAMP" \
130
+ '{
131
+ message_id: ($message_id),
132
+ visitor_id: $visitor_id,
133
+ sent_at: $timestamp,
134
+ status: (.status // "delivered")
135
+ }'
136
+
137
+ exit 0