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.
- package/.claude/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
- package/.claude/commands/cfn-loop-cli.md +158 -464
- package/.claude/commands/cfn-loop-trigger.md +114 -0
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/.claude/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/.claude/hooks/cfn-invoke-post-edit.sh +22 -0
- package/.claude/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/.claude/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/.claude/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/.claude/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/.claude/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/.claude/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/.claude/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/.claude/skills/{cfn-redis-coordination/check-dependencies.sh → cfn-agent-spawning/check-dependencies.sh.backup} +3 -5
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/.claude/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/.claude/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/.claude/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/.claude/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/.claude/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/.claude/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/.claude/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/.claude/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/.claude/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/.claude/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/.claude/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/.claude/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/.claude/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/{claude-assets/skills/cfn-loop-orchestration → .claude/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
- package/.claude/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/.claude/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/.claude/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/.claude/skills/cfn-loop-orchestration/package.json +4 -0
- package/.claude/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/.claude/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/.claude/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/.claude/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/.claude/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/.claude/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/.claude/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/.claude/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/.claude/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/.claude/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/.claude/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/.claude/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/.claude/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/.claude/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/.claude/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/.claude/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/.claude/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/.claude/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/.claude/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/.claude/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/.claude/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/.claude/skills/cfn-loop-validation/INDEX.md +531 -0
- package/.claude/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/.claude/skills/cfn-loop-validation/SKILL.md +48 -1
- package/.claude/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/.claude/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/.claude/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/.claude/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/{claude-assets/skills/cfn-redis-coordination/check-dependencies.sh → .claude/skills/cfn-loop-validation/check-dependencies.sh.backup} +4 -5
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/.claude/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/.claude/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/.claude/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js +66 -0
- package/.claude/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/.claude/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/.claude/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/.claude/skills/cfn-loop-validation/package.json +93 -0
- package/.claude/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/.claude/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/.claude/skills/cfn-loop-validation/src/types.ts +215 -0
- package/.claude/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/.claude/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/.claude/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/.claude/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/.claude/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/.claude/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/.claude/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/.claude/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/{claude-assets/skills/cfn-product-owner-decision → .claude/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
- package/.claude/skills/pre-edit-backup/SKILL.md +324 -0
- package/.claude/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/.claude/skills/pre-edit-backup/backup.sh +22 -0
- package/.claude/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +1 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +1 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +1 -0
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +1 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/devops-engineer.md +10 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +56 -33
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +46 -36
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +9 -0
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +17 -17
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +40 -58
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +18 -20
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +19 -28
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +15 -19
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +15 -10
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +15 -10
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +15 -25
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +17 -21
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +17 -21
- package/claude-assets/agents/cfn-dev-team/product-owners/product-owner.md +1 -5
- package/claude-assets/agents/cfn-dev-team/reviewers/code-reviewer.md +20 -51
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +22 -71
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +21 -64
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +22 -67
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +23 -67
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +7 -35
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +8 -37
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +16 -54
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +17 -55
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +9 -37
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +17 -55
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +17 -48
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +8 -37
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +7 -27
- package/claude-assets/agents/cfn-dev-team/utility/analyst.md +12 -28
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +13 -13
- package/claude-assets/agents/cfn-dev-team/utility/context-curator.md +7 -2
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +5 -10
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +120 -714
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +12 -21
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +146 -572
- package/claude-assets/agents/custom/cfn-docker-expert.md +102 -0
- package/claude-assets/agents/custom/cfn-loops-cli-expert.md +129 -0
- package/claude-assets/cfn-extras/agents/cfn-v3-coordinator.md +517 -0
- package/claude-assets/commands/cfn-loop-cli.md +158 -464
- package/claude-assets/commands/cfn-loop-trigger.md +114 -0
- package/claude-assets/hooks/SKILL.md +518 -0
- package/claude-assets/hooks/SKILL.md.backup +471 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh +100 -0
- package/claude-assets/hooks/cfn-invoke-post-edit-ts.sh.backup +78 -0
- package/claude-assets/hooks/cfn-invoke-post-edit.sh +22 -0
- package/claude-assets/hooks/cfn-invoke-post-edit.sh.backup +87 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh +116 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit-ts.sh.backup +94 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh +22 -0
- package/claude-assets/hooks/cfn-invoke-pre-edit.sh.backup +88 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/DELIVERABLES.md +409 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/IMPLEMENTATION_SUMMARY.md +396 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/INTEGRATION_GUIDE.md +308 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/QUICK_REFERENCE.md +239 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md +107 -1
- package/claude-assets/skills/cfn-agent-selection-with-fallback/SKILL.md.backup +302 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/TYPESCRIPT_MIGRATION.md +295 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.cjs +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/agent-selector.js +297 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.cjs +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/dist/cli.js +96 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh +45 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents-ts.sh.backup +23 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/select-agents.sh.backup +173 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.test.ts +357 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/agent-selector.ts +350 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/src/cli.ts +74 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh +22 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/task-classifier.sh.backup +71 -0
- package/claude-assets/skills/cfn-agent-selection-with-fallback/tsconfig.json +18 -0
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md +48 -1
- package/claude-assets/skills/cfn-agent-spawning/SKILL.md.backup +135 -0
- package/claude-assets/skills/cfn-agent-spawning/TYPESCRIPT_MIGRATION.md +567 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/check-dependencies.sh.backup +30 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/get-agent-provider-env.sh.backup +127 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/parse-agent-provider.sh.backup +59 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh +63 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent-wrapper.sh.backup +41 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +26 -1
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-templates.sh.backup +613 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh +22 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-worker.sh.backup +176 -0
- package/claude-assets/skills/cfn-coordination/agent-completion.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-signal.sh.backup +36 -0
- package/claude-assets/skills/cfn-coordination/coordination-wait.sh.backup +36 -0
- package/claude-assets/skills/cfn-dependency-ingestion/README.md +101 -0
- package/claude-assets/skills/cfn-dependency-ingestion/SKILL.md +369 -0
- package/claude-assets/skills/cfn-dependency-ingestion/build.sh +23 -0
- package/claude-assets/skills/cfn-dependency-ingestion/dist/ingest-dependencies.js +478 -0
- package/claude-assets/skills/cfn-dependency-ingestion/ingest-dependencies.sh +295 -0
- package/claude-assets/skills/cfn-dependency-ingestion/src/ingest-dependencies.ts +563 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/original +271 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763619700_33aff4a69b99159e4e849107ebc4d09f/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/metadata.json +8 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/original +325 -0
- package/claude-assets/skills/cfn-loop-orchestration/.backups/unknown/1763671642_06496e8c399a79db08167cc00ed4b31e/revert.sh +7 -0
- package/claude-assets/skills/cfn-loop-orchestration/CLI_IMPLEMENTATION_SUMMARY.md +330 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONFIGURATION_IMPROVEMENTS.md +318 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_MIGRATION.md +308 -0
- package/claude-assets/skills/cfn-loop-orchestration/CONTEXT_LOOKUP_QUICK_START.md +378 -0
- package/claude-assets/skills/cfn-loop-orchestration/E2E_VALIDATION_REPORT.md +262 -0
- package/claude-assets/skills/cfn-loop-orchestration/IMPLEMENTATION_SUMMARY.md +319 -519
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_E2E_REPORT.md +299 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_EXECUTION_SUMMARY.md +403 -0
- package/claude-assets/skills/cfn-loop-orchestration/NORTH_STAR_INDEX.md +323 -0
- package/claude-assets/skills/cfn-loop-orchestration/SKILL.md +159 -48
- package/claude-assets/skills/cfn-loop-orchestration/SPAWN_AGENTS_IMPLEMENTATION.md +188 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_REPORT.md +335 -0
- package/claude-assets/skills/cfn-loop-orchestration/TEST_COVERAGE_SUMMARY.md +456 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_REPORT.md +709 -0
- package/claude-assets/skills/cfn-loop-orchestration/TYPESCRIPT_INTEGRATION_SUMMARY.md +257 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_REPORT.md +572 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATION_SUMMARY.txt +196 -0
- package/claude-assets/skills/cfn-loop-orchestration/VALIDATOR_MODULE_GUIDE.md +526 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/README.md +167 -0
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate-enhanced.sh +548 -0
- package/{.claude/skills/cfn-loop-orchestration → claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash}/orchestrate-wrapper.sh +11 -1
- package/claude-assets/skills/cfn-loop-orchestration/archive/legacy-bash/orchestrate.sh +182 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation-fixed.js +240 -0
- package/claude-assets/skills/cfn-loop-orchestration/e2e-validation.js +213 -0
- package/claude-assets/skills/cfn-loop-orchestration/package-lock.json +3 -0
- package/claude-assets/skills/cfn-loop-orchestration/package.json +4 -0
- package/claude-assets/skills/cfn-loop-orchestration/run-north-star-e2e.ts +210 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/cli/orchestrator-cli.ts +396 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR.md +564 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONFIDENCE_AGGREGATOR_QUICK_REF.md +241 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_IMPLEMENTATION.md +375 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_QUICK_REFERENCE.md +362 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_README.md +307 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/CONTEXT_INJECTOR_USAGE_GUIDE.md +508 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/confidence-aggregator.ts +473 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/consensus.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-injector.ts +349 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/context-lookup.ts +486 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/deliverable-verifier.ts +6 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/gate-check.ts +1 -1
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/product-owner-decision.ts +316 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/spawn-agents.ts +357 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/helpers/validator.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/index.ts +2 -0
- package/claude-assets/skills/cfn-loop-orchestration/src/orchestrate.ts +743 -2
- package/claude-assets/skills/cfn-loop-orchestration/src/types.ts +56 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-cli.sh +92 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-typescript-integration.sh +442 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/agent-spawner.test.ts +124 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/confidence-aggregator.test.ts +604 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-injector.test.ts +561 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/context-lookup.test.ts +661 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/deliverable-verifier.test.ts +2 -2
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-check-edge-cases.test.ts +422 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/gate-checker.test.ts +276 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/logger.test.ts +291 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/north-star-e2e.test.ts +334 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/redis-coordinator.test.ts +321 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/spawn-agents.test.ts +284 -0
- package/claude-assets/skills/cfn-loop-orchestration/tests/validator.test.ts +643 -0
- package/claude-assets/skills/cfn-loop-output-processing/.eslintrc.json +33 -0
- package/claude-assets/skills/cfn-loop-output-processing/DELIVERY_SUMMARY.txt +462 -0
- package/claude-assets/skills/cfn-loop-output-processing/DEPRECATION_NOTICE.md +183 -0
- package/claude-assets/skills/cfn-loop-output-processing/EXAMPLES.md +609 -0
- package/claude-assets/skills/cfn-loop-output-processing/IMPLEMENTATION_SUMMARY.md +418 -0
- package/claude-assets/skills/cfn-loop-output-processing/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-output-processing/MIGRATION.md +362 -0
- package/claude-assets/skills/cfn-loop-output-processing/README.md +114 -0
- package/claude-assets/skills/cfn-loop-output-processing/SKILL.md +633 -0
- package/{.claude/skills/cfn-docker-redis-coordination → claude-assets/skills/cfn-loop-output-processing}/jest.config.js +7 -15
- package/claude-assets/skills/cfn-loop-output-processing/package.json +50 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop2.ts +195 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/cli/process-loop3.ts +157 -0
- package/claude-assets/skills/cfn-loop-output-processing/src/output-processor.ts +632 -0
- package/claude-assets/skills/cfn-loop-output-processing/tests/output-processor.test.ts +617 -0
- package/claude-assets/skills/{cfn-docker-redis-coordination → cfn-loop-output-processing}/tsconfig.json +16 -7
- package/claude-assets/skills/cfn-loop-validation/IMPLEMENTATION_SUMMARY.md +672 -0
- package/claude-assets/skills/cfn-loop-validation/INDEX.md +531 -0
- package/claude-assets/skills/cfn-loop-validation/README_TYPESCRIPT.md +454 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL.md +48 -1
- package/claude-assets/skills/cfn-loop-validation/SKILL.md.backup +353 -0
- package/claude-assets/skills/cfn-loop-validation/SKILL_TYPESCRIPT.md +782 -0
- package/claude-assets/skills/cfn-loop-validation/VAPOR_DETECTION_EXAMPLES.md +598 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/check-dependencies.sh.backup +31 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/detect-vapor.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/dist/.tsbuildinfo +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js +185 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/detect-vapor.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts +14 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js +176 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-deliverables.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts +19 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js +123 -0
- package/claude-assets/skills/cfn-loop-validation/dist/cli/validate-gate.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts +156 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js +66 -0
- package/claude-assets/skills/cfn-loop-validation/dist/types.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts +85 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.d.ts.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js +411 -0
- package/claude-assets/skills/cfn-loop-validation/dist/validator.js.map +1 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/orchestrate-cfn-loop.sh.backup +252 -0
- package/claude-assets/skills/cfn-loop-validation/package.json +93 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/detect-vapor.ts +177 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-deliverables.ts +161 -0
- package/claude-assets/skills/cfn-loop-validation/src/cli/validate-gate.ts +139 -0
- package/claude-assets/skills/cfn-loop-validation/src/types.ts +215 -0
- package/claude-assets/skills/cfn-loop-validation/src/validator.ts +503 -0
- package/claude-assets/skills/cfn-loop-validation/tests/validator.test.ts +537 -0
- package/claude-assets/skills/{cfn-redis-coordination → cfn-loop-validation}/tsconfig.json +34 -31
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh +59 -0
- package/claude-assets/skills/cfn-loop-validation/validate-deliverables.sh.backup +37 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh +63 -0
- package/claude-assets/skills/cfn-loop-validation/validate-gate.sh.backup +41 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh +22 -0
- package/claude-assets/skills/cfn-loop-validation/validate-iteration.sh.backup +134 -0
- package/claude-assets/skills/cfn-product-owner-decision/SKILL.md +479 -147
- package/claude-assets/skills/cfn-product-owner-decision/TYPESCRIPT_IMPLEMENTATION.md +653 -0
- package/{.claude/skills/cfn-product-owner-decision → claude-assets/skills/cfn-product-owner-decision/archive/legacy-bash}/execute-decision.sh +24 -2
- package/claude-assets/skills/cfn-provider-routing/README.md +129 -0
- package/claude-assets/skills/cfn-provider-routing/SKILL.md +192 -0
- package/claude-assets/skills/cfn-provider-routing/resolve-provider-model.ts +223 -0
- package/claude-assets/skills/pre-edit-backup/SKILL.md +324 -0
- package/claude-assets/skills/pre-edit-backup/SKILL.md.backup +277 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh +22 -0
- package/claude-assets/skills/pre-edit-backup/backup.sh.backup +107 -0
- package/dist/agents/agent-loader.js +146 -165
- package/dist/agents/agent-loader.js.map +1 -1
- package/dist/api/auth-endpoints.js +415 -0
- package/dist/api/auth-endpoints.js.map +1 -0
- package/dist/api/task-endpoints.js +562 -0
- package/dist/api/task-endpoints.js.map +1 -0
- package/dist/backend/server.js +418 -0
- package/dist/backend/server.js.map +1 -0
- package/dist/cfn-loop/product-owner/decision-parser.js +356 -0
- package/dist/cfn-loop/product-owner/decision-parser.js.map +1 -0
- package/dist/cfn-loop/product-owner/index.js +1 -0
- package/dist/cfn-loop/product-owner/index.js.map +1 -1
- package/dist/cli/agent-command.js +1 -1
- package/dist/cli/agent-command.js.map +1 -1
- package/dist/cli/agent-completion.js +273 -0
- package/dist/cli/agent-completion.js.map +1 -0
- package/dist/cli/agent-prompt-builder.js +83 -48
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawner.js +499 -0
- package/dist/cli/agent-spawner.js.map +1 -0
- package/dist/cli/anthropic-client.js +10 -3
- package/dist/cli/anthropic-client.js.map +1 -1
- package/dist/cli/config-manager.js +91 -109
- package/dist/cli/index.js +11 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/parse-decision-cli.js +268 -0
- package/dist/cli/parse-decision-cli.js.map +1 -0
- package/dist/cli/post-edit-hook.js +83 -0
- package/dist/cli/post-edit-hook.js.map +1 -0
- package/dist/cli/pre-edit-hook.js +77 -0
- package/dist/cli/pre-edit-hook.js.map +1 -0
- package/dist/cli/spawn-agent-cli.js +209 -0
- package/dist/cli/spawn-agent-cli.js.map +1 -0
- package/dist/coordination/coordination-wrapper.js +383 -0
- package/dist/coordination/coordination-wrapper.js.map +1 -0
- package/dist/coordination/store-success-criteria.js +68 -0
- package/dist/coordination/store-success-criteria.js.map +1 -0
- package/dist/coordination/store-task-context.js +65 -0
- package/dist/coordination/store-task-context.js.map +1 -0
- package/dist/hooks/backup-manager.js +273 -0
- package/dist/hooks/backup-manager.js.map +1 -0
- package/dist/hooks/post-edit-validator.js +388 -0
- package/dist/hooks/post-edit-validator.js.map +1 -0
- package/dist/integration/index.js +19 -0
- package/dist/integration/index.js.map +1 -0
- package/dist/integration/task-mode-adapter.js +297 -0
- package/dist/integration/task-mode-adapter.js.map +1 -0
- package/dist/integration/trigger-dev-client.js +253 -0
- package/dist/integration/trigger-dev-client.js.map +1 -0
- package/dist/integration/trigger-dev-webhooks.js +362 -0
- package/dist/integration/trigger-dev-webhooks.js.map +1 -0
- package/dist/lib/path-validator.js +14 -5
- package/dist/lib/path-validator.js.map +1 -1
- package/dist/lib/redis-queue-manager.js +5 -1
- package/dist/lib/redis-queue-manager.js.map +1 -1
- package/dist/middleware/authentication.js +317 -0
- package/dist/middleware/authentication.js.map +1 -0
- package/dist/services/authentication.js +669 -0
- package/dist/services/authentication.js.map +1 -0
- package/dist/services/session-management.js +436 -0
- package/dist/services/session-management.js.map +1 -0
- package/dist/services/skill-deployment.js +8 -6
- package/dist/services/skill-deployment.js.map +1 -1
- package/dist/services/user-service.js +710 -0
- package/dist/services/user-service.js.map +1 -0
- package/dist/types/trigger-dev-events.d.js +10 -0
- package/dist/types/trigger-dev-events.d.js.map +1 -0
- package/docs/README.md +240 -0
- package/package.json +13 -4
- package/scripts/compare-workflow-performance.sh +556 -0
- package/scripts/migrate-to-optimized-workflows.sh +438 -0
- package/scripts/organize-docs.sh +338 -0
- package/scripts/trigger-dev-setup.sh +267 -0
- package/.claude/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/.claude/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/.claude/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/.claude/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/.claude/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/.claude/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/.claude/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/.claude/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/.claude/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/.claude/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/.claude/skills/cfn-docker-redis-coordination/tsconfig.json +0 -30
- package/.claude/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/.claude/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/.claude/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/.claude/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/.claude/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/.claude/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/.claude/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/.claude/skills/cfn-redis-coordination/config.json +0 -61
- package/.claude/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/.claude/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/.claude/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/.claude/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/.claude/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/.claude/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/.claude/skills/cfn-redis-coordination/package.json +0 -45
- package/.claude/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/.claude/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/.claude/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/.claude/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/.claude/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/.claude/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/.claude/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/.claude/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/.claude/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/.claude/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/.claude/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/.claude/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/.claude/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/.claude/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/.claude/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/.claude/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/.claude/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/.claude/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/.claude/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +0 -980
- package/claude-assets/agents/typescript-specialist.md +0 -280
- package/claude-assets/skills/cfn-docker-redis-coordination/MIGRATION_SUMMARY.md +0 -348
- package/claude-assets/skills/cfn-docker-redis-coordination/README.md +0 -294
- package/claude-assets/skills/cfn-docker-redis-coordination/SKILL.md +0 -435
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh +0 -650
- package/claude-assets/skills/cfn-docker-redis-coordination/coordinate.sh.backup-1763145142 +0 -641
- package/claude-assets/skills/cfn-docker-redis-coordination/jest.config.js +0 -37
- package/claude-assets/skills/cfn-docker-redis-coordination/package-lock.json +0 -5259
- package/claude-assets/skills/cfn-docker-redis-coordination/package.json +0 -40
- package/claude-assets/skills/cfn-docker-redis-coordination/src/coordinator.ts +0 -801
- package/claude-assets/skills/cfn-docker-redis-coordination/src/index.ts +0 -42
- package/claude-assets/skills/cfn-docker-redis-coordination/src/types.ts +0 -351
- package/claude-assets/skills/cfn-docker-redis-coordination/tests/coordinator.test.ts +0 -1464
- package/claude-assets/skills/cfn-loop-orchestration/helpers/auto-tune-timeouts.sh +0 -228
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/consensus.sh +0 -94
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-injection.sh +0 -142
- package/claude-assets/skills/cfn-loop-orchestration/helpers/context-lookup.sh +0 -359
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier-ts.sh +0 -123
- package/claude-assets/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh +0 -71
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager-ts.sh +0 -89
- package/claude-assets/skills/cfn-loop-orchestration/helpers/iteration-manager.sh +0 -87
- package/claude-assets/skills/cfn-loop-orchestration/helpers/orchestrate-ts.sh +0 -104
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +0 -56
- package/claude-assets/skills/cfn-loop-orchestration/helpers/spawn-agents.sh +0 -290
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator-ts.sh +0 -47
- package/claude-assets/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh +0 -51
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +0 -1345
- package/claude-assets/skills/cfn-redis-cleanup/cleanup-redis.sh +0 -130
- package/claude-assets/skills/cfn-redis-coordination/AGENT_LOGGING.md +0 -280
- package/claude-assets/skills/cfn-redis-coordination/BZPOPMIN_FIX_SUMMARY.md +0 -209
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +0 -319
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +0 -124
- package/claude-assets/skills/cfn-redis-coordination/config.json +0 -61
- package/claude-assets/skills/cfn-redis-coordination/demos/phase4-wake-queue-test-report.md +0 -82
- package/claude-assets/skills/cfn-redis-coordination/demos/test-bzpopmin-fix.sh +0 -274
- package/claude-assets/skills/cfn-redis-coordination/demos/test-cancel-swarm.sh +0 -0
- package/claude-assets/skills/cfn-redis-coordination/docs/migration/PHASE_3_REDIS_COORDINATION_COMPLETION_REPORT.md +0 -553
- package/claude-assets/skills/cfn-redis-coordination/jest.config.js +0 -23
- package/claude-assets/skills/cfn-redis-coordination/package-lock.json +0 -5272
- package/claude-assets/skills/cfn-redis-coordination/package.json +0 -45
- package/claude-assets/skills/cfn-redis-coordination/src/agent-logger.ts +0 -446
- package/claude-assets/skills/cfn-redis-coordination/src/agent-recovery.ts +0 -454
- package/claude-assets/skills/cfn-redis-coordination/src/completion-reporter.ts +0 -396
- package/claude-assets/skills/cfn-redis-coordination/src/context-manager.ts +0 -327
- package/claude-assets/skills/cfn-redis-coordination/src/index.ts +0 -82
- package/claude-assets/skills/cfn-redis-coordination/src/mode-detector.ts +0 -155
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-client.ts +0 -305
- package/claude-assets/skills/cfn-redis-coordination/src/redis/redis-functions.ts +0 -283
- package/claude-assets/skills/cfn-redis-coordination/src/redis-client.ts +0 -654
- package/claude-assets/skills/cfn-redis-coordination/src/result-collector.ts +0 -437
- package/claude-assets/skills/cfn-redis-coordination/src/swarm-manager.ts +0 -494
- package/claude-assets/skills/cfn-redis-coordination/src/task-analyzer.ts +0 -404
- package/claude-assets/skills/cfn-redis-coordination/src/task-executor.ts +0 -423
- package/claude-assets/skills/cfn-redis-coordination/src/types.ts +0 -235
- package/claude-assets/skills/cfn-redis-coordination/src/waiting-coordinator.ts +0 -587
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +0 -85
- package/claude-assets/skills/cfn-redis-coordination/test-connection-attempts.js +0 -70
- package/claude-assets/skills/cfn-redis-coordination/test-mode-simple.js +0 -121
- package/claude-assets/skills/cfn-redis-coordination/test-redis-check.js +0 -84
- package/claude-assets/skills/cfn-redis-coordination/test-task-mode-redis.cjs +0 -391
- package/claude-assets/skills/cfn-redis-coordination/tests/coordination.test.ts +0 -788
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +0 -67
- package/claude-assets/skills/cfn-redis-data-extraction/SKILL.md +0 -442
- package/claude-assets/skills/cfn-redis-data-extraction/extract.sh +0 -306
- package/dist/coordination/index.js +0 -25
- package/dist/coordination/index.js.map +0 -1
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +0 -405
- package/docs/MEMORY_CLEANUP_GUIDE.md +0 -358
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +0 -322
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +0 -319
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +0 -574
- /package/.claude/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/.claude/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /package/.claude/skills/cfn-redis-coordination/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{inject-loop-context.sh → archive/legacy-bash/inject-loop-context.sh} +0 -0
- /package/claude-assets/skills/cfn-loop-orchestration/{monitor-execution.sh → archive/legacy-bash/monitor-execution.sh} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-log.sh → agent-log.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{agent-recovery.sh → agent-recovery.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{analyze-task-complexity.sh → analyze-task-complexity.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/bash-wrappers/{store-context.sh → store-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cancel-swarm.sh → cancel-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-exec.sh → cfn-loop-exec.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{cfn-loop-relaunch.sh → cfn-loop-relaunch.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-confidence-scores.sh → collect-confidence-scores.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{collect-results.sh → collect-results.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{complete-swarm.sh → complete-swarm.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-context.sh → get-context.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{get-success-criteria.sh → get-success-criteria.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{invoke-waiting-mode.sh → invoke-waiting-mode.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-cli-wrapper.sh → redis-cli-wrapper.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{redis-functions.sh → redis-functions.sh.backup} +0 -0
- /package/claude-assets/skills/cfn-redis-coordination/{report-completion.sh → report-completion.sh.backup} +0 -0
- /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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA4BC,GAOD,SAASA,aAAa,EAAEC,SAAS,QAAQ,mBAAmB;AAC5D,SAASC,YAAY,QAAQ,oBAAoB;AACjD,SAASC,aAAa,EAAEC,gBAAgB,QAA0B,uBAAuB;AACzF,SAASC,cAAc,EAAEC,aAAa,QAAQ,wBAAwB;AAEtE,MAAMC,SAASL,aAAa;AAwD5B;;;;;CAKC,GACD,OAAO,MAAMM;IACHC,UAA2B;IAC3BC,UAA8B;IAC9BC,YAA6B;IAErC,YACEF,SAA0B,EAC1BC,SAA6B,EAC7BC,WAA4B,CAC5B;QACA,IAAI,CAACF,SAAS,GAAGA;QACjB,IAAI,CAACC,SAAS,GAAGA;QACjB,IAAI,CAACC,WAAW,GAAGA;IACrB;IAEA;;GAEC,GACD,AAAQC,gBAAgBC,SAAiB,EAAEC,OAAe,EAAU;QAClE,MAAMC,YAAYC,KAAKC,GAAG;QAC1B,MAAMC,gBAAgBL,UAAUM,OAAO,CAAC,mBAAmB;QAC3D,OAAO,CAAC,MAAM,EAAED,cAAc,CAAC,EAAEJ,QAAQ,CAAC,EAAEC,WAAW;IACzD;IAEA;;GAEC,GACD,MAAcK,aAAaC,SAAiB,EAAmB;QAC7D,+CAA+C;QAC/C,sDAAsD;QACtDd,OAAOe,IAAI,CAAC,8BAA8B;YAAED;QAAU;QACtD,OAAOA;IACT;IAEA;;GAEC,GACD,AAAQE,kBAAkBV,SAAiB,EAAgB;QACzD,OAAO;YACLW,UAAU;YACVC,OAAO;YACPC,KAAKb;QACP;IACF;IAEA;;;;GAIC,GACD,MAAcc,sBACZC,OAAY,EACZC,OAAe,EACfC,UAAyB,EACzBC,QAAgB,EAChBjB,OAAe,EACfkB,OAAgB,EAChBC,UAAkB,EAClBC,YAAqB,EACrBC,QAA8B,EACb;QACjB5B,OAAOe,IAAI,CAAC,8BAA8B;YACxCO;YACAC;YACAC;YACAjB;YACAkB;QACF;QAEA,IAAI;YACF,MAAMI,SAAc,MAAMR,QAAQS,GAAG,CACnC,CAAC;;wCAE+B,CAAC,EACjC;gBACER;gBACAC;gBACAC;gBACAjB;gBACAkB,UAAU,IAAI;gBACdC;gBACAC,gBAAgB;gBAChBC,WAAWG,KAAKC,SAAS,CAACJ,YAAY;aACvC;YAGH,MAAMK,UAAUJ,OAAOK,YAAY,IAAI;YACvClC,OAAOe,IAAI,CAAC,6BAA6B;gBAAEkB;gBAASX;YAAQ;YAC5D,OAAOW;QACT,EAAE,OAAOE,OAAO;YACdnC,OAAOmC,KAAK,CAAC,qCAAqCA,OAAgB;gBAAEb;YAAQ;YAC5E,sEAAsE;YACtE,MAAMa;QACR;IACF;IAEA;;;;;;;;GAQC,GACD,MAAMC,YAAYC,OAA0B,EAA6B;QACvE,MAAM,EAAEvB,SAAS,EAAEY,aAAa,QAAQ,EAAEY,eAAe,EAAEC,iBAAiB,KAAK,EAAE,GAAGF;QAEtFrC,OAAOe,IAAI,CAAC,6BAA6B;YAAED;YAAWY;QAAW;QAEjE,IAAIc,OAAY;QAChB,IAAIC,KAAU;QAEd,IAAI;YACF,kEAAkE;YAClE,IAAI,CAACF,gBAAgB;gBACnB,MAAMG,mBAAmB,MAAM9C,cAAc,IAAI,CAACM,SAAS,EAAEY;gBAE7D,IAAI,CAAC4B,iBAAiBC,KAAK,EAAE;oBAC3B3C,OAAO4C,IAAI,CAAC,2BAA2B;wBACrC9B;wBACA+B,YAAYH,iBAAiBI,MAAM,CAACC,MAAM;oBAC5C;oBAEA,wEAAwE;oBACxE,IAAI;wBACF,MAAM1B,UAAU,IAAI,CAACnB,SAAS,CAAC8C,UAAU,CAAC;wBAC1C,MAAM,IAAI,CAAC5B,qBAAqB,CAC9BC,SACA,WACA,MACA,UACA,WACA,OACAK,YACA,CAAC,mBAAmB,EAAEgB,iBAAiBI,MAAM,CAACG,GAAG,CAACC,CAAAA,IAAKA,EAAEC,OAAO,EAAEC,IAAI,CAAC,OAAO,EAC9E;4BAAEC,kBAAkBX,iBAAiBI,MAAM;wBAAC;oBAEhD,EAAE,OAAOQ,YAAY;wBACnBtD,OAAO4C,IAAI,CAAC,4DAA4D;4BACtET,OAAO,AAACmB,WAAqBH,OAAO;wBACtC;oBACF;oBAEA,OAAO;wBACL1B,SAAS;wBACTU,OAAO;wBACPO;oBACF;gBACF;YACF;YAEA,+BAA+B;YAC/B,MAAMa,cAAc1D,iBAAiBiB;YACrC,MAAMR,YAAYiD,YAAYC,IAAI;YAElC,oFAAoF;YACpF,MAAMC,eAAe,IAAI,CAACzC,iBAAiB,CAACV;YAE5CN,OAAO0D,KAAK,CAAC,8BAA8B;gBAAEpD;gBAAWmD;YAAa;YAErEjB,OAAO,MAAM,IAAI,CAACpC,WAAW,CAACuD,OAAO,CAACF,cAAc;gBAClDG,SAAS;gBACTC,KAAK;gBACLC,eAAe,CAAC,OAAO,EAAExD,UAAU,CAAC,EAAEG,KAAKC,GAAG,IAAI;YACpD;YAEAV,OAAOe,IAAI,CAAC,6BAA6B;gBACvCgD,QAAQvB,KAAKwB,EAAE;gBACf1D;YACF;YAEA,2CAA2C;YAC3C,2EAA2E;YAC3EmC,KAAK,MAAM,IAAI,CAACtC,SAAS,CAAC8D,KAAK,CAAC;gBAAC;aAAS,EAAE;gBAC1CL,SAAS;gBACTE,eAAetB,KAAKsB,aAAa;YACnC;YAEA9D,OAAOe,IAAI,CAAC,qBAAqB;gBAC/BmD,eAAezB,GAAGuB,EAAE;gBACpB1D;YACF;YAEA,4EAA4E;YAC5E,IAAIC;YAEJ,MAAMkC,GAAG0B,OAAO,CAAC,UAAU,OAAO9C;gBAChC,IAAIiB,iBAAiB;oBACnB,2CAA2C;oBAC3C,MAAM8B,SAAS,MAAMrE,cAAc,IAAI,CAACG,SAAS,EAAEI,WAAWgC;oBAC9D,IAAI8B,QAAQ;wBACV,MAAM,IAAI3E,cACRC,UAAU2E,gBAAgB,EAC1B,CAAC,QAAQ,EAAE/B,gBAAgB,2BAA2B,EAAEhC,WAAW,EACnE;4BAAEA;4BAAWC,SAAS+B;wBAAgB;oBAE1C;oBACA/B,UAAU+B;gBACZ,OAAO;oBACL,4CAA4C;oBAC5C/B,UAAU,MAAMT,eAAe,IAAI,CAACI,SAAS,EAAEI,WAAW;gBAC5D;YACF;YAEA,4BAA4B;YAC5B,MAAMgB,UAAU,IAAI,CAACjB,eAAe,CAACC,WAAWC;YAEhD,qCAAqC;YACrC,MAAM+D,eAAe,MAAM,IAAI,CAACzD,YAAY,CAACC;YAE7Cd,OAAOe,IAAI,CAAC,sCAAsC;gBAChDO;gBACAhB;gBACAC;gBACA2D,eAAezB,GAAGuB,EAAE;YACtB;YAEA,+CAA+C;YAC/C,IAAI/B,UAAkB;YAEtB,MAAMQ,GAAG0B,OAAO,CAAC,UAAU,OAAO9C;gBAChC,2BAA2B;gBAC3B,MAAMA,QAAQS,GAAG,CACf,CAAC;oCACyB,CAAC,EAC3B;oBACER;oBACAhB;oBACAC;oBACAO;oBACA;oBACAiB,KAAKC,SAAS,CAAC;wBACbN;wBACA6C,YAAY,IAAI9D,OAAO+D,WAAW;wBAClCC,aAAalB,YAAYkB,WAAW,IAAI;wBACxCC,QAAQnB,YAAYmB,MAAM,IAAI;wBAC9BR,eAAezB,GAAGuB,EAAE;wBACpBD,QAAQvB,KAAKwB,EAAE;oBACjB;iBACD;gBAGH,wEAAwE;gBACxE/B,UAAU,MAAM,IAAI,CAACb,qBAAqB,CACxCC,SACAC,SACA,YACA,YACAf,SACA,MACAmB,YACAiD,WACA;oBACErE;oBACAsE,aAAa9D;oBACboD,eAAezB,GAAGuB,EAAE;oBACpBD,QAAQvB,KAAKwB,EAAE;gBACjB;YAEJ;YAEA,4DAA4D;YAC5D,MAAMvB,GAAGoC,MAAM;YAEf7E,OAAOe,IAAI,CAAC,sCAAsC;gBAChDmD,eAAezB,GAAGuB,EAAE;gBACpB1C;gBACAhB;gBACAC;gBACA0B;YACF;YAEA,oCAAoC;YACpC,MAAM,IAAI,CAAC7B,WAAW,CAAC0E,OAAO,CAACtC,KAAKwB,EAAE;YAEtChE,OAAOe,IAAI,CAAC,+BAA+B;gBACzCO;gBACAhB;gBACAC;gBACA0B;gBACAiC,eAAezB,GAAGuB,EAAE;gBACpBD,QAAQvB,KAAKwB,EAAE;YACjB;YAEA,OAAO;gBACLvC,SAAS;gBACTsD,cAAc9C;gBACdX;gBACAhB;gBACAC;gBACA+D;gBACAC,YAAY,IAAI9D;gBAChByD,eAAezB,GAAGuB,EAAE;gBACpBD,QAAQvB,KAAKwB,EAAE;YACjB;QACF,EAAE,OAAO7B,OAAO;YACdnC,OAAOmC,KAAK,CAAC,qBAAqBA,OAAgB;gBAAErB;YAAU;YAE9D,uEAAuE;YACvE,IAAI2B,IAAI;gBACNzC,OAAOe,IAAI,CAAC,yCAAyC;oBACnDmD,eAAezB,GAAGuB,EAAE;gBACtB;YACF;YAEA,MAAMrC,eACJQ,iBAAiB1C,gBACb0C,MAAMgB,OAAO,GACb,CAAC,mBAAmB,EAAE,AAAChB,MAAgBgB,OAAO,EAAE;YAEtD,OAAO;gBACL1B,SAAS;gBACTU,OAAOR;gBACPuC,eAAezB,IAAIuB;gBACnBD,QAAQvB,MAAMwB;YAChB;QACF,SAAU;YACR,oDAAoD;YACpD,IAAIxB,MAAM;gBACR,IAAI;oBACF,MAAM,IAAI,CAACpC,WAAW,CAAC0E,OAAO,CAACtC,KAAKwB,EAAE;oBACtChE,OAAO0D,KAAK,CAAC,8CAA8C;wBACzDK,QAAQvB,KAAKwB,EAAE;oBACjB;gBACF,EAAE,OAAOgB,WAAW;oBAClBhF,OAAOmC,KAAK,CAAC,2CAA2C6C,WAAoB;wBAC1EjB,QAAQvB,KAAKwB,EAAE;oBACjB;gBACF;YACF;QACF;IACF;IAEA;;;;;;;GAOC,GACD,MAAMiB,mBAAmBF,YAAoB,EAAoB;QAC/D/E,OAAOe,IAAI,CAAC,gCAAgC;YAAEgE;QAAa;QAE3D,IAAIvC,OAAY;QAChB,IAAIC,KAAU;QAEd,IAAI;YACF,yEAAyE;YACzE,MAAMpB,UAAU,IAAI,CAACnB,SAAS,CAAC8C,UAAU,CAAC;YAC1C,MAAMkC,cAAmB,MAAM7D,QAAQS,GAAG,CACxC,+DACA;gBAACiD;aAAa;YAGhB,IAAI,CAACG,eAAeA,YAAYnC,MAAM,KAAK,GAAG;gBAC5C,MAAM,IAAItD,cACRC,UAAUyF,YAAY,EACtB,CAAC,4BAA4B,EAAEJ,cAAc,EAC7C;oBAAEA;gBAAa;YAEnB;YAEA,MAAM,EAAEK,UAAU9D,OAAO,EAAEf,OAAO,EAAE,GAAG2E,WAAW,CAAC,EAAE;YAErD,mCAAmC;YACnC,MAAM5E,YAAYgB,QAAQV,OAAO,CAAC,WAAW,IAAIA,OAAO,CAAC,aAAa;YAEtE,kDAAkD;YAClD,MAAM6C,eAAe,IAAI,CAACzC,iBAAiB,CAACV;YAE5CkC,OAAO,MAAM,IAAI,CAACpC,WAAW,CAACuD,OAAO,CAACF,cAAc;gBAClDG,SAAS;gBACTC,KAAK;gBACLC,eAAe,CAAC,SAAS,EAAEiB,aAAa,CAAC,EAAEtE,KAAKC,GAAG,IAAI;YACzD;YAEAV,OAAOe,IAAI,CAAC,0CAA0C;gBACpDgD,QAAQvB,KAAKwB,EAAE;gBACfe;YACF;YAEA,qCAAqC;YACrCtC,KAAK,MAAM,IAAI,CAACtC,SAAS,CAAC8D,KAAK,CAAC;gBAAC;aAAS,EAAE;gBAC1CL,SAAS;gBACTE,eAAetB,KAAKsB,aAAa;YACnC;YAEA9D,OAAOe,IAAI,CAAC,8BAA8B;gBACxCmD,eAAezB,GAAGuB,EAAE;gBACpBe;YACF;YAEA,yDAAyD;YACzD,MAAMtC,GAAG0B,OAAO,CAAC,UAAU,OAAO9C;gBAChC,2BAA2B;gBAC3B,MAAMA,QAAQS,GAAG,CAAC,mCAAmC;oBAACR;iBAAQ;gBAE9D,2DAA2D;gBAC3D,MAAM,IAAI,CAACF,qBAAqB,CAC9BC,SACAC,SACA,YACA,eACAf,SACA,MACA,UACA,0BACA;oBACE8E,sBAAsBN;oBACtBb,eAAezB,GAAGuB,EAAE;oBACpBD,QAAQvB,KAAKwB,EAAE;gBACjB;YAEJ;YAEA,sCAAsC;YACtC,MAAMvB,GAAGoC,MAAM;YAEf7E,OAAOe,IAAI,CAAC,kCAAkC;gBAC5CmD,eAAezB,GAAGuB,EAAE;gBACpBe;gBACAzD;YACF;YAEA,mCAAmC;YACnC,MAAM,IAAI,CAAClB,WAAW,CAAC0E,OAAO,CAACtC,KAAKwB,EAAE;YAEtChE,OAAOe,IAAI,CAAC,iCAAiC;gBAAEgE;gBAAczD;YAAQ;YACrE,OAAO;QACT,EAAE,OAAOa,OAAO;YACdnC,OAAOmC,KAAK,CAAC,8BAA8BA,OAAgB;gBAAE4C;YAAa;YAE1E,iDAAiD;YACjD,IAAItC,IAAI;gBACNzC,OAAOe,IAAI,CAAC,kDAAkD;oBAC5DmD,eAAezB,GAAGuB,EAAE;gBACtB;YACF;YAEA,OAAO;QACT,SAAU;YACR,0BAA0B;YAC1B,IAAIxB,MAAM;gBACR,IAAI;oBACF,MAAM,IAAI,CAACpC,WAAW,CAAC0E,OAAO,CAACtC,KAAKwB,EAAE;oBACtChE,OAAO0D,KAAK,CAAC,uDAAuD;wBAClEK,QAAQvB,KAAKwB,EAAE;oBACjB;gBACF,EAAE,OAAOgB,WAAW;oBAClBhF,OAAOmC,KAAK,CAAC,oDAAoD6C,WAAoB;wBACnFjB,QAAQvB,KAAKwB,EAAE;oBACjB;gBACF;YACF;QACF;IACF;IAEA;;;;;;GAMC,GACD,MAAMsB,qBAAqBhF,SAAiB,EAAEiF,QAAgB,EAAE,EAAkB;QAChFvF,OAAO0D,KAAK,CAAC,+BAA+B;YAAEpD;YAAWiF;QAAM;QAE/D,IAAI;YACF,MAAMlE,UAAU,IAAI,CAACnB,SAAS,CAAC8C,UAAU,CAAC;YAE1C,MAAMnB,SAAc,MAAMR,QAAQS,GAAG,CACnC,CAAC;;;;;gBAKO,CAAC,EACT;gBAACxB;gBAAWiF;aAAM;YAGpB,OAAO1D,UAAU,EAAE;QACrB,EAAE,OAAOM,OAAO;YACdnC,OAAOmC,KAAK,CAAC,sCAAsCA,OAAgB;gBAAE7B;YAAU;YAC/E,MAAM,IAAIb,cACRC,UAAU8F,eAAe,EACzB,CAAC,8CAA8C,EAAElF,WAAW,EAC5D;gBAAEA;YAAU,GACZ6B;QAEJ;IACF;IAEA;;;;;;GAMC,GACD,MAAMsD,uBAAuBC,MAAc,EAAEH,QAAgB,EAAE,EAAkB;QAC/EvF,OAAO0D,KAAK,CAAC,kCAAkC;YAAEgC;YAAQH;QAAM;QAE/D,IAAI;YACF,MAAMlE,UAAU,IAAI,CAACnB,SAAS,CAAC8C,UAAU,CAAC;YAE1C,MAAMnB,SAAc,MAAMR,QAAQS,GAAG,CACnC,CAAC;;;gBAGO,CAAC,EACT;gBAAC4D;gBAAQH;aAAM;YAGjB,OAAO1D,UAAU,EAAE;QACrB,EAAE,OAAOM,OAAO;YACdnC,OAAOmC,KAAK,CAAC,yCAAyCA,OAAgB;gBAAEuD;YAAO;YAC/E,MAAM,IAAIjG,cACRC,UAAU8F,eAAe,EACzB,CAAC,uCAAuC,EAAEE,QAAQ,EAClD;gBAAEA;YAAO,GACTvD;QAEJ;IACF;AACF"}
|
|
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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"}
|