claude-flow-novice 2.15.3 → 2.15.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (473) hide show
  1. package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  2. package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  3. package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  4. package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  5. package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  6. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  7. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  8. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  9. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  10. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  11. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  12. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  13. package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  14. package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  15. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  16. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  17. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  18. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  19. package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  20. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  21. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  22. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  23. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  24. package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  25. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  26. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  27. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  28. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  29. package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  30. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  31. package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  32. package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  33. package/.claude/commands/cfn-loop-cli.md +29 -6
  34. package/.claude/commands/switch-api.md +31 -10
  35. package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
  36. package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  37. package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
  38. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  39. package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  40. package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  41. package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  42. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  43. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  44. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  45. package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  46. package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  47. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  48. package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
  49. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  50. package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  51. package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  52. package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
  53. package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  54. package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  55. package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  56. package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  57. package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
  58. package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
  59. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  60. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  61. package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  62. package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  63. package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  64. package/README.md +116 -475
  65. package/claude-assets/agents/cfn-dev-team/README.md +103 -0
  66. package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
  67. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
  68. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
  69. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
  70. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
  71. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
  72. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
  73. package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
  74. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
  75. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
  76. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
  77. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
  78. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
  79. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
  80. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
  81. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
  82. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
  83. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
  84. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
  85. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
  86. package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
  87. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
  88. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
  89. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
  90. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
  91. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
  92. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
  93. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
  94. package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
  95. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
  96. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
  97. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
  98. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
  99. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
  100. package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
  101. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
  102. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
  103. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
  104. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
  105. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
  106. package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
  107. package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
  108. package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
  109. package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
  110. package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
  111. package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
  112. package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
  113. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
  114. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
  115. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
  116. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
  117. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
  118. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
  119. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
  120. package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
  121. package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
  122. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
  123. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
  124. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
  125. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
  126. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
  127. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
  128. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
  129. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
  130. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
  131. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
  132. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
  133. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
  134. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
  135. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
  136. package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
  137. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
  138. package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
  139. package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
  140. package/claude-assets/commands/cfn-loop-cli.md +29 -6
  141. package/claude-assets/commands/switch-api.md +31 -10
  142. package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
  143. package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
  144. package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
  145. package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
  146. package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
  147. package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
  148. package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
  149. package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
  150. package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
  151. package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
  152. package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
  153. package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
  154. package/claude-assets/skills/bootstrap/database-connection.md +464 -0
  155. package/claude-assets/skills/bootstrap/error-handling.md +580 -0
  156. package/claude-assets/skills/bootstrap/file-operations.md +699 -0
  157. package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
  158. package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
  159. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
  160. package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
  161. package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
  162. package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
  163. package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
  164. package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
  165. package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
  166. package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
  167. package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
  168. package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
  169. package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
  170. package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
  171. package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
  172. package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
  173. package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
  174. package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
  175. package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
  176. package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
  177. package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
  178. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
  179. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
  180. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
  181. package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
  182. package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
  183. package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
  184. package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
  185. package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
  186. package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
  187. package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
  188. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
  189. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
  190. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
  191. package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
  192. package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
  193. package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
  194. package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
  195. package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
  196. package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
  197. package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
  198. package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
  199. package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
  200. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
  201. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
  202. package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
  203. package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
  204. package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
  205. package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
  206. package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
  207. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
  208. package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
  209. package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
  210. package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
  211. package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
  212. package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
  213. package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
  214. package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
  215. package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
  216. package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
  217. package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
  218. package/claude-assets/skills/cfn-utilities/test.sh +317 -0
  219. package/claude-assets/skills/integration/agent-handoff.sh +62 -64
  220. package/claude-assets/skills/json-validation/SKILL.md +431 -0
  221. package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
  222. package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
  223. package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
  224. package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
  225. package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
  226. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
  227. package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
  228. package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
  229. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
  230. package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
  231. package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
  232. package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
  233. package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
  234. package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
  235. package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
  236. package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
  237. package/dist/ace/ace-curator.js +10 -2
  238. package/dist/ace/ace-curator.js.map +1 -1
  239. package/dist/ace/ace-generator.js +4 -0
  240. package/dist/ace/ace-generator.js.map +1 -1
  241. package/dist/ace/ace-reflector.js +1 -1
  242. package/dist/ace/ace-reflector.js.map +1 -1
  243. package/dist/ace/context-injection.js +24 -2
  244. package/dist/ace/context-injection.js.map +1 -1
  245. package/dist/agents/task-agent-integration.js +1 -1
  246. package/dist/agents/task-agent-integration.js.map +1 -1
  247. package/dist/api/health-endpoints.js +390 -0
  248. package/dist/api/health-endpoints.js.map +1 -0
  249. package/dist/cli/agent-executor.js +4 -1
  250. package/dist/cli/agent-executor.js.map +1 -1
  251. package/dist/cli/agent-prompt-builder.js +89 -1
  252. package/dist/cli/agent-prompt-builder.js.map +1 -1
  253. package/dist/cli/agent-spawn.js +130 -37
  254. package/dist/cli/agent-spawn.js.map +1 -1
  255. package/dist/cli/config-manager.js +109 -91
  256. package/dist/cli/config-manager.js.map +1 -1
  257. package/dist/cli/conversation-fork-cleanup.js +201 -0
  258. package/dist/cli/conversation-fork-cleanup.js.map +1 -0
  259. package/dist/cli/conversation-fork.js +16 -3
  260. package/dist/cli/conversation-fork.js.map +1 -1
  261. package/dist/cli/skill-cache-validator.js +412 -0
  262. package/dist/cli/skill-cache-validator.js.map +1 -0
  263. package/dist/cli/skill-cli.js +991 -0
  264. package/dist/cli/skill-cli.js.map +1 -0
  265. package/dist/cli/skill-execution-logger.js +284 -0
  266. package/dist/cli/skill-execution-logger.js.map +1 -0
  267. package/dist/cli/skill-loader.js +457 -0
  268. package/dist/cli/skill-loader.js.map +1 -0
  269. package/dist/coordination/event-bus.js +2 -2
  270. package/dist/coordination/event-bus.js.map +1 -1
  271. package/dist/coordination/fleet-manager.js +1 -1
  272. package/dist/coordination/fleet-manager.js.map +1 -1
  273. package/dist/coordination/index.js +23 -9
  274. package/dist/coordination/index.js.map +1 -1
  275. package/dist/coordination/types/fleet-manager.types.js.map +1 -1
  276. package/dist/db/migration-manager.js +483 -0
  277. package/dist/db/migration-manager.js.map +1 -0
  278. package/dist/db/skills-query.js +535 -0
  279. package/dist/db/skills-query.js.map +1 -0
  280. package/dist/integration/DatabaseHandoff.js +1 -1
  281. package/dist/integration/DatabaseHandoff.js.map +1 -1
  282. package/dist/jobs/edge-case-analyzer.js +367 -0
  283. package/dist/jobs/edge-case-analyzer.js.map +1 -0
  284. package/dist/jobs/promotion-sla-enforcer.js +288 -0
  285. package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
  286. package/dist/lib/agent-output-parser.js.map +1 -1
  287. package/dist/lib/agent-output-validator.js.map +1 -1
  288. package/dist/lib/agent-workspace.js +281 -0
  289. package/dist/lib/agent-workspace.js.map +1 -0
  290. package/dist/lib/atomic-file-writer.js +377 -0
  291. package/dist/lib/atomic-file-writer.js.map +1 -0
  292. package/dist/lib/backup-manager.js +779 -0
  293. package/dist/lib/backup-manager.js.map +1 -0
  294. package/dist/lib/checkpoint-manager.js +837 -0
  295. package/dist/lib/checkpoint-manager.js.map +1 -0
  296. package/dist/lib/circuit-breaker.js +340 -0
  297. package/dist/lib/circuit-breaker.js.map +1 -0
  298. package/dist/lib/completion-signal-handler.js +243 -0
  299. package/dist/lib/completion-signal-handler.js.map +1 -0
  300. package/dist/lib/config-manager.js +312 -0
  301. package/dist/lib/config-manager.js.map +1 -0
  302. package/dist/lib/config-migrator.js +386 -0
  303. package/dist/lib/config-migrator.js.map +1 -0
  304. package/dist/lib/config-validator.js.map +1 -1
  305. package/dist/lib/correlation-cache.js +311 -0
  306. package/dist/lib/correlation-cache.js.map +1 -0
  307. package/dist/lib/correlation.js +263 -0
  308. package/dist/lib/correlation.js.map +1 -0
  309. package/dist/lib/database-service/connection-pool-manager.js +520 -0
  310. package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
  311. package/dist/lib/database-service/correlation.js +329 -0
  312. package/dist/lib/database-service/correlation.js.map +1 -0
  313. package/dist/lib/database-service/errors.js +120 -0
  314. package/dist/lib/database-service/errors.js.map +1 -0
  315. package/dist/lib/database-service/index.js +168 -0
  316. package/dist/lib/database-service/index.js.map +1 -0
  317. package/dist/lib/database-service/postgres-adapter.js +526 -0
  318. package/dist/lib/database-service/postgres-adapter.js.map +1 -0
  319. package/dist/lib/database-service/redis-adapter.js +360 -0
  320. package/dist/lib/database-service/redis-adapter.js.map +1 -0
  321. package/dist/lib/database-service/sqlite-adapter.js +544 -0
  322. package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
  323. package/dist/lib/database-service/transaction-manager.js +773 -0
  324. package/dist/lib/database-service/transaction-manager.js.map +1 -0
  325. package/dist/lib/database-service/types.js +23 -0
  326. package/dist/lib/database-service/types.js.map +1 -0
  327. package/dist/lib/deadlock-resolver.js +292 -0
  328. package/dist/lib/deadlock-resolver.js.map +1 -0
  329. package/dist/lib/distributed-lock.js +451 -0
  330. package/dist/lib/distributed-lock.js.map +1 -0
  331. package/dist/lib/edge-case-deduplicator.js +227 -0
  332. package/dist/lib/edge-case-deduplicator.js.map +1 -0
  333. package/dist/lib/encryption-manager.js +322 -0
  334. package/dist/lib/encryption-manager.js.map +1 -0
  335. package/dist/lib/error-aggregator.js +234 -0
  336. package/dist/lib/error-aggregator.js.map +1 -0
  337. package/dist/lib/errors.js +287 -0
  338. package/dist/lib/errors.js.map +1 -0
  339. package/dist/lib/file-lock-manager.js +578 -0
  340. package/dist/lib/file-lock-manager.js.map +1 -0
  341. package/dist/lib/file-operations.js +367 -0
  342. package/dist/lib/file-operations.js.map +1 -0
  343. package/dist/lib/idempotent-write.js +237 -0
  344. package/dist/lib/idempotent-write.js.map +1 -0
  345. package/dist/lib/integration-schema-validator.js +522 -0
  346. package/dist/lib/integration-schema-validator.js.map +1 -0
  347. package/dist/lib/lock-health-monitor.js +298 -0
  348. package/dist/lib/lock-health-monitor.js.map +1 -0
  349. package/dist/lib/log-shipper.js +422 -0
  350. package/dist/lib/log-shipper.js.map +1 -0
  351. package/dist/lib/logging.js +146 -0
  352. package/dist/lib/logging.js.map +1 -0
  353. package/dist/lib/message-deduplicator.js +439 -0
  354. package/dist/lib/message-deduplicator.js.map +1 -0
  355. package/dist/lib/multi-system-query.js +604 -0
  356. package/dist/lib/multi-system-query.js.map +1 -0
  357. package/dist/lib/orphan-detector.js +332 -0
  358. package/dist/lib/orphan-detector.js.map +1 -0
  359. package/dist/lib/password-generator.js +166 -0
  360. package/dist/lib/password-generator.js.map +1 -0
  361. package/dist/lib/path-validator.js +429 -0
  362. package/dist/lib/path-validator.js.map +1 -0
  363. package/dist/lib/query-translator.js +905 -0
  364. package/dist/lib/query-translator.js.map +1 -0
  365. package/dist/lib/queue-recovery.js +469 -0
  366. package/dist/lib/queue-recovery.js.map +1 -0
  367. package/dist/lib/redis-queue-manager.js +512 -0
  368. package/dist/lib/redis-queue-manager.js.map +1 -0
  369. package/dist/lib/reflection-archiver.js +272 -0
  370. package/dist/lib/reflection-archiver.js.map +1 -0
  371. package/dist/lib/retry-manager.js +453 -0
  372. package/dist/lib/retry-manager.js.map +1 -0
  373. package/dist/lib/retry.js +262 -0
  374. package/dist/lib/retry.js.map +1 -0
  375. package/dist/lib/schema-transform.js +695 -0
  376. package/dist/lib/schema-transform.js.map +1 -0
  377. package/dist/lib/schema-validator.js +491 -0
  378. package/dist/lib/schema-validator.js.map +1 -0
  379. package/dist/lib/skill-cache.js +297 -0
  380. package/dist/lib/skill-cache.js.map +1 -0
  381. package/dist/lib/skill-content-manager.js +337 -0
  382. package/dist/lib/skill-content-manager.js.map +1 -0
  383. package/dist/lib/skill-frontmatter-parser.js +237 -0
  384. package/dist/lib/skill-frontmatter-parser.js.map +1 -0
  385. package/dist/lib/skill-git-integration.js +275 -0
  386. package/dist/lib/skill-git-integration.js.map +1 -0
  387. package/dist/lib/skill-markdown-validator.js +396 -0
  388. package/dist/lib/skill-markdown-validator.js.map +1 -0
  389. package/dist/lib/skill-output-parser.js +312 -0
  390. package/dist/lib/skill-output-parser.js.map +1 -0
  391. package/dist/lib/unified-query-api.js +467 -0
  392. package/dist/lib/unified-query-api.js.map +1 -0
  393. package/dist/middleware/auth-middleware.js +350 -0
  394. package/dist/middleware/auth-middleware.js.map +1 -0
  395. package/dist/middleware/schema-validation.js +347 -0
  396. package/dist/middleware/schema-validation.js.map +1 -0
  397. package/dist/providers/anthropic-provider.js +1 -1
  398. package/dist/providers/anthropic-provider.js.map +1 -1
  399. package/dist/providers/provider-factory.js +2 -2
  400. package/dist/providers/provider-factory.js.map +1 -1
  401. package/dist/services/edge-case-analyzer.js +321 -0
  402. package/dist/services/edge-case-analyzer.js.map +1 -0
  403. package/dist/services/edge-case-deduplicator.js +266 -0
  404. package/dist/services/edge-case-deduplicator.js.map +1 -0
  405. package/dist/services/edge-case-detector.js +337 -0
  406. package/dist/services/edge-case-detector.js.map +1 -0
  407. package/dist/services/edge-case-tracker.js +547 -0
  408. package/dist/services/edge-case-tracker.js.map +1 -0
  409. package/dist/services/health-check-system.js +586 -0
  410. package/dist/services/health-check-system.js.map +1 -0
  411. package/dist/services/metrics-logger.js +412 -0
  412. package/dist/services/metrics-logger.js.map +1 -0
  413. package/dist/services/patch-generator.js +378 -0
  414. package/dist/services/patch-generator.js.map +1 -0
  415. package/dist/services/patch-validator.js +337 -0
  416. package/dist/services/patch-validator.js.map +1 -0
  417. package/dist/services/performance-monitor.js +811 -0
  418. package/dist/services/performance-monitor.js.map +1 -0
  419. package/dist/services/promotion-pipeline.js +918 -0
  420. package/dist/services/promotion-pipeline.js.map +1 -0
  421. package/dist/services/promotion-validator.js +394 -0
  422. package/dist/services/promotion-validator.js.map +1 -0
  423. package/dist/services/reflection-logger.js +388 -0
  424. package/dist/services/reflection-logger.js.map +1 -0
  425. package/dist/services/skill-deployment.js +472 -0
  426. package/dist/services/skill-deployment.js.map +1 -0
  427. package/dist/services/skill-loader.js +427 -0
  428. package/dist/services/skill-loader.js.map +1 -0
  429. package/dist/services/skill-promotion.js +372 -0
  430. package/dist/services/skill-promotion.js.map +1 -0
  431. package/dist/services/skill-validator.js +454 -0
  432. package/dist/services/skill-validator.js.map +1 -0
  433. package/dist/services/skill-versioning.js +244 -0
  434. package/dist/services/skill-versioning.js.map +1 -0
  435. package/dist/services/workspace-supervisor.js +597 -0
  436. package/dist/services/workspace-supervisor.js.map +1 -0
  437. package/dist/types/edge-case.js +45 -0
  438. package/dist/types/edge-case.js.map +1 -0
  439. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
  440. package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
  441. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
  442. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
  443. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
  444. package/package.json +35 -4
  445. package/readme/README.md +53 -5
  446. package/scripts/backup-cleanup.sh +627 -0
  447. package/scripts/cleanup-workspaces.sh +412 -0
  448. package/scripts/cleanup-yaml-configs.sh +141 -0
  449. package/scripts/deploy-approved-skills.sh +263 -0
  450. package/scripts/health-check.sh +447 -0
  451. package/scripts/log-aggregator.sh +554 -0
  452. package/scripts/log-monitor.sh +629 -0
  453. package/scripts/manage-agent-workspaces.sh +434 -0
  454. package/scripts/migrate-schema.sh +533 -0
  455. package/scripts/promote-staged-skills.sh +423 -0
  456. package/scripts/verify-no-secrets.sh +88 -35
  457. package/scripts/verify-redis-cleanup.sh +173 -0
  458. package/tests/README.md +84 -0
  459. package/tests/test-memory-leak-task-mode.sh +435 -0
  460. package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  461. package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  462. package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  463. package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
  464. package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
  465. package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
  466. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  467. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
  468. package/README.md.backup_before_replace +0 -781
  469. package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
  470. package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
  471. package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
  472. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
  473. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
@@ -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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"}
@@ -9,7 +9,7 @@
9
9
  * - Automatic retry on transient failures
10
10
  */ import { Pool as PgPool } from 'pg';
11
11
  import sqlite3 from 'sqlite3';
12
- import { StandardAdapter, JSONLogger } from './StandardAdapter';
12
+ import { StandardAdapter, JSONLogger } from './StandardAdapter.js';
13
13
  /**
14
14
  * DatabaseHandoff - Reference implementation for cross-database correlation
15
15
  *