claude-flow-novice 2.15.2 → 2.15.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (533) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +16 -2
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-BACKUP_USAGE.md +243 -243
  36. package/.claude/hooks/cfn-invoke-security-validation.sh +69 -69
  37. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  38. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  39. package/.claude/hooks/cfn-post-edit.config.json +44 -44
  40. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  41. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  42. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  43. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  44. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  45. package/.claude/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  46. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  47. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  48. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  49. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  50. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  51. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  52. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  53. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  54. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  55. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  56. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  57. package/.claude/skills/cfn-redis-coordination/get-context.sh +145 -112
  58. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  59. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  60. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  61. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  62. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  63. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  64. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  65. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  66. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  67. package/.claude/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  68. package/.claude/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  69. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  70. package/.claude/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  71. package/.claude/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  72. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  73. package/.claude/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  74. package/README.md +116 -475
  75. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  76. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  77. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  78. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  79. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  80. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  81. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  82. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  83. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  84. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  85. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  86. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  87. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  88. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  89. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  90. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  91. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  92. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  93. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  94. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  95. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  96. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  97. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  98. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  99. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  100. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  101. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  102. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  103. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  104. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  105. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  106. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  107. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  108. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  109. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  110. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  111. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  112. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  113. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  114. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  115. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  116. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  117. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  118. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  119. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  120. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  121. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  122. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  123. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  124. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  125. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  126. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  127. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  128. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  129. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  130. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  131. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  137. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  138. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  139. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  140. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  141. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  142. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  143. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  144. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  145. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  146. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  147. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  148. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  149. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  150. package/claude-assets/commands/cfn-loop-cli.md +16 -2
  151. package/claude-assets/commands/switch-api.md +31 -10
  152. package/claude-assets/hooks/cfn-BACKUP_USAGE.md +243 -243
  153. package/claude-assets/hooks/cfn-invoke-security-validation.sh +69 -69
  154. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  155. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +109 -78
  156. package/claude-assets/hooks/cfn-post-edit.config.json +44 -44
  157. package/claude-assets/hooks/cfn-post-execution/memory-cleanup.sh +19 -19
  158. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  159. package/claude-assets/hooks/cfn-pre-execution/memory-check.sh +19 -19
  160. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  161. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  162. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +543 -572
  163. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +57 -30
  164. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  165. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  166. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  167. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  168. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  169. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  170. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  171. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  172. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  173. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  174. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  175. package/claude-assets/skills/cfn-automatic-memory-persistence/persist-agent-output.sh +48 -48
  176. package/claude-assets/skills/cfn-automatic-memory-persistence/query-agent-history.sh +34 -34
  177. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  178. package/claude-assets/skills/cfn-deliverable-validation/confidence-calculator.sh +261 -261
  179. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  180. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  181. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  182. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  183. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  184. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  185. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  186. package/claude-assets/skills/cfn-expert-update/update-expert.sh +345 -345
  187. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  188. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  189. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  190. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  191. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  192. package/claude-assets/skills/cfn-hybrid-routing/check-dependencies.sh +51 -51
  193. package/claude-assets/skills/cfn-intervention-detector/detect-intervention.sh +110 -110
  194. package/claude-assets/skills/cfn-intervention-orchestrator/execute-intervention.sh +58 -58
  195. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  196. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  197. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  198. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  199. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  200. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  201. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  202. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +184 -23
  203. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  204. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  205. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +252 -252
  206. package/claude-assets/skills/cfn-loop2-output-processing/process-validator-output.sh +275 -275
  207. package/claude-assets/skills/cfn-memory-management/check-memory.sh +159 -159
  208. package/claude-assets/skills/cfn-memory-management/cleanup-memory.sh +196 -196
  209. package/claude-assets/skills/cfn-node-heap-sizer/task-mode-heap-limiter.sh +325 -325
  210. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  211. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  212. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  213. package/claude-assets/skills/cfn-playbook-auto-update/auto-update-playbook.sh +85 -85
  214. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  215. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  216. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  217. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  218. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  219. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +74 -74
  220. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  221. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +145 -112
  222. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  223. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +3 -0
  224. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  225. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +33 -0
  226. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  227. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  228. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  229. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  230. package/claude-assets/skills/cfn-scope-simplifier/simplify-scope.sh +67 -67
  231. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  232. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  233. package/claude-assets/skills/cfn-specialist-injection/recommend-specialist.sh +56 -56
  234. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  235. package/claude-assets/skills/cfn-standardized-error-handling/capture-agent-error.sh +86 -86
  236. package/claude-assets/skills/cfn-standardized-error-handling/test-error-handling.sh +165 -165
  237. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  238. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  239. package/claude-assets/skills/cfn-task-config-init/initialize-config.sh +264 -264
  240. package/claude-assets/skills/cfn-task-decomposition/task-decomposer.sh +278 -278
  241. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  242. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  243. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  244. package/claude-assets/skills/cfn-transparency-middleware/middleware-config.sh +28 -28
  245. package/claude-assets/skills/cfn-transparency-middleware/performance-benchmark.sh +78 -78
  246. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  247. package/claude-assets/skills/cfn-transparency-middleware/test-integration.sh +161 -161
  248. package/claude-assets/skills/cfn-transparency-middleware/test-transparency-skill.sh +367 -367
  249. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +107 -92
  250. package/claude-assets/skills/cfn-transparency-middleware/wrap-agent.sh +131 -131
  251. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  252. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  253. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  254. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  255. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  256. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  257. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  258. package/claude-assets/skills/docker-build/SKILL.md +96 -203
  259. package/claude-assets/skills/docker-build/build.sh +73 -73
  260. package/claude-assets/skills/integration/agent-handoff.sh +492 -0
  261. package/claude-assets/skills/integration/file-operations.sh +414 -0
  262. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  263. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  264. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  265. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  266. package/claude-assets/skills/workflow-codification/APPROVAL_WORKFLOW.md +806 -0
  267. package/claude-assets/skills/workflow-codification/COST_TRACKING.md +637 -0
  268. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  269. package/claude-assets/skills/workflow-codification/EDGE_CASE_TRACKING.md +404 -0
  270. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  271. package/claude-assets/skills/workflow-codification/README_PHASE4.md +457 -0
  272. package/claude-assets/skills/workflow-codification/SKILL.md +110 -0
  273. package/claude-assets/skills/workflow-codification/analyze-patterns.sh +899 -0
  274. package/claude-assets/skills/workflow-codification/approval-workflow.sh +514 -0
  275. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  276. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  277. package/claude-assets/skills/workflow-codification/generate-skill-update.sh +525 -0
  278. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  279. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  280. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  281. package/claude-assets/skills/workflow-codification/review-skill.sh +643 -0
  282. package/claude-assets/skills/workflow-codification/templates/email-notification.txt +114 -0
  283. package/claude-assets/skills/workflow-codification/templates/slack-notification.md +85 -0
  284. package/claude-assets/skills/workflow-codification/test-integration.sh +296 -0
  285. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  286. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +486 -0
  287. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  288. package/claude-assets/skills/workflow-codification/track-edge-case.sh +290 -0
  289. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  290. package/dist/ace/ace-curator.js +10 -2
  291. package/dist/ace/ace-curator.js.map +1 -1
  292. package/dist/ace/ace-generator.js +4 -0
  293. package/dist/ace/ace-generator.js.map +1 -1
  294. package/dist/ace/ace-reflector.js +1 -1
  295. package/dist/ace/ace-reflector.js.map +1 -1
  296. package/dist/ace/context-injection.js +24 -2
  297. package/dist/ace/context-injection.js.map +1 -1
  298. package/dist/agents/agent-loader.js +146 -165
  299. package/dist/agents/agent-loader.js.map +1 -1
  300. package/dist/agents/task-agent-integration.js +1 -1
  301. package/dist/agents/task-agent-integration.js.map +1 -1
  302. package/dist/api/health-endpoints.js +390 -0
  303. package/dist/api/health-endpoints.js.map +1 -0
  304. package/dist/cli/agent-executor.js +4 -1
  305. package/dist/cli/agent-executor.js.map +1 -1
  306. package/dist/cli/agent-prompt-builder.js +89 -1
  307. package/dist/cli/agent-prompt-builder.js.map +1 -1
  308. package/dist/cli/agent-spawn.js +130 -37
  309. package/dist/cli/agent-spawn.js.map +1 -1
  310. package/dist/cli/config-manager.js +91 -109
  311. package/dist/cli/config-manager.js.map +1 -1
  312. package/dist/cli/skill-cache-validator.js +412 -0
  313. package/dist/cli/skill-cache-validator.js.map +1 -0
  314. package/dist/cli/skill-cli.js +991 -0
  315. package/dist/cli/skill-cli.js.map +1 -0
  316. package/dist/cli/skill-execution-logger.js +284 -0
  317. package/dist/cli/skill-execution-logger.js.map +1 -0
  318. package/dist/cli/skill-loader.js +457 -0
  319. package/dist/cli/skill-loader.js.map +1 -0
  320. package/dist/coordination/event-bus.js +2 -2
  321. package/dist/coordination/event-bus.js.map +1 -1
  322. package/dist/coordination/fleet-manager.js +1 -1
  323. package/dist/coordination/fleet-manager.js.map +1 -1
  324. package/dist/coordination/index.js +23 -9
  325. package/dist/coordination/index.js.map +1 -1
  326. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  327. package/dist/db/migration-manager.js +483 -0
  328. package/dist/db/migration-manager.js.map +1 -0
  329. package/dist/db/skills-query.js +535 -0
  330. package/dist/db/skills-query.js.map +1 -0
  331. package/dist/integration/DatabaseHandoff.js +507 -0
  332. package/dist/integration/DatabaseHandoff.js.map +1 -0
  333. package/dist/integration/StandardAdapter.js +291 -0
  334. package/dist/integration/StandardAdapter.js.map +1 -0
  335. package/dist/jobs/edge-case-analyzer.js +367 -0
  336. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  337. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  338. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  339. package/dist/lib/agent-output-parser.js +518 -0
  340. package/dist/lib/agent-output-parser.js.map +1 -0
  341. package/dist/lib/agent-output-validator.js +950 -0
  342. package/dist/lib/agent-output-validator.js.map +1 -0
  343. package/dist/lib/agent-workspace.js +281 -0
  344. package/dist/lib/agent-workspace.js.map +1 -0
  345. package/dist/lib/artifact-registry.js +443 -0
  346. package/dist/lib/artifact-registry.js.map +1 -0
  347. package/dist/lib/atomic-file-writer.js +377 -0
  348. package/dist/lib/atomic-file-writer.js.map +1 -0
  349. package/dist/lib/backup-manager.js +779 -0
  350. package/dist/lib/backup-manager.js.map +1 -0
  351. package/dist/lib/checkpoint-manager.js +837 -0
  352. package/dist/lib/checkpoint-manager.js.map +1 -0
  353. package/dist/lib/circuit-breaker.js +340 -0
  354. package/dist/lib/circuit-breaker.js.map +1 -0
  355. package/dist/lib/completion-signal-handler.js +243 -0
  356. package/dist/lib/completion-signal-handler.js.map +1 -0
  357. package/dist/lib/config-manager.js +312 -0
  358. package/dist/lib/config-manager.js.map +1 -0
  359. package/dist/lib/config-migrator.js +386 -0
  360. package/dist/lib/config-migrator.js.map +1 -0
  361. package/dist/lib/config-validator.js +687 -0
  362. package/dist/lib/config-validator.js.map +1 -0
  363. package/dist/lib/correlation-cache.js +311 -0
  364. package/dist/lib/correlation-cache.js.map +1 -0
  365. package/dist/lib/correlation.js +263 -0
  366. package/dist/lib/correlation.js.map +1 -0
  367. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  368. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  369. package/dist/lib/database-service/correlation.js +329 -0
  370. package/dist/lib/database-service/correlation.js.map +1 -0
  371. package/dist/lib/database-service/errors.js +120 -0
  372. package/dist/lib/database-service/errors.js.map +1 -0
  373. package/dist/lib/database-service/index.js +168 -0
  374. package/dist/lib/database-service/index.js.map +1 -0
  375. package/dist/lib/database-service/postgres-adapter.js +526 -0
  376. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  377. package/dist/lib/database-service/redis-adapter.js +360 -0
  378. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  379. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  380. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  381. package/dist/lib/database-service/transaction-manager.js +773 -0
  382. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  383. package/dist/lib/database-service/types.js +23 -0
  384. package/dist/lib/database-service/types.js.map +1 -0
  385. package/dist/lib/deadlock-resolver.js +292 -0
  386. package/dist/lib/deadlock-resolver.js.map +1 -0
  387. package/dist/lib/distributed-lock.js +451 -0
  388. package/dist/lib/distributed-lock.js.map +1 -0
  389. package/dist/lib/edge-case-deduplicator.js +227 -0
  390. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  391. package/dist/lib/encryption-manager.js +322 -0
  392. package/dist/lib/encryption-manager.js.map +1 -0
  393. package/dist/lib/error-aggregator.js +234 -0
  394. package/dist/lib/error-aggregator.js.map +1 -0
  395. package/dist/lib/errors.js +287 -0
  396. package/dist/lib/errors.js.map +1 -0
  397. package/dist/lib/file-lock-manager.js +578 -0
  398. package/dist/lib/file-lock-manager.js.map +1 -0
  399. package/dist/lib/file-operations.js +367 -0
  400. package/dist/lib/file-operations.js.map +1 -0
  401. package/dist/lib/idempotent-write.js +237 -0
  402. package/dist/lib/idempotent-write.js.map +1 -0
  403. package/dist/lib/integration-schema-validator.js +522 -0
  404. package/dist/lib/integration-schema-validator.js.map +1 -0
  405. package/dist/lib/lock-health-monitor.js +298 -0
  406. package/dist/lib/lock-health-monitor.js.map +1 -0
  407. package/dist/lib/log-shipper.js +422 -0
  408. package/dist/lib/log-shipper.js.map +1 -0
  409. package/dist/lib/logging.js +146 -0
  410. package/dist/lib/logging.js.map +1 -0
  411. package/dist/lib/message-deduplicator.js +439 -0
  412. package/dist/lib/message-deduplicator.js.map +1 -0
  413. package/dist/lib/multi-system-query.js +604 -0
  414. package/dist/lib/multi-system-query.js.map +1 -0
  415. package/dist/lib/orphan-detector.js +332 -0
  416. package/dist/lib/orphan-detector.js.map +1 -0
  417. package/dist/lib/password-generator.js +166 -0
  418. package/dist/lib/password-generator.js.map +1 -0
  419. package/dist/lib/path-validator.js +429 -0
  420. package/dist/lib/path-validator.js.map +1 -0
  421. package/dist/lib/query-translator.js +905 -0
  422. package/dist/lib/query-translator.js.map +1 -0
  423. package/dist/lib/queue-recovery.js +469 -0
  424. package/dist/lib/queue-recovery.js.map +1 -0
  425. package/dist/lib/redis-queue-manager.js +512 -0
  426. package/dist/lib/redis-queue-manager.js.map +1 -0
  427. package/dist/lib/reflection-archiver.js +272 -0
  428. package/dist/lib/reflection-archiver.js.map +1 -0
  429. package/dist/lib/retry-manager.js +453 -0
  430. package/dist/lib/retry-manager.js.map +1 -0
  431. package/dist/lib/retry.js +262 -0
  432. package/dist/lib/retry.js.map +1 -0
  433. package/dist/lib/schema-transform.js +695 -0
  434. package/dist/lib/schema-transform.js.map +1 -0
  435. package/dist/lib/schema-validator.js +491 -0
  436. package/dist/lib/schema-validator.js.map +1 -0
  437. package/dist/lib/skill-cache.js +297 -0
  438. package/dist/lib/skill-cache.js.map +1 -0
  439. package/dist/lib/skill-content-manager.js +337 -0
  440. package/dist/lib/skill-content-manager.js.map +1 -0
  441. package/dist/lib/skill-frontmatter-parser.js +237 -0
  442. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  443. package/dist/lib/skill-git-integration.js +275 -0
  444. package/dist/lib/skill-git-integration.js.map +1 -0
  445. package/dist/lib/skill-markdown-validator.js +396 -0
  446. package/dist/lib/skill-markdown-validator.js.map +1 -0
  447. package/dist/lib/skill-output-parser.js +312 -0
  448. package/dist/lib/skill-output-parser.js.map +1 -0
  449. package/dist/lib/unified-query-api.js +467 -0
  450. package/dist/lib/unified-query-api.js.map +1 -0
  451. package/dist/middleware/auth-middleware.js +350 -0
  452. package/dist/middleware/auth-middleware.js.map +1 -0
  453. package/dist/middleware/schema-validation.js +347 -0
  454. package/dist/middleware/schema-validation.js.map +1 -0
  455. package/dist/providers/anthropic-provider.js +1 -1
  456. package/dist/providers/anthropic-provider.js.map +1 -1
  457. package/dist/providers/provider-factory.js +2 -2
  458. package/dist/providers/provider-factory.js.map +1 -1
  459. package/dist/services/edge-case-analyzer.js +321 -0
  460. package/dist/services/edge-case-analyzer.js.map +1 -0
  461. package/dist/services/edge-case-deduplicator.js +266 -0
  462. package/dist/services/edge-case-deduplicator.js.map +1 -0
  463. package/dist/services/edge-case-detector.js +337 -0
  464. package/dist/services/edge-case-detector.js.map +1 -0
  465. package/dist/services/edge-case-tracker.js +547 -0
  466. package/dist/services/edge-case-tracker.js.map +1 -0
  467. package/dist/services/health-check-system.js +586 -0
  468. package/dist/services/health-check-system.js.map +1 -0
  469. package/dist/services/metrics-logger.js +412 -0
  470. package/dist/services/metrics-logger.js.map +1 -0
  471. package/dist/services/patch-generator.js +378 -0
  472. package/dist/services/patch-generator.js.map +1 -0
  473. package/dist/services/patch-validator.js +337 -0
  474. package/dist/services/patch-validator.js.map +1 -0
  475. package/dist/services/performance-monitor.js +811 -0
  476. package/dist/services/performance-monitor.js.map +1 -0
  477. package/dist/services/promotion-pipeline.js +918 -0
  478. package/dist/services/promotion-pipeline.js.map +1 -0
  479. package/dist/services/promotion-validator.js +394 -0
  480. package/dist/services/promotion-validator.js.map +1 -0
  481. package/dist/services/reflection-logger.js +388 -0
  482. package/dist/services/reflection-logger.js.map +1 -0
  483. package/dist/services/skill-deployment.js +472 -0
  484. package/dist/services/skill-deployment.js.map +1 -0
  485. package/dist/services/skill-loader.js +427 -0
  486. package/dist/services/skill-loader.js.map +1 -0
  487. package/dist/services/skill-promotion.js +372 -0
  488. package/dist/services/skill-promotion.js.map +1 -0
  489. package/dist/services/skill-validator.js +454 -0
  490. package/dist/services/skill-validator.js.map +1 -0
  491. package/dist/services/skill-versioning.js +244 -0
  492. package/dist/services/skill-versioning.js.map +1 -0
  493. package/dist/services/workspace-supervisor.js +597 -0
  494. package/dist/services/workspace-supervisor.js.map +1 -0
  495. package/dist/types/agent-output.js +44 -0
  496. package/dist/types/agent-output.js.map +1 -0
  497. package/dist/types/config.js +28 -0
  498. package/dist/types/config.js.map +1 -0
  499. package/dist/types/edge-case.js +45 -0
  500. package/dist/types/edge-case.js.map +1 -0
  501. package/package.json +201 -176
  502. package/readme/README.md +19 -4
  503. package/scripts/artifact-cleanup.sh +392 -0
  504. package/scripts/backup-cleanup.sh +627 -0
  505. package/scripts/cleanup-workspaces.sh +412 -0
  506. package/scripts/cleanup-yaml-configs.sh +141 -0
  507. package/scripts/deploy-approved-skills.sh +263 -0
  508. package/scripts/deploy-production.sh +355 -355
  509. package/scripts/docker-playwright-fix.sh +311 -311
  510. package/scripts/docker-rebuild-all-agents.sh +127 -127
  511. package/scripts/health-check.sh +447 -0
  512. package/scripts/log-aggregator.sh +554 -0
  513. package/scripts/log-monitor.sh +629 -0
  514. package/scripts/manage-agent-workspaces.sh +434 -0
  515. package/scripts/memory-leak-prevention.sh +305 -305
  516. package/scripts/migrate-artifacts.sh +563 -0
  517. package/scripts/migrate-schema.sh +533 -0
  518. package/scripts/migrate-yaml-to-json.sh +465 -0
  519. package/scripts/promote-staged-skills.sh +423 -0
  520. package/scripts/run-marketing-tests.sh +42 -42
  521. package/scripts/update_paths.sh +46 -46
  522. package/scripts/verify-no-secrets.sh +88 -35
  523. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  524. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  525. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  526. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  527. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  528. package/README.md.backup_before_replace +0 -781
  529. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  530. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  531. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  532. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  533. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Schema Validation Middleware
