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 @@
1
+ {"version":3,"sources":["../../src/lib/config-validator.ts"],"sourcesContent":["/**\r\n * CFN Configuration Validator\r\n * Validates JSON configurations against the CFN schema with detailed error reporting\r\n *\r\n * @version 1.0.0\r\n * @description Type-safe validation library with 95%+ accuracy\r\n */\r\n\r\nimport {\r\n CFNConfig,\r\n ValidationError,\r\n ValidationResult,\r\n EnvVarExportMap,\r\n EnvironmentVariable,\r\n ConfigLoaderOptions,\r\n} from '../types/config.js';\r\n\r\n/**\r\n * Core validation result from our built-in validator\r\n */\r\ninterface ValidationCheckResult {\r\n valid: boolean;\r\n errors: ValidationError[];\r\n}\r\n\r\n/**\r\n * ConfigValidator: Main validation class\r\n * Provides schema validation, error reporting, and env var export functionality\r\n */\r\nexport class ConfigValidator {\r\n private schema: Record<string, unknown>;\r\n private initialized = true;\r\n\r\n constructor(schema?: Record<string, unknown>) {\r\n if (schema) {\r\n this.schema = schema;\r\n } else {\r\n // Use the default schema embedded below\r\n this.schema = this.getDefaultSchema();\r\n }\r\n }\r\n\r\n /**\r\n * Get default schema definition\r\n */\r\n private getDefaultSchema(): Record<string, unknown> {\r\n return {\r\n $schema: 'https://json-schema.org/draft/2020-12/schema',\r\n $id: 'https://claude-flow-novice.local/schemas/cfn-config-v1.json',\r\n title: 'CFN Configuration Schema v1.0',\r\n description: 'Canonical JSON schema for all Claude Flow Novice configuration files',\r\n version: '1.0.0',\r\n type: 'object',\r\n };\r\n }\r\n\r\n /**\r\n * Main validation method using built-in validators\r\n */\r\n public validate(config: unknown): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n if (typeof config !== 'object' || config === null) {\r\n return {\r\n valid: false,\r\n errors: [\r\n {\r\n field: 'root',\r\n message: 'Configuration must be a valid JSON object',\r\n path: '/',\r\n code: 'INVALID_TYPE',\r\n },\r\n ],\r\n warnings,\r\n configType: 'unknown',\r\n };\r\n }\r\n\r\n const configObj = config as Record<string, unknown>;\r\n const configType = this.detectConfigType(configObj);\r\n\r\n // Validate based on detected type\r\n switch (configType) {\r\n case 'agent-whitelist':\r\n return this.validateAgentWhitelist(configObj);\r\n case 'mcp-servers':\r\n return this.validateMCPServers(configObj);\r\n case 'skill-requirements':\r\n return this.validateSkillRequirements(configObj);\r\n case 'runtime-contract':\r\n return this.validateRuntimeContract(configObj);\r\n case 'team':\r\n return this.validateTeamConfig(configObj);\r\n default:\r\n return {\r\n valid: false,\r\n errors: [\r\n {\r\n field: 'root',\r\n message:\r\n 'Unknown configuration type. Must include agents, servers, tools, variables, or team',\r\n path: '/',\r\n code: 'UNKNOWN_CONFIG_TYPE',\r\n },\r\n ],\r\n warnings,\r\n configType: 'unknown',\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Validate JSON string\r\n */\r\n public validateJSON(jsonString: string): ValidationResult {\r\n try {\r\n const config = JSON.parse(jsonString);\r\n return this.validate(config);\r\n } catch (error) {\r\n return {\r\n valid: false,\r\n errors: [\r\n {\r\n field: 'json',\r\n message: `Failed to parse JSON: ${error instanceof Error ? error.message : String(error)}`,\r\n path: 'root',\r\n code: 'JSON_PARSE_ERROR',\r\n },\r\n ],\r\n warnings: [],\r\n configType: 'unknown',\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Validate Agent Whitelist Configuration\r\n */\r\n private validateAgentWhitelist(config: Record<string, unknown>): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Check version\r\n if (!config.version || typeof config.version !== 'string') {\r\n errors.push({\r\n field: 'version',\r\n message: 'Missing required field: version (string)',\r\n path: '/version',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n } else if (!/^\\d+\\.\\d+\\.\\d+$/.test(config.version)) {\r\n errors.push({\r\n field: 'version',\r\n message: 'Invalid version format. Expected X.Y.Z format',\r\n path: '/version',\r\n value: config.version,\r\n code: 'INVALID_FORMAT',\r\n });\r\n }\r\n\r\n // Check agents array\r\n if (!Array.isArray(config.agents)) {\r\n errors.push({\r\n field: 'agents',\r\n message: 'Missing required field: agents (array)',\r\n path: '/agents',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n } else {\r\n for (let i = 0; i < (config.agents as unknown[]).length; i++) {\r\n const agent = (config.agents as Record<string, unknown>[])[i];\r\n if (!agent.type || typeof agent.type !== 'string' || agent.type.length === 0) {\r\n errors.push({\r\n field: `agents[${i}].type`,\r\n message: 'Agent type is required and must be non-empty string',\r\n path: `/agents/${i}/type`,\r\n code: 'INVALID_AGENT',\r\n });\r\n }\r\n if (!agent.displayName || typeof agent.displayName !== 'string') {\r\n errors.push({\r\n field: `agents[${i}].displayName`,\r\n message: 'Agent displayName is required',\r\n path: `/agents/${i}/displayName`,\r\n code: 'INVALID_AGENT',\r\n });\r\n }\r\n if (!Array.isArray(agent.skills)) {\r\n errors.push({\r\n field: `agents[${i}].skills`,\r\n message: 'Agent skills must be an array',\r\n path: `/agents/${i}/skills`,\r\n code: 'INVALID_AGENT',\r\n });\r\n }\r\n }\r\n }\r\n\r\n if (!config.lastUpdated) {\r\n warnings.push('Agent configuration missing lastUpdated field (recommended)');\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n configType: 'agent-whitelist',\r\n };\r\n }\r\n\r\n /**\r\n * Validate MCP Servers Configuration\r\n */\r\n private validateMCPServers(config: Record<string, unknown>): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n // Check version\r\n if (!config.version || typeof config.version !== 'string') {\r\n errors.push({\r\n field: 'version',\r\n message: 'Missing required field: version',\r\n path: '/version',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n }\r\n\r\n // Check servers object\r\n if (!config.servers || typeof config.servers !== 'object') {\r\n errors.push({\r\n field: 'servers',\r\n message: 'Missing required field: servers (object)',\r\n path: '/servers',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n } else {\r\n const servers = config.servers as Record<string, Record<string, unknown>>;\r\n for (const serverName in servers) {\r\n if (Object.prototype.hasOwnProperty.call(servers, serverName)) {\r\n const serverConfig = servers[serverName];\r\n if (!serverConfig.endpoint || typeof serverConfig.endpoint !== 'string') {\r\n errors.push({\r\n field: `servers.${serverName}.endpoint`,\r\n message: 'Server endpoint is required',\r\n path: `/servers/${serverName}/endpoint`,\r\n code: 'INVALID_SERVER',\r\n });\r\n } else if (!this.isValidURL(serverConfig.endpoint)) {\r\n errors.push({\r\n field: `servers.${serverName}.endpoint`,\r\n message: 'Server endpoint must be a valid URL',\r\n path: `/servers/${serverName}/endpoint`,\r\n value: serverConfig.endpoint,\r\n code: 'INVALID_URL',\r\n });\r\n }\r\n\r\n if (!Array.isArray(serverConfig.requiredSkills)) {\r\n errors.push({\r\n field: `servers.${serverName}.requiredSkills`,\r\n message: 'Server requiredSkills must be an array',\r\n path: `/servers/${serverName}/requiredSkills`,\r\n code: 'INVALID_SERVER',\r\n });\r\n }\r\n\r\n if (!serverConfig.auth || typeof serverConfig.auth !== 'object') {\r\n errors.push({\r\n field: `servers.${serverName}.auth`,\r\n message: 'Server auth is required',\r\n path: `/servers/${serverName}/auth`,\r\n code: 'INVALID_SERVER',\r\n });\r\n }\r\n\r\n if (serverConfig.timeoutMs !== undefined && typeof serverConfig.timeoutMs !== 'number') {\r\n errors.push({\r\n field: `servers.${serverName}.timeoutMs`,\r\n message: 'timeoutMs must be a number',\r\n path: `/servers/${serverName}/timeoutMs`,\r\n code: 'INVALID_TYPE',\r\n });\r\n } else if (serverConfig.timeoutMs !== undefined && (serverConfig.timeoutMs as number) < 1000) {\r\n errors.push({\r\n field: `servers.${serverName}.timeoutMs`,\r\n message: 'timeoutMs must be at least 1000ms',\r\n path: `/servers/${serverName}/timeoutMs`,\r\n value: serverConfig.timeoutMs,\r\n code: 'CONSTRAINT_VIOLATION',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n configType: 'mcp-servers',\r\n };\r\n }\r\n\r\n /**\r\n * Validate Skill Requirements Configuration\r\n */\r\n private validateSkillRequirements(config: Record<string, unknown>): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n if (!config.version || typeof config.version !== 'string') {\r\n errors.push({\r\n field: 'version',\r\n message: 'Missing required field: version',\r\n path: '/version',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n }\r\n\r\n if (!config.tools || typeof config.tools !== 'object') {\r\n errors.push({\r\n field: 'tools',\r\n message: 'Missing required field: tools (object)',\r\n path: '/tools',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n } else {\r\n const tools = config.tools as Record<string, Record<string, unknown>>;\r\n for (const toolName in tools) {\r\n if (Object.prototype.hasOwnProperty.call(tools, toolName)) {\r\n const toolConfig = tools[toolName];\r\n if (!toolConfig.displayName || typeof toolConfig.displayName !== 'string') {\r\n errors.push({\r\n field: `tools.${toolName}.displayName`,\r\n message: 'Tool displayName is required',\r\n path: `/tools/${toolName}/displayName`,\r\n code: 'INVALID_TOOL',\r\n });\r\n }\r\n\r\n if (!Array.isArray(toolConfig.requiredSkills) || (toolConfig.requiredSkills as unknown[]).length === 0) {\r\n errors.push({\r\n field: `tools.${toolName}.requiredSkills`,\r\n message: 'Tool requiredSkills must be a non-empty array',\r\n path: `/tools/${toolName}/requiredSkills`,\r\n code: 'INVALID_TOOL',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n configType: 'skill-requirements',\r\n };\r\n }\r\n\r\n /**\r\n * Validate Runtime Contract Configuration\r\n */\r\n private validateRuntimeContract(config: Record<string, unknown>): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n if (!config.version || typeof config.version !== 'string') {\r\n errors.push({\r\n field: 'version',\r\n message: 'Missing required field: version',\r\n path: '/version',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n }\r\n\r\n if (config.variables && typeof config.variables === 'object') {\r\n const variables = config.variables as Record<string, Record<string, unknown>>;\r\n for (const varName in variables) {\r\n if (Object.prototype.hasOwnProperty.call(variables, varName)) {\r\n const varConfig = variables[varName];\r\n if (!varConfig.description || typeof varConfig.description !== 'string') {\r\n errors.push({\r\n field: `variables.${varName}.description`,\r\n message: 'Variable description is required',\r\n path: `/variables/${varName}/description`,\r\n code: 'INVALID_VARIABLE',\r\n });\r\n }\r\n const varType = varConfig.type as string;\r\n const validTypes = ['string', 'integer', 'number', 'boolean'];\r\n if (!varConfig.type || validTypes.indexOf(varType) === -1) {\r\n errors.push({\r\n field: `variables.${varName}.type`,\r\n message: 'Variable type must be one of: string, integer, number, boolean',\r\n path: `/variables/${varName}/type`,\r\n code: 'INVALID_VARIABLE',\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n configType: 'runtime-contract',\r\n };\r\n }\r\n\r\n /**\r\n * Validate Team Configuration\r\n */\r\n private validateTeamConfig(config: Record<string, unknown>): ValidationResult {\r\n const errors: ValidationError[] = [];\r\n const warnings: string[] = [];\r\n\r\n if (!config.team || typeof config.team !== 'object') {\r\n errors.push({\r\n field: 'team',\r\n message: 'Missing required field: team (object)',\r\n path: '/team',\r\n code: 'MISSING_REQUIRED',\r\n });\r\n return { valid: false, errors, warnings, configType: 'team' };\r\n }\r\n\r\n const team = config.team as Record<string, unknown>;\r\n\r\n if (!team.id || typeof team.id !== 'string' || team.id.length === 0) {\r\n errors.push({\r\n field: 'team.id',\r\n message: 'Team id is required and must be non-empty',\r\n path: '/team/id',\r\n code: 'INVALID_TEAM',\r\n });\r\n } else if (!/^[a-z0-9-]+$/.test(team.id as string)) {\r\n errors.push({\r\n field: 'team.id',\r\n message: 'Team id must contain only lowercase letters, numbers, and hyphens',\r\n path: '/team/id',\r\n value: team.id,\r\n code: 'INVALID_FORMAT',\r\n });\r\n }\r\n\r\n if (!team.name || typeof team.name !== 'string') {\r\n errors.push({\r\n field: 'team.name',\r\n message: 'Team name is required',\r\n path: '/team/name',\r\n code: 'INVALID_TEAM',\r\n });\r\n }\r\n\r\n // Validate workspace if present (supports both diskQuota and disk_quota)\r\n if (team.workspace && typeof team.workspace === 'object') {\r\n const workspace = team.workspace as Record<string, unknown>;\r\n const diskQuota = this.getPropertyValue(workspace, 'diskQuota');\r\n if (diskQuota !== undefined && !this.isValidDiskQuota(diskQuota)) {\r\n errors.push({\r\n field: 'team.workspace.diskQuota',\r\n message: 'Invalid disk quota format. Expected format: <number><UNIT> (e.g., 100GB)',\r\n path: '/team/workspace/diskQuota',\r\n value: diskQuota,\r\n code: 'INVALID_FORMAT',\r\n });\r\n }\r\n }\r\n\r\n // Validate resources if present (supports both camelCase and snake_case naming)\r\n if (team.resources && typeof team.resources === 'object') {\r\n const resources = team.resources as Record<string, unknown>;\r\n const cpuCores = this.getPropertyValue(resources, 'cpuCores');\r\n const maxAgents = this.getPropertyValue(resources, 'maxAgents');\r\n\r\n // Validate cpuCores (supports cpuCores and cpu_cores)\r\n if (cpuCores !== undefined) {\r\n if (typeof cpuCores !== 'number' || cpuCores < 0) {\r\n errors.push({\r\n field: 'team.resources.cpuCores',\r\n message: 'cpuCores must be a non-negative number',\r\n path: '/team/resources/cpuCores',\r\n value: cpuCores,\r\n code: 'INVALID_TYPE',\r\n });\r\n }\r\n }\r\n\r\n // Validate maxAgents (supports maxAgents and max_agents)\r\n if (maxAgents !== undefined) {\r\n if (typeof maxAgents !== 'number' || maxAgents < 1 || !Number.isInteger(maxAgents)) {\r\n errors.push({\r\n field: 'team.resources.maxAgents',\r\n message: 'maxAgents must be a positive integer',\r\n path: '/team/resources/maxAgents',\r\n value: maxAgents,\r\n code: 'INVALID_TYPE',\r\n });\r\n }\r\n }\r\n }\r\n\r\n // Validate network if present\r\n if (team.network && typeof team.network === 'object') {\r\n const network = team.network as Record<string, unknown>;\r\n if (network.coordinatorIp && !this.isValidIPv4(network.coordinatorIp)) {\r\n errors.push({\r\n field: 'team.network.coordinatorIp',\r\n message: 'Invalid IPv4 format',\r\n path: '/team/network/coordinatorIp',\r\n value: network.coordinatorIp,\r\n code: 'INVALID_FORMAT',\r\n });\r\n }\r\n }\r\n\r\n return {\r\n valid: errors.length === 0,\r\n errors,\r\n warnings,\r\n configType: 'team',\r\n };\r\n }\r\n\r\n /**\r\n * Detect configuration type\r\n */\r\n private detectConfigType(config: Record<string, unknown>): string {\r\n // Check for agent whitelist (has 'agents' array)\r\n if ('agents' in config && Array.isArray(config.agents)) {\r\n return 'agent-whitelist';\r\n }\r\n\r\n // Check for MCP servers (has 'servers' object)\r\n if ('servers' in config && typeof config.servers === 'object') {\r\n return 'mcp-servers';\r\n }\r\n\r\n // Check for skill requirements (has 'tools' object)\r\n if ('tools' in config && typeof config.tools === 'object') {\r\n return 'skill-requirements';\r\n }\r\n\r\n // Check for runtime contract (has 'variables' object)\r\n if ('variables' in config && typeof config.variables === 'object') {\r\n return 'runtime-contract';\r\n }\r\n\r\n // Check for team config (has 'team' object)\r\n if ('team' in config && typeof config.team === 'object') {\r\n return 'team';\r\n }\r\n\r\n return 'unknown';\r\n }\r\n\r\n /**\r\n * Export configuration as environment variables\r\n * Handles type preservation and validation\r\n */\r\n public exportEnvVars(config: unknown): EnvVarExportMap {\r\n if (typeof config !== 'object' || config === null) {\r\n throw new Error('Configuration must be an object');\r\n }\r\n\r\n const configObj = config as Record<string, unknown>;\r\n if (!('variables' in configObj)) {\r\n throw new Error('Configuration is not a valid runtime contract');\r\n }\r\n\r\n const envMap: EnvVarExportMap = {};\r\n const variables = configObj.variables;\r\n\r\n if (typeof variables !== 'object' || variables === null) {\r\n throw new Error('Variables must be an object');\r\n }\r\n\r\n const varsObj = variables as Record<string, unknown>;\r\n for (const key in varsObj) {\r\n if (Object.prototype.hasOwnProperty.call(varsObj, key)) {\r\n const variable = varsObj[key];\r\n const varObj = variable as Record<string, unknown>;\r\n if (varObj.value !== null && varObj.value !== undefined) {\r\n const varType = varObj.type as string;\r\n envMap[key] = this.coerceToCorrectType(varObj.value, varType);\r\n }\r\n }\r\n }\r\n\r\n return envMap;\r\n }\r\n\r\n /**\r\n * Coerce value to correct type without loss\r\n */\r\n private coerceToCorrectType(\r\n value: unknown,\r\n type: string\r\n ): string | number | boolean {\r\n if (type === 'integer' && typeof value === 'string') {\r\n return parseInt(value, 10);\r\n }\r\n if (type === 'number' && typeof value === 'string') {\r\n return parseFloat(value);\r\n }\r\n if (type === 'boolean' && typeof value === 'string') {\r\n return value.toLowerCase() === 'true';\r\n }\r\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\r\n return value;\r\n }\r\n return String(value);\r\n }\r\n\r\n /**\r\n * Format validation errors for display\r\n */\r\n public formatErrors(result: ValidationResult): string {\r\n if (result.valid) {\r\n return 'Configuration is valid.';\r\n }\r\n\r\n let output = `Validation failed with ${result.errors.length} error(s):\\n\\n`;\r\n\r\n for (const error of result.errors) {\r\n output += `[${error.code}] ${error.field || 'root'}\\n`;\r\n output += ` ${error.message}\\n`;\r\n if (error.value !== undefined) {\r\n output += ` Current value: ${JSON.stringify(error.value)}\\n`;\r\n }\r\n output += '\\n';\r\n }\r\n\r\n if (result.warnings.length > 0) {\r\n output += `\\nWarnings (${result.warnings.length}):\\n`;\r\n for (const warning of result.warnings) {\r\n output += ` - ${warning}\\n`;\r\n }\r\n }\r\n\r\n return output;\r\n }\r\n\r\n /**\r\n * Helper: Validate URL format\r\n */\r\n private isValidURL(url: unknown): boolean {\r\n if (typeof url !== 'string') return false;\r\n try {\r\n new URL(url);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n }\r\n\r\n /**\r\n * Helper: Validate disk quota format\r\n */\r\n private isValidDiskQuota(quota: unknown): boolean {\r\n if (typeof quota !== 'string') return false;\r\n return /^\\d+[KMGTPE]B$/.test(quota);\r\n }\r\n\r\n /**\r\n * Helper: Validate IPv4 format\r\n */\r\n private isValidIPv4(ip: unknown): boolean {\r\n if (typeof ip !== 'string') return false;\r\n const ipv4Pattern = /^(\\d{1,3}\\.){3}\\d{1,3}$/;\r\n if (!ipv4Pattern.test(ip)) return false;\r\n\r\n const parts = ip.split('.');\r\n return parts.every((part) => {\r\n const num = parseInt(part, 10);\r\n return num >= 0 && num <= 255;\r\n });\r\n }\r\n\r\n /**\r\n * Helper: Normalize field name (support both snake_case and camelCase)\r\n * Examples: disk_quota → diskQuota, cpu_cores → cpuCores, maxAgents → maxAgents\r\n */\r\n private normalizeFieldName(name: string): string {\r\n if (!name.includes('_')) return name;\r\n return name.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());\r\n }\r\n\r\n /**\r\n * Helper: Get property value supporting both naming conventions\r\n * @param obj Object to search\r\n * @param field Field name in any convention (camelCase or snake_case)\r\n * @returns Value if found, undefined otherwise\r\n */\r\n private getPropertyValue(obj: Record<string, unknown>, field: string): unknown {\r\n // Try camelCase version first\r\n if (field in obj) return obj[field];\r\n\r\n // Try snake_case version\r\n const snakeCase = field.replace(/[A-Z]/g, (letter) => `_${letter.toLowerCase()}`);\r\n if (snakeCase in obj) return obj[snakeCase];\r\n\r\n // Try normalizing if it's snake_case input\r\n const camelCase = this.normalizeFieldName(field);\r\n if (camelCase in obj) return obj[camelCase];\r\n\r\n return undefined;\r\n }\r\n}\r\n\r\n/**\r\n * Singleton instance for global usage\r\n */\r\nlet validatorInstance: ConfigValidator | null = null;\r\n\r\n/**\r\n * Get or create validator instance\r\n */\r\nexport function getValidator(schema?: Record<string, unknown>): ConfigValidator {\r\n if (!validatorInstance) {\r\n validatorInstance = new ConfigValidator(schema);\r\n }\r\n return validatorInstance;\r\n}\r\n\r\n/**\r\n * Validate configuration object\r\n */\r\nexport function validateConfig(config: unknown): ValidationResult {\r\n return getValidator().validate(config);\r\n}\r\n\r\n/**\r\n * Validate JSON string\r\n */\r\nexport function validateJSON(jsonString: string): ValidationResult {\r\n return getValidator().validateJSON(jsonString);\r\n}\r\n\r\n/**\r\n * Export environment variables from runtime contract\r\n */\r\nexport function exportEnvVars(config: unknown): EnvVarExportMap {\r\n return getValidator().exportEnvVars(config);\r\n}\r\n\r\n/**\r\n * Check if configuration is valid (boolean shortcut)\r\n */\r\nexport function isValidConfig(config: unknown): boolean {\r\n return getValidator().validate(config).valid;\r\n}\r\n\r\n/**\r\n * Reset validator instance (useful for testing)\r\n */\r\nexport function resetValidator(): void {\r\n validatorInstance = null;\r\n}\r\n\r\n/**\r\n * Validate multiple configuration files efficiently\r\n * @param filePaths Array of file paths to validate\r\n * @returns Map of file path to validation result\r\n * @throws Error if file cannot be read\r\n */\r\nexport function validateConfigFiles(\r\n filePaths: string[]\r\n): Record<string, ValidationResult> {\r\n const results: Record<string, ValidationResult> = {};\r\n const validator = getValidator();\r\n\r\n for (const filePath of filePaths) {\r\n try {\r\n // Dynamically import fs module to read file\r\n const fs = require('fs');\r\n const content = fs.readFileSync(filePath, 'utf-8');\r\n const config = JSON.parse(content);\r\n results[filePath] = validator.validate(config);\r\n } catch (error) {\r\n results[filePath] = {\r\n valid: false,\r\n errors: [\r\n {\r\n field: 'file',\r\n message: `Failed to read or parse file: ${error instanceof Error ? error.message : String(error)}`,\r\n path: filePath,\r\n code: 'FILE_READ_ERROR',\r\n },\r\n ],\r\n warnings: [],\r\n configType: 'unknown',\r\n };\r\n }\r\n }\r\n\r\n return results;\r\n}\r\n\r\nexport default ConfigValidator;\r\n"],"names":["ConfigValidator","schema","initialized","getDefaultSchema","$schema","$id","title","description","version","type","validate","config","errors","warnings","valid","field","message","path","code","configType","configObj","detectConfigType","validateAgentWhitelist","validateMCPServers","validateSkillRequirements","validateRuntimeContract","validateTeamConfig","validateJSON","jsonString","JSON","parse","error","Error","String","push","test","value","Array","isArray","agents","i","length","agent","displayName","skills","lastUpdated","servers","serverName","Object","prototype","hasOwnProperty","call","serverConfig","endpoint","isValidURL","requiredSkills","auth","timeoutMs","undefined","tools","toolName","toolConfig","variables","varName","varConfig","varType","validTypes","indexOf","team","id","name","workspace","diskQuota","getPropertyValue","isValidDiskQuota","resources","cpuCores","maxAgents","Number","isInteger","network","coordinatorIp","isValidIPv4","exportEnvVars","envMap","varsObj","key","variable","varObj","coerceToCorrectType","parseInt","parseFloat","toLowerCase","formatErrors","result","output","stringify","warning","url","URL","quota","ip","ipv4Pattern","parts","split","every","part","num","normalizeFieldName","includes","replace","_","letter","toUpperCase","obj","snakeCase","camelCase","validatorInstance","getValidator","validateConfig","isValidConfig","resetValidator","validateConfigFiles","filePaths","results","validator","filePath","fs","require","content","readFileSync"],"mappings":"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"}
@@ -0,0 +1,311 @@
1
+ /**
2
+ * Correlation Cache Layer
3
+ *
4
+ * Provides LRU caching for correlation key queries with TTL and invalidation.
5
+ * Part of Task 3.3: Query Correlation Key Layer
6
+ *
7
+ * @example
8
+ * ```typescript
9
+ * const cache = new CorrelationCache({
10
+ * maxSize: 100,
11
+ * ttlMinutes: 5,
12
+ * });
13
+ *
14
+ * cache.set('task:abc123', { data: 'value' });
15
+ * const value = cache.get('task:abc123'); // { data: 'value' }
16
+ * ```
17
+ */ import { createLogger } from './logging.js';
18
+ /**
19
+ * LRU Cache for correlation key queries
20
+ *
21
+ * Implements Least Recently Used eviction policy with TTL and metrics tracking.
22
+ */ export class CorrelationCache {
23
+ cache;
24
+ maxSize;
25
+ ttlMinutes;
26
+ logger;
27
+ // Metrics
28
+ hits = 0;
29
+ misses = 0;
30
+ evictions = 0;
31
+ invalidations = 0;
32
+ // Cache warming
33
+ warmingEnabled;
34
+ warmingPatterns;
35
+ // Timer cleanup
36
+ cleanupTimer = null;
37
+ constructor(config = {}){
38
+ this.cache = new Map();
39
+ this.maxSize = config.maxSize || 100;
40
+ this.ttlMinutes = config.ttlMinutes || 5;
41
+ this.warmingEnabled = config.enableWarming || false;
42
+ this.warmingPatterns = config.warmingPatterns || [];
43
+ this.logger = config.logger || createLogger('correlation-cache');
44
+ // Start periodic TTL cleanup
45
+ this.startTTLCleanup();
46
+ }
47
+ /**
48
+ * Get value from cache
49
+ *
50
+ * @param key - Cache key
51
+ * @returns Cached value or undefined
52
+ */ get(key) {
53
+ const entry = this.cache.get(key);
54
+ if (!entry) {
55
+ this.misses++;
56
+ this.logger.debug('Cache miss', {
57
+ key
58
+ });
59
+ return undefined;
60
+ }
61
+ // Check TTL
62
+ if (this.isExpired(entry)) {
63
+ this.invalidate(key, 'ttl');
64
+ this.misses++;
65
+ this.logger.debug('Cache miss (expired)', {
66
+ key
67
+ });
68
+ return undefined;
69
+ }
70
+ // Update LRU metadata
71
+ entry.lastAccessed = new Date();
72
+ entry.accessCount++;
73
+ // Move to end (most recently used)
74
+ this.cache.delete(key);
75
+ this.cache.set(key, entry);
76
+ this.hits++;
77
+ this.logger.debug('Cache hit', {
78
+ key,
79
+ accessCount: entry.accessCount
80
+ });
81
+ return entry.value;
82
+ }
83
+ /**
84
+ * Set value in cache
85
+ *
86
+ * @param key - Cache key
87
+ * @param value - Value to cache
88
+ * @param ttlMinutes - Optional TTL override
89
+ */ set(key, value, ttlMinutes) {
90
+ const ttl = (ttlMinutes || this.ttlMinutes) * 60 * 1000; // Convert to milliseconds
91
+ const entry = {
92
+ value,
93
+ createdAt: new Date(),
94
+ lastAccessed: new Date(),
95
+ accessCount: 0,
96
+ ttl
97
+ };
98
+ // Check if we need to evict
99
+ if (this.cache.size >= this.maxSize && !this.cache.has(key)) {
100
+ this.evictLRU();
101
+ }
102
+ // Add/update entry
103
+ this.cache.set(key, entry);
104
+ this.logger.debug('Cache set', {
105
+ key,
106
+ ttl
107
+ });
108
+ }
109
+ /**
110
+ * Check if key exists in cache
111
+ *
112
+ * @param key - Cache key
113
+ * @returns True if key exists and not expired
114
+ */ has(key) {
115
+ const entry = this.cache.get(key);
116
+ if (!entry) {
117
+ return false;
118
+ }
119
+ if (this.isExpired(entry)) {
120
+ this.invalidate(key, 'ttl');
121
+ return false;
122
+ }
123
+ return true;
124
+ }
125
+ /**
126
+ * Delete key from cache
127
+ *
128
+ * @param key - Cache key
129
+ * @returns True if key was deleted
130
+ */ delete(key) {
131
+ return this.invalidate(key, 'delete');
132
+ }
133
+ /**
134
+ * Invalidate cache entry
135
+ *
136
+ * @param key - Cache key
137
+ * @param trigger - Invalidation trigger
138
+ * @returns True if entry was invalidated
139
+ */ invalidate(key, trigger = 'manual') {
140
+ const deleted = this.cache.delete(key);
141
+ if (deleted) {
142
+ this.invalidations++;
143
+ this.logger.debug('Cache invalidated', {
144
+ key,
145
+ trigger
146
+ });
147
+ }
148
+ return deleted;
149
+ }
150
+ /**
151
+ * Invalidate multiple keys by pattern
152
+ *
153
+ * @param pattern - Key pattern (supports wildcards)
154
+ * @returns Number of keys invalidated
155
+ */ invalidatePattern(pattern) {
156
+ const regex = this.patternToRegex(pattern);
157
+ let count = 0;
158
+ for (const key of this.cache.keys()){
159
+ if (regex.test(key)) {
160
+ this.invalidate(key, 'manual');
161
+ count++;
162
+ }
163
+ }
164
+ this.logger.info('Pattern invalidation', {
165
+ pattern,
166
+ count
167
+ });
168
+ return count;
169
+ }
170
+ /**
171
+ * Clear entire cache
172
+ */ clear() {
173
+ const size = this.cache.size;
174
+ this.cache.clear();
175
+ this.invalidations += size;
176
+ this.logger.info('Cache cleared', {
177
+ entriesCleared: size
178
+ });
179
+ }
180
+ /**
181
+ * Get cache metrics
182
+ *
183
+ * @returns Cache metrics
184
+ */ getMetrics() {
185
+ const totalRequests = this.hits + this.misses;
186
+ const hitRatio = totalRequests > 0 ? this.hits / totalRequests : 0;
187
+ return {
188
+ hits: this.hits,
189
+ misses: this.misses,
190
+ hitRatio,
191
+ size: this.cache.size,
192
+ maxSize: this.maxSize,
193
+ evictions: this.evictions,
194
+ invalidations: this.invalidations
195
+ };
196
+ }
197
+ /**
198
+ * Reset cache metrics
199
+ */ resetMetrics() {
200
+ this.hits = 0;
201
+ this.misses = 0;
202
+ this.evictions = 0;
203
+ this.invalidations = 0;
204
+ this.logger.info('Cache metrics reset');
205
+ }
206
+ /**
207
+ * Warm cache with common patterns
208
+ *
209
+ * @param dataLoader - Function to load data for warming
210
+ */ async warm(dataLoader) {
211
+ if (!this.warmingEnabled || this.warmingPatterns.length === 0) {
212
+ return;
213
+ }
214
+ this.logger.info('Cache warming started', {
215
+ patterns: this.warmingPatterns
216
+ });
217
+ for (const pattern of this.warmingPatterns){
218
+ try {
219
+ const data = await dataLoader(pattern);
220
+ for (const [key, value] of data.entries()){
221
+ this.set(key, value);
222
+ }
223
+ this.logger.debug('Pattern warmed', {
224
+ pattern,
225
+ count: data.size
226
+ });
227
+ } catch (error) {
228
+ this.logger.warn('Cache warming failed for pattern', {
229
+ pattern,
230
+ error
231
+ });
232
+ }
233
+ }
234
+ this.logger.info('Cache warming completed');
235
+ }
236
+ /**
237
+ * Evict least recently used entry
238
+ */ evictLRU() {
239
+ // Map maintains insertion order, so first entry is LRU
240
+ const firstKey = this.cache.keys().next().value;
241
+ if (firstKey) {
242
+ this.cache.delete(firstKey);
243
+ this.evictions++;
244
+ this.logger.debug('LRU eviction', {
245
+ key: firstKey
246
+ });
247
+ }
248
+ }
249
+ /**
250
+ * Check if entry is expired
251
+ */ isExpired(entry) {
252
+ const now = Date.now();
253
+ const createdAt = entry.createdAt.getTime();
254
+ return now - createdAt > entry.ttl;
255
+ }
256
+ /**
257
+ * Convert pattern to regex
258
+ */ patternToRegex(pattern) {
259
+ // Escape special regex characters except *
260
+ const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
261
+ // Convert * to .*
262
+ const regexPattern = escaped.replace(/\*/g, '.*');
263
+ return new RegExp(`^${regexPattern}$`);
264
+ }
265
+ /**
266
+ * Start periodic TTL cleanup
267
+ */ startTTLCleanup() {
268
+ // Run cleanup every minute
269
+ this.cleanupTimer = setInterval(()=>{
270
+ this.cleanupExpired();
271
+ }, 60 * 1000);
272
+ }
273
+ /**
274
+ * Destroy cache and clean up resources
275
+ *
276
+ * Clears the interval timer to prevent memory leaks and clears all cache entries.
277
+ */ destroy() {
278
+ if (this.cleanupTimer) {
279
+ clearInterval(this.cleanupTimer);
280
+ this.cleanupTimer = null;
281
+ }
282
+ this.clear();
283
+ this.logger.info('Cache destroyed and cleanup timer stopped');
284
+ }
285
+ /**
286
+ * Clean up expired entries
287
+ */ cleanupExpired() {
288
+ let count = 0;
289
+ for (const [key, entry] of this.cache.entries()){
290
+ if (this.isExpired(entry)) {
291
+ this.invalidate(key, 'ttl');
292
+ count++;
293
+ }
294
+ }
295
+ if (count > 0) {
296
+ this.logger.debug('TTL cleanup', {
297
+ expired: count
298
+ });
299
+ }
300
+ }
301
+ }
302
+ /**
303
+ * Create correlation cache instance
304
+ *
305
+ * @param config - Cache configuration
306
+ * @returns Correlation cache instance
307
+ */ export function createCorrelationCache(config) {
308
+ return new CorrelationCache(config);
309
+ }
310
+
311
+ //# sourceMappingURL=correlation-cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/correlation-cache.ts"],"sourcesContent":["/**\r\n * Correlation Cache Layer\r\n *\r\n * Provides LRU caching for correlation key queries with TTL and invalidation.\r\n * Part of Task 3.3: Query Correlation Key Layer\r\n *\r\n * @example\r\n * ```typescript\r\n * const cache = new CorrelationCache({\r\n * maxSize: 100,\r\n * ttlMinutes: 5,\r\n * });\r\n *\r\n * cache.set('task:abc123', { data: 'value' });\r\n * const value = cache.get('task:abc123'); // { data: 'value' }\r\n * ```\r\n */\r\n\r\nimport { createLogger, Logger } from './logging.js';\r\n\r\n/**\r\n * Cache entry with metadata\r\n */\r\nexport interface CacheEntry<T = any> {\r\n /** Cached value */\r\n value: T;\r\n /** Entry creation timestamp */\r\n createdAt: Date;\r\n /** Last accessed timestamp */\r\n lastAccessed: Date;\r\n /** Access count */\r\n accessCount: number;\r\n /** TTL in milliseconds */\r\n ttl: number;\r\n}\r\n\r\n/**\r\n * Cache metrics\r\n */\r\nexport interface CacheMetrics {\r\n /** Total cache hits */\r\n hits: number;\r\n /** Total cache misses */\r\n misses: number;\r\n /** Cache hit ratio (0.0-1.0) */\r\n hitRatio: number;\r\n /** Current cache size */\r\n size: number;\r\n /** Maximum cache size */\r\n maxSize: number;\r\n /** Total evictions */\r\n evictions: number;\r\n /** Total invalidations */\r\n invalidations: number;\r\n}\r\n\r\n/**\r\n * Cache configuration\r\n */\r\nexport interface CacheConfig {\r\n /** Maximum cache size (default: 100) */\r\n maxSize?: number;\r\n /** TTL in minutes (default: 5) */\r\n ttlMinutes?: number;\r\n /** Enable cache warming (default: false) */\r\n enableWarming?: boolean;\r\n /** Common patterns for cache warming */\r\n warmingPatterns?: string[];\r\n /** Logger instance (optional) */\r\n logger?: Logger;\r\n}\r\n\r\n/**\r\n * Cache invalidation trigger\r\n */\r\nexport type InvalidationTrigger = 'write' | 'delete' | 'manual' | 'ttl';\r\n\r\n/**\r\n * LRU Cache for correlation key queries\r\n *\r\n * Implements Least Recently Used eviction policy with TTL and metrics tracking.\r\n */\r\nexport class CorrelationCache {\r\n private cache: Map<string, CacheEntry>;\r\n private maxSize: number;\r\n private ttlMinutes: number;\r\n private logger: Logger;\r\n\r\n // Metrics\r\n private hits: number = 0;\r\n private misses: number = 0;\r\n private evictions: number = 0;\r\n private invalidations: number = 0;\r\n\r\n // Cache warming\r\n private warmingEnabled: boolean;\r\n private warmingPatterns: string[];\r\n\r\n // Timer cleanup\r\n private cleanupTimer: NodeJS.Timeout | null = null;\r\n\r\n constructor(config: CacheConfig = {}) {\r\n this.cache = new Map();\r\n this.maxSize = config.maxSize || 100;\r\n this.ttlMinutes = config.ttlMinutes || 5;\r\n this.warmingEnabled = config.enableWarming || false;\r\n this.warmingPatterns = config.warmingPatterns || [];\r\n this.logger = config.logger || createLogger('correlation-cache');\r\n\r\n // Start periodic TTL cleanup\r\n this.startTTLCleanup();\r\n }\r\n\r\n /**\r\n * Get value from cache\r\n *\r\n * @param key - Cache key\r\n * @returns Cached value or undefined\r\n */\r\n get<T = any>(key: string): T | undefined {\r\n const entry = this.cache.get(key);\r\n\r\n if (!entry) {\r\n this.misses++;\r\n this.logger.debug('Cache miss', { key });\r\n return undefined;\r\n }\r\n\r\n // Check TTL\r\n if (this.isExpired(entry)) {\r\n this.invalidate(key, 'ttl');\r\n this.misses++;\r\n this.logger.debug('Cache miss (expired)', { key });\r\n return undefined;\r\n }\r\n\r\n // Update LRU metadata\r\n entry.lastAccessed = new Date();\r\n entry.accessCount++;\r\n\r\n // Move to end (most recently used)\r\n this.cache.delete(key);\r\n this.cache.set(key, entry);\r\n\r\n this.hits++;\r\n this.logger.debug('Cache hit', { key, accessCount: entry.accessCount });\r\n\r\n return entry.value as T;\r\n }\r\n\r\n /**\r\n * Set value in cache\r\n *\r\n * @param key - Cache key\r\n * @param value - Value to cache\r\n * @param ttlMinutes - Optional TTL override\r\n */\r\n set<T = any>(key: string, value: T, ttlMinutes?: number): void {\r\n const ttl = (ttlMinutes || this.ttlMinutes) * 60 * 1000; // Convert to milliseconds\r\n\r\n const entry: CacheEntry<T> = {\r\n value,\r\n createdAt: new Date(),\r\n lastAccessed: new Date(),\r\n accessCount: 0,\r\n ttl,\r\n };\r\n\r\n // Check if we need to evict\r\n if (this.cache.size >= this.maxSize && !this.cache.has(key)) {\r\n this.evictLRU();\r\n }\r\n\r\n // Add/update entry\r\n this.cache.set(key, entry);\r\n\r\n this.logger.debug('Cache set', { key, ttl });\r\n }\r\n\r\n /**\r\n * Check if key exists in cache\r\n *\r\n * @param key - Cache key\r\n * @returns True if key exists and not expired\r\n */\r\n has(key: string): boolean {\r\n const entry = this.cache.get(key);\r\n\r\n if (!entry) {\r\n return false;\r\n }\r\n\r\n if (this.isExpired(entry)) {\r\n this.invalidate(key, 'ttl');\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Delete key from cache\r\n *\r\n * @param key - Cache key\r\n * @returns True if key was deleted\r\n */\r\n delete(key: string): boolean {\r\n return this.invalidate(key, 'delete');\r\n }\r\n\r\n /**\r\n * Invalidate cache entry\r\n *\r\n * @param key - Cache key\r\n * @param trigger - Invalidation trigger\r\n * @returns True if entry was invalidated\r\n */\r\n invalidate(key: string, trigger: InvalidationTrigger = 'manual'): boolean {\r\n const deleted = this.cache.delete(key);\r\n\r\n if (deleted) {\r\n this.invalidations++;\r\n this.logger.debug('Cache invalidated', { key, trigger });\r\n }\r\n\r\n return deleted;\r\n }\r\n\r\n /**\r\n * Invalidate multiple keys by pattern\r\n *\r\n * @param pattern - Key pattern (supports wildcards)\r\n * @returns Number of keys invalidated\r\n */\r\n invalidatePattern(pattern: string): number {\r\n const regex = this.patternToRegex(pattern);\r\n let count = 0;\r\n\r\n for (const key of this.cache.keys()) {\r\n if (regex.test(key)) {\r\n this.invalidate(key, 'manual');\r\n count++;\r\n }\r\n }\r\n\r\n this.logger.info('Pattern invalidation', { pattern, count });\r\n\r\n return count;\r\n }\r\n\r\n /**\r\n * Clear entire cache\r\n */\r\n clear(): void {\r\n const size = this.cache.size;\r\n this.cache.clear();\r\n this.invalidations += size;\r\n this.logger.info('Cache cleared', { entriesCleared: size });\r\n }\r\n\r\n /**\r\n * Get cache metrics\r\n *\r\n * @returns Cache metrics\r\n */\r\n getMetrics(): CacheMetrics {\r\n const totalRequests = this.hits + this.misses;\r\n const hitRatio = totalRequests > 0 ? this.hits / totalRequests : 0;\r\n\r\n return {\r\n hits: this.hits,\r\n misses: this.misses,\r\n hitRatio,\r\n size: this.cache.size,\r\n maxSize: this.maxSize,\r\n evictions: this.evictions,\r\n invalidations: this.invalidations,\r\n };\r\n }\r\n\r\n /**\r\n * Reset cache metrics\r\n */\r\n resetMetrics(): void {\r\n this.hits = 0;\r\n this.misses = 0;\r\n this.evictions = 0;\r\n this.invalidations = 0;\r\n this.logger.info('Cache metrics reset');\r\n }\r\n\r\n /**\r\n * Warm cache with common patterns\r\n *\r\n * @param dataLoader - Function to load data for warming\r\n */\r\n async warm(dataLoader: (pattern: string) => Promise<Map<string, any>>): Promise<void> {\r\n if (!this.warmingEnabled || this.warmingPatterns.length === 0) {\r\n return;\r\n }\r\n\r\n this.logger.info('Cache warming started', { patterns: this.warmingPatterns });\r\n\r\n for (const pattern of this.warmingPatterns) {\r\n try {\r\n const data = await dataLoader(pattern);\r\n\r\n for (const [key, value] of data.entries()) {\r\n this.set(key, value);\r\n }\r\n\r\n this.logger.debug('Pattern warmed', { pattern, count: data.size });\r\n } catch (error) {\r\n this.logger.warn('Cache warming failed for pattern', { pattern, error });\r\n }\r\n }\r\n\r\n this.logger.info('Cache warming completed');\r\n }\r\n\r\n /**\r\n * Evict least recently used entry\r\n */\r\n private evictLRU(): void {\r\n // Map maintains insertion order, so first entry is LRU\r\n const firstKey = this.cache.keys().next().value;\r\n\r\n if (firstKey) {\r\n this.cache.delete(firstKey);\r\n this.evictions++;\r\n this.logger.debug('LRU eviction', { key: firstKey });\r\n }\r\n }\r\n\r\n /**\r\n * Check if entry is expired\r\n */\r\n private isExpired(entry: CacheEntry): boolean {\r\n const now = Date.now();\r\n const createdAt = entry.createdAt.getTime();\r\n return now - createdAt > entry.ttl;\r\n }\r\n\r\n /**\r\n * Convert pattern to regex\r\n */\r\n private patternToRegex(pattern: string): RegExp {\r\n // Escape special regex characters except *\r\n const escaped = pattern.replace(/[.+?^${}()|[\\]\\\\]/g, '\\\\$&');\r\n // Convert * to .*\r\n const regexPattern = escaped.replace(/\\*/g, '.*');\r\n return new RegExp(`^${regexPattern}$`);\r\n }\r\n\r\n /**\r\n * Start periodic TTL cleanup\r\n */\r\n private startTTLCleanup(): void {\r\n // Run cleanup every minute\r\n this.cleanupTimer = setInterval(() => {\r\n this.cleanupExpired();\r\n }, 60 * 1000);\r\n }\r\n\r\n /**\r\n * Destroy cache and clean up resources\r\n *\r\n * Clears the interval timer to prevent memory leaks and clears all cache entries.\r\n */\r\n destroy(): void {\r\n if (this.cleanupTimer) {\r\n clearInterval(this.cleanupTimer);\r\n this.cleanupTimer = null;\r\n }\r\n this.clear();\r\n this.logger.info('Cache destroyed and cleanup timer stopped');\r\n }\r\n\r\n /**\r\n * Clean up expired entries\r\n */\r\n private cleanupExpired(): void {\r\n let count = 0;\r\n\r\n for (const [key, entry] of this.cache.entries()) {\r\n if (this.isExpired(entry)) {\r\n this.invalidate(key, 'ttl');\r\n count++;\r\n }\r\n }\r\n\r\n if (count > 0) {\r\n this.logger.debug('TTL cleanup', { expired: count });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Create correlation cache instance\r\n *\r\n * @param config - Cache configuration\r\n * @returns Correlation cache instance\r\n */\r\nexport function createCorrelationCache(config?: CacheConfig): CorrelationCache {\r\n return new CorrelationCache(config);\r\n}\r\n"],"names":["createLogger","CorrelationCache","cache","maxSize","ttlMinutes","logger","hits","misses","evictions","invalidations","warmingEnabled","warmingPatterns","cleanupTimer","config","Map","enableWarming","startTTLCleanup","get","key","entry","debug","undefined","isExpired","invalidate","lastAccessed","Date","accessCount","delete","set","value","ttl","createdAt","size","has","evictLRU","trigger","deleted","invalidatePattern","pattern","regex","patternToRegex","count","keys","test","info","clear","entriesCleared","getMetrics","totalRequests","hitRatio","resetMetrics","warm","dataLoader","length","patterns","data","entries","error","warn","firstKey","next","now","getTime","escaped","replace","regexPattern","RegExp","setInterval","cleanupExpired","destroy","clearInterval","expired","createCorrelationCache"],"mappings":"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"}