claude-flow-novice 2.15.11 → 2.16.0

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 (636) hide show
  1. package/.claude/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  2. package/.claude/commands/cfn-loop-cli.md +158 -464
  3. package/.claude/commands/cfn-loop-trigger.md +114 -0
  4. package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  5. package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  6. package/.claude/hooks/cfn-invoke-post-edit.sh +22 -0
  7. package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  8. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  9. package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  10. package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
  11. package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  12. package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
  13. package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  14. package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  15. package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  16. package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
  17. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  18. package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  19. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  20. package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  21. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  22. package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  23. package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  24. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  25. package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  26. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  27. package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  28. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  29. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  30. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  31. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  32. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  33. package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  34. package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  35. package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  36. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  37. package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  38. package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  39. package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  40. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  41. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  42. package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  43. package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
  44. package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  45. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  46. package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  47. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  48. package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  49. package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  50. package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  51. package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  52. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  53. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  54. package/{claude-assets/skills/cfn-loop-orchestration → .claude/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  55. package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  56. package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  57. package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  58. package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
  59. package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
  60. package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  61. package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  62. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  63. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  64. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  65. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  66. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  67. package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  68. package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  69. package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  70. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  71. package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  72. package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  73. package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  74. package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  75. package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  76. package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  77. package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
  78. package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  79. package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
  80. package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  81. package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  82. package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  83. package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  84. package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  85. package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  86. package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  87. package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  88. package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  89. package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  90. package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  91. package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  92. package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  93. package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  94. package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  95. package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
  96. package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  97. package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
  98. package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  99. package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  100. package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  101. package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  102. package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
  103. package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  104. package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  105. package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  106. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  107. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  108. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  109. package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  110. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  111. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  112. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  113. package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  114. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  115. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  116. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  117. package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  118. package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  119. package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  120. package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
  121. package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
  122. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  123. package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  124. package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
  125. package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  126. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  127. package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  128. package/.claude/skills/cfn-loop-validation/package.json +93 -0
  129. package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  130. package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  131. package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  132. package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
  133. package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
  134. package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  135. package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  136. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  137. package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  138. package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
  139. package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  140. package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  141. package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  142. package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
  143. package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  144. package/{claude-assets/skills/cfn-product-owner-decision → .claude/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  145. package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
  146. package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
  147. package/.claude/skills/pre-edit-backup/backup.sh +22 -0
  148. package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
  149. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +1 -0
  150. package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
  151. package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +1 -0
  152. package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
  153. package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +10 -0
  154. package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +56 -33
  155. package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +46 -36
  156. package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +9 -0
  157. package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +17 -17
  158. package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
  159. package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +18 -20
  160. package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +19 -28
  161. package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
  162. package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
  163. package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -10
  164. package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +15 -25
  165. package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +17 -21
  166. package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
  167. package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
  168. package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
  169. package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
  170. package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
  171. package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
  172. package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -67
  173. package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +7 -35
  174. package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +8 -37
  175. package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +16 -54
  176. package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +17 -55
  177. package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
  178. package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +17 -55
  179. package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +17 -48
  180. package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
  181. package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
  182. package/claude-assets/agents/cfn-dev-team/utility/analyst.md +12 -28
  183. package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
  184. package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
  185. package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +5 -10
  186. package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +120 -714
  187. package/claude-assets/agents/cfn-dev-team/utility/researcher.md +12 -21
  188. package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +146 -572
  189. package/claude-assets/agents/custom/cfn-docker-expert.md +102 -0
  190. package/claude-assets/agents/custom/cfn-loops-cli-expert.md +129 -0
  191. package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
  192. package/claude-assets/commands/cfn-loop-cli.md +158 -464
  193. package/claude-assets/commands/cfn-loop-trigger.md +114 -0
  194. package/claude-assets/hooks/SKILL.md +518 -0
  195. package/claude-assets/hooks/SKILL.md.backup +471 -0
  196. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
  197. package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
  198. package/claude-assets/hooks/cfn-invoke-post-edit.sh +22 -0
  199. package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
  200. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
  201. package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
  202. package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
  203. package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
  204. package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
  205. package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
  206. package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
  207. package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
  208. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
  209. package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
  210. package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
  211. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
  212. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
  213. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
  214. package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
  215. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
  216. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
  217. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
  218. package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
  219. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
  220. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
  221. package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
  222. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
  223. package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
  224. package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
  225. package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
  226. package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
  227. package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
  228. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
  229. package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
  230. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
  231. package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
  232. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
  233. package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
  234. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
  235. package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
  236. package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
  237. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
  238. package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
  239. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
  240. package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
  241. package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
  242. package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
  243. package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
  244. package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
  245. package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +369 -0
  246. package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
  247. package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
  248. package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
  249. package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
  250. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
  251. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
  252. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
  253. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
  254. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
  255. package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
  256. package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
  257. package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
  258. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
  259. package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
  260. package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
  261. package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
  262. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
  263. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
  264. package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
  265. package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
  266. package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
  267. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
  268. package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
  269. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
  270. package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
  271. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
  272. package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
  273. package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
  274. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
  275. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
  276. package/{.claude/skills/cfn-loop-orchestration → claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
  277. package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
  278. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
  279. package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
  280. package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
  281. package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
  282. package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
  283. package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
  284. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
  285. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
  286. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
  287. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
  288. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
  289. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
  290. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
  291. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
  292. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
  293. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
  294. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
  295. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
  296. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
  297. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
  298. package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
  299. package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
  300. package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
  301. package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
  302. package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
  303. package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
  304. package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
  305. package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
  306. package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
  307. package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
  308. package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
  309. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
  310. package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
  311. package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
  312. package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
  313. package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
  314. package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
  315. package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
  316. package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
  317. package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
  318. package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
  319. package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
  320. package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
  321. package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
  322. package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
  323. package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
  324. package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
  325. package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
  326. package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
  327. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
  328. package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
  329. package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
  330. package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
  331. package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
  332. package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
  333. package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
  334. package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
  335. package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
  336. package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
  337. package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
  338. package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
  339. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
  340. package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
  341. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
  342. package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
  343. package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
  344. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
  345. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
  346. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
  347. package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
  348. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
  349. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
  350. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
  351. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
  352. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
  353. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
  354. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
  355. package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
  356. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
  357. package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
  358. package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
  359. package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
  360. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
  361. package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
  362. package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
  363. package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
  364. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
  365. package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
  366. package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
  367. package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
  368. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
  369. package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
  370. package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
  371. package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
  372. package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
  373. package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
  374. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
  375. package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
  376. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
  377. package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
  378. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
  379. package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
  380. package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
  381. package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
  382. package/{.claude/skills/cfn-product-owner-decision → claude-assets/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
  383. package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
  384. package/claude-assets/skills/cfn-provider-routing/SKILL.md +192 -0
  385. package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
  386. package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
  387. package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
  388. package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
  389. package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
  390. package/dist/agents/agent-loader.js +146 -165
  391. package/dist/agents/agent-loader.js.map +1 -1
  392. package/dist/api/auth-endpoints.js +415 -0
  393. package/dist/api/auth-endpoints.js.map +1 -0
  394. package/dist/api/task-endpoints.js +562 -0
  395. package/dist/api/task-endpoints.js.map +1 -0
  396. package/dist/backend/server.js +418 -0
  397. package/dist/backend/server.js.map +1 -0
  398. package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
  399. package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
  400. package/dist/cfn-loop/product-owner/index.js +1 -0
  401. package/dist/cfn-loop/product-owner/index.js.map +1 -1
  402. package/dist/cli/agent-command.js +1 -1
  403. package/dist/cli/agent-command.js.map +1 -1
  404. package/dist/cli/agent-completion.js +273 -0
  405. package/dist/cli/agent-completion.js.map +1 -0
  406. package/dist/cli/agent-prompt-builder.js +83 -48
  407. package/dist/cli/agent-prompt-builder.js.map +1 -1
  408. package/dist/cli/agent-spawner.js +499 -0
  409. package/dist/cli/agent-spawner.js.map +1 -0
  410. package/dist/cli/anthropic-client.js +10 -3
  411. package/dist/cli/anthropic-client.js.map +1 -1
  412. package/dist/cli/config-manager.js +91 -109
  413. package/dist/cli/index.js +11 -0
  414. package/dist/cli/index.js.map +1 -1
  415. package/dist/cli/parse-decision-cli.js +268 -0
  416. package/dist/cli/parse-decision-cli.js.map +1 -0
  417. package/dist/cli/post-edit-hook.js +83 -0
  418. package/dist/cli/post-edit-hook.js.map +1 -0
  419. package/dist/cli/pre-edit-hook.js +77 -0
  420. package/dist/cli/pre-edit-hook.js.map +1 -0
  421. package/dist/cli/spawn-agent-cli.js +209 -0
  422. package/dist/cli/spawn-agent-cli.js.map +1 -0
  423. package/dist/coordination/coordination-wrapper.js +383 -0
  424. package/dist/coordination/coordination-wrapper.js.map +1 -0
  425. package/dist/coordination/store-success-criteria.js +68 -0
  426. package/dist/coordination/store-success-criteria.js.map +1 -0
  427. package/dist/coordination/store-task-context.js +65 -0
  428. package/dist/coordination/store-task-context.js.map +1 -0
  429. package/dist/hooks/backup-manager.js +273 -0
  430. package/dist/hooks/backup-manager.js.map +1 -0
  431. package/dist/hooks/post-edit-validator.js +388 -0
  432. package/dist/hooks/post-edit-validator.js.map +1 -0
  433. package/dist/integration/index.js +19 -0
  434. package/dist/integration/index.js.map +1 -0
  435. package/dist/integration/task-mode-adapter.js +297 -0
  436. package/dist/integration/task-mode-adapter.js.map +1 -0
  437. package/dist/integration/trigger-dev-client.js +253 -0
  438. package/dist/integration/trigger-dev-client.js.map +1 -0
  439. package/dist/integration/trigger-dev-webhooks.js +362 -0
  440. package/dist/integration/trigger-dev-webhooks.js.map +1 -0
  441. package/dist/lib/path-validator.js +14 -5
  442. package/dist/lib/path-validator.js.map +1 -1
  443. package/dist/lib/redis-queue-manager.js +5 -1
  444. package/dist/lib/redis-queue-manager.js.map +1 -1
  445. package/dist/middleware/authentication.js +317 -0
  446. package/dist/middleware/authentication.js.map +1 -0
  447. package/dist/services/authentication.js +669 -0
  448. package/dist/services/authentication.js.map +1 -0
  449. package/dist/services/session-management.js +436 -0
  450. package/dist/services/session-management.js.map +1 -0
  451. package/dist/services/skill-deployment.js +8 -6
  452. package/dist/services/skill-deployment.js.map +1 -1
  453. package/dist/services/user-service.js +710 -0
  454. package/dist/services/user-service.js.map +1 -0
  455. package/dist/types/trigger-dev-events.d.js +10 -0
  456. package/dist/types/trigger-dev-events.d.js.map +1 -0
  457. package/docs/README.md +240 -0
  458. package/package.json +13 -4
  459. package/scripts/compare-workflow-performance.sh +556 -0
  460. package/scripts/migrate-to-optimized-workflows.sh +438 -0
  461. package/scripts/organize-docs.sh +338 -0
  462. package/scripts/trigger-dev-setup.sh +267 -0
  463. package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  464. package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
  465. package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  466. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  467. package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  468. package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  469. package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
  470. package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  471. package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  472. package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  473. package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  474. package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
  475. package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  476. package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  477. package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  478. package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  479. package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  480. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  481. package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  482. package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  483. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  484. package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  485. package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  486. package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  487. package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  488. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  489. package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  490. package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  491. package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  492. package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  493. package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  494. package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  495. package/.claude/skills/cfn-redis-coordination/config.json +0 -61
  496. package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  497. package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  498. package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  499. package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  500. package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
  501. package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
  502. package/.claude/skills/cfn-redis-coordination/package.json +0 -45
  503. package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  504. package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  505. package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  506. package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  507. package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
  508. package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  509. package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  510. package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  511. package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  512. package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  513. package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  514. package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  515. package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  516. package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
  517. package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  518. package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  519. package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  520. package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  521. package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  522. package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  523. package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  524. package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  525. package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
  526. package/claude-assets/agents/typescript-specialist.md +0 -280
  527. package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
  528. package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
  529. package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
  530. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
  531. package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
  532. package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
  533. package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
  534. package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
  535. package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
  536. package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
  537. package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
  538. package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
  539. package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
  540. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
  541. package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
  542. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
  543. package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
  544. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
  545. package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
  546. package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
  547. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
  548. package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
  549. package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
  550. package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
  551. package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
  552. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
  553. package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
  554. package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
  555. package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
  556. package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
  557. package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
  558. package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
  559. package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
  560. package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
  561. package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
  562. package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
  563. package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
  564. package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
  565. package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
  566. package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
  567. package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
  568. package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
  569. package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
  570. package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
  571. package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
  572. package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
  573. package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
  574. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
  575. package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
  576. package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
  577. package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
  578. package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
  579. package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
  580. package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
  581. package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
  582. package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
  583. package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
  584. package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
  585. package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
  586. package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
  587. package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
  588. package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
  589. package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
  590. package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
  591. package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
  592. package/dist/coordination/index.js +0 -25
  593. package/dist/coordination/index.js.map +0 -1
  594. package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
  595. package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
  596. package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
  597. package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
  598. package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
  599. /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  600. /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  601. /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  602. /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  603. /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  604. /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  605. /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  606. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  607. /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  608. /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  609. /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  610. /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  611. /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  612. /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  613. /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  614. /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  615. /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  616. /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  617. /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
  618. /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
  619. /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
  620. /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
  621. /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
  622. /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
  623. /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
  624. /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
  625. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
  626. /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
  627. /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
  628. /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
  629. /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
  630. /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
  631. /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
  632. /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
  633. /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
  634. /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
  635. /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
  636. /package/claude-assets/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
@@ -162,7 +162,8 @@ const logger = createLogger('skill-deployment');
162
162
  skillName,
163
163
  lockResource
164
164
  });
165
- lock = await this.lockManager.acquire(lockResource, {
165
+ lock = await this.lockManager.acquireLock({
166
+ resource: lockResource,
166
167
  timeout: 10000,
167
168
  ttl: 60000,
168
169
  correlationId: `deploy-${skillName}-${Date.now()}`
@@ -249,7 +250,7 @@ const logger = createLogger('skill-deployment');
249
250
  auditId
250
251
  });
251
252
  // Step 10: Release distributed lock
252
- await this.lockManager.release(lock.id);
253
+ await this.lockManager.releaseLock(lock.id);
253
254
  logger.info('Skill deployed successfully', {
254
255
  skillId,
255
256
  skillName,
@@ -290,7 +291,7 @@ const logger = createLogger('skill-deployment');
290
291
  // Ensure lock is released even if transaction fails
291
292
  if (lock) {
292
293
  try {
293
- await this.lockManager.release(lock.id);
294
+ await this.lockManager.releaseLock(lock.id);
294
295
  logger.debug('Distributed lock released in finally block', {
295
296
  lockId: lock.id
296
297
  });
@@ -331,7 +332,8 @@ const logger = createLogger('skill-deployment');
331
332
  const skillName = skillId.replace(/^skill-/, '').replace(/-\d+-\d+$/, '');
332
333
  // Step 2: Acquire distributed lock for this skill
333
334
  const lockResource = this.buildLockResource(skillName);
334
- lock = await this.lockManager.acquire(lockResource, {
335
+ lock = await this.lockManager.acquireLock({
336
+ resource: lockResource,
335
337
  timeout: 10000,
336
338
  ttl: 60000,
337
339
  correlationId: `rollback-${deploymentId}-${Date.now()}`
@@ -372,7 +374,7 @@ const logger = createLogger('skill-deployment');
372
374
  skillId
373
375
  });
374
376
  // Step 6: Release distributed lock
375
- await this.lockManager.release(lock.id);
377
+ await this.lockManager.releaseLock(lock.id);
376
378
  logger.info('Deployment rollback succeeded', {
377
379
  deploymentId,
378
380
  skillId
@@ -393,7 +395,7 @@ const logger = createLogger('skill-deployment');
393
395
  // Ensure lock is released
394
396
  if (lock) {
395
397
  try {
396
- await this.lockManager.release(lock.id);
398
+ await this.lockManager.releaseLock(lock.id);
397
399
  logger.debug('Distributed lock released in rollback finally block', {
398
400
  lockId: lock.id
399
401
  });
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/services/skill-deployment.ts"],"sourcesContent":["/**\r\n * Skill Deployment Pipeline (Refactored with Transaction Framework)\r\n *\r\n * Orchestrates atomic deployment of skills from APPROVED → DEPLOYED state.\r\n * Part of Task 3.2: Skill Deployment Transaction Integration\r\n *\r\n * Features:\r\n * - Atomic cross-database transactions via TransactionManager (PostgreSQL + SQLite)\r\n * - Distributed locking to prevent concurrent deployments\r\n * - Automatic validation before deployment\r\n * - Version conflict detection and resolution within transaction\r\n * - Content hash validation within transaction\r\n * - Rollback capability on failure (automatic via transaction)\r\n * - Comprehensive audit trail (atomically updated)\r\n *\r\n * @example\r\n * ```typescript\r\n * const pipeline = new SkillDeploymentPipeline(dbService, txManager, lockManager);\r\n * const result = await pipeline.deploySkill({\r\n * skillPath: '.claude/skills/authentication',\r\n * deployedBy: 'admin@example.com'\r\n * });\r\n *\r\n * if (!result.success) {\r\n * console.error('Deployment failed:', result.error);\r\n * // Transaction automatically rolled back\r\n * }\r\n * ```\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { DatabaseService } from '../lib/database-service.js';\r\nimport { TransactionManager } from '../lib/database-service/transaction-manager.js';\r\nimport { DistributedLock, LockResource } from '../lib/distributed-lock.js';\r\nimport { StandardError, ErrorCode } from '../lib/errors.js';\r\nimport { createLogger } from '../lib/logging.js';\r\nimport { validateSkill, parseFrontmatter, ValidationResult } from './skill-validator.js';\r\nimport { getNextVersion, versionExists } from './skill-versioning.js';\r\n\r\nconst logger = createLogger('skill-deployment');\r\n\r\n/**\r\n * Deployment request parameters\r\n */\r\nexport interface DeploymentRequest {\r\n /** Path to skill directory */\r\n skillPath: string;\r\n /** User or system performing deployment */\r\n deployedBy?: string;\r\n /** Optional: Override auto-versioning with explicit version */\r\n explicitVersion?: string;\r\n /** Optional: Skip validation (dangerous, admin only) */\r\n skipValidation?: boolean;\r\n}\r\n\r\n/**\r\n * Deployment result\r\n */\r\nexport interface DeploymentResult {\r\n /** Whether deployment succeeded */\r\n success: boolean;\r\n /** Unique deployment ID for tracking */\r\n deploymentId?: number;\r\n /** Deployed skill ID */\r\n skillId?: string;\r\n /** Skill name */\r\n skillName?: string;\r\n /** Deployed version */\r\n version?: string;\r\n /** Error message if failed */\r\n error?: string;\r\n /** Validation result if validation failed */\r\n validationResult?: ValidationResult;\r\n /** Path to backup for rollback */\r\n rollbackPath?: string;\r\n /** Timestamp of deployment */\r\n deployedAt?: Date;\r\n /** Transaction ID for tracking */\r\n transactionId?: string;\r\n /** Lock ID for tracking */\r\n lockId?: string;\r\n}\r\n\r\n/**\r\n * Skill metadata for database operations\r\n */\r\ninterface SkillMetadata {\r\n id: string;\r\n name: string;\r\n version: string;\r\n contentPath: string;\r\n status: string;\r\n metadata: string;\r\n}\r\n\r\n/**\r\n * Skill Deployment Pipeline (Transaction-Aware)\r\n *\r\n * Handles atomic deployment of skills with validation, versioning, rollback,\r\n * and distributed locking to prevent concurrent modifications.\r\n */\r\nexport class SkillDeploymentPipeline {\r\n private dbService: DatabaseService;\r\n private txManager: TransactionManager;\r\n private lockManager: DistributedLock;\r\n\r\n constructor(\r\n dbService: DatabaseService,\r\n txManager: TransactionManager,\r\n lockManager: DistributedLock\r\n ) {\r\n this.dbService = dbService;\r\n this.txManager = txManager;\r\n this.lockManager = lockManager;\r\n }\r\n\r\n /**\r\n * Generate unique skill ID\r\n */\r\n private generateSkillId(skillName: string, version: string): string {\r\n const timestamp = Date.now();\r\n const sanitizedName = skillName.replace(/[^a-zA-Z0-9_-]/g, '-');\r\n return `skill-${sanitizedName}-${version}-${timestamp}`;\r\n }\r\n\r\n /**\r\n * Create backup of current skill state (for rollback)\r\n */\r\n private async createBackup(skillPath: string): Promise<string> {\r\n // For now, we'll just return the original path\r\n // In production, this would copy to a backup location\r\n logger.info('Creating deployment backup', { skillPath });\r\n return skillPath;\r\n }\r\n\r\n /**\r\n * Build lock resource for skill deployment\r\n */\r\n private buildLockResource(skillName: string): LockResource {\r\n return {\r\n database: 'skills',\r\n table: 'skills',\r\n key: skillName,\r\n };\r\n }\r\n\r\n /**\r\n * Record deployment attempt in audit trail (transaction-aware)\r\n *\r\n * NOTE: This must be called within a transaction context\r\n */\r\n private async recordDeploymentAudit(\r\n adapter: any,\r\n skillId: string,\r\n fromStatus: string | null,\r\n toStatus: string,\r\n version: string,\r\n success: boolean,\r\n deployedBy: string,\r\n errorMessage?: string,\r\n metadata?: Record<string, any>\r\n ): Promise<number> {\r\n logger.info('Recording deployment audit', {\r\n skillId,\r\n fromStatus,\r\n toStatus,\r\n version,\r\n success,\r\n });\r\n\r\n try {\r\n const result: any = await adapter.raw(\r\n `INSERT INTO deployment_audit\r\n (skill_id, from_status, to_status, version, success, deployed_by, error_message, metadata)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n skillId,\r\n fromStatus,\r\n toStatus,\r\n version,\r\n success ? 1 : 0,\r\n deployedBy,\r\n errorMessage || null,\r\n metadata ? JSON.stringify(metadata) : null,\r\n ]\r\n );\r\n\r\n const auditId = result.lastInsertId || 0;\r\n logger.info('Deployment audit recorded', { auditId, skillId });\r\n return auditId;\r\n } catch (error) {\r\n logger.error('Failed to record deployment audit', error as Error, { skillId });\r\n // In transaction mode, we want to fail the transaction if audit fails\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Deploy skill atomically across all databases with distributed locking\r\n *\r\n * Uses TransactionManager for atomic operations and DistributedLock\r\n * to prevent concurrent deployments of the same skill.\r\n *\r\n * @param request - Deployment request parameters\r\n * @returns Deployment result\r\n */\r\n async deploySkill(request: DeploymentRequest): Promise<DeploymentResult> {\r\n const { skillPath, deployedBy = 'system', explicitVersion, skipValidation = false } = request;\r\n\r\n logger.info('Starting skill deployment', { skillPath, deployedBy });\r\n\r\n let lock: any = null;\r\n let tx: any = null;\r\n\r\n try {\r\n // Step 1: Validate skill (unless skipped) - BEFORE acquiring lock\r\n if (!skipValidation) {\r\n const validationResult = await validateSkill(this.dbService, skillPath);\r\n\r\n if (!validationResult.valid) {\r\n logger.warn('Skill validation failed', {\r\n skillPath,\r\n errorCount: validationResult.errors.length,\r\n });\r\n\r\n // Record validation failure (no transaction needed for failure records)\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n await this.recordDeploymentAudit(\r\n adapter,\r\n 'unknown',\r\n null,\r\n 'FAILED',\r\n 'unknown',\r\n false,\r\n deployedBy,\r\n `Validation failed: ${validationResult.errors.map(e => e.message).join('; ')}`,\r\n { validationErrors: validationResult.errors }\r\n );\r\n } catch (auditError) {\r\n logger.warn('Failed to record validation failure audit (non-blocking)', {\r\n error: (auditError as Error).message,\r\n });\r\n }\r\n\r\n return {\r\n success: false,\r\n error: 'Validation failed',\r\n validationResult,\r\n };\r\n }\r\n }\r\n\r\n // Step 2: Parse skill metadata\r\n const frontmatter = parseFrontmatter(skillPath);\r\n const skillName = frontmatter.name;\r\n\r\n // Step 3: Acquire distributed lock for this skill (prevents concurrent deployments)\r\n const lockResource = this.buildLockResource(skillName);\r\n\r\n logger.debug('Acquiring distributed lock', { skillName, lockResource });\r\n\r\n lock = await this.lockManager.acquire(lockResource, {\r\n timeout: 10000, // 10 second timeout\r\n ttl: 60000, // 1 minute TTL (auto-release)\r\n correlationId: `deploy-${skillName}-${Date.now()}`,\r\n });\r\n\r\n logger.info('Distributed lock acquired', {\r\n lockId: lock.id,\r\n skillName,\r\n });\r\n\r\n // Step 4: Begin cross-database transaction\r\n // Note: Currently only using SQLite, but framework supports PostgreSQL too\r\n tx = await this.txManager.begin(['sqlite'], {\r\n timeout: 30000, // 30 second transaction timeout\r\n correlationId: lock.correlationId,\r\n });\r\n\r\n logger.info('Transaction began', {\r\n transactionId: tx.id,\r\n skillName,\r\n });\r\n\r\n // Step 5: Determine version within transaction (prevents version conflicts)\r\n let version: string;\r\n\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n if (explicitVersion) {\r\n // Check if explicit version already exists\r\n const exists = await versionExists(this.dbService, skillName, explicitVersion);\r\n if (exists) {\r\n throw new StandardError(\r\n ErrorCode.DB_DUPLICATE_KEY,\r\n `Version ${explicitVersion} already exists for skill: ${skillName}`,\r\n { skillName, version: explicitVersion }\r\n );\r\n }\r\n version = explicitVersion;\r\n } else {\r\n // Auto-increment version (patch by default)\r\n version = await getNextVersion(this.dbService, skillName, 'patch');\r\n }\r\n });\r\n\r\n // Step 6: Generate skill ID\r\n const skillId = this.generateSkillId(skillName, version!);\r\n\r\n // Step 7: Create backup for rollback\r\n const rollbackPath = await this.createBackup(skillPath);\r\n\r\n logger.info('Deploying skill within transaction', {\r\n skillId,\r\n skillName,\r\n version,\r\n transactionId: tx.id,\r\n });\r\n\r\n // Step 8: Execute atomic deployment operations\r\n let auditId: number = 0;\r\n\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n // Insert into skills table\r\n await adapter.raw(\r\n `INSERT INTO skills (id, name, version, content_path, status, metadata)\r\n VALUES (?, ?, ?, ?, ?, ?)`,\r\n [\r\n skillId,\r\n skillName,\r\n version,\r\n skillPath,\r\n 'DEPLOYED',\r\n JSON.stringify({\r\n deployedBy,\r\n deployedAt: new Date().toISOString(),\r\n description: frontmatter.description || '',\r\n author: frontmatter.author || '',\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }),\r\n ]\r\n );\r\n\r\n // Record successful deployment in audit trail (within same transaction)\r\n auditId = await this.recordDeploymentAudit(\r\n adapter,\r\n skillId,\r\n 'APPROVED',\r\n 'DEPLOYED',\r\n version!,\r\n true,\r\n deployedBy,\r\n undefined,\r\n {\r\n skillName,\r\n contentPath: skillPath,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }\r\n );\r\n });\r\n\r\n // Step 9: Commit transaction (atomic across all operations)\r\n await tx.commit();\r\n\r\n logger.info('Transaction committed successfully', {\r\n transactionId: tx.id,\r\n skillId,\r\n skillName,\r\n version,\r\n auditId,\r\n });\r\n\r\n // Step 10: Release distributed lock\r\n await this.lockManager.release(lock.id);\r\n\r\n logger.info('Skill deployed successfully', {\r\n skillId,\r\n skillName,\r\n version,\r\n auditId,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n });\r\n\r\n return {\r\n success: true,\r\n deploymentId: auditId,\r\n skillId,\r\n skillName,\r\n version,\r\n rollbackPath,\r\n deployedAt: new Date(),\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n };\r\n } catch (error) {\r\n logger.error('Deployment failed', error as Error, { skillPath });\r\n\r\n // Transaction automatically rolled back by TransactionManager on error\r\n if (tx) {\r\n logger.info('Transaction automatically rolled back', {\r\n transactionId: tx.id,\r\n });\r\n }\r\n\r\n const errorMessage =\r\n error instanceof StandardError\r\n ? error.message\r\n : `Deployment failed: ${(error as Error).message}`;\r\n\r\n return {\r\n success: false,\r\n error: errorMessage,\r\n transactionId: tx?.id,\r\n lockId: lock?.id,\r\n };\r\n } finally {\r\n // Ensure lock is released even if transaction fails\r\n if (lock) {\r\n try {\r\n await this.lockManager.release(lock.id);\r\n logger.debug('Distributed lock released in finally block', {\r\n lockId: lock.id,\r\n });\r\n } catch (lockError) {\r\n logger.error('Failed to release lock in finally block', lockError as Error, {\r\n lockId: lock.id,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Rollback a deployment\r\n *\r\n * Uses TransactionManager for atomic rollback across all databases.\r\n *\r\n * @param deploymentId - Deployment audit ID to rollback\r\n * @returns True if rollback succeeded\r\n */\r\n async rollbackDeployment(deploymentId: number): Promise<boolean> {\r\n logger.info('Starting deployment rollback', { deploymentId });\r\n\r\n let lock: any = null;\r\n let tx: any = null;\r\n\r\n try {\r\n // Step 1: Get deployment details (outside transaction to avoid deadlock)\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n const auditResult: any = await adapter.raw(\r\n 'SELECT skill_id, version FROM deployment_audit WHERE id = ?',\r\n [deploymentId]\r\n );\r\n\r\n if (!auditResult || auditResult.length === 0) {\r\n throw new StandardError(\r\n ErrorCode.DB_NOT_FOUND,\r\n `Deployment audit not found: ${deploymentId}`,\r\n { deploymentId }\r\n );\r\n }\r\n\r\n const { skill_id: skillId, version } = auditResult[0];\r\n\r\n // Extract skill name from skill ID\r\n const skillName = skillId.replace(/^skill-/, '').replace(/-\\d+-\\d+$/, '');\r\n\r\n // Step 2: Acquire distributed lock for this skill\r\n const lockResource = this.buildLockResource(skillName);\r\n\r\n lock = await this.lockManager.acquire(lockResource, {\r\n timeout: 10000,\r\n ttl: 60000,\r\n correlationId: `rollback-${deploymentId}-${Date.now()}`,\r\n });\r\n\r\n logger.info('Distributed lock acquired for rollback', {\r\n lockId: lock.id,\r\n deploymentId,\r\n });\r\n\r\n // Step 3: Begin rollback transaction\r\n tx = await this.txManager.begin(['sqlite'], {\r\n timeout: 30000,\r\n correlationId: lock.correlationId,\r\n });\r\n\r\n logger.info('Rollback transaction began', {\r\n transactionId: tx.id,\r\n deploymentId,\r\n });\r\n\r\n // Step 4: Execute rollback operations within transaction\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n // Delete from skills table\r\n await adapter.raw('DELETE FROM skills WHERE id = ?', [skillId]);\r\n\r\n // Record rollback in audit trail (within same transaction)\r\n await this.recordDeploymentAudit(\r\n adapter,\r\n skillId,\r\n 'DEPLOYED',\r\n 'ROLLED_BACK',\r\n version as string,\r\n true,\r\n 'system',\r\n 'Deployment rolled back',\r\n {\r\n originalDeploymentId: deploymentId,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }\r\n );\r\n });\r\n\r\n // Step 5: Commit rollback transaction\r\n await tx.commit();\r\n\r\n logger.info('Rollback transaction committed', {\r\n transactionId: tx.id,\r\n deploymentId,\r\n skillId,\r\n });\r\n\r\n // Step 6: Release distributed lock\r\n await this.lockManager.release(lock.id);\r\n\r\n logger.info('Deployment rollback succeeded', { deploymentId, skillId });\r\n return true;\r\n } catch (error) {\r\n logger.error('Deployment rollback failed', error as Error, { deploymentId });\r\n\r\n // Transaction automatically rolled back on error\r\n if (tx) {\r\n logger.info('Rollback transaction automatically rolled back', {\r\n transactionId: tx.id,\r\n });\r\n }\r\n\r\n return false;\r\n } finally {\r\n // Ensure lock is released\r\n if (lock) {\r\n try {\r\n await this.lockManager.release(lock.id);\r\n logger.debug('Distributed lock released in rollback finally block', {\r\n lockId: lock.id,\r\n });\r\n } catch (lockError) {\r\n logger.error('Failed to release lock in rollback finally block', lockError as Error, {\r\n lockId: lock.id,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get deployment history for a skill\r\n *\r\n * @param skillName - Name of the skill\r\n * @param limit - Maximum number of results\r\n * @returns Array of deployment audit records\r\n */\r\n async getDeploymentHistory(skillName: string, limit: number = 10): Promise<any[]> {\r\n logger.debug('Fetching deployment history', { skillName, limit });\r\n\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n\r\n const result: any = await adapter.raw(\r\n `SELECT da.*\r\n FROM deployment_audit da\r\n JOIN skills s ON da.skill_id = s.id\r\n WHERE s.name = ?\r\n ORDER BY da.deployed_at DESC\r\n LIMIT ?`,\r\n [skillName, limit]\r\n );\r\n\r\n return result || [];\r\n } catch (error) {\r\n logger.error('Failed to fetch deployment history', error as Error, { skillName });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to fetch deployment history for skill: ${skillName}`,\r\n { skillName },\r\n error as Error\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get all deployments with a specific status\r\n *\r\n * @param status - Deployment status to filter by\r\n * @param limit - Maximum number of results\r\n * @returns Array of deployment audit records\r\n */\r\n async getDeploymentsByStatus(status: string, limit: number = 50): Promise<any[]> {\r\n logger.debug('Fetching deployments by status', { status, limit });\r\n\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n\r\n const result: any = await adapter.raw(\r\n `SELECT * FROM deployment_audit\r\n WHERE to_status = ?\r\n ORDER BY deployed_at DESC\r\n LIMIT ?`,\r\n [status, limit]\r\n );\r\n\r\n return result || [];\r\n } catch (error) {\r\n logger.error('Failed to fetch deployments by status', error as Error, { status });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to fetch deployments by status: ${status}`,\r\n { status },\r\n error as Error\r\n );\r\n }\r\n }\r\n}\r\n"],"names":["StandardError","ErrorCode","createLogger","validateSkill","parseFrontmatter","getNextVersion","versionExists","logger","SkillDeploymentPipeline","dbService","txManager","lockManager","generateSkillId","skillName","version","timestamp","Date","now","sanitizedName","replace","createBackup","skillPath","info","buildLockResource","database","table","key","recordDeploymentAudit","adapter","skillId","fromStatus","toStatus","success","deployedBy","errorMessage","metadata","result","raw","JSON","stringify","auditId","lastInsertId","error","deploySkill","request","explicitVersion","skipValidation","lock","tx","validationResult","valid","warn","errorCount","errors","length","getAdapter","map","e","message","join","validationErrors","auditError","frontmatter","name","lockResource","debug","acquire","timeout","ttl","correlationId","lockId","id","begin","transactionId","execute","exists","DB_DUPLICATE_KEY","rollbackPath","deployedAt","toISOString","description","author","undefined","contentPath","commit","release","deploymentId","lockError","rollbackDeployment","auditResult","DB_NOT_FOUND","skill_id","originalDeploymentId","getDeploymentHistory","limit","DB_QUERY_FAILED","getDeploymentsByStatus","status"],"mappings":"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"}
1
+ {"version":3,"sources":["../../src/services/skill-deployment.ts"],"sourcesContent":["/**\r\n * Skill Deployment Pipeline (Refactored with Transaction Framework)\r\n *\r\n * Orchestrates atomic deployment of skills from APPROVED → DEPLOYED state.\r\n * Part of Task 3.2: Skill Deployment Transaction Integration\r\n *\r\n * Features:\r\n * - Atomic cross-database transactions via TransactionManager (PostgreSQL + SQLite)\r\n * - Distributed locking to prevent concurrent deployments\r\n * - Automatic validation before deployment\r\n * - Version conflict detection and resolution within transaction\r\n * - Content hash validation within transaction\r\n * - Rollback capability on failure (automatic via transaction)\r\n * - Comprehensive audit trail (atomically updated)\r\n *\r\n * @example\r\n * ```typescript\r\n * const pipeline = new SkillDeploymentPipeline(dbService, txManager, lockManager);\r\n * const result = await pipeline.deploySkill({\r\n * skillPath: '.claude/skills/authentication',\r\n * deployedBy: 'admin@example.com'\r\n * });\r\n *\r\n * if (!result.success) {\r\n * console.error('Deployment failed:', result.error);\r\n * // Transaction automatically rolled back\r\n * }\r\n * ```\r\n */\r\n\r\nimport * as fs from 'fs';\r\nimport * as path from 'path';\r\nimport { DatabaseService } from '../lib/database-service.js';\r\nimport { TransactionManager } from '../lib/database-service/transaction-manager.js';\r\nimport { DistributedLock, LockResource } from '../lib/distributed-lock.js';\r\nimport { StandardError, ErrorCode } from '../lib/errors.js';\r\nimport { createLogger } from '../lib/logging.js';\r\nimport { validateSkill, parseFrontmatter, ValidationResult } from './skill-validator.js';\r\nimport { getNextVersion, versionExists } from './skill-versioning.js';\r\n\r\nconst logger = createLogger('skill-deployment');\r\n\r\n/**\r\n * Deployment request parameters\r\n */\r\nexport interface DeploymentRequest {\r\n /** Path to skill directory */\r\n skillPath: string;\r\n /** User or system performing deployment */\r\n deployedBy?: string;\r\n /** Optional: Override auto-versioning with explicit version */\r\n explicitVersion?: string;\r\n /** Optional: Skip validation (dangerous, admin only) */\r\n skipValidation?: boolean;\r\n}\r\n\r\n/**\r\n * Deployment result\r\n */\r\nexport interface DeploymentResult {\r\n /** Whether deployment succeeded */\r\n success: boolean;\r\n /** Unique deployment ID for tracking */\r\n deploymentId?: number;\r\n /** Deployed skill ID */\r\n skillId?: string;\r\n /** Skill name */\r\n skillName?: string;\r\n /** Deployed version */\r\n version?: string;\r\n /** Error message if failed */\r\n error?: string;\r\n /** Validation result if validation failed */\r\n validationResult?: ValidationResult;\r\n /** Path to backup for rollback */\r\n rollbackPath?: string;\r\n /** Timestamp of deployment */\r\n deployedAt?: Date;\r\n /** Transaction ID for tracking */\r\n transactionId?: string;\r\n /** Lock ID for tracking */\r\n lockId?: string;\r\n}\r\n\r\n/**\r\n * Skill metadata for database operations\r\n */\r\ninterface SkillMetadata {\r\n id: string;\r\n name: string;\r\n version: string;\r\n contentPath: string;\r\n status: string;\r\n metadata: string;\r\n}\r\n\r\n/**\r\n * Skill Deployment Pipeline (Transaction-Aware)\r\n *\r\n * Handles atomic deployment of skills with validation, versioning, rollback,\r\n * and distributed locking to prevent concurrent modifications.\r\n */\r\nexport class SkillDeploymentPipeline {\r\n private dbService: DatabaseService;\r\n private txManager: TransactionManager;\r\n private lockManager: DistributedLock;\r\n\r\n constructor(\r\n dbService: DatabaseService,\r\n txManager: TransactionManager,\r\n lockManager: DistributedLock\r\n ) {\r\n this.dbService = dbService;\r\n this.txManager = txManager;\r\n this.lockManager = lockManager;\r\n }\r\n\r\n /**\r\n * Generate unique skill ID\r\n */\r\n private generateSkillId(skillName: string, version: string): string {\r\n const timestamp = Date.now();\r\n const sanitizedName = skillName.replace(/[^a-zA-Z0-9_-]/g, '-');\r\n return `skill-${sanitizedName}-${version}-${timestamp}`;\r\n }\r\n\r\n /**\r\n * Create backup of current skill state (for rollback)\r\n */\r\n private async createBackup(skillPath: string): Promise<string> {\r\n // For now, we'll just return the original path\r\n // In production, this would copy to a backup location\r\n logger.info('Creating deployment backup', { skillPath });\r\n return skillPath;\r\n }\r\n\r\n /**\r\n * Build lock resource for skill deployment\r\n */\r\n private buildLockResource(skillName: string): LockResource {\r\n return {\r\n database: 'skills',\r\n table: 'skills',\r\n key: skillName,\r\n };\r\n }\r\n\r\n /**\r\n * Record deployment attempt in audit trail (transaction-aware)\r\n *\r\n * NOTE: This must be called within a transaction context\r\n */\r\n private async recordDeploymentAudit(\r\n adapter: any,\r\n skillId: string,\r\n fromStatus: string | null,\r\n toStatus: string,\r\n version: string,\r\n success: boolean,\r\n deployedBy: string,\r\n errorMessage?: string,\r\n metadata?: Record<string, any>\r\n ): Promise<number> {\r\n logger.info('Recording deployment audit', {\r\n skillId,\r\n fromStatus,\r\n toStatus,\r\n version,\r\n success,\r\n });\r\n\r\n try {\r\n const result: any = await adapter.raw(\r\n `INSERT INTO deployment_audit\r\n (skill_id, from_status, to_status, version, success, deployed_by, error_message, metadata)\r\n VALUES (?, ?, ?, ?, ?, ?, ?, ?)`,\r\n [\r\n skillId,\r\n fromStatus,\r\n toStatus,\r\n version,\r\n success ? 1 : 0,\r\n deployedBy,\r\n errorMessage || null,\r\n metadata ? JSON.stringify(metadata) : null,\r\n ]\r\n );\r\n\r\n const auditId = result.lastInsertId || 0;\r\n logger.info('Deployment audit recorded', { auditId, skillId });\r\n return auditId;\r\n } catch (error) {\r\n logger.error('Failed to record deployment audit', error as Error, { skillId });\r\n // In transaction mode, we want to fail the transaction if audit fails\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Deploy skill atomically across all databases with distributed locking\r\n *\r\n * Uses TransactionManager for atomic operations and DistributedLock\r\n * to prevent concurrent deployments of the same skill.\r\n *\r\n * @param request - Deployment request parameters\r\n * @returns Deployment result\r\n */\r\n async deploySkill(request: DeploymentRequest): Promise<DeploymentResult> {\r\n const { skillPath, deployedBy = 'system', explicitVersion, skipValidation = false } = request;\r\n\r\n logger.info('Starting skill deployment', { skillPath, deployedBy });\r\n\r\n let lock: any = null;\r\n let tx: any = null;\r\n\r\n try {\r\n // Step 1: Validate skill (unless skipped) - BEFORE acquiring lock\r\n if (!skipValidation) {\r\n const validationResult = await validateSkill(this.dbService, skillPath);\r\n\r\n if (!validationResult.valid) {\r\n logger.warn('Skill validation failed', {\r\n skillPath,\r\n errorCount: validationResult.errors.length,\r\n });\r\n\r\n // Record validation failure (no transaction needed for failure records)\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n await this.recordDeploymentAudit(\r\n adapter,\r\n 'unknown',\r\n null,\r\n 'FAILED',\r\n 'unknown',\r\n false,\r\n deployedBy,\r\n `Validation failed: ${validationResult.errors.map(e => e.message).join('; ')}`,\r\n { validationErrors: validationResult.errors }\r\n );\r\n } catch (auditError) {\r\n logger.warn('Failed to record validation failure audit (non-blocking)', {\r\n error: (auditError as Error).message,\r\n });\r\n }\r\n\r\n return {\r\n success: false,\r\n error: 'Validation failed',\r\n validationResult,\r\n };\r\n }\r\n }\r\n\r\n // Step 2: Parse skill metadata\r\n const frontmatter = parseFrontmatter(skillPath);\r\n const skillName = frontmatter.name;\r\n\r\n // Step 3: Acquire distributed lock for this skill (prevents concurrent deployments)\r\n const lockResource = this.buildLockResource(skillName);\r\n\r\n logger.debug('Acquiring distributed lock', { skillName, lockResource });\r\n\r\n lock = await this.lockManager.acquireLock({\r\n resource: lockResource,\r\n timeout: 10000, // 10 second timeout\r\n ttl: 60000, // 1 minute TTL (auto-release)\r\n correlationId: `deploy-${skillName}-${Date.now()}`,\r\n });\r\n\r\n logger.info('Distributed lock acquired', {\r\n lockId: lock.id,\r\n skillName,\r\n });\r\n\r\n // Step 4: Begin cross-database transaction\r\n // Note: Currently only using SQLite, but framework supports PostgreSQL too\r\n tx = await this.txManager.begin(['sqlite'], {\r\n timeout: 30000, // 30 second transaction timeout\r\n correlationId: lock.correlationId,\r\n });\r\n\r\n logger.info('Transaction began', {\r\n transactionId: tx.id,\r\n skillName,\r\n });\r\n\r\n // Step 5: Determine version within transaction (prevents version conflicts)\r\n let version: string;\r\n\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n if (explicitVersion) {\r\n // Check if explicit version already exists\r\n const exists = await versionExists(this.dbService, skillName, explicitVersion);\r\n if (exists) {\r\n throw new StandardError(\r\n ErrorCode.DB_DUPLICATE_KEY,\r\n `Version ${explicitVersion} already exists for skill: ${skillName}`,\r\n { skillName, version: explicitVersion }\r\n );\r\n }\r\n version = explicitVersion;\r\n } else {\r\n // Auto-increment version (patch by default)\r\n version = await getNextVersion(this.dbService, skillName, 'patch');\r\n }\r\n });\r\n\r\n // Step 6: Generate skill ID\r\n const skillId = this.generateSkillId(skillName, version!);\r\n\r\n // Step 7: Create backup for rollback\r\n const rollbackPath = await this.createBackup(skillPath);\r\n\r\n logger.info('Deploying skill within transaction', {\r\n skillId,\r\n skillName,\r\n version,\r\n transactionId: tx.id,\r\n });\r\n\r\n // Step 8: Execute atomic deployment operations\r\n let auditId: number = 0;\r\n\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n // Insert into skills table\r\n await adapter.raw(\r\n `INSERT INTO skills (id, name, version, content_path, status, metadata)\r\n VALUES (?, ?, ?, ?, ?, ?)`,\r\n [\r\n skillId,\r\n skillName,\r\n version,\r\n skillPath,\r\n 'DEPLOYED',\r\n JSON.stringify({\r\n deployedBy,\r\n deployedAt: new Date().toISOString(),\r\n description: frontmatter.description || '',\r\n author: frontmatter.author || '',\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }),\r\n ]\r\n );\r\n\r\n // Record successful deployment in audit trail (within same transaction)\r\n auditId = await this.recordDeploymentAudit(\r\n adapter,\r\n skillId,\r\n 'APPROVED',\r\n 'DEPLOYED',\r\n version!,\r\n true,\r\n deployedBy,\r\n undefined,\r\n {\r\n skillName,\r\n contentPath: skillPath,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }\r\n );\r\n });\r\n\r\n // Step 9: Commit transaction (atomic across all operations)\r\n await tx.commit();\r\n\r\n logger.info('Transaction committed successfully', {\r\n transactionId: tx.id,\r\n skillId,\r\n skillName,\r\n version,\r\n auditId,\r\n });\r\n\r\n // Step 10: Release distributed lock\r\n await this.lockManager.releaseLock(lock.id);\r\n\r\n logger.info('Skill deployed successfully', {\r\n skillId,\r\n skillName,\r\n version,\r\n auditId,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n });\r\n\r\n return {\r\n success: true,\r\n deploymentId: auditId,\r\n skillId,\r\n skillName,\r\n version,\r\n rollbackPath,\r\n deployedAt: new Date(),\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n };\r\n } catch (error) {\r\n logger.error('Deployment failed', error as Error, { skillPath });\r\n\r\n // Transaction automatically rolled back by TransactionManager on error\r\n if (tx) {\r\n logger.info('Transaction automatically rolled back', {\r\n transactionId: tx.id,\r\n });\r\n }\r\n\r\n const errorMessage =\r\n error instanceof StandardError\r\n ? error.message\r\n : `Deployment failed: ${(error as Error).message}`;\r\n\r\n return {\r\n success: false,\r\n error: errorMessage,\r\n transactionId: tx?.id,\r\n lockId: lock?.id,\r\n };\r\n } finally {\r\n // Ensure lock is released even if transaction fails\r\n if (lock) {\r\n try {\r\n await this.lockManager.releaseLock(lock.id);\r\n logger.debug('Distributed lock released in finally block', {\r\n lockId: lock.id,\r\n });\r\n } catch (lockError) {\r\n logger.error('Failed to release lock in finally block', lockError as Error, {\r\n lockId: lock.id,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Rollback a deployment\r\n *\r\n * Uses TransactionManager for atomic rollback across all databases.\r\n *\r\n * @param deploymentId - Deployment audit ID to rollback\r\n * @returns True if rollback succeeded\r\n */\r\n async rollbackDeployment(deploymentId: number): Promise<boolean> {\r\n logger.info('Starting deployment rollback', { deploymentId });\r\n\r\n let lock: any = null;\r\n let tx: any = null;\r\n\r\n try {\r\n // Step 1: Get deployment details (outside transaction to avoid deadlock)\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n const auditResult: any = await adapter.raw(\r\n 'SELECT skill_id, version FROM deployment_audit WHERE id = ?',\r\n [deploymentId]\r\n );\r\n\r\n if (!auditResult || auditResult.length === 0) {\r\n throw new StandardError(\r\n ErrorCode.DB_NOT_FOUND,\r\n `Deployment audit not found: ${deploymentId}`,\r\n { deploymentId }\r\n );\r\n }\r\n\r\n const { skill_id: skillId, version } = auditResult[0];\r\n\r\n // Extract skill name from skill ID\r\n const skillName = skillId.replace(/^skill-/, '').replace(/-\\d+-\\d+$/, '');\r\n\r\n // Step 2: Acquire distributed lock for this skill\r\n const lockResource = this.buildLockResource(skillName);\r\n\r\n lock = await this.lockManager.acquireLock({\r\n resource: lockResource,\r\n timeout: 10000,\r\n ttl: 60000,\r\n correlationId: `rollback-${deploymentId}-${Date.now()}`,\r\n });\r\n\r\n logger.info('Distributed lock acquired for rollback', {\r\n lockId: lock.id,\r\n deploymentId,\r\n });\r\n\r\n // Step 3: Begin rollback transaction\r\n tx = await this.txManager.begin(['sqlite'], {\r\n timeout: 30000,\r\n correlationId: lock.correlationId,\r\n });\r\n\r\n logger.info('Rollback transaction began', {\r\n transactionId: tx.id,\r\n deploymentId,\r\n });\r\n\r\n // Step 4: Execute rollback operations within transaction\r\n await tx.execute('sqlite', async (adapter: any) => {\r\n // Delete from skills table\r\n await adapter.raw('DELETE FROM skills WHERE id = ?', [skillId]);\r\n\r\n // Record rollback in audit trail (within same transaction)\r\n await this.recordDeploymentAudit(\r\n adapter,\r\n skillId,\r\n 'DEPLOYED',\r\n 'ROLLED_BACK',\r\n version as string,\r\n true,\r\n 'system',\r\n 'Deployment rolled back',\r\n {\r\n originalDeploymentId: deploymentId,\r\n transactionId: tx.id,\r\n lockId: lock.id,\r\n }\r\n );\r\n });\r\n\r\n // Step 5: Commit rollback transaction\r\n await tx.commit();\r\n\r\n logger.info('Rollback transaction committed', {\r\n transactionId: tx.id,\r\n deploymentId,\r\n skillId,\r\n });\r\n\r\n // Step 6: Release distributed lock\r\n await this.lockManager.releaseLock(lock.id);\r\n\r\n logger.info('Deployment rollback succeeded', { deploymentId, skillId });\r\n return true;\r\n } catch (error) {\r\n logger.error('Deployment rollback failed', error as Error, { deploymentId });\r\n\r\n // Transaction automatically rolled back on error\r\n if (tx) {\r\n logger.info('Rollback transaction automatically rolled back', {\r\n transactionId: tx.id,\r\n });\r\n }\r\n\r\n return false;\r\n } finally {\r\n // Ensure lock is released\r\n if (lock) {\r\n try {\r\n await this.lockManager.releaseLock(lock.id);\r\n logger.debug('Distributed lock released in rollback finally block', {\r\n lockId: lock.id,\r\n });\r\n } catch (lockError) {\r\n logger.error('Failed to release lock in rollback finally block', lockError as Error, {\r\n lockId: lock.id,\r\n });\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Get deployment history for a skill\r\n *\r\n * @param skillName - Name of the skill\r\n * @param limit - Maximum number of results\r\n * @returns Array of deployment audit records\r\n */\r\n async getDeploymentHistory(skillName: string, limit: number = 10): Promise<any[]> {\r\n logger.debug('Fetching deployment history', { skillName, limit });\r\n\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n\r\n const result: any = await adapter.raw(\r\n `SELECT da.*\r\n FROM deployment_audit da\r\n JOIN skills s ON da.skill_id = s.id\r\n WHERE s.name = ?\r\n ORDER BY da.deployed_at DESC\r\n LIMIT ?`,\r\n [skillName, limit]\r\n );\r\n\r\n return result || [];\r\n } catch (error) {\r\n logger.error('Failed to fetch deployment history', error as Error, { skillName });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to fetch deployment history for skill: ${skillName}`,\r\n { skillName },\r\n error as Error\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Get all deployments with a specific status\r\n *\r\n * @param status - Deployment status to filter by\r\n * @param limit - Maximum number of results\r\n * @returns Array of deployment audit records\r\n */\r\n async getDeploymentsByStatus(status: string, limit: number = 50): Promise<any[]> {\r\n logger.debug('Fetching deployments by status', { status, limit });\r\n\r\n try {\r\n const adapter = this.dbService.getAdapter('sqlite');\r\n\r\n const result: any = await adapter.raw(\r\n `SELECT * FROM deployment_audit\r\n WHERE to_status = ?\r\n ORDER BY deployed_at DESC\r\n LIMIT ?`,\r\n [status, limit]\r\n );\r\n\r\n return result || [];\r\n } catch (error) {\r\n logger.error('Failed to fetch deployments by status', error as Error, { status });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to fetch deployments by status: ${status}`,\r\n { status },\r\n error as Error\r\n );\r\n }\r\n }\r\n}\r\n"],"names":["StandardError","ErrorCode","createLogger","validateSkill","parseFrontmatter","getNextVersion","versionExists","logger","SkillDeploymentPipeline","dbService","txManager","lockManager","generateSkillId","skillName","version","timestamp","Date","now","sanitizedName","replace","createBackup","skillPath","info","buildLockResource","database","table","key","recordDeploymentAudit","adapter","skillId","fromStatus","toStatus","success","deployedBy","errorMessage","metadata","result","raw","JSON","stringify","auditId","lastInsertId","error","deploySkill","request","explicitVersion","skipValidation","lock","tx","validationResult","valid","warn","errorCount","errors","length","getAdapter","map","e","message","join","validationErrors","auditError","frontmatter","name","lockResource","debug","acquireLock","resource","timeout","ttl","correlationId","lockId","id","begin","transactionId","execute","exists","DB_DUPLICATE_KEY","rollbackPath","deployedAt","toISOString","description","author","undefined","contentPath","commit","releaseLock","deploymentId","lockError","rollbackDeployment","auditResult","DB_NOT_FOUND","skill_id","originalDeploymentId","getDeploymentHistory","limit","DB_QUERY_FAILED","getDeploymentsByStatus","status"],"mappings":"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"}