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,443 @@
1
+ /**
2
+ * Artifact Registry TypeScript API
3
+ * Provides centralized artifact management with TTL-based cleanup
4
+ * Version: 1.0.0
5
+ */ import Database from 'better-sqlite3';
6
+ import { createHash } from 'crypto';
7
+ import { readFileSync, existsSync, mkdirSync, statSync } from 'fs';
8
+ import { join, dirname } from 'path';
9
+ // ============================================================================
10
+ // Error Classes
11
+ // ============================================================================
12
+ export class ArtifactRegistryError extends Error {
13
+ code;
14
+ details;
15
+ constructor(message, code, details){
16
+ super(message), this.code = code, this.details = details;
17
+ this.name = 'ArtifactRegistryError';
18
+ }
19
+ }
20
+ export class ArtifactNotFoundError extends ArtifactRegistryError {
21
+ constructor(id){
22
+ super(`Artifact not found: ${id}`, 'ARTIFACT_NOT_FOUND', {
23
+ id
24
+ });
25
+ this.name = 'ArtifactNotFoundError';
26
+ }
27
+ }
28
+ export class ArtifactValidationError extends ArtifactRegistryError {
29
+ constructor(message, details){
30
+ super(message, 'VALIDATION_ERROR', details);
31
+ this.name = 'ArtifactValidationError';
32
+ }
33
+ }
34
+ export class ArtifactDatabaseError extends ArtifactRegistryError {
35
+ constructor(message, details){
36
+ super(message, 'DATABASE_ERROR', details);
37
+ this.name = 'ArtifactDatabaseError';
38
+ }
39
+ }
40
+ // ============================================================================
41
+ // Artifact Registry Class
42
+ // ============================================================================
43
+ export class ArtifactRegistry {
44
+ db;
45
+ static instance = null;
46
+ constructor(dbPath){
47
+ try {
48
+ // Ensure database directory exists
49
+ const dbDir = dirname(dbPath);
50
+ if (!existsSync(dbDir)) {
51
+ mkdirSync(dbDir, {
52
+ recursive: true
53
+ });
54
+ }
55
+ this.db = new Database(dbPath);
56
+ this.db.pragma('journal_mode = WAL'); // Write-Ahead Logging for concurrency
57
+ this.db.pragma('foreign_keys = ON');
58
+ this.db.pragma('synchronous = NORMAL');
59
+ this.initializeSchema();
60
+ } catch (error) {
61
+ throw new ArtifactDatabaseError(`Failed to initialize database: ${error instanceof Error ? error.message : String(error)}`, {
62
+ dbPath,
63
+ error
64
+ });
65
+ }
66
+ }
67
+ /**
68
+ * Get singleton instance (optional pattern)
69
+ */ static getInstance(dbPath) {
70
+ if (!ArtifactRegistry.instance) {
71
+ if (!dbPath) {
72
+ throw new ArtifactDatabaseError('Database path required for first initialization', {});
73
+ }
74
+ ArtifactRegistry.instance = new ArtifactRegistry(dbPath);
75
+ }
76
+ return ArtifactRegistry.instance;
77
+ }
78
+ /**
79
+ * Initialize database schema
80
+ */ initializeSchema() {
81
+ try {
82
+ const schemaPath = join(__dirname, '../database/artifact-registry-schema.sql');
83
+ if (!existsSync(schemaPath)) {
84
+ throw new Error(`Schema file not found: ${schemaPath}`);
85
+ }
86
+ const schema = readFileSync(schemaPath, 'utf-8');
87
+ // Step 1: Remove multi-line comments FIRST (they can contain semicolons)
88
+ const withoutMultiLineComments = schema.replace(/\/\*[\s\S]*?\*\//g, '');
89
+ // Step 2: Remove single-line comments
90
+ const cleanedSchema = withoutMultiLineComments.split('\n').filter((line)=>{
91
+ const trimmed = line.trim();
92
+ return trimmed.length > 0 && !trimmed.startsWith('--');
93
+ }).join('\n');
94
+ // Step 3: Execute entire schema as one block
95
+ // SQLite's exec() can handle multiple statements including triggers with internal semicolons
96
+ this.db.exec(cleanedSchema);
97
+ } catch (error) {
98
+ throw new ArtifactDatabaseError(`Failed to initialize schema: ${error instanceof Error ? error.message : String(error)}`, {
99
+ error
100
+ });
101
+ }
102
+ }
103
+ /**
104
+ * Generate unique artifact ID
105
+ */ generateId() {
106
+ const timestamp = Date.now();
107
+ const random = Math.random().toString(36).substring(2, 15);
108
+ return `artifact-${timestamp}-${random}`;
109
+ }
110
+ /**
111
+ * Calculate checksum for file
112
+ */ calculateChecksum(filePath) {
113
+ try {
114
+ const content = readFileSync(filePath);
115
+ return createHash('sha256').update(content).digest('hex');
116
+ } catch (error) {
117
+ throw new ArtifactValidationError(`Failed to calculate checksum: ${error instanceof Error ? error.message : String(error)}`, {
118
+ filePath,
119
+ error
120
+ });
121
+ }
122
+ }
123
+ /**
124
+ * Validate artifact metadata
125
+ */ validateMetadata(metadata) {
126
+ if (!metadata.name || metadata.name.trim().length === 0) {
127
+ throw new ArtifactValidationError('Artifact name is required');
128
+ }
129
+ if (!metadata.type) {
130
+ throw new ArtifactValidationError('Artifact type is required');
131
+ }
132
+ const validTypes = [
133
+ 'code',
134
+ 'documentation',
135
+ 'test',
136
+ 'config',
137
+ 'binary',
138
+ 'data',
139
+ 'model',
140
+ 'report',
141
+ 'other'
142
+ ];
143
+ if (!validTypes.includes(metadata.type)) {
144
+ throw new ArtifactValidationError(`Invalid artifact type: ${metadata.type}`, {
145
+ validTypes
146
+ });
147
+ }
148
+ if (!metadata.storage_location || metadata.storage_location.trim().length === 0) {
149
+ throw new ArtifactValidationError('Storage location is required');
150
+ }
151
+ if (metadata.acl_level !== undefined && (metadata.acl_level < 1 || metadata.acl_level > 5)) {
152
+ throw new ArtifactValidationError('ACL level must be between 1 and 5', {
153
+ acl_level: metadata.acl_level
154
+ });
155
+ }
156
+ if (metadata.retention_policy) {
157
+ const validPolicies = [
158
+ 'ephemeral',
159
+ 'standard',
160
+ 'permanent',
161
+ 'custom'
162
+ ];
163
+ if (!validPolicies.includes(metadata.retention_policy)) {
164
+ throw new ArtifactValidationError(`Invalid retention policy: ${metadata.retention_policy}`, {
165
+ validPolicies
166
+ });
167
+ }
168
+ }
169
+ }
170
+ /**
171
+ * Create new artifact
172
+ */ createArtifact(metadata) {
173
+ try {
174
+ // Validate metadata
175
+ this.validateMetadata(metadata);
176
+ // Generate ID
177
+ const id = this.generateId();
178
+ // Calculate file-based metadata if storage location exists
179
+ let size_bytes;
180
+ let checksum;
181
+ let content_hash;
182
+ if (existsSync(metadata.storage_location)) {
183
+ const stats = statSync(metadata.storage_location);
184
+ size_bytes = stats.size;
185
+ checksum = this.calculateChecksum(metadata.storage_location);
186
+ if (metadata.content) {
187
+ content_hash = createHash('sha256').update(metadata.content).digest('hex');
188
+ }
189
+ }
190
+ // Set defaults
191
+ const retention_days = metadata.retention_days ?? (metadata.retention_policy === 'ephemeral' ? 7 : metadata.retention_policy === 'permanent' ? 0 : 30 // standard
192
+ );
193
+ const retention_policy = metadata.retention_policy ?? 'standard';
194
+ // Prepare insert statement
195
+ const stmt = this.db.prepare(`
196
+ INSERT INTO artifacts (
197
+ id, name, type, format, content, content_hash, size_bytes,
198
+ storage_location, checksum, is_compressed, compression_type,
199
+ swarm_id, agent_id, task_id, version, parent_artifact_id,
200
+ artifact_chain, tags, metadata, acl_level,
201
+ retention_days, retention_policy, status
202
+ ) VALUES (
203
+ ?, ?, ?, ?, ?, ?, ?,
204
+ ?, ?, ?, ?,
205
+ ?, ?, ?, ?, ?,
206
+ ?, ?, ?, ?,
207
+ ?, ?, ?
208
+ )
209
+ `);
210
+ // Execute insert
211
+ stmt.run(id, metadata.name, metadata.type, metadata.format ?? null, metadata.content ?? null, content_hash ?? null, size_bytes ?? null, metadata.storage_location, checksum ?? null, metadata.is_compressed ? 1 : 0, metadata.compression_type ?? null, metadata.swarm_id ?? null, metadata.agent_id ?? null, metadata.task_id ?? null, metadata.version ?? 1, metadata.parent_artifact_id ?? null, metadata.artifact_chain ? JSON.stringify(metadata.artifact_chain) : null, metadata.tags ? JSON.stringify(metadata.tags) : null, metadata.metadata ? JSON.stringify(metadata.metadata) : null, metadata.acl_level ?? 2, retention_days, retention_policy, 'active');
212
+ // Retrieve and return created artifact
213
+ const artifact = this.getArtifact(id);
214
+ if (!artifact) {
215
+ throw new ArtifactDatabaseError('Failed to retrieve created artifact', {
216
+ id
217
+ });
218
+ }
219
+ return artifact;
220
+ } catch (error) {
221
+ if (error instanceof ArtifactRegistryError) {
222
+ throw error;
223
+ }
224
+ throw new ArtifactDatabaseError(`Failed to create artifact: ${error instanceof Error ? error.message : String(error)}`, {
225
+ metadata,
226
+ error
227
+ });
228
+ }
229
+ }
230
+ /**
231
+ * Get artifact by ID
232
+ */ getArtifact(id) {
233
+ try {
234
+ const stmt = this.db.prepare('SELECT * FROM artifacts WHERE id = ?');
235
+ const row = stmt.get(id);
236
+ return row ?? null;
237
+ } catch (error) {
238
+ throw new ArtifactDatabaseError(`Failed to get artifact: ${error instanceof Error ? error.message : String(error)}`, {
239
+ id,
240
+ error
241
+ });
242
+ }
243
+ }
244
+ /**
245
+ * List artifacts with optional filters
246
+ */ listArtifacts(filters) {
247
+ try {
248
+ let query = 'SELECT * FROM artifacts WHERE 1=1';
249
+ const params = [];
250
+ if (filters) {
251
+ if (filters.type) {
252
+ query += ' AND type = ?';
253
+ params.push(filters.type);
254
+ }
255
+ if (filters.status) {
256
+ query += ' AND status = ?';
257
+ params.push(filters.status);
258
+ }
259
+ if (filters.retention_policy) {
260
+ query += ' AND retention_policy = ?';
261
+ params.push(filters.retention_policy);
262
+ }
263
+ if (filters.swarm_id) {
264
+ query += ' AND swarm_id = ?';
265
+ params.push(filters.swarm_id);
266
+ }
267
+ if (filters.agent_id) {
268
+ query += ' AND agent_id = ?';
269
+ params.push(filters.agent_id);
270
+ }
271
+ if (filters.task_id) {
272
+ query += ' AND task_id = ?';
273
+ params.push(filters.task_id);
274
+ }
275
+ if (filters.cleanup_eligible !== undefined) {
276
+ query += ' AND cleanup_eligible = ?';
277
+ params.push(filters.cleanup_eligible ? 1 : 0);
278
+ }
279
+ if (filters.created_after) {
280
+ query += ' AND created_at >= ?';
281
+ params.push(filters.created_after.toISOString());
282
+ }
283
+ if (filters.created_before) {
284
+ query += ' AND created_at <= ?';
285
+ params.push(filters.created_before.toISOString());
286
+ }
287
+ if (filters.expires_before) {
288
+ query += ' AND expires_at IS NOT NULL AND expires_at <= ?';
289
+ params.push(filters.expires_before.toISOString());
290
+ }
291
+ if (filters.tags && filters.tags.length > 0) {
292
+ // JSON search for tags (SQLite JSON support)
293
+ for (const tag of filters.tags){
294
+ query += ` AND tags LIKE ?`;
295
+ params.push(`%"${tag}"%`);
296
+ }
297
+ }
298
+ }
299
+ query += ' ORDER BY created_at DESC';
300
+ if (filters?.limit) {
301
+ query += ' LIMIT ?';
302
+ params.push(filters.limit);
303
+ }
304
+ if (filters?.offset) {
305
+ query += ' OFFSET ?';
306
+ params.push(filters.offset);
307
+ }
308
+ const stmt = this.db.prepare(query);
309
+ return stmt.all(...params);
310
+ } catch (error) {
311
+ throw new ArtifactDatabaseError(`Failed to list artifacts: ${error instanceof Error ? error.message : String(error)}`, {
312
+ filters,
313
+ error
314
+ });
315
+ }
316
+ }
317
+ /**
318
+ * Archive artifact (mark as archived)
319
+ */ archiveArtifact(id) {
320
+ try {
321
+ const artifact = this.getArtifact(id);
322
+ if (!artifact) {
323
+ throw new ArtifactNotFoundError(id);
324
+ }
325
+ if (artifact.status === 'deleted') {
326
+ throw new ArtifactValidationError('Cannot archive deleted artifact', {
327
+ id,
328
+ status: artifact.status
329
+ });
330
+ }
331
+ const stmt = this.db.prepare(`
332
+ UPDATE artifacts
333
+ SET status = 'archived',
334
+ archived_at = CURRENT_TIMESTAMP,
335
+ updated_at = CURRENT_TIMESTAMP
336
+ WHERE id = ?
337
+ `);
338
+ stmt.run(id);
339
+ const updated = this.getArtifact(id);
340
+ if (!updated) {
341
+ throw new ArtifactDatabaseError('Failed to retrieve archived artifact', {
342
+ id
343
+ });
344
+ }
345
+ return updated;
346
+ } catch (error) {
347
+ if (error instanceof ArtifactRegistryError) {
348
+ throw error;
349
+ }
350
+ throw new ArtifactDatabaseError(`Failed to archive artifact: ${error instanceof Error ? error.message : String(error)}`, {
351
+ id,
352
+ error
353
+ });
354
+ }
355
+ }
356
+ /**
357
+ * Delete artifact (soft delete - mark as deleted)
358
+ */ deleteArtifact(id) {
359
+ try {
360
+ const artifact = this.getArtifact(id);
361
+ if (!artifact) {
362
+ throw new ArtifactNotFoundError(id);
363
+ }
364
+ const stmt = this.db.prepare(`
365
+ UPDATE artifacts
366
+ SET status = 'deleted',
367
+ deleted_at = CURRENT_TIMESTAMP,
368
+ updated_at = CURRENT_TIMESTAMP
369
+ WHERE id = ?
370
+ `);
371
+ stmt.run(id);
372
+ const updated = this.getArtifact(id);
373
+ if (!updated) {
374
+ throw new ArtifactDatabaseError('Failed to retrieve deleted artifact', {
375
+ id
376
+ });
377
+ }
378
+ return updated;
379
+ } catch (error) {
380
+ if (error instanceof ArtifactRegistryError) {
381
+ throw error;
382
+ }
383
+ throw new ArtifactDatabaseError(`Failed to delete artifact: ${error instanceof Error ? error.message : String(error)}`, {
384
+ id,
385
+ error
386
+ });
387
+ }
388
+ }
389
+ /**
390
+ * Get artifact statistics by retention policy
391
+ */ getStatsByRetentionPolicy() {
392
+ try {
393
+ const stmt = this.db.prepare(`
394
+ SELECT
395
+ retention_policy,
396
+ COUNT(*) as total,
397
+ SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) as active,
398
+ SUM(CASE WHEN status = 'archived' THEN 1 ELSE 0 END) as archived,
399
+ SUM(CASE WHEN status = 'deleted' THEN 1 ELSE 0 END) as deleted,
400
+ SUM(CASE WHEN cleanup_eligible = 1 THEN 1 ELSE 0 END) as cleanup_eligible,
401
+ COALESCE(SUM(size_bytes), 0) as total_size_bytes
402
+ FROM artifacts
403
+ GROUP BY retention_policy
404
+ `);
405
+ const rows = stmt.all();
406
+ const stats = {};
407
+ for (const row of rows){
408
+ const { retention_policy, ...statsData } = row;
409
+ stats[retention_policy] = statsData;
410
+ }
411
+ return stats;
412
+ } catch (error) {
413
+ throw new ArtifactDatabaseError(`Failed to get statistics: ${error instanceof Error ? error.message : String(error)}`, {
414
+ error
415
+ });
416
+ }
417
+ }
418
+ /**
419
+ * Find expired artifacts eligible for cleanup
420
+ */ findExpiredArtifacts() {
421
+ try {
422
+ const stmt = this.db.prepare(`
423
+ SELECT * FROM artifacts
424
+ WHERE status = 'active'
425
+ AND expires_at IS NOT NULL
426
+ AND datetime('now') >= expires_at
427
+ ORDER BY created_at ASC
428
+ `);
429
+ return stmt.all();
430
+ } catch (error) {
431
+ throw new ArtifactDatabaseError(`Failed to find expired artifacts: ${error instanceof Error ? error.message : String(error)}`, {
432
+ error
433
+ });
434
+ }
435
+ }
436
+ /**
437
+ * Close database connection
438
+ */ close() {
439
+ this.db.close();
440
+ }
441
+ }
442
+
443
+ //# sourceMappingURL=artifact-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/artifact-registry.ts"],"sourcesContent":["/**\r\n * Artifact Registry TypeScript API\r\n * Provides centralized artifact management with TTL-based cleanup\r\n * Version: 1.0.0\r\n */\r\n\r\nimport Database from 'better-sqlite3';\r\nimport { createHash } from 'crypto';\r\nimport { readFileSync, existsSync, mkdirSync, statSync } from 'fs';\r\nimport { join, dirname } from 'path';\r\n\r\n// ============================================================================\r\n// Types and Interfaces\r\n// ============================================================================\r\n\r\nexport type ArtifactType = 'code' | 'documentation' | 'test' | 'config' | 'binary' | 'data' | 'model' | 'report' | 'other';\r\nexport type ArtifactStatus = 'active' | 'archived' | 'deleted';\r\nexport type RetentionPolicy = 'ephemeral' | 'standard' | 'permanent' | 'custom';\r\n\r\nexport interface ArtifactMetadata {\r\n name: string;\r\n type: ArtifactType;\r\n format?: string;\r\n content?: string;\r\n storage_location: string;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n version?: number;\r\n parent_artifact_id?: string;\r\n artifact_chain?: string[];\r\n tags?: string[];\r\n metadata?: Record<string, any>;\r\n acl_level?: number;\r\n is_compressed?: boolean;\r\n compression_type?: string;\r\n retention_days?: number;\r\n retention_policy?: RetentionPolicy;\r\n}\r\n\r\nexport interface Artifact {\r\n id: string;\r\n name: string;\r\n type: ArtifactType;\r\n format?: string;\r\n content?: string;\r\n content_hash?: string;\r\n size_bytes?: number;\r\n storage_location: string;\r\n checksum?: string;\r\n is_compressed: boolean;\r\n compression_type?: string;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n version: number;\r\n parent_artifact_id?: string;\r\n artifact_chain?: string;\r\n tags?: string;\r\n metadata?: string;\r\n acl_level: number;\r\n retention_days: number;\r\n retention_policy: RetentionPolicy;\r\n expires_at?: string;\r\n status: ArtifactStatus;\r\n cleanup_eligible: boolean;\r\n created_at: string;\r\n updated_at: string;\r\n archived_at?: string;\r\n deleted_at?: string;\r\n}\r\n\r\nexport interface ArtifactFilters {\r\n type?: ArtifactType;\r\n status?: ArtifactStatus;\r\n retention_policy?: RetentionPolicy;\r\n swarm_id?: string;\r\n agent_id?: string;\r\n task_id?: string;\r\n tags?: string[];\r\n cleanup_eligible?: boolean;\r\n created_after?: Date;\r\n created_before?: Date;\r\n expires_before?: Date;\r\n limit?: number;\r\n offset?: number;\r\n}\r\n\r\nexport interface ArtifactStats {\r\n total: number;\r\n active: number;\r\n archived: number;\r\n deleted: number;\r\n cleanup_eligible: number;\r\n total_size_bytes: number;\r\n}\r\n\r\n// ============================================================================\r\n// Error Classes\r\n// ============================================================================\r\n\r\nexport class ArtifactRegistryError extends Error {\r\n constructor(message: string, public code: string, public details?: any) {\r\n super(message);\r\n this.name = 'ArtifactRegistryError';\r\n }\r\n}\r\n\r\nexport class ArtifactNotFoundError extends ArtifactRegistryError {\r\n constructor(id: string) {\r\n super(`Artifact not found: ${id}`, 'ARTIFACT_NOT_FOUND', { id });\r\n this.name = 'ArtifactNotFoundError';\r\n }\r\n}\r\n\r\nexport class ArtifactValidationError extends ArtifactRegistryError {\r\n constructor(message: string, details?: any) {\r\n super(message, 'VALIDATION_ERROR', details);\r\n this.name = 'ArtifactValidationError';\r\n }\r\n}\r\n\r\nexport class ArtifactDatabaseError extends ArtifactRegistryError {\r\n constructor(message: string, details?: any) {\r\n super(message, 'DATABASE_ERROR', details);\r\n this.name = 'ArtifactDatabaseError';\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Artifact Registry Class\r\n// ============================================================================\r\n\r\nexport class ArtifactRegistry {\r\n private db: Database.Database;\r\n private static instance: ArtifactRegistry | null = null;\r\n\r\n constructor(dbPath: string) {\r\n try {\r\n // Ensure database directory exists\r\n const dbDir = dirname(dbPath);\r\n if (!existsSync(dbDir)) {\r\n mkdirSync(dbDir, { recursive: true });\r\n }\r\n\r\n this.db = new Database(dbPath);\r\n this.db.pragma('journal_mode = WAL'); // Write-Ahead Logging for concurrency\r\n this.db.pragma('foreign_keys = ON');\r\n this.db.pragma('synchronous = NORMAL');\r\n\r\n this.initializeSchema();\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to initialize database: ${error instanceof Error ? error.message : String(error)}`,\r\n { dbPath, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get singleton instance (optional pattern)\r\n */\r\n static getInstance(dbPath?: string): ArtifactRegistry {\r\n if (!ArtifactRegistry.instance) {\r\n if (!dbPath) {\r\n throw new ArtifactDatabaseError('Database path required for first initialization', {});\r\n }\r\n ArtifactRegistry.instance = new ArtifactRegistry(dbPath);\r\n }\r\n return ArtifactRegistry.instance;\r\n }\r\n\r\n /**\r\n * Initialize database schema\r\n */\r\n private initializeSchema(): void {\r\n try {\r\n const schemaPath = join(__dirname, '../database/artifact-registry-schema.sql');\r\n if (!existsSync(schemaPath)) {\r\n throw new Error(`Schema file not found: ${schemaPath}`);\r\n }\r\n\r\n const schema = readFileSync(schemaPath, 'utf-8');\r\n\r\n // Step 1: Remove multi-line comments FIRST (they can contain semicolons)\r\n const withoutMultiLineComments = schema.replace(/\\/\\*[\\s\\S]*?\\*\\//g, '');\r\n\r\n // Step 2: Remove single-line comments\r\n const cleanedSchema = withoutMultiLineComments\r\n .split('\\n')\r\n .filter(line => {\r\n const trimmed = line.trim();\r\n return trimmed.length > 0 && !trimmed.startsWith('--');\r\n })\r\n .join('\\n');\r\n\r\n // Step 3: Execute entire schema as one block\r\n // SQLite's exec() can handle multiple statements including triggers with internal semicolons\r\n this.db.exec(cleanedSchema);\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to initialize schema: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Generate unique artifact ID\r\n */\r\n private generateId(): string {\r\n const timestamp = Date.now();\r\n const random = Math.random().toString(36).substring(2, 15);\r\n return `artifact-${timestamp}-${random}`;\r\n }\r\n\r\n /**\r\n * Calculate checksum for file\r\n */\r\n private calculateChecksum(filePath: string): string {\r\n try {\r\n const content = readFileSync(filePath);\r\n return createHash('sha256').update(content).digest('hex');\r\n } catch (error) {\r\n throw new ArtifactValidationError(\r\n `Failed to calculate checksum: ${error instanceof Error ? error.message : String(error)}`,\r\n { filePath, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Validate artifact metadata\r\n */\r\n private validateMetadata(metadata: ArtifactMetadata): void {\r\n if (!metadata.name || metadata.name.trim().length === 0) {\r\n throw new ArtifactValidationError('Artifact name is required');\r\n }\r\n\r\n if (!metadata.type) {\r\n throw new ArtifactValidationError('Artifact type is required');\r\n }\r\n\r\n const validTypes: ArtifactType[] = ['code', 'documentation', 'test', 'config', 'binary', 'data', 'model', 'report', 'other'];\r\n if (!validTypes.includes(metadata.type)) {\r\n throw new ArtifactValidationError(`Invalid artifact type: ${metadata.type}`, { validTypes });\r\n }\r\n\r\n if (!metadata.storage_location || metadata.storage_location.trim().length === 0) {\r\n throw new ArtifactValidationError('Storage location is required');\r\n }\r\n\r\n if (metadata.acl_level !== undefined && (metadata.acl_level < 1 || metadata.acl_level > 5)) {\r\n throw new ArtifactValidationError('ACL level must be between 1 and 5', { acl_level: metadata.acl_level });\r\n }\r\n\r\n if (metadata.retention_policy) {\r\n const validPolicies: RetentionPolicy[] = ['ephemeral', 'standard', 'permanent', 'custom'];\r\n if (!validPolicies.includes(metadata.retention_policy)) {\r\n throw new ArtifactValidationError(`Invalid retention policy: ${metadata.retention_policy}`, { validPolicies });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Create new artifact\r\n */\r\n createArtifact(metadata: ArtifactMetadata): Artifact {\r\n try {\r\n // Validate metadata\r\n this.validateMetadata(metadata);\r\n\r\n // Generate ID\r\n const id = this.generateId();\r\n\r\n // Calculate file-based metadata if storage location exists\r\n let size_bytes: number | undefined;\r\n let checksum: string | undefined;\r\n let content_hash: string | undefined;\r\n\r\n if (existsSync(metadata.storage_location)) {\r\n const stats = statSync(metadata.storage_location);\r\n size_bytes = stats.size;\r\n checksum = this.calculateChecksum(metadata.storage_location);\r\n\r\n if (metadata.content) {\r\n content_hash = createHash('sha256').update(metadata.content).digest('hex');\r\n }\r\n }\r\n\r\n // Set defaults\r\n const retention_days = metadata.retention_days ?? (\r\n metadata.retention_policy === 'ephemeral' ? 7 :\r\n metadata.retention_policy === 'permanent' ? 0 :\r\n 30 // standard\r\n );\r\n\r\n const retention_policy = metadata.retention_policy ?? 'standard';\r\n\r\n // Prepare insert statement\r\n const stmt = this.db.prepare(`\r\n INSERT INTO artifacts (\r\n id, name, type, format, content, content_hash, size_bytes,\r\n storage_location, checksum, is_compressed, compression_type,\r\n swarm_id, agent_id, task_id, version, parent_artifact_id,\r\n artifact_chain, tags, metadata, acl_level,\r\n retention_days, retention_policy, status\r\n ) VALUES (\r\n ?, ?, ?, ?, ?, ?, ?,\r\n ?, ?, ?, ?,\r\n ?, ?, ?, ?, ?,\r\n ?, ?, ?, ?,\r\n ?, ?, ?\r\n )\r\n `);\r\n\r\n // Execute insert\r\n stmt.run(\r\n id,\r\n metadata.name,\r\n metadata.type,\r\n metadata.format ?? null,\r\n metadata.content ?? null,\r\n content_hash ?? null,\r\n size_bytes ?? null,\r\n metadata.storage_location,\r\n checksum ?? null,\r\n metadata.is_compressed ? 1 : 0,\r\n metadata.compression_type ?? null,\r\n metadata.swarm_id ?? null,\r\n metadata.agent_id ?? null,\r\n metadata.task_id ?? null,\r\n metadata.version ?? 1,\r\n metadata.parent_artifact_id ?? null,\r\n metadata.artifact_chain ? JSON.stringify(metadata.artifact_chain) : null,\r\n metadata.tags ? JSON.stringify(metadata.tags) : null,\r\n metadata.metadata ? JSON.stringify(metadata.metadata) : null,\r\n metadata.acl_level ?? 2,\r\n retention_days,\r\n retention_policy,\r\n 'active'\r\n );\r\n\r\n // Retrieve and return created artifact\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactDatabaseError('Failed to retrieve created artifact', { id });\r\n }\r\n\r\n return artifact;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to create artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { metadata, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get artifact by ID\r\n */\r\n getArtifact(id: string): Artifact | null {\r\n try {\r\n const stmt = this.db.prepare('SELECT * FROM artifacts WHERE id = ?');\r\n const row = stmt.get(id) as Artifact | undefined;\r\n return row ?? null;\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to get artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * List artifacts with optional filters\r\n */\r\n listArtifacts(filters?: ArtifactFilters): Artifact[] {\r\n try {\r\n let query = 'SELECT * FROM artifacts WHERE 1=1';\r\n const params: any[] = [];\r\n\r\n if (filters) {\r\n if (filters.type) {\r\n query += ' AND type = ?';\r\n params.push(filters.type);\r\n }\r\n\r\n if (filters.status) {\r\n query += ' AND status = ?';\r\n params.push(filters.status);\r\n }\r\n\r\n if (filters.retention_policy) {\r\n query += ' AND retention_policy = ?';\r\n params.push(filters.retention_policy);\r\n }\r\n\r\n if (filters.swarm_id) {\r\n query += ' AND swarm_id = ?';\r\n params.push(filters.swarm_id);\r\n }\r\n\r\n if (filters.agent_id) {\r\n query += ' AND agent_id = ?';\r\n params.push(filters.agent_id);\r\n }\r\n\r\n if (filters.task_id) {\r\n query += ' AND task_id = ?';\r\n params.push(filters.task_id);\r\n }\r\n\r\n if (filters.cleanup_eligible !== undefined) {\r\n query += ' AND cleanup_eligible = ?';\r\n params.push(filters.cleanup_eligible ? 1 : 0);\r\n }\r\n\r\n if (filters.created_after) {\r\n query += ' AND created_at >= ?';\r\n params.push(filters.created_after.toISOString());\r\n }\r\n\r\n if (filters.created_before) {\r\n query += ' AND created_at <= ?';\r\n params.push(filters.created_before.toISOString());\r\n }\r\n\r\n if (filters.expires_before) {\r\n query += ' AND expires_at IS NOT NULL AND expires_at <= ?';\r\n params.push(filters.expires_before.toISOString());\r\n }\r\n\r\n if (filters.tags && filters.tags.length > 0) {\r\n // JSON search for tags (SQLite JSON support)\r\n for (const tag of filters.tags) {\r\n query += ` AND tags LIKE ?`;\r\n params.push(`%\"${tag}\"%`);\r\n }\r\n }\r\n }\r\n\r\n query += ' ORDER BY created_at DESC';\r\n\r\n if (filters?.limit) {\r\n query += ' LIMIT ?';\r\n params.push(filters.limit);\r\n }\r\n\r\n if (filters?.offset) {\r\n query += ' OFFSET ?';\r\n params.push(filters.offset);\r\n }\r\n\r\n const stmt = this.db.prepare(query);\r\n return stmt.all(...params) as Artifact[];\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to list artifacts: ${error instanceof Error ? error.message : String(error)}`,\r\n { filters, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Archive artifact (mark as archived)\r\n */\r\n archiveArtifact(id: string): Artifact {\r\n try {\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactNotFoundError(id);\r\n }\r\n\r\n if (artifact.status === 'deleted') {\r\n throw new ArtifactValidationError('Cannot archive deleted artifact', { id, status: artifact.status });\r\n }\r\n\r\n const stmt = this.db.prepare(`\r\n UPDATE artifacts\r\n SET status = 'archived',\r\n archived_at = CURRENT_TIMESTAMP,\r\n updated_at = CURRENT_TIMESTAMP\r\n WHERE id = ?\r\n `);\r\n\r\n stmt.run(id);\r\n\r\n const updated = this.getArtifact(id);\r\n if (!updated) {\r\n throw new ArtifactDatabaseError('Failed to retrieve archived artifact', { id });\r\n }\r\n\r\n return updated;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to archive artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Delete artifact (soft delete - mark as deleted)\r\n */\r\n deleteArtifact(id: string): Artifact {\r\n try {\r\n const artifact = this.getArtifact(id);\r\n if (!artifact) {\r\n throw new ArtifactNotFoundError(id);\r\n }\r\n\r\n const stmt = this.db.prepare(`\r\n UPDATE artifacts\r\n SET status = 'deleted',\r\n deleted_at = CURRENT_TIMESTAMP,\r\n updated_at = CURRENT_TIMESTAMP\r\n WHERE id = ?\r\n `);\r\n\r\n stmt.run(id);\r\n\r\n const updated = this.getArtifact(id);\r\n if (!updated) {\r\n throw new ArtifactDatabaseError('Failed to retrieve deleted artifact', { id });\r\n }\r\n\r\n return updated;\r\n } catch (error) {\r\n if (error instanceof ArtifactRegistryError) {\r\n throw error;\r\n }\r\n throw new ArtifactDatabaseError(\r\n `Failed to delete artifact: ${error instanceof Error ? error.message : String(error)}`,\r\n { id, error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get artifact statistics by retention policy\r\n */\r\n getStatsByRetentionPolicy(): Record<RetentionPolicy, ArtifactStats> {\r\n try {\r\n const stmt = this.db.prepare(`\r\n SELECT\r\n retention_policy,\r\n COUNT(*) as total,\r\n SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) as active,\r\n SUM(CASE WHEN status = 'archived' THEN 1 ELSE 0 END) as archived,\r\n SUM(CASE WHEN status = 'deleted' THEN 1 ELSE 0 END) as deleted,\r\n SUM(CASE WHEN cleanup_eligible = 1 THEN 1 ELSE 0 END) as cleanup_eligible,\r\n COALESCE(SUM(size_bytes), 0) as total_size_bytes\r\n FROM artifacts\r\n GROUP BY retention_policy\r\n `);\r\n\r\n const rows = stmt.all() as Array<{ retention_policy: RetentionPolicy } & ArtifactStats>;\r\n const stats: Record<string, ArtifactStats> = {};\r\n\r\n for (const row of rows) {\r\n const { retention_policy, ...statsData } = row;\r\n stats[retention_policy] = statsData;\r\n }\r\n\r\n return stats as Record<RetentionPolicy, ArtifactStats>;\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to get statistics: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Find expired artifacts eligible for cleanup\r\n */\r\n findExpiredArtifacts(): Artifact[] {\r\n try {\r\n const stmt = this.db.prepare(`\r\n SELECT * FROM artifacts\r\n WHERE status = 'active'\r\n AND expires_at IS NOT NULL\r\n AND datetime('now') >= expires_at\r\n ORDER BY created_at ASC\r\n `);\r\n\r\n return stmt.all() as Artifact[];\r\n } catch (error) {\r\n throw new ArtifactDatabaseError(\r\n `Failed to find expired artifacts: ${error instanceof Error ? error.message : String(error)}`,\r\n { error }\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Close database connection\r\n */\r\n close(): void {\r\n this.db.close();\r\n }\r\n}\r\n"],"names":["Database","createHash","readFileSync","existsSync","mkdirSync","statSync","join","dirname","ArtifactRegistryError","Error","message","code","details","name","ArtifactNotFoundError","id","ArtifactValidationError","ArtifactDatabaseError","ArtifactRegistry","db","instance","dbPath","dbDir","recursive","pragma","initializeSchema","error","String","getInstance","schemaPath","__dirname","schema","withoutMultiLineComments","replace","cleanedSchema","split","filter","line","trimmed","trim","length","startsWith","exec","generateId","timestamp","Date","now","random","Math","toString","substring","calculateChecksum","filePath","content","update","digest","validateMetadata","metadata","type","validTypes","includes","storage_location","acl_level","undefined","retention_policy","validPolicies","createArtifact","size_bytes","checksum","content_hash","stats","size","retention_days","stmt","prepare","run","format","is_compressed","compression_type","swarm_id","agent_id","task_id","version","parent_artifact_id","artifact_chain","JSON","stringify","tags","artifact","getArtifact","row","get","listArtifacts","filters","query","params","push","status","cleanup_eligible","created_after","toISOString","created_before","expires_before","tag","limit","offset","all","archiveArtifact","updated","deleteArtifact","getStatsByRetentionPolicy","rows","statsData","findExpiredArtifacts","close"],"mappings":"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"}