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,535 @@
1
+ /**
2
+ * Skills Database Query Layer
3
+ *
4
+ * Provides type-safe SQL queries for skill metadata operations.
5
+ * Part of SkillLoader API implementation.
6
+ *
7
+ * @module skills-query
8
+ */ /**
9
+ * Bootstrap skill IDs that should always be loaded
10
+ */ export const BOOTSTRAP_SKILL_IDS = [
11
+ 'cfn-coordination',
12
+ 'hook-pipeline',
13
+ 'pre-edit-backup',
14
+ 'cfn-agent-spawning',
15
+ 'cfn-loop-validation'
16
+ ];
17
+ /**
18
+ * SQL queries for skills database operations
19
+ */ export class SkillsQueryBuilder {
20
+ /**
21
+ * Get skills by agent type with optional context filtering
22
+ */ static getSkillsByAgentType(agentType, contextKeywords, phase) {
23
+ const params = [
24
+ agentType
25
+ ];
26
+ let sql = `
27
+ SELECT DISTINCT
28
+ s.id,
29
+ s.name,
30
+ s.version,
31
+ s.file_path,
32
+ s.content_hash,
33
+ s.namespace,
34
+ s.status,
35
+ s.priority,
36
+ s.tags,
37
+ asm.is_required,
38
+ asm.priority as mapping_priority
39
+ FROM skills s
40
+ INNER JOIN agent_skill_mappings asm ON s.id = asm.skill_id
41
+ WHERE asm.agent_type = ?
42
+ AND s.status = 'active'
43
+ `;
44
+ // Add phase filter if provided
45
+ if (phase) {
46
+ sql += ` AND (asm.phase IS NULL OR asm.phase = ?)`;
47
+ params.push(phase);
48
+ }
49
+ // Add context keyword filter if provided
50
+ if (contextKeywords && contextKeywords.length > 0) {
51
+ const keywordConditions = contextKeywords.map(()=>`(asm.context_keywords LIKE ? OR s.tags LIKE ?)`).join(' OR ');
52
+ sql += ` AND (${keywordConditions})`;
53
+ contextKeywords.forEach((keyword)=>{
54
+ params.push(`%${keyword}%`, `%${keyword}%`);
55
+ });
56
+ }
57
+ sql += `
58
+ ORDER BY
59
+ asm.is_required DESC,
60
+ COALESCE(asm.priority, s.priority) DESC,
61
+ s.name ASC
62
+ `;
63
+ return {
64
+ sql,
65
+ params
66
+ };
67
+ }
68
+ /**
69
+ * Get bootstrap skills that should always be loaded
70
+ */ static getBootstrapSkills() {
71
+ const placeholders = BOOTSTRAP_SKILL_IDS.map(()=>'?').join(',');
72
+ return {
73
+ sql: `
74
+ SELECT
75
+ id,
76
+ name,
77
+ version,
78
+ file_path,
79
+ content_hash,
80
+ namespace,
81
+ status,
82
+ priority,
83
+ tags
84
+ FROM skills
85
+ WHERE id IN (${placeholders})
86
+ AND status = 'active'
87
+ ORDER BY priority DESC
88
+ `,
89
+ params: [
90
+ ...BOOTSTRAP_SKILL_IDS
91
+ ]
92
+ };
93
+ }
94
+ /**
95
+ * Get skill by ID
96
+ */ static getSkillById(skillId) {
97
+ return {
98
+ sql: `
99
+ SELECT
100
+ id,
101
+ name,
102
+ version,
103
+ file_path,
104
+ content_hash,
105
+ namespace,
106
+ status,
107
+ priority,
108
+ tags,
109
+ created_at,
110
+ updated_at
111
+ FROM skills
112
+ WHERE id = ?
113
+ `,
114
+ params: [
115
+ skillId
116
+ ]
117
+ };
118
+ }
119
+ /**
120
+ * Validate skill content hash
121
+ */ static validateContentHash(skillId, expectedHash) {
122
+ return {
123
+ sql: `
124
+ SELECT
125
+ id,
126
+ content_hash,
127
+ updated_at
128
+ FROM skills
129
+ WHERE id = ?
130
+ AND content_hash = ?
131
+ `,
132
+ params: [
133
+ skillId,
134
+ expectedHash
135
+ ]
136
+ };
137
+ }
138
+ /**
139
+ * Log skill usage for analytics
140
+ */ static insertSkillUsage(usage) {
141
+ return {
142
+ sql: `
143
+ INSERT INTO skill_usage_log (
144
+ id,
145
+ skill_id,
146
+ agent_id,
147
+ agent_type,
148
+ loaded_at,
149
+ execution_time_ms,
150
+ confidence_impact
151
+ ) VALUES (?, ?, ?, ?, datetime('now'), ?, ?)
152
+ `,
153
+ params: [
154
+ `usage-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,
155
+ usage.skill_id,
156
+ usage.agent_id,
157
+ usage.agent_type,
158
+ usage.execution_time_ms,
159
+ usage.confidence_impact ?? null
160
+ ]
161
+ };
162
+ }
163
+ /**
164
+ * Get skill effectiveness analytics
165
+ */ static getSkillEffectiveness(skillId) {
166
+ const params = [];
167
+ let sql = `
168
+ SELECT
169
+ s.id,
170
+ s.name,
171
+ COUNT(sul.id) as usage_count,
172
+ AVG(sul.execution_time_ms) as avg_load_time_ms,
173
+ AVG(sul.confidence_impact) as avg_confidence_impact,
174
+ MAX(sul.loaded_at) as last_used_at
175
+ FROM skills s
176
+ LEFT JOIN skill_usage_log sul ON s.id = sul.skill_id
177
+ `;
178
+ if (skillId) {
179
+ sql += ` WHERE s.id = ?`;
180
+ params.push(skillId);
181
+ }
182
+ sql += `
183
+ GROUP BY s.id, s.name
184
+ ORDER BY usage_count DESC, avg_confidence_impact DESC
185
+ `;
186
+ return {
187
+ sql,
188
+ params
189
+ };
190
+ }
191
+ /**
192
+ * Update skill content hash (for cache invalidation)
193
+ */ static updateContentHash(skillId, newHash) {
194
+ return {
195
+ sql: `
196
+ UPDATE skills
197
+ SET content_hash = ?,
198
+ updated_at = datetime('now')
199
+ WHERE id = ?
200
+ `,
201
+ params: [
202
+ newHash,
203
+ skillId
204
+ ]
205
+ };
206
+ }
207
+ /**
208
+ * Get all active skills for caching
209
+ */ static getAllActiveSkills() {
210
+ return {
211
+ sql: `
212
+ SELECT
213
+ id,
214
+ name,
215
+ version,
216
+ file_path,
217
+ content_hash,
218
+ namespace,
219
+ status,
220
+ priority,
221
+ tags
222
+ FROM skills
223
+ WHERE status = 'active'
224
+ ORDER BY priority DESC, name ASC
225
+ `,
226
+ params: []
227
+ };
228
+ }
229
+ /**
230
+ * Get skills by tags
231
+ */ static getSkillsByTags(tags) {
232
+ const conditions = tags.map(()=>'s.tags LIKE ?').join(' OR ');
233
+ const params = tags.map((tag)=>`%${tag}%`);
234
+ return {
235
+ sql: `
236
+ SELECT
237
+ id,
238
+ name,
239
+ version,
240
+ file_path,
241
+ content_hash,
242
+ namespace,
243
+ status,
244
+ priority,
245
+ tags
246
+ FROM skills s
247
+ WHERE status = 'active'
248
+ AND (${conditions})
249
+ ORDER BY priority DESC, name ASC
250
+ `,
251
+ params
252
+ };
253
+ }
254
+ /**
255
+ * Create skills table schema
256
+ */ static createSkillsTableSchema() {
257
+ return `
258
+ CREATE TABLE IF NOT EXISTS skills (
259
+ id TEXT PRIMARY KEY,
260
+ name TEXT NOT NULL,
261
+ version TEXT NOT NULL,
262
+ file_path TEXT NOT NULL,
263
+ content_hash TEXT NOT NULL,
264
+ namespace TEXT NOT NULL DEFAULT 'cfn',
265
+ status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'deprecated', 'experimental')),
266
+ priority INTEGER NOT NULL DEFAULT 5 CHECK(priority BETWEEN 1 AND 10),
267
+ tags TEXT,
268
+ created_at TEXT NOT NULL DEFAULT (datetime('now')),
269
+ updated_at TEXT NOT NULL DEFAULT (datetime('now'))
270
+ );
271
+
272
+ CREATE INDEX IF NOT EXISTS idx_skills_status ON skills(status);
273
+ CREATE INDEX IF NOT EXISTS idx_skills_namespace ON skills(namespace);
274
+ CREATE INDEX IF NOT EXISTS idx_skills_priority ON skills(priority);
275
+ CREATE INDEX IF NOT EXISTS idx_skills_tags ON skills(tags);
276
+ `;
277
+ }
278
+ /**
279
+ * Create agent_skill_mappings table schema
280
+ */ static createMappingsTableSchema() {
281
+ return `
282
+ CREATE TABLE IF NOT EXISTS agent_skill_mappings (
283
+ agent_type TEXT NOT NULL,
284
+ skill_id TEXT NOT NULL,
285
+ is_required BOOLEAN NOT NULL DEFAULT 0,
286
+ priority INTEGER NOT NULL DEFAULT 5 CHECK(priority BETWEEN 1 AND 10),
287
+ phase TEXT,
288
+ context_keywords TEXT,
289
+ PRIMARY KEY (agent_type, skill_id),
290
+ FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE
291
+ );
292
+
293
+ CREATE INDEX IF NOT EXISTS idx_asm_agent_type ON agent_skill_mappings(agent_type);
294
+ CREATE INDEX IF NOT EXISTS idx_asm_skill_id ON agent_skill_mappings(skill_id);
295
+ CREATE INDEX IF NOT EXISTS idx_asm_phase ON agent_skill_mappings(phase);
296
+ `;
297
+ }
298
+ /**
299
+ * Create skill_usage_log table schema
300
+ */ static createUsageLogTableSchema() {
301
+ return `
302
+ CREATE TABLE IF NOT EXISTS skill_usage_log (
303
+ id TEXT PRIMARY KEY,
304
+ skill_id TEXT NOT NULL,
305
+ agent_id TEXT NOT NULL,
306
+ agent_type TEXT NOT NULL,
307
+ loaded_at TEXT NOT NULL,
308
+ execution_time_ms INTEGER NOT NULL,
309
+ confidence_impact REAL,
310
+ FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE
311
+ );
312
+
313
+ CREATE INDEX IF NOT EXISTS idx_sul_skill_id ON skill_usage_log(skill_id);
314
+ CREATE INDEX IF NOT EXISTS idx_sul_agent_type ON skill_usage_log(agent_type);
315
+ CREATE INDEX IF NOT EXISTS idx_sul_loaded_at ON skill_usage_log(loaded_at);
316
+ `;
317
+ }
318
+ /**
319
+ * Create cache_invalidations table schema
320
+ *
321
+ * Tracks cache invalidation events for monitoring and analytics.
322
+ */ static createCacheInvalidationsTableSchema() {
323
+ return `
324
+ CREATE TABLE IF NOT EXISTS cache_invalidations (
325
+ id TEXT PRIMARY KEY,
326
+ skill_id TEXT NOT NULL,
327
+ invalidated_at TEXT NOT NULL DEFAULT (datetime('now')),
328
+ reason TEXT NOT NULL,
329
+ old_hash TEXT,
330
+ new_hash TEXT,
331
+ FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE
332
+ );
333
+
334
+ CREATE INDEX IF NOT EXISTS idx_ci_skill_id ON cache_invalidations(skill_id);
335
+ CREATE INDEX IF NOT EXISTS idx_ci_timestamp ON cache_invalidations(invalidated_at);
336
+ `;
337
+ }
338
+ /**
339
+ * Create skill_loader_metrics table schema
340
+ *
341
+ * Tracks skill loader performance metrics for monitoring.
342
+ */ static createSkillLoaderMetricsTableSchema() {
343
+ return `
344
+ CREATE TABLE IF NOT EXISTS skill_loader_metrics (
345
+ id TEXT PRIMARY KEY,
346
+ agent_type TEXT NOT NULL,
347
+ load_time_ms INTEGER NOT NULL,
348
+ cache_hit INTEGER NOT NULL DEFAULT 0,
349
+ cache_miss INTEGER NOT NULL DEFAULT 0,
350
+ cache_invalidation INTEGER NOT NULL DEFAULT 0,
351
+ skills_loaded INTEGER NOT NULL,
352
+ timestamp TEXT NOT NULL DEFAULT (datetime('now'))
353
+ );
354
+
355
+ CREATE INDEX IF NOT EXISTS idx_slm_agent_type ON skill_loader_metrics(agent_type);
356
+ CREATE INDEX IF NOT EXISTS idx_slm_timestamp ON skill_loader_metrics(timestamp);
357
+ `;
358
+ }
359
+ /**
360
+ * Get cache invalidation events (last N hours)
361
+ *
362
+ * @param hours - Number of hours to look back (default: 24)
363
+ * @returns SQL query for cache invalidations
364
+ */ static getCacheInvalidations(hours = 24) {
365
+ return {
366
+ sql: `
367
+ SELECT
368
+ ci.skill_id,
369
+ s.name as skill_name,
370
+ ci.invalidated_at,
371
+ ci.reason,
372
+ ci.old_hash,
373
+ ci.new_hash
374
+ FROM cache_invalidations ci
375
+ LEFT JOIN skills s ON ci.skill_id = s.id
376
+ WHERE ci.invalidated_at > datetime('now', '-' || ? || ' hours')
377
+ ORDER BY ci.invalidated_at DESC
378
+ `,
379
+ params: [
380
+ hours
381
+ ]
382
+ };
383
+ }
384
+ /**
385
+ * Get cache invalidation count (last N hours)
386
+ *
387
+ * @param hours - Number of hours to look back (default: 24)
388
+ * @returns SQL query for invalidation count
389
+ */ static getCacheInvalidationCount(hours = 24) {
390
+ return {
391
+ sql: `
392
+ SELECT COUNT(*) as invalidations
393
+ FROM cache_invalidations
394
+ WHERE invalidated_at > datetime('now', '-' || ? || ' hours')
395
+ `,
396
+ params: [
397
+ hours
398
+ ]
399
+ };
400
+ }
401
+ /**
402
+ * Get skills with frequent updates (top N)
403
+ *
404
+ * Identifies skills that are frequently modified based on invalidation events.
405
+ *
406
+ * @param limit - Number of top skills to return (default: 10)
407
+ * @param hours - Number of hours to look back (default: 168 = 7 days)
408
+ * @returns SQL query for frequently updated skills
409
+ */ static getFrequentlyUpdatedSkills(limit = 10, hours = 168) {
410
+ return {
411
+ sql: `
412
+ SELECT
413
+ ci.skill_id,
414
+ s.name as skill_name,
415
+ COUNT(*) as update_count,
416
+ MAX(ci.invalidated_at) as last_update
417
+ FROM cache_invalidations ci
418
+ LEFT JOIN skills s ON ci.skill_id = s.id
419
+ WHERE ci.invalidated_at > datetime('now', '-' || ? || ' hours')
420
+ GROUP BY ci.skill_id, s.name
421
+ ORDER BY update_count DESC
422
+ LIMIT ?
423
+ `,
424
+ params: [
425
+ hours,
426
+ limit
427
+ ]
428
+ };
429
+ }
430
+ /**
431
+ * Get cache hit/miss/invalidation ratio
432
+ *
433
+ * Calculates cache performance metrics over the last N hours.
434
+ *
435
+ * @param hours - Number of hours to look back (default: 24)
436
+ * @returns SQL query for cache performance metrics
437
+ */ static getCachePerformanceMetrics(hours = 24) {
438
+ return {
439
+ sql: `
440
+ SELECT
441
+ SUM(cache_hit) as total_hits,
442
+ SUM(cache_miss) as total_misses,
443
+ SUM(cache_invalidation) as total_invalidations,
444
+ ROUND(100.0 * SUM(cache_hit) / NULLIF(SUM(cache_hit) + SUM(cache_miss), 0), 2) as hit_rate,
445
+ ROUND(AVG(load_time_ms), 2) as avg_load_time_ms,
446
+ COUNT(*) as total_loads
447
+ FROM skill_loader_metrics
448
+ WHERE timestamp > datetime('now', '-' || ? || ' hours')
449
+ `,
450
+ params: [
451
+ hours
452
+ ]
453
+ };
454
+ }
455
+ /**
456
+ * Get cache performance by agent type
457
+ *
458
+ * Breaks down cache performance metrics per agent type.
459
+ *
460
+ * @param hours - Number of hours to look back (default: 24)
461
+ * @returns SQL query for agent-specific cache metrics
462
+ */ static getCachePerformanceByAgentType(hours = 24) {
463
+ return {
464
+ sql: `
465
+ SELECT
466
+ agent_type,
467
+ SUM(cache_hit) as hits,
468
+ SUM(cache_miss) as misses,
469
+ SUM(cache_invalidation) as invalidations,
470
+ ROUND(100.0 * SUM(cache_hit) / NULLIF(SUM(cache_hit) + SUM(cache_miss), 0), 2) as hit_rate,
471
+ ROUND(AVG(load_time_ms), 2) as avg_load_time_ms,
472
+ COUNT(*) as load_count
473
+ FROM skill_loader_metrics
474
+ WHERE timestamp > datetime('now', '-' || ? || ' hours')
475
+ GROUP BY agent_type
476
+ ORDER BY load_count DESC
477
+ `,
478
+ params: [
479
+ hours
480
+ ]
481
+ };
482
+ }
483
+ /**
484
+ * Record cache invalidation event
485
+ *
486
+ * @param skillId - Skill ID that was invalidated
487
+ * @param reason - Reason for invalidation
488
+ * @param oldHash - Old content hash
489
+ * @param newHash - New content hash
490
+ * @returns SQL query for inserting invalidation record
491
+ */ static recordCacheInvalidation(skillId, reason, oldHash, newHash) {
492
+ return {
493
+ sql: `
494
+ INSERT INTO cache_invalidations (id, skill_id, reason, old_hash, new_hash)
495
+ VALUES (?, ?, ?, ?, ?)
496
+ `,
497
+ params: [
498
+ `ci-${skillId}-${Date.now()}`,
499
+ skillId,
500
+ reason,
501
+ oldHash || null,
502
+ newHash || null
503
+ ]
504
+ };
505
+ }
506
+ /**
507
+ * Record skill loader metrics
508
+ *
509
+ * @param agentType - Agent type that loaded skills
510
+ * @param loadTimeMs - Load time in milliseconds
511
+ * @param cacheHit - Cache hit count (0 or 1)
512
+ * @param cacheMiss - Cache miss count (0 or 1)
513
+ * @param cacheInvalidation - Cache invalidation count
514
+ * @param skillsLoaded - Number of skills loaded
515
+ * @returns SQL query for inserting metrics record
516
+ */ static recordSkillLoaderMetrics(agentType, loadTimeMs, cacheHit, cacheMiss, cacheInvalidation, skillsLoaded) {
517
+ return {
518
+ sql: `
519
+ INSERT INTO skill_loader_metrics (id, agent_type, load_time_ms, cache_hit, cache_miss, cache_invalidation, skills_loaded)
520
+ VALUES (?, ?, ?, ?, ?, ?, ?)
521
+ `,
522
+ params: [
523
+ `slm-${agentType}-${Date.now()}`,
524
+ agentType,
525
+ loadTimeMs,
526
+ cacheHit,
527
+ cacheMiss,
528
+ cacheInvalidation,
529
+ skillsLoaded
530
+ ]
531
+ };
532
+ }
533
+ }
534
+
535
+ //# sourceMappingURL=skills-query.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/db/skills-query.ts"],"sourcesContent":["/**\r\n * Skills Database Query Layer\r\n *\r\n * Provides type-safe SQL queries for skill metadata operations.\r\n * Part of SkillLoader API implementation.\r\n *\r\n * @module skills-query\r\n */\r\n\r\nimport { QueryFilter, QueryOptions } from '../lib/database-service/types.js';\r\n\r\n/**\r\n * Skill metadata record\r\n */\r\nexport interface SkillRecord {\r\n id: string;\r\n name: string;\r\n version: string;\r\n file_path: string;\r\n content_hash: string;\r\n namespace: string;\r\n status: 'active' | 'deprecated' | 'experimental';\r\n priority: number;\r\n tags: string;\r\n created_at: string;\r\n updated_at: string;\r\n}\r\n\r\n/**\r\n * Agent-skill mapping record\r\n */\r\nexport interface AgentSkillMapping {\r\n agent_type: string;\r\n skill_id: string;\r\n is_required: boolean;\r\n priority: number;\r\n phase?: string;\r\n context_keywords?: string;\r\n}\r\n\r\n/**\r\n * Skill usage analytics record\r\n */\r\nexport interface SkillUsageRecord {\r\n id: string;\r\n skill_id: string;\r\n agent_id: string;\r\n agent_type: string;\r\n loaded_at: string;\r\n execution_time_ms: number;\r\n confidence_impact?: number;\r\n}\r\n\r\n/**\r\n * Bootstrap skill IDs that should always be loaded\r\n */\r\nexport const BOOTSTRAP_SKILL_IDS = [\r\n 'cfn-coordination',\r\n 'hook-pipeline',\r\n 'pre-edit-backup',\r\n 'cfn-agent-spawning',\r\n 'cfn-loop-validation',\r\n] as const;\r\n\r\n/**\r\n * SQL queries for skills database operations\r\n */\r\nexport class SkillsQueryBuilder {\r\n /**\r\n * Get skills by agent type with optional context filtering\r\n */\r\n static getSkillsByAgentType(\r\n agentType: string,\r\n contextKeywords?: string[],\r\n phase?: string\r\n ): { sql: string; params: any[] } {\r\n const params: any[] = [agentType];\r\n let sql = `\r\n SELECT DISTINCT\r\n s.id,\r\n s.name,\r\n s.version,\r\n s.file_path,\r\n s.content_hash,\r\n s.namespace,\r\n s.status,\r\n s.priority,\r\n s.tags,\r\n asm.is_required,\r\n asm.priority as mapping_priority\r\n FROM skills s\r\n INNER JOIN agent_skill_mappings asm ON s.id = asm.skill_id\r\n WHERE asm.agent_type = ?\r\n AND s.status = 'active'\r\n `;\r\n\r\n // Add phase filter if provided\r\n if (phase) {\r\n sql += ` AND (asm.phase IS NULL OR asm.phase = ?)`;\r\n params.push(phase);\r\n }\r\n\r\n // Add context keyword filter if provided\r\n if (contextKeywords && contextKeywords.length > 0) {\r\n const keywordConditions = contextKeywords.map(() =>\r\n `(asm.context_keywords LIKE ? OR s.tags LIKE ?)`\r\n ).join(' OR ');\r\n\r\n sql += ` AND (${keywordConditions})`;\r\n\r\n contextKeywords.forEach(keyword => {\r\n params.push(`%${keyword}%`, `%${keyword}%`);\r\n });\r\n }\r\n\r\n sql += `\r\n ORDER BY\r\n asm.is_required DESC,\r\n COALESCE(asm.priority, s.priority) DESC,\r\n s.name ASC\r\n `;\r\n\r\n return { sql, params };\r\n }\r\n\r\n /**\r\n * Get bootstrap skills that should always be loaded\r\n */\r\n static getBootstrapSkills(): { sql: string; params: any[] } {\r\n const placeholders = BOOTSTRAP_SKILL_IDS.map(() => '?').join(',');\r\n\r\n return {\r\n sql: `\r\n SELECT\r\n id,\r\n name,\r\n version,\r\n file_path,\r\n content_hash,\r\n namespace,\r\n status,\r\n priority,\r\n tags\r\n FROM skills\r\n WHERE id IN (${placeholders})\r\n AND status = 'active'\r\n ORDER BY priority DESC\r\n `,\r\n params: [...BOOTSTRAP_SKILL_IDS],\r\n };\r\n }\r\n\r\n /**\r\n * Get skill by ID\r\n */\r\n static getSkillById(skillId: string): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n id,\r\n name,\r\n version,\r\n file_path,\r\n content_hash,\r\n namespace,\r\n status,\r\n priority,\r\n tags,\r\n created_at,\r\n updated_at\r\n FROM skills\r\n WHERE id = ?\r\n `,\r\n params: [skillId],\r\n };\r\n }\r\n\r\n /**\r\n * Validate skill content hash\r\n */\r\n static validateContentHash(skillId: string, expectedHash: string): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n id,\r\n content_hash,\r\n updated_at\r\n FROM skills\r\n WHERE id = ?\r\n AND content_hash = ?\r\n `,\r\n params: [skillId, expectedHash],\r\n };\r\n }\r\n\r\n /**\r\n * Log skill usage for analytics\r\n */\r\n static insertSkillUsage(usage: Omit<SkillUsageRecord, 'id' | 'loaded_at'>): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n INSERT INTO skill_usage_log (\r\n id,\r\n skill_id,\r\n agent_id,\r\n agent_type,\r\n loaded_at,\r\n execution_time_ms,\r\n confidence_impact\r\n ) VALUES (?, ?, ?, ?, datetime('now'), ?, ?)\r\n `,\r\n params: [\r\n `usage-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`,\r\n usage.skill_id,\r\n usage.agent_id,\r\n usage.agent_type,\r\n usage.execution_time_ms,\r\n usage.confidence_impact ?? null,\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Get skill effectiveness analytics\r\n */\r\n static getSkillEffectiveness(skillId?: string): { sql: string; params: any[] } {\r\n const params: any[] = [];\r\n let sql = `\r\n SELECT\r\n s.id,\r\n s.name,\r\n COUNT(sul.id) as usage_count,\r\n AVG(sul.execution_time_ms) as avg_load_time_ms,\r\n AVG(sul.confidence_impact) as avg_confidence_impact,\r\n MAX(sul.loaded_at) as last_used_at\r\n FROM skills s\r\n LEFT JOIN skill_usage_log sul ON s.id = sul.skill_id\r\n `;\r\n\r\n if (skillId) {\r\n sql += ` WHERE s.id = ?`;\r\n params.push(skillId);\r\n }\r\n\r\n sql += `\r\n GROUP BY s.id, s.name\r\n ORDER BY usage_count DESC, avg_confidence_impact DESC\r\n `;\r\n\r\n return { sql, params };\r\n }\r\n\r\n /**\r\n * Update skill content hash (for cache invalidation)\r\n */\r\n static updateContentHash(skillId: string, newHash: string): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n UPDATE skills\r\n SET content_hash = ?,\r\n updated_at = datetime('now')\r\n WHERE id = ?\r\n `,\r\n params: [newHash, skillId],\r\n };\r\n }\r\n\r\n /**\r\n * Get all active skills for caching\r\n */\r\n static getAllActiveSkills(): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n id,\r\n name,\r\n version,\r\n file_path,\r\n content_hash,\r\n namespace,\r\n status,\r\n priority,\r\n tags\r\n FROM skills\r\n WHERE status = 'active'\r\n ORDER BY priority DESC, name ASC\r\n `,\r\n params: [],\r\n };\r\n }\r\n\r\n /**\r\n * Get skills by tags\r\n */\r\n static getSkillsByTags(tags: string[]): { sql: string; params: any[] } {\r\n const conditions = tags.map(() => 's.tags LIKE ?').join(' OR ');\r\n const params = tags.map(tag => `%${tag}%`);\r\n\r\n return {\r\n sql: `\r\n SELECT\r\n id,\r\n name,\r\n version,\r\n file_path,\r\n content_hash,\r\n namespace,\r\n status,\r\n priority,\r\n tags\r\n FROM skills s\r\n WHERE status = 'active'\r\n AND (${conditions})\r\n ORDER BY priority DESC, name ASC\r\n `,\r\n params,\r\n };\r\n }\r\n\r\n /**\r\n * Create skills table schema\r\n */\r\n static createSkillsTableSchema(): string {\r\n return `\r\n CREATE TABLE IF NOT EXISTS skills (\r\n id TEXT PRIMARY KEY,\r\n name TEXT NOT NULL,\r\n version TEXT NOT NULL,\r\n file_path TEXT NOT NULL,\r\n content_hash TEXT NOT NULL,\r\n namespace TEXT NOT NULL DEFAULT 'cfn',\r\n status TEXT NOT NULL DEFAULT 'active' CHECK(status IN ('active', 'deprecated', 'experimental')),\r\n priority INTEGER NOT NULL DEFAULT 5 CHECK(priority BETWEEN 1 AND 10),\r\n tags TEXT,\r\n created_at TEXT NOT NULL DEFAULT (datetime('now')),\r\n updated_at TEXT NOT NULL DEFAULT (datetime('now'))\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_skills_status ON skills(status);\r\n CREATE INDEX IF NOT EXISTS idx_skills_namespace ON skills(namespace);\r\n CREATE INDEX IF NOT EXISTS idx_skills_priority ON skills(priority);\r\n CREATE INDEX IF NOT EXISTS idx_skills_tags ON skills(tags);\r\n `;\r\n }\r\n\r\n /**\r\n * Create agent_skill_mappings table schema\r\n */\r\n static createMappingsTableSchema(): string {\r\n return `\r\n CREATE TABLE IF NOT EXISTS agent_skill_mappings (\r\n agent_type TEXT NOT NULL,\r\n skill_id TEXT NOT NULL,\r\n is_required BOOLEAN NOT NULL DEFAULT 0,\r\n priority INTEGER NOT NULL DEFAULT 5 CHECK(priority BETWEEN 1 AND 10),\r\n phase TEXT,\r\n context_keywords TEXT,\r\n PRIMARY KEY (agent_type, skill_id),\r\n FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_asm_agent_type ON agent_skill_mappings(agent_type);\r\n CREATE INDEX IF NOT EXISTS idx_asm_skill_id ON agent_skill_mappings(skill_id);\r\n CREATE INDEX IF NOT EXISTS idx_asm_phase ON agent_skill_mappings(phase);\r\n `;\r\n }\r\n\r\n /**\r\n * Create skill_usage_log table schema\r\n */\r\n static createUsageLogTableSchema(): string {\r\n return `\r\n CREATE TABLE IF NOT EXISTS skill_usage_log (\r\n id TEXT PRIMARY KEY,\r\n skill_id TEXT NOT NULL,\r\n agent_id TEXT NOT NULL,\r\n agent_type TEXT NOT NULL,\r\n loaded_at TEXT NOT NULL,\r\n execution_time_ms INTEGER NOT NULL,\r\n confidence_impact REAL,\r\n FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_sul_skill_id ON skill_usage_log(skill_id);\r\n CREATE INDEX IF NOT EXISTS idx_sul_agent_type ON skill_usage_log(agent_type);\r\n CREATE INDEX IF NOT EXISTS idx_sul_loaded_at ON skill_usage_log(loaded_at);\r\n `;\r\n }\r\n\r\n /**\r\n * Create cache_invalidations table schema\r\n *\r\n * Tracks cache invalidation events for monitoring and analytics.\r\n */\r\n static createCacheInvalidationsTableSchema(): string {\r\n return `\r\n CREATE TABLE IF NOT EXISTS cache_invalidations (\r\n id TEXT PRIMARY KEY,\r\n skill_id TEXT NOT NULL,\r\n invalidated_at TEXT NOT NULL DEFAULT (datetime('now')),\r\n reason TEXT NOT NULL,\r\n old_hash TEXT,\r\n new_hash TEXT,\r\n FOREIGN KEY (skill_id) REFERENCES skills(id) ON DELETE CASCADE\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_ci_skill_id ON cache_invalidations(skill_id);\r\n CREATE INDEX IF NOT EXISTS idx_ci_timestamp ON cache_invalidations(invalidated_at);\r\n `;\r\n }\r\n\r\n /**\r\n * Create skill_loader_metrics table schema\r\n *\r\n * Tracks skill loader performance metrics for monitoring.\r\n */\r\n static createSkillLoaderMetricsTableSchema(): string {\r\n return `\r\n CREATE TABLE IF NOT EXISTS skill_loader_metrics (\r\n id TEXT PRIMARY KEY,\r\n agent_type TEXT NOT NULL,\r\n load_time_ms INTEGER NOT NULL,\r\n cache_hit INTEGER NOT NULL DEFAULT 0,\r\n cache_miss INTEGER NOT NULL DEFAULT 0,\r\n cache_invalidation INTEGER NOT NULL DEFAULT 0,\r\n skills_loaded INTEGER NOT NULL,\r\n timestamp TEXT NOT NULL DEFAULT (datetime('now'))\r\n );\r\n\r\n CREATE INDEX IF NOT EXISTS idx_slm_agent_type ON skill_loader_metrics(agent_type);\r\n CREATE INDEX IF NOT EXISTS idx_slm_timestamp ON skill_loader_metrics(timestamp);\r\n `;\r\n }\r\n\r\n /**\r\n * Get cache invalidation events (last N hours)\r\n *\r\n * @param hours - Number of hours to look back (default: 24)\r\n * @returns SQL query for cache invalidations\r\n */\r\n static getCacheInvalidations(hours: number = 24): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n ci.skill_id,\r\n s.name as skill_name,\r\n ci.invalidated_at,\r\n ci.reason,\r\n ci.old_hash,\r\n ci.new_hash\r\n FROM cache_invalidations ci\r\n LEFT JOIN skills s ON ci.skill_id = s.id\r\n WHERE ci.invalidated_at > datetime('now', '-' || ? || ' hours')\r\n ORDER BY ci.invalidated_at DESC\r\n `,\r\n params: [hours],\r\n };\r\n }\r\n\r\n /**\r\n * Get cache invalidation count (last N hours)\r\n *\r\n * @param hours - Number of hours to look back (default: 24)\r\n * @returns SQL query for invalidation count\r\n */\r\n static getCacheInvalidationCount(hours: number = 24): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT COUNT(*) as invalidations\r\n FROM cache_invalidations\r\n WHERE invalidated_at > datetime('now', '-' || ? || ' hours')\r\n `,\r\n params: [hours],\r\n };\r\n }\r\n\r\n /**\r\n * Get skills with frequent updates (top N)\r\n *\r\n * Identifies skills that are frequently modified based on invalidation events.\r\n *\r\n * @param limit - Number of top skills to return (default: 10)\r\n * @param hours - Number of hours to look back (default: 168 = 7 days)\r\n * @returns SQL query for frequently updated skills\r\n */\r\n static getFrequentlyUpdatedSkills(\r\n limit: number = 10,\r\n hours: number = 168\r\n ): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n ci.skill_id,\r\n s.name as skill_name,\r\n COUNT(*) as update_count,\r\n MAX(ci.invalidated_at) as last_update\r\n FROM cache_invalidations ci\r\n LEFT JOIN skills s ON ci.skill_id = s.id\r\n WHERE ci.invalidated_at > datetime('now', '-' || ? || ' hours')\r\n GROUP BY ci.skill_id, s.name\r\n ORDER BY update_count DESC\r\n LIMIT ?\r\n `,\r\n params: [hours, limit],\r\n };\r\n }\r\n\r\n /**\r\n * Get cache hit/miss/invalidation ratio\r\n *\r\n * Calculates cache performance metrics over the last N hours.\r\n *\r\n * @param hours - Number of hours to look back (default: 24)\r\n * @returns SQL query for cache performance metrics\r\n */\r\n static getCachePerformanceMetrics(hours: number = 24): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n SUM(cache_hit) as total_hits,\r\n SUM(cache_miss) as total_misses,\r\n SUM(cache_invalidation) as total_invalidations,\r\n ROUND(100.0 * SUM(cache_hit) / NULLIF(SUM(cache_hit) + SUM(cache_miss), 0), 2) as hit_rate,\r\n ROUND(AVG(load_time_ms), 2) as avg_load_time_ms,\r\n COUNT(*) as total_loads\r\n FROM skill_loader_metrics\r\n WHERE timestamp > datetime('now', '-' || ? || ' hours')\r\n `,\r\n params: [hours],\r\n };\r\n }\r\n\r\n /**\r\n * Get cache performance by agent type\r\n *\r\n * Breaks down cache performance metrics per agent type.\r\n *\r\n * @param hours - Number of hours to look back (default: 24)\r\n * @returns SQL query for agent-specific cache metrics\r\n */\r\n static getCachePerformanceByAgentType(hours: number = 24): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n SELECT\r\n agent_type,\r\n SUM(cache_hit) as hits,\r\n SUM(cache_miss) as misses,\r\n SUM(cache_invalidation) as invalidations,\r\n ROUND(100.0 * SUM(cache_hit) / NULLIF(SUM(cache_hit) + SUM(cache_miss), 0), 2) as hit_rate,\r\n ROUND(AVG(load_time_ms), 2) as avg_load_time_ms,\r\n COUNT(*) as load_count\r\n FROM skill_loader_metrics\r\n WHERE timestamp > datetime('now', '-' || ? || ' hours')\r\n GROUP BY agent_type\r\n ORDER BY load_count DESC\r\n `,\r\n params: [hours],\r\n };\r\n }\r\n\r\n /**\r\n * Record cache invalidation event\r\n *\r\n * @param skillId - Skill ID that was invalidated\r\n * @param reason - Reason for invalidation\r\n * @param oldHash - Old content hash\r\n * @param newHash - New content hash\r\n * @returns SQL query for inserting invalidation record\r\n */\r\n static recordCacheInvalidation(\r\n skillId: string,\r\n reason: string,\r\n oldHash?: string,\r\n newHash?: string\r\n ): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n INSERT INTO cache_invalidations (id, skill_id, reason, old_hash, new_hash)\r\n VALUES (?, ?, ?, ?, ?)\r\n `,\r\n params: [\r\n `ci-${skillId}-${Date.now()}`,\r\n skillId,\r\n reason,\r\n oldHash || null,\r\n newHash || null,\r\n ],\r\n };\r\n }\r\n\r\n /**\r\n * Record skill loader metrics\r\n *\r\n * @param agentType - Agent type that loaded skills\r\n * @param loadTimeMs - Load time in milliseconds\r\n * @param cacheHit - Cache hit count (0 or 1)\r\n * @param cacheMiss - Cache miss count (0 or 1)\r\n * @param cacheInvalidation - Cache invalidation count\r\n * @param skillsLoaded - Number of skills loaded\r\n * @returns SQL query for inserting metrics record\r\n */\r\n static recordSkillLoaderMetrics(\r\n agentType: string,\r\n loadTimeMs: number,\r\n cacheHit: number,\r\n cacheMiss: number,\r\n cacheInvalidation: number,\r\n skillsLoaded: number\r\n ): { sql: string; params: any[] } {\r\n return {\r\n sql: `\r\n INSERT INTO skill_loader_metrics (id, agent_type, load_time_ms, cache_hit, cache_miss, cache_invalidation, skills_loaded)\r\n VALUES (?, ?, ?, ?, ?, ?, ?)\r\n `,\r\n params: [\r\n `slm-${agentType}-${Date.now()}`,\r\n agentType,\r\n loadTimeMs,\r\n cacheHit,\r\n cacheMiss,\r\n cacheInvalidation,\r\n skillsLoaded,\r\n ],\r\n };\r\n }\r\n}\r\n"],"names":["BOOTSTRAP_SKILL_IDS","SkillsQueryBuilder","getSkillsByAgentType","agentType","contextKeywords","phase","params","sql","push","length","keywordConditions","map","join","forEach","keyword","getBootstrapSkills","placeholders","getSkillById","skillId","validateContentHash","expectedHash","insertSkillUsage","usage","Date","now","Math","random","toString","substr","skill_id","agent_id","agent_type","execution_time_ms","confidence_impact","getSkillEffectiveness","updateContentHash","newHash","getAllActiveSkills","getSkillsByTags","tags","conditions","tag","createSkillsTableSchema","createMappingsTableSchema","createUsageLogTableSchema","createCacheInvalidationsTableSchema","createSkillLoaderMetricsTableSchema","getCacheInvalidations","hours","getCacheInvalidationCount","getFrequentlyUpdatedSkills","limit","getCachePerformanceMetrics","getCachePerformanceByAgentType","recordCacheInvalidation","reason","oldHash","recordSkillLoaderMetrics","loadTimeMs","cacheHit","cacheMiss","cacheInvalidation","skillsLoaded"],"mappings":"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"}