3
+ *
4
+ * Task: P2-3.2 - JSON Schema Validation Enforcement
5
+ * Provides Express middleware for automatic schema validation
6
+ *
7
+ * Usage:
8
+ * ```typescript
9
+ * app.post('/api/pattern-deployment',
10
+ * validateRequest('database-handoffs/pattern-deployment', '1.0.0'),
11
+ * handlePatternDeployment
12
+ * );
13
+ * ```
14
+ *
15
+ * @module schema-validation
16
+ */ import { IntegrationSchemaValidator } from '../lib/integration-schema-validator.js';
17
+ import { StandardError, ErrorCode } from '../lib/errors.js';
18
+ import { getGlobalLogger } from '../lib/logging.js';
19
+ import path from 'path';
20
+ const logger = getGlobalLogger();
21
+ // ============================================================================
22
+ // Global Validator Instance
23
+ // ============================================================================
24
+ let globalValidator = null;
25
+ /**
26
+ * Initialize global validator instance
27
+ */ export async function initializeSchemaValidation(schemaPath) {
28
+ const resolvedPath = schemaPath || path.join(process.cwd(), 'schemas/integration-points');
29
+ globalValidator = new IntegrationSchemaValidator({
30
+ schemaPath: resolvedPath,
31
+ enableCache: true,
32
+ strictMode: true
33
+ });
34
+ await globalValidator.initialize();
35
+ logger.info('Schema validation middleware initialized', {
36
+ schemaPath: resolvedPath
37
+ });
38
+ }
39
+ /**
40
+ * Get global validator instance
41
+ */ function getValidator() {
42
+ if (!globalValidator) {
43
+ throw new StandardError(ErrorCode.CONFIGURATION_ERROR, 'Schema validator not initialized. Call initializeSchemaValidation() first.', {
44
+ initialized: false
45
+ });
46
+ }
47
+ return globalValidator;
48
+ }
49
+ // ============================================================================
50
+ // Middleware Functions
51
+ // ============================================================================
52
+ /**
53
+ * Validate request body against schema
54
+ *
55
+ * @param schemaId - Schema identifier (e.g., "database-handoffs/pattern-deployment")
56
+ * @param version - Schema version (optional, defaults to latest)
57
+ * @param options - Validation options
58
+ */ export function validateRequest(schemaId, version, options = {}) {
59
+ return async (req, res, next)=>{
60
+ const startTime = Date.now();
61
+ try {
62
+ const validator = getValidator();
63
+ // Validate request body
64
+ await validator.validate(req.body, schemaId, version);
65
+ const duration = Date.now() - startTime;
66
+ logger.debug('Request validation succeeded', {
67
+ schemaId,
68
+ version,
69
+ path: req.path,
70
+ method: req.method,
71
+ duration
72
+ });
73
+ // Store validated data in request for downstream use
74
+ if (options.attachValidatedData) {
75
+ req.validatedData = req.body;
76
+ }
77
+ next();
78
+ } catch (error) {
79
+ const duration = Date.now() - startTime;
80
+ logger.warn('Request validation failed', {
81
+ schemaId,
82
+ version,
83
+ path: req.path,
84
+ method: req.method,
85
+ duration,
86
+ error: error instanceof Error ? error.message : String(error)
87
+ });
88
+ if (error instanceof StandardError) {
89
+ res.status(400).json({
90
+ error: 'Validation Failed',
91
+ message: error.message,
92
+ code: error.code,
93
+ details: error.context?.errors || [],
94
+ suggestions: error.context?.suggestions || []
95
+ });
96
+ } else {
97
+ res.status(500).json({
98
+ error: 'Internal Server Error',
99
+ message: 'Schema validation error'
100
+ });
101
+ }
102
+ }
103
+ };
104
+ }
105
+ /**
106
+ * Validate response body against schema
107
+ *
108
+ * @param schemaId - Schema identifier
109
+ * @param version - Schema version (optional)
110
+ */ export function validateResponse(schemaId, version) {
111
+ return async (req, res, next)=>{
112
+ const originalSend = res.send;
113
+ const originalJson = res.json;
114
+ // Intercept res.send()
115
+ res.send = function(data) {
116
+ validateResponseData(data, schemaId, version, req, res);
117
+ return originalSend.call(this, data);
118
+ };
119
+ // Intercept res.json()
120
+ res.json = function(data) {
121
+ validateResponseData(data, schemaId, version, req, res);
122
+ return originalJson.call(this, data);
123
+ };
124
+ next();
125
+ };
126
+ }
127
+ /**
128
+ * Validate response data helper
129
+ */ async function validateResponseData(data, schemaId, version, req, res) {
130
+ const startTime = Date.now();
131
+ try {
132
+ const validator = getValidator();
133
+ // Only validate if response is successful (2xx)
134
+ if (res.statusCode >= 200 && res.statusCode < 300) {
135
+ await validator.validate(data, schemaId, version);
136
+ const duration = Date.now() - startTime;
137
+ logger.debug('Response validation succeeded', {
138
+ schemaId,
139
+ version,
140
+ path: req.path,
141
+ statusCode: res.statusCode,
142
+ duration
143
+ });
144
+ }
145
+ } catch (error) {
146
+ const duration = Date.now() - startTime;
147
+ logger.error('Response validation failed', error, {
148
+ schemaId,
149
+ version,
150
+ path: req.path,
151
+ statusCode: res.statusCode,
152
+ duration
153
+ });
154
+ // Log error but don't modify response
155
+ // Response validation failures are logged for monitoring
156
+ }
157
+ }
158
+ /**
159
+ * Validate both request and response
160
+ */ export function validateRequestResponse(requestSchemaId, responseSchemaId, requestVersion, responseVersion) {
161
+ return [
162
+ validateRequest(requestSchemaId, requestVersion),
163
+ validateResponse(responseSchemaId, responseVersion)
164
+ ];
165
+ }
166
+ /**
167
+ * Create validation middleware with custom error handler
168
+ */ export function createValidationMiddleware(options) {
169
+ return async (req, res, next)=>{
170
+ const startTime = Date.now();
171
+ try {
172
+ const validator = getValidator();
173
+ // Determine schema based on request path or custom function
174
+ let schemaId;
175
+ let version;
176
+ if (options.schemaResolver) {
177
+ const resolved = options.schemaResolver(req);
178
+ schemaId = resolved.schemaId;
179
+ version = resolved.version;
180
+ } else if (options.schemaId) {
181
+ schemaId = options.schemaId;
182
+ version = options.version;
183
+ } else {
184
+ throw new StandardError(ErrorCode.CONFIGURATION_ERROR, 'No schema resolver or schemaId provided', {
185
+ options
186
+ });
187
+ }
188
+ // Validate request body
189
+ await validator.validate(req.body, schemaId, version);
190
+ const duration = Date.now() - startTime;
191
+ logger.debug('Validation middleware succeeded', {
192
+ schemaId,
193
+ version,
194
+ path: req.path,
195
+ duration
196
+ });
197
+ next();
198
+ } catch (error) {
199
+ const duration = Date.now() - startTime;
200
+ logger.warn('Validation middleware failed', {
201
+ path: req.path,
202
+ duration,
203
+ error: error instanceof Error ? error.message : String(error)
204
+ });
205
+ if (options.errorHandler) {
206
+ options.errorHandler(error, req, res, next);
207
+ } else {
208
+ // Default error handler
209
+ if (error instanceof StandardError) {
210
+ res.status(400).json({
211
+ error: 'Validation Failed',
212
+ message: error.message,
213
+ code: error.code,
214
+ details: error.context?.errors || []
215
+ });
216
+ } else {
217
+ res.status(500).json({
218
+ error: 'Internal Server Error',
219
+ message: 'Validation error'
220
+ });
221
+ }
222
+ }
223
+ }
224
+ };
225
+ }
226
+ /**
227
+ * Validate query parameters against schema
228
+ */ export function validateQueryParams(schemaId, version) {
229
+ return async (req, res, next)=>{
230
+ try {
231
+ const validator = getValidator();
232
+ // Validate query parameters
233
+ await validator.validate(req.query, schemaId, version);
234
+ logger.debug('Query parameter validation succeeded', {
235
+ schemaId,
236
+ version,
237
+ path: req.path
238
+ });
239
+ next();
240
+ } catch (error) {
241
+ logger.warn('Query parameter validation failed', {
242
+ schemaId,
243
+ version,
244
+ path: req.path,
245
+ error: error instanceof Error ? error.message : String(error)
246
+ });
247
+ if (error instanceof StandardError) {
248
+ res.status(400).json({
249
+ error: 'Invalid Query Parameters',
250
+ message: error.message,
251
+ details: error.context?.errors || []
252
+ });
253
+ } else {
254
+ res.status(500).json({
255
+ error: 'Internal Server Error'
256
+ });
257
+ }
258
+ }
259
+ };
260
+ }
261
+ /**
262
+ * Batch validation middleware
263
+ * Validates an array of items in request body
264
+ */ export function validateBatch(schemaId, version, options = {}) {
265
+ return async (req, res, next)=>{
266
+ try {
267
+ const validator = getValidator();
268
+ // Ensure request body is an array
269
+ if (!Array.isArray(req.body)) {
270
+ throw new StandardError(ErrorCode.VALIDATION_FAILED, 'Request body must be an array for batch validation', {
271
+ bodyType: typeof req.body
272
+ });
273
+ }
274
+ // Validate batch
275
+ const result = await validator.validateBatch(req.body, schemaId, version, {
276
+ failFast: options.failFast
277
+ });
278
+ if (!result.valid) {
279
+ res.status(400).json({
280
+ error: 'Batch Validation Failed',
281
+ message: `${result.invalidRecords} of ${result.totalRecords} records failed validation`,
282
+ totalRecords: result.totalRecords,
283
+ validRecords: result.validRecords,
284
+ invalidRecords: result.invalidRecords,
285
+ errors: result.errors
286
+ });
287
+ return;
288
+ }
289
+ logger.debug('Batch validation succeeded', {
290
+ schemaId,
291
+ version,
292
+ totalRecords: result.totalRecords
293
+ });
294
+ next();
295
+ } catch (error) {
296
+ if (error instanceof StandardError) {
297
+ res.status(400).json({
298
+ error: 'Batch Validation Error',
299
+ message: error.message,
300
+ code: error.code
301
+ });
302
+ } else {
303
+ res.status(500).json({
304
+ error: 'Internal Server Error'
305
+ });
306
+ }
307
+ }
308
+ };
309
+ }
310
+ // ============================================================================
311
+ // Utility Functions
312
+ // ============================================================================
313
+ /**
314
+ * Create schema resolver based on route patterns
315
+ *
316
+ * Example:
317
+ * ```typescript
318
+ * const resolver = createRouteSchemaResolver({
319
+ * '/api/patterns': 'database-handoffs/pattern-deployment',
320
+ * '/api/metrics': 'database-handoffs/execution-metrics',
321
+ * });
322
+ * ```
323
+ */ export function createRouteSchemaResolver(routeMap) {
324
+ return (req)=>{
325
+ const schemaId = routeMap[req.path];
326
+ if (!schemaId) {
327
+ throw new StandardError(ErrorCode.CONFIGURATION_ERROR, `No schema mapping found for route: ${req.path}`, {
328
+ path: req.path,
329
+ availableRoutes: Object.keys(routeMap)
330
+ });
331
+ }
332
+ return {
333
+ schemaId
334
+ };
335
+ };
336
+ }
337
+ /**
338
+ * Shutdown schema validation middleware
339
+ */ export async function shutdownSchemaValidation() {
340
+ if (globalValidator) {
341
+ await globalValidator.shutdown();
342
+ globalValidator = null;
343
+ logger.info('Schema validation middleware shutdown complete');
344
+ }
345
+ }
346
+
347
+ //# sourceMappingURL=schema-validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/middleware/schema-validation.ts"],"sourcesContent":["/**\r\n * Schema Validation Middleware\r\n *\r\n * Task: P2-3.2 - JSON Schema Validation Enforcement\r\n * Provides Express middleware for automatic schema validation\r\n *\r\n * Usage:\r\n * ```typescript\r\n * app.post('/api/pattern-deployment',\r\n * validateRequest('database-handoffs/pattern-deployment', '1.0.0'),\r\n * handlePatternDeployment\r\n * );\r\n * ```\r\n *\r\n * @module schema-validation\r\n */\r\n\r\nimport { Request, Response, NextFunction, RequestHandler } from 'express';\r\nimport { IntegrationSchemaValidator } from '../lib/integration-schema-validator.js';\r\nimport { StandardError, ErrorCode } from '../lib/errors.js';\r\nimport { getGlobalLogger } from '../lib/logging.js';\r\nimport path from 'path';\r\n\r\nconst logger = getGlobalLogger();\r\n\r\n// ============================================================================\r\n// Global Validator Instance\r\n// ============================================================================\r\n\r\nlet globalValidator: IntegrationSchemaValidator | null = null;\r\n\r\n/**\r\n * Initialize global validator instance\r\n */\r\nexport async function initializeSchemaValidation(schemaPath?: string): Promise<void> {\r\n const resolvedPath = schemaPath || path.join(process.cwd(), 'schemas/integration-points');\r\n\r\n globalValidator = new IntegrationSchemaValidator({\r\n schemaPath: resolvedPath,\r\n enableCache: true,\r\n strictMode: true,\r\n });\r\n\r\n await globalValidator.initialize();\r\n\r\n logger.info('Schema validation middleware initialized', {\r\n schemaPath: resolvedPath,\r\n });\r\n}\r\n\r\n/**\r\n * Get global validator instance\r\n */\r\nfunction getValidator(): IntegrationSchemaValidator {\r\n if (!globalValidator) {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n 'Schema validator not initialized. Call initializeSchemaValidation() first.',\r\n { initialized: false }\r\n );\r\n }\r\n\r\n return globalValidator;\r\n}\r\n\r\n// ============================================================================\r\n// Middleware Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Validate request body against schema\r\n *\r\n * @param schemaId - Schema identifier (e.g., \"database-handoffs/pattern-deployment\")\r\n * @param version - Schema version (optional, defaults to latest)\r\n * @param options - Validation options\r\n */\r\nexport function validateRequest(\r\n schemaId: string,\r\n version?: string,\r\n options: ValidationOptions = {}\r\n): RequestHandler {\r\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\r\n const startTime = Date.now();\r\n\r\n try {\r\n const validator = getValidator();\r\n\r\n // Validate request body\r\n await validator.validate(req.body, schemaId, version);\r\n\r\n const duration = Date.now() - startTime;\r\n\r\n logger.debug('Request validation succeeded', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n method: req.method,\r\n duration,\r\n });\r\n\r\n // Store validated data in request for downstream use\r\n if (options.attachValidatedData) {\r\n (req as any).validatedData = req.body;\r\n }\r\n\r\n next();\r\n } catch (error) {\r\n const duration = Date.now() - startTime;\r\n\r\n logger.warn('Request validation failed', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n method: req.method,\r\n duration,\r\n error: error instanceof Error ? error.message : String(error),\r\n });\r\n\r\n if (error instanceof StandardError) {\r\n res.status(400).json({\r\n error: 'Validation Failed',\r\n message: error.message,\r\n code: error.code,\r\n details: error.context?.errors || [],\r\n suggestions: error.context?.suggestions || [],\r\n });\r\n } else {\r\n res.status(500).json({\r\n error: 'Internal Server Error',\r\n message: 'Schema validation error',\r\n });\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Validate response body against schema\r\n *\r\n * @param schemaId - Schema identifier\r\n * @param version - Schema version (optional)\r\n */\r\nexport function validateResponse(\r\n schemaId: string,\r\n version?: string\r\n): RequestHandler {\r\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\r\n const originalSend = res.send;\r\n const originalJson = res.json;\r\n\r\n // Intercept res.send()\r\n res.send = function (data: any): Response {\r\n validateResponseData(data, schemaId, version, req, res);\r\n return originalSend.call(this, data);\r\n };\r\n\r\n // Intercept res.json()\r\n res.json = function (data: any): Response {\r\n validateResponseData(data, schemaId, version, req, res);\r\n return originalJson.call(this, data);\r\n };\r\n\r\n next();\r\n };\r\n}\r\n\r\n/**\r\n * Validate response data helper\r\n */\r\nasync function validateResponseData(\r\n data: any,\r\n schemaId: string,\r\n version: string | undefined,\r\n req: Request,\r\n res: Response\r\n): Promise<void> {\r\n const startTime = Date.now();\r\n\r\n try {\r\n const validator = getValidator();\r\n\r\n // Only validate if response is successful (2xx)\r\n if (res.statusCode >= 200 && res.statusCode < 300) {\r\n await validator.validate(data, schemaId, version);\r\n\r\n const duration = Date.now() - startTime;\r\n\r\n logger.debug('Response validation succeeded', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n statusCode: res.statusCode,\r\n duration,\r\n });\r\n }\r\n } catch (error) {\r\n const duration = Date.now() - startTime;\r\n\r\n logger.error('Response validation failed', error as Error, {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n statusCode: res.statusCode,\r\n duration,\r\n });\r\n\r\n // Log error but don't modify response\r\n // Response validation failures are logged for monitoring\r\n }\r\n}\r\n\r\n/**\r\n * Validate both request and response\r\n */\r\nexport function validateRequestResponse(\r\n requestSchemaId: string,\r\n responseSchemaId: string,\r\n requestVersion?: string,\r\n responseVersion?: string\r\n): RequestHandler[] {\r\n return [\r\n validateRequest(requestSchemaId, requestVersion),\r\n validateResponse(responseSchemaId, responseVersion),\r\n ];\r\n}\r\n\r\n/**\r\n * Create validation middleware with custom error handler\r\n */\r\nexport function createValidationMiddleware(options: MiddlewareOptions): RequestHandler {\r\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\r\n const startTime = Date.now();\r\n\r\n try {\r\n const validator = getValidator();\r\n\r\n // Determine schema based on request path or custom function\r\n let schemaId: string;\r\n let version: string | undefined;\r\n\r\n if (options.schemaResolver) {\r\n const resolved = options.schemaResolver(req);\r\n schemaId = resolved.schemaId;\r\n version = resolved.version;\r\n } else if (options.schemaId) {\r\n schemaId = options.schemaId;\r\n version = options.version;\r\n } else {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n 'No schema resolver or schemaId provided',\r\n { options }\r\n );\r\n }\r\n\r\n // Validate request body\r\n await validator.validate(req.body, schemaId, version);\r\n\r\n const duration = Date.now() - startTime;\r\n\r\n logger.debug('Validation middleware succeeded', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n duration,\r\n });\r\n\r\n next();\r\n } catch (error) {\r\n const duration = Date.now() - startTime;\r\n\r\n logger.warn('Validation middleware failed', {\r\n path: req.path,\r\n duration,\r\n error: error instanceof Error ? error.message : String(error),\r\n });\r\n\r\n if (options.errorHandler) {\r\n options.errorHandler(error as Error, req, res, next);\r\n } else {\r\n // Default error handler\r\n if (error instanceof StandardError) {\r\n res.status(400).json({\r\n error: 'Validation Failed',\r\n message: error.message,\r\n code: error.code,\r\n details: error.context?.errors || [],\r\n });\r\n } else {\r\n res.status(500).json({\r\n error: 'Internal Server Error',\r\n message: 'Validation error',\r\n });\r\n }\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Validate query parameters against schema\r\n */\r\nexport function validateQueryParams(\r\n schemaId: string,\r\n version?: string\r\n): RequestHandler {\r\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\r\n try {\r\n const validator = getValidator();\r\n\r\n // Validate query parameters\r\n await validator.validate(req.query, schemaId, version);\r\n\r\n logger.debug('Query parameter validation succeeded', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n });\r\n\r\n next();\r\n } catch (error) {\r\n logger.warn('Query parameter validation failed', {\r\n schemaId,\r\n version,\r\n path: req.path,\r\n error: error instanceof Error ? error.message : String(error),\r\n });\r\n\r\n if (error instanceof StandardError) {\r\n res.status(400).json({\r\n error: 'Invalid Query Parameters',\r\n message: error.message,\r\n details: error.context?.errors || [],\r\n });\r\n } else {\r\n res.status(500).json({\r\n error: 'Internal Server Error',\r\n });\r\n }\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Batch validation middleware\r\n * Validates an array of items in request body\r\n */\r\nexport function validateBatch(\r\n schemaId: string,\r\n version?: string,\r\n options: BatchValidationMiddlewareOptions = {}\r\n): RequestHandler {\r\n return async (req: Request, res: Response, next: NextFunction): Promise<void> => {\r\n try {\r\n const validator = getValidator();\r\n\r\n // Ensure request body is an array\r\n if (!Array.isArray(req.body)) {\r\n throw new StandardError(\r\n ErrorCode.VALIDATION_FAILED,\r\n 'Request body must be an array for batch validation',\r\n { bodyType: typeof req.body }\r\n );\r\n }\r\n\r\n // Validate batch\r\n const result = await validator.validateBatch(req.body, schemaId, version, {\r\n failFast: options.failFast,\r\n });\r\n\r\n if (!result.valid) {\r\n res.status(400).json({\r\n error: 'Batch Validation Failed',\r\n message: `${result.invalidRecords} of ${result.totalRecords} records failed validation`,\r\n totalRecords: result.totalRecords,\r\n validRecords: result.validRecords,\r\n invalidRecords: result.invalidRecords,\r\n errors: result.errors,\r\n });\r\n return;\r\n }\r\n\r\n logger.debug('Batch validation succeeded', {\r\n schemaId,\r\n version,\r\n totalRecords: result.totalRecords,\r\n });\r\n\r\n next();\r\n } catch (error) {\r\n if (error instanceof StandardError) {\r\n res.status(400).json({\r\n error: 'Batch Validation Error',\r\n message: error.message,\r\n code: error.code,\r\n });\r\n } else {\r\n res.status(500).json({\r\n error: 'Internal Server Error',\r\n });\r\n }\r\n }\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Type Definitions\r\n// ============================================================================\r\n\r\nexport interface ValidationOptions {\r\n /**\r\n * Attach validated data to request object\r\n * @default false\r\n */\r\n attachValidatedData?: boolean;\r\n}\r\n\r\nexport interface SchemaResolverResult {\r\n schemaId: string;\r\n version?: string;\r\n}\r\n\r\nexport interface MiddlewareOptions {\r\n /**\r\n * Schema ID (if static)\r\n */\r\n schemaId?: string;\r\n\r\n /**\r\n * Schema version (if static)\r\n */\r\n version?: string;\r\n\r\n /**\r\n * Function to resolve schema dynamically based on request\r\n */\r\n schemaResolver?: (req: Request) => SchemaResolverResult;\r\n\r\n /**\r\n * Custom error handler\r\n */\r\n errorHandler?: (error: Error, req: Request, res: Response, next: NextFunction) => void;\r\n}\r\n\r\nexport interface BatchValidationMiddlewareOptions {\r\n /**\r\n * Stop on first validation error\r\n * @default false\r\n */\r\n failFast?: boolean;\r\n}\r\n\r\n// ============================================================================\r\n// Utility Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Create schema resolver based on route patterns\r\n *\r\n * Example:\r\n * ```typescript\r\n * const resolver = createRouteSchemaResolver({\r\n * '/api/patterns': 'database-handoffs/pattern-deployment',\r\n * '/api/metrics': 'database-handoffs/execution-metrics',\r\n * });\r\n * ```\r\n */\r\nexport function createRouteSchemaResolver(\r\n routeMap: Record<string, string>\r\n): (req: Request) => SchemaResolverResult {\r\n return (req: Request): SchemaResolverResult => {\r\n const schemaId = routeMap[req.path];\r\n\r\n if (!schemaId) {\r\n throw new StandardError(\r\n ErrorCode.CONFIGURATION_ERROR,\r\n `No schema mapping found for route: ${req.path}`,\r\n { path: req.path, availableRoutes: Object.keys(routeMap) }\r\n );\r\n }\r\n\r\n return { schemaId };\r\n };\r\n}\r\n\r\n/**\r\n * Shutdown schema validation middleware\r\n */\r\nexport async function shutdownSchemaValidation(): Promise<void> {\r\n if (globalValidator) {\r\n await globalValidator.shutdown();\r\n globalValidator = null;\r\n\r\n logger.info('Schema validation middleware shutdown complete');\r\n }\r\n}\r\n"],"names":["IntegrationSchemaValidator","StandardError","ErrorCode","getGlobalLogger","path","logger","globalValidator","initializeSchemaValidation","schemaPath","resolvedPath","join","process","cwd","enableCache","strictMode","initialize","info","getValidator","CONFIGURATION_ERROR","initialized","validateRequest","schemaId","version","options","req","res","next","startTime","Date","now","validator","validate","body","duration","debug","method","attachValidatedData","validatedData","error","warn","Error","message","String","status","json","code","details","context","errors","suggestions","validateResponse","originalSend","send","originalJson","data","validateResponseData","call","statusCode","validateRequestResponse","requestSchemaId","responseSchemaId","requestVersion","responseVersion","createValidationMiddleware","schemaResolver","resolved","errorHandler","validateQueryParams","query","validateBatch","Array","isArray","VALIDATION_FAILED","bodyType","result","failFast","valid","invalidRecords","totalRecords","validRecords","createRouteSchemaResolver","routeMap","availableRoutes","Object","keys","shutdownSchemaValidation","shutdown"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import Anthropic from '@anthropic-ai/sdk';
2
- import { ProviderError } from './provider-interface';
2
+ import { ProviderError } from './provider-interface.js';
3
3
  export class AnthropicProvider {
4
4
  client;
5
5
  defaultModel;
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/anthropic-provider.ts"],"sourcesContent":["import Anthropic from '@anthropic-ai/sdk';\r\nimport { LLMProviderInterface, LLMMessageOptions, LLMModel, ProviderError } from './provider-interface';\r\n\r\nexport class AnthropicProvider implements LLMProviderInterface {\r\n private client: Anthropic;\r\n private defaultModel: string;\r\n\r\n constructor(apiKey?: string, defaultModel: string = 'claude-3-5-haiku-20240620') {\r\n this.client = new Anthropic({\r\n apiKey: apiKey || process.env.ANTHROPIC_API_KEY\r\n });\r\n this.defaultModel = defaultModel;\r\n }\r\n\r\n async sendMessage(prompt: string, options: LLMMessageOptions = {}): Promise<string> {\r\n try {\r\n const response = await this.client.messages.create({\r\n model: options.model || this.defaultModel,\r\n max_tokens: options.maxTokens || 4096,\r\n temperature: options.temperature || 0.7,\r\n system: options.system,\r\n messages: [{ role: 'user', content: prompt }]\r\n });\r\n\r\n return response.content[0].text;\r\n } catch (error) {\r\n throw new ProviderError(\r\n 'Failed to send message to Anthropic',\r\n 'ANTHROPIC_SEND_ERROR',\r\n { originalError: error }\r\n );\r\n }\r\n }\r\n\r\n async *streamMessage(prompt: string, options: LLMMessageOptions = {}): AsyncGenerator<string, void, unknown> {\r\n try {\r\n const stream = await this.client.messages.create({\r\n model: options.model || this.defaultModel,\r\n max_tokens: options.maxTokens || 4096,\r\n temperature: options.temperature || 0.7,\r\n system: options.system,\r\n stream: true,\r\n messages: [{ role: 'user', content: prompt }]\r\n });\r\n\r\n for await (const messageStreamEvent of stream) {\r\n if (messageStreamEvent.type === 'content_block_delta') {\r\n yield messageStreamEvent.delta.text;\r\n }\r\n }\r\n } catch (error) {\r\n throw new ProviderError(\r\n 'Failed to stream message from Anthropic',\r\n 'ANTHROPIC_STREAM_ERROR',\r\n { originalError: error }\r\n );\r\n }\r\n }\r\n\r\n async getModels(): Promise<LLMModel[]> {\r\n return [\r\n {\r\n id: 'claude-3-5-haiku-20240620',\r\n name: 'Claude 3.5 Haiku',\r\n context_window: 200000,\r\n pricing: { input: 0.00003, output: 0.00015 }\r\n },\r\n {\r\n id: 'claude-3-opus-20240229',\r\n name: 'Claude 3 Opus',\r\n context_window: 200000,\r\n pricing: { input: 0.00015, output: 0.00075 }\r\n },\r\n {\r\n id: 'claude-3-sonnet-20240229',\r\n name: 'Claude 3 Sonnet',\r\n context_window: 200000,\r\n pricing: { input: 0.00003, output: 0.00015 }\r\n }\r\n ];\r\n }\r\n\r\n async checkHealth(): Promise<{\r\n status: 'healthy' | 'degraded' | 'unavailable';\r\n latency?: number;\r\n models_available?: number;\r\n }> {\r\n try {\r\n const startTime = Date.now();\r\n await this.sendMessage('Health check', { maxTokens: 10 });\r\n const latency = Date.now() - startTime;\r\n\r\n const models = await this.getModels();\r\n\r\n return {\r\n status: latency < 500 ? 'healthy' : 'degraded',\r\n latency,\r\n models_available: models.length\r\n };\r\n } catch (error) {\r\n return {\r\n status: 'unavailable',\r\n latency: undefined,\r\n models_available: 0\r\n };\r\n }\r\n }\r\n}"],"names":["Anthropic","ProviderError","AnthropicProvider","client","defaultModel","apiKey","process","env","ANTHROPIC_API_KEY","sendMessage","prompt","options","response","messages","create","model","max_tokens","maxTokens","temperature","system","role","content","text","error","originalError","streamMessage","stream","messageStreamEvent","type","delta","getModels","id","name","context_window","pricing","input","output","checkHealth","startTime","Date","now","latency","models","status","models_available","length","undefined"],"mappings":"AAAA,OAAOA,eAAe,oBAAoB;AAC1C,SAA4DC,aAAa,QAAQ,uBAAuB;AAExG,OAAO,MAAMC;IACHC,OAAkB;IAClBC,aAAqB;IAE7B,YAAYC,MAAe,EAAED,eAAuB,2BAA2B,CAAE;QAC/E,IAAI,CAACD,MAAM,GAAG,IAAIH,UAAU;YAC1BK,QAAQA,UAAUC,QAAQC,GAAG,CAACC,iBAAiB;QACjD;QACA,IAAI,CAACJ,YAAY,GAAGA;IACtB;IAEA,MAAMK,YAAYC,MAAc,EAAEC,UAA6B,CAAC,CAAC,EAAmB;QAClF,IAAI;YACF,MAAMC,WAAW,MAAM,IAAI,CAACT,MAAM,CAACU,QAAQ,CAACC,MAAM,CAAC;gBACjDC,OAAOJ,QAAQI,KAAK,IAAI,IAAI,CAACX,YAAY;gBACzCY,YAAYL,QAAQM,SAAS,IAAI;gBACjCC,aAAaP,QAAQO,WAAW,IAAI;gBACpCC,QAAQR,QAAQQ,MAAM;gBACtBN,UAAU;oBAAC;wBAAEO,MAAM;wBAAQC,SAASX;oBAAO;iBAAE;YAC/C;YAEA,OAAOE,SAASS,OAAO,CAAC,EAAE,CAACC,IAAI;QACjC,EAAE,OAAOC,OAAO;YACd,MAAM,IAAItB,cACR,uCACA,wBACA;gBAAEuB,eAAeD;YAAM;QAE3B;IACF;IAEA,OAAOE,cAAcf,MAAc,EAAEC,UAA6B,CAAC,CAAC,EAAyC;QAC3G,IAAI;YACF,MAAMe,SAAS,MAAM,IAAI,CAACvB,MAAM,CAACU,QAAQ,CAACC,MAAM,CAAC;gBAC/CC,OAAOJ,QAAQI,KAAK,IAAI,IAAI,CAACX,YAAY;gBACzCY,YAAYL,QAAQM,SAAS,IAAI;gBACjCC,aAAaP,QAAQO,WAAW,IAAI;gBACpCC,QAAQR,QAAQQ,MAAM;gBACtBO,QAAQ;gBACRb,UAAU;oBAAC;wBAAEO,MAAM;wBAAQC,SAASX;oBAAO;iBAAE;YAC/C;YAEA,WAAW,MAAMiB,sBAAsBD,OAAQ;gBAC7C,IAAIC,mBAAmBC,IAAI,KAAK,uBAAuB;oBACrD,MAAMD,mBAAmBE,KAAK,CAACP,IAAI;gBACrC;YACF;QACF,EAAE,OAAOC,OAAO;YACd,MAAM,IAAItB,cACR,2CACA,0BACA;gBAAEuB,eAAeD;YAAM;QAE3B;IACF;IAEA,MAAMO,YAAiC;QACrC,OAAO;YACL;gBACEC,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;YACA;gBACEL,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;YACA;gBACEL,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;SACD;IACH;IAEA,MAAMC,cAIH;QACD,IAAI;YACF,MAAMC,YAAYC,KAAKC,GAAG;YAC1B,MAAM,IAAI,CAAC/B,WAAW,CAAC,gBAAgB;gBAAEQ,WAAW;YAAG;YACvD,MAAMwB,UAAUF,KAAKC,GAAG,KAAKF;YAE7B,MAAMI,SAAS,MAAM,IAAI,CAACZ,SAAS;YAEnC,OAAO;gBACLa,QAAQF,UAAU,MAAM,YAAY;gBACpCA;gBACAG,kBAAkBF,OAAOG,MAAM;YACjC;QACF,EAAE,OAAOtB,OAAO;YACd,OAAO;gBACLoB,QAAQ;gBACRF,SAASK;gBACTF,kBAAkB;YACpB;QACF;IACF;AACF"}
1
+ {"version":3,"sources":["../../src/providers/anthropic-provider.ts"],"sourcesContent":["import Anthropic from '@anthropic-ai/sdk';\r\nimport { LLMProviderInterface, LLMMessageOptions, LLMModel, ProviderError } from './provider-interface.js';\r\n\r\nexport class AnthropicProvider implements LLMProviderInterface {\r\n private client: Anthropic;\r\n private defaultModel: string;\r\n\r\n constructor(apiKey?: string, defaultModel: string = 'claude-3-5-haiku-20240620') {\r\n this.client = new Anthropic({\r\n apiKey: apiKey || process.env.ANTHROPIC_API_KEY\r\n });\r\n this.defaultModel = defaultModel;\r\n }\r\n\r\n async sendMessage(prompt: string, options: LLMMessageOptions = {}): Promise<string> {\r\n try {\r\n const response = await this.client.messages.create({\r\n model: options.model || this.defaultModel,\r\n max_tokens: options.maxTokens || 4096,\r\n temperature: options.temperature || 0.7,\r\n system: options.system,\r\n messages: [{ role: 'user', content: prompt }]\r\n });\r\n\r\n return response.content[0].text;\r\n } catch (error) {\r\n throw new ProviderError(\r\n 'Failed to send message to Anthropic',\r\n 'ANTHROPIC_SEND_ERROR',\r\n { originalError: error }\r\n );\r\n }\r\n }\r\n\r\n async *streamMessage(prompt: string, options: LLMMessageOptions = {}): AsyncGenerator<string, void, unknown> {\r\n try {\r\n const stream = await this.client.messages.create({\r\n model: options.model || this.defaultModel,\r\n max_tokens: options.maxTokens || 4096,\r\n temperature: options.temperature || 0.7,\r\n system: options.system,\r\n stream: true,\r\n messages: [{ role: 'user', content: prompt }]\r\n });\r\n\r\n for await (const messageStreamEvent of stream) {\r\n if (messageStreamEvent.type === 'content_block_delta') {\r\n yield messageStreamEvent.delta.text;\r\n }\r\n }\r\n } catch (error) {\r\n throw new ProviderError(\r\n 'Failed to stream message from Anthropic',\r\n 'ANTHROPIC_STREAM_ERROR',\r\n { originalError: error }\r\n );\r\n }\r\n }\r\n\r\n async getModels(): Promise<LLMModel[]> {\r\n return [\r\n {\r\n id: 'claude-3-5-haiku-20240620',\r\n name: 'Claude 3.5 Haiku',\r\n context_window: 200000,\r\n pricing: { input: 0.00003, output: 0.00015 }\r\n },\r\n {\r\n id: 'claude-3-opus-20240229',\r\n name: 'Claude 3 Opus',\r\n context_window: 200000,\r\n pricing: { input: 0.00015, output: 0.00075 }\r\n },\r\n {\r\n id: 'claude-3-sonnet-20240229',\r\n name: 'Claude 3 Sonnet',\r\n context_window: 200000,\r\n pricing: { input: 0.00003, output: 0.00015 }\r\n }\r\n ];\r\n }\r\n\r\n async checkHealth(): Promise<{\r\n status: 'healthy' | 'degraded' | 'unavailable';\r\n latency?: number;\r\n models_available?: number;\r\n }> {\r\n try {\r\n const startTime = Date.now();\r\n await this.sendMessage('Health check', { maxTokens: 10 });\r\n const latency = Date.now() - startTime;\r\n\r\n const models = await this.getModels();\r\n\r\n return {\r\n status: latency < 500 ? 'healthy' : 'degraded',\r\n latency,\r\n models_available: models.length\r\n };\r\n } catch (error) {\r\n return {\r\n status: 'unavailable',\r\n latency: undefined,\r\n models_available: 0\r\n };\r\n }\r\n }\r\n}"],"names":["Anthropic","ProviderError","AnthropicProvider","client","defaultModel","apiKey","process","env","ANTHROPIC_API_KEY","sendMessage","prompt","options","response","messages","create","model","max_tokens","maxTokens","temperature","system","role","content","text","error","originalError","streamMessage","stream","messageStreamEvent","type","delta","getModels","id","name","context_window","pricing","input","output","checkHealth","startTime","Date","now","latency","models","status","models_available","length","undefined"],"mappings":"AAAA,OAAOA,eAAe,oBAAoB;AAC1C,SAA4DC,aAAa,QAAQ,0BAA0B;AAE3G,OAAO,MAAMC;IACHC,OAAkB;IAClBC,aAAqB;IAE7B,YAAYC,MAAe,EAAED,eAAuB,2BAA2B,CAAE;QAC/E,IAAI,CAACD,MAAM,GAAG,IAAIH,UAAU;YAC1BK,QAAQA,UAAUC,QAAQC,GAAG,CAACC,iBAAiB;QACjD;QACA,IAAI,CAACJ,YAAY,GAAGA;IACtB;IAEA,MAAMK,YAAYC,MAAc,EAAEC,UAA6B,CAAC,CAAC,EAAmB;QAClF,IAAI;YACF,MAAMC,WAAW,MAAM,IAAI,CAACT,MAAM,CAACU,QAAQ,CAACC,MAAM,CAAC;gBACjDC,OAAOJ,QAAQI,KAAK,IAAI,IAAI,CAACX,YAAY;gBACzCY,YAAYL,QAAQM,SAAS,IAAI;gBACjCC,aAAaP,QAAQO,WAAW,IAAI;gBACpCC,QAAQR,QAAQQ,MAAM;gBACtBN,UAAU;oBAAC;wBAAEO,MAAM;wBAAQC,SAASX;oBAAO;iBAAE;YAC/C;YAEA,OAAOE,SAASS,OAAO,CAAC,EAAE,CAACC,IAAI;QACjC,EAAE,OAAOC,OAAO;YACd,MAAM,IAAItB,cACR,uCACA,wBACA;gBAAEuB,eAAeD;YAAM;QAE3B;IACF;IAEA,OAAOE,cAAcf,MAAc,EAAEC,UAA6B,CAAC,CAAC,EAAyC;QAC3G,IAAI;YACF,MAAMe,SAAS,MAAM,IAAI,CAACvB,MAAM,CAACU,QAAQ,CAACC,MAAM,CAAC;gBAC/CC,OAAOJ,QAAQI,KAAK,IAAI,IAAI,CAACX,YAAY;gBACzCY,YAAYL,QAAQM,SAAS,IAAI;gBACjCC,aAAaP,QAAQO,WAAW,IAAI;gBACpCC,QAAQR,QAAQQ,MAAM;gBACtBO,QAAQ;gBACRb,UAAU;oBAAC;wBAAEO,MAAM;wBAAQC,SAASX;oBAAO;iBAAE;YAC/C;YAEA,WAAW,MAAMiB,sBAAsBD,OAAQ;gBAC7C,IAAIC,mBAAmBC,IAAI,KAAK,uBAAuB;oBACrD,MAAMD,mBAAmBE,KAAK,CAACP,IAAI;gBACrC;YACF;QACF,EAAE,OAAOC,OAAO;YACd,MAAM,IAAItB,cACR,2CACA,0BACA;gBAAEuB,eAAeD;YAAM;QAE3B;IACF;IAEA,MAAMO,YAAiC;QACrC,OAAO;YACL;gBACEC,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;YACA;gBACEL,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;YACA;gBACEL,IAAI;gBACJC,MAAM;gBACNC,gBAAgB;gBAChBC,SAAS;oBAAEC,OAAO;oBAASC,QAAQ;gBAAQ;YAC7C;SACD;IACH;IAEA,MAAMC,cAIH;QACD,IAAI;YACF,MAAMC,YAAYC,KAAKC,GAAG;YAC1B,MAAM,IAAI,CAAC/B,WAAW,CAAC,gBAAgB;gBAAEQ,WAAW;YAAG;YACvD,MAAMwB,UAAUF,KAAKC,GAAG,KAAKF;YAE7B,MAAMI,SAAS,MAAM,IAAI,CAACZ,SAAS;YAEnC,OAAO;gBACLa,QAAQF,UAAU,MAAM,YAAY;gBACpCA;gBACAG,kBAAkBF,OAAOG,MAAM;YACjC;QACF,EAAE,OAAOtB,OAAO;YACd,OAAO;gBACLoB,QAAQ;gBACRF,SAASK;gBACTF,kBAAkB;YACpB;QACF;IACF;AACF"}
@@ -1,5 +1,5 @@
1
- import { ProviderError } from './provider-interface';
2
- import { AnthropicProvider } from './anthropic-provider';
1
+ import { ProviderError } from './provider-interface.js';
2
+ import { AnthropicProvider } from './anthropic-provider.js';
3
3
  export class ProviderFactory {
4
4
  static providers = new Map([
5
5
  [
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/providers/provider-factory.ts"],"sourcesContent":["import { LLMProviderInterface, ProviderError } from './provider-interface';\r\nimport { AnthropicProvider } from './anthropic-provider';\r\n\r\nexport type ProviderType = 'anthropic' | 'openai' | 'azure' | 'google';\r\n\r\nexport class ProviderFactory {\r\n private static providers: Map<ProviderType, new (apiKey?: string) => LLMProviderInterface> = new Map([\r\n ['anthropic', AnthropicProvider]\r\n // Placeholder for future providers\r\n // ['openai', OpenAIProvider],\r\n // ['azure', AzureProvider],\r\n // ['google', GoogleProvider]\r\n ]);\r\n\r\n /**\r\n * Create a provider instance\r\n * @param type Provider type\r\n * @param apiKey Optional API key (defaults to env variable)\r\n * @returns LLM Provider instance\r\n */\r\n static createProvider(type: ProviderType, apiKey?: string): LLMProviderInterface {\r\n const ProviderClass = this.providers.get(type);\r\n\r\n if (!ProviderClass) {\r\n throw new ProviderError(\r\n `Provider ${type} is not supported`,\r\n 'PROVIDER_NOT_FOUND',\r\n { availableProviders: Array.from(this.providers.keys()) }\r\n );\r\n }\r\n\r\n return new ProviderClass(apiKey);\r\n }\r\n\r\n /**\r\n * Register a new provider\r\n * @param type Provider type\r\n * @param providerClass Provider implementation class\r\n */\r\n static registerProvider(\r\n type: ProviderType,\r\n providerClass: new (apiKey?: string) => LLMProviderInterface\r\n ): void {\r\n this.providers.set(type, providerClass);\r\n }\r\n\r\n /**\r\n * Get available provider types\r\n * @returns List of registered provider types\r\n */\r\n static getAvailableProviders(): ProviderType[] {\r\n return Array.from(this.providers.keys());\r\n }\r\n}"],"names":["ProviderError","AnthropicProvider","ProviderFactory","providers","Map","createProvider","type","apiKey","ProviderClass","get","availableProviders","Array","from","keys","registerProvider","providerClass","set","getAvailableProviders"],"mappings":"AAAA,SAA+BA,aAAa,QAAQ,uBAAuB;AAC3E,SAASC,iBAAiB,QAAQ,uBAAuB;AAIzD,OAAO,MAAMC;IACX,OAAeC,YAA8E,IAAIC,IAAI;QACnG;YAAC;YAAaH;SAAkB;KAKjC,EAAE;IAEH;;;;;GAKC,GACD,OAAOI,eAAeC,IAAkB,EAAEC,MAAe,EAAwB;QAC/E,MAAMC,gBAAgB,IAAI,CAACL,SAAS,CAACM,GAAG,CAACH;QAEzC,IAAI,CAACE,eAAe;YAClB,MAAM,IAAIR,cACR,CAAC,SAAS,EAAEM,KAAK,iBAAiB,CAAC,EACnC,sBACA;gBAAEI,oBAAoBC,MAAMC,IAAI,CAAC,IAAI,CAACT,SAAS,CAACU,IAAI;YAAI;QAE5D;QAEA,OAAO,IAAIL,cAAcD;IAC3B;IAEA;;;;GAIC,GACD,OAAOO,iBACLR,IAAkB,EAClBS,aAA4D,EACtD;QACN,IAAI,CAACZ,SAAS,CAACa,GAAG,CAACV,MAAMS;IAC3B;IAEA;;;GAGC,GACD,OAAOE,wBAAwC;QAC7C,OAAON,MAAMC,IAAI,CAAC,IAAI,CAACT,SAAS,CAACU,IAAI;IACvC;AACF"}
1
+ {"version":3,"sources":["../../src/providers/provider-factory.ts"],"sourcesContent":["import { LLMProviderInterface, ProviderError } from './provider-interface.js';\r\nimport { AnthropicProvider } from './anthropic-provider.js';\r\n\r\nexport type ProviderType = 'anthropic' | 'openai' | 'azure' | 'google';\r\n\r\nexport class ProviderFactory {\r\n private static providers: Map<ProviderType, new (apiKey?: string) => LLMProviderInterface> = new Map([\r\n ['anthropic', AnthropicProvider]\r\n // Placeholder for future providers\r\n // ['openai', OpenAIProvider],\r\n // ['azure', AzureProvider],\r\n // ['google', GoogleProvider]\r\n ]);\r\n\r\n /**\r\n * Create a provider instance\r\n * @param type Provider type\r\n * @param apiKey Optional API key (defaults to env variable)\r\n * @returns LLM Provider instance\r\n */\r\n static createProvider(type: ProviderType, apiKey?: string): LLMProviderInterface {\r\n const ProviderClass = this.providers.get(type);\r\n\r\n if (!ProviderClass) {\r\n throw new ProviderError(\r\n `Provider ${type} is not supported`,\r\n 'PROVIDER_NOT_FOUND',\r\n { availableProviders: Array.from(this.providers.keys()) }\r\n );\r\n }\r\n\r\n return new ProviderClass(apiKey);\r\n }\r\n\r\n /**\r\n * Register a new provider\r\n * @param type Provider type\r\n * @param providerClass Provider implementation class\r\n */\r\n static registerProvider(\r\n type: ProviderType,\r\n providerClass: new (apiKey?: string) => LLMProviderInterface\r\n ): void {\r\n this.providers.set(type, providerClass);\r\n }\r\n\r\n /**\r\n * Get available provider types\r\n * @returns List of registered provider types\r\n */\r\n static getAvailableProviders(): ProviderType[] {\r\n return Array.from(this.providers.keys());\r\n }\r\n}"],"names":["ProviderError","AnthropicProvider","ProviderFactory","providers","Map","createProvider","type","apiKey","ProviderClass","get","availableProviders","Array","from","keys","registerProvider","providerClass","set","getAvailableProviders"],"mappings":"AAAA,SAA+BA,aAAa,QAAQ,0BAA0B;AAC9E,SAASC,iBAAiB,QAAQ,0BAA0B;AAI5D,OAAO,MAAMC;IACX,OAAeC,YAA8E,IAAIC,IAAI;QACnG;YAAC;YAAaH;SAAkB;KAKjC,EAAE;IAEH;;;;;GAKC,GACD,OAAOI,eAAeC,IAAkB,EAAEC,MAAe,EAAwB;QAC/E,MAAMC,gBAAgB,IAAI,CAACL,SAAS,CAACM,GAAG,CAACH;QAEzC,IAAI,CAACE,eAAe;YAClB,MAAM,IAAIR,cACR,CAAC,SAAS,EAAEM,KAAK,iBAAiB,CAAC,EACnC,sBACA;gBAAEI,oBAAoBC,MAAMC,IAAI,CAAC,IAAI,CAACT,SAAS,CAACU,IAAI;YAAI;QAE5D;QAEA,OAAO,IAAIL,cAAcD;IAC3B;IAEA;;;;GAIC,GACD,OAAOO,iBACLR,IAAkB,EAClBS,aAA4D,EACtD;QACN,IAAI,CAACZ,SAAS,CAACa,GAAG,CAACV,MAAMS;IAC3B;IAEA;;;GAGC,GACD,OAAOE,wBAAwC;QAC7C,OAAON,MAAMC,IAAI,CAAC,IAAI,CAACT,SAAS,CAACU,IAAI;IACvC;AACF"}