claude-flow-novice 2.15.3 → 2.15.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/.claude/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/.claude/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/.claude/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/.claude/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/.claude/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/.claude/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/.claude/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/.claude/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/.claude/commands/cfn-loop-cli.md +29 -6
- package/.claude/commands/switch-api.md +31 -10
- package/.claude/hooks/cfn-lint-sql-injection.sh +61 -0
- package/.claude/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/.claude/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/.claude/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/.claude/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/.claude/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
- package/.claude/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/.claude/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/.claude/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/.claude/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/.claude/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/.claude/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/.claude/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/.claude/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
- package/.claude/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/.claude/skills/cfn-redis-coordination/redis-functions.sh +34 -0
- package/.claude/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/.claude/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/.claude/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/.claude/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/.claude/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/.claude/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/.claude/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/README.md +116 -475
- package/claude-assets/agents/cfn-dev-team/README.md +103 -0
- package/claude-assets/agents/cfn-dev-team/architecture/goal-planner.md +1 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-frontend-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/coordinators/cfn-v3-coordinator.md +355 -6
- package/claude-assets/agents/cfn-dev-team/coordinators/consensus-builder.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/handoff-coordinator.md +82 -1
- package/claude-assets/agents/cfn-dev-team/coordinators/multi-sprint-coordinator.md +77 -15
- package/claude-assets/agents/cfn-dev-team/dev-ops/docker-specialist.md +99 -12
- package/claude-assets/agents/cfn-dev-team/dev-ops/github-commit-agent.md +1 -1
- package/claude-assets/agents/cfn-dev-team/dev-ops/kubernetes-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/dev-ops/monitoring-specialist.md +20 -1
- package/claude-assets/agents/cfn-dev-team/developers/api-gateway-specialist.md +97 -0
- package/claude-assets/agents/cfn-dev-team/developers/backend-developer.md +110 -13
- package/claude-assets/agents/cfn-dev-team/developers/data/data-engineer.md +106 -15
- package/claude-assets/agents/cfn-dev-team/developers/database/database-architect.md +115 -11
- package/claude-assets/agents/cfn-dev-team/developers/frontend/mobile-dev.md +94 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/react-frontend-engineer.md +87 -9
- package/claude-assets/agents/cfn-dev-team/developers/frontend/typescript-specialist.md +85 -7
- package/claude-assets/agents/cfn-dev-team/developers/frontend/ui-designer.md +160 -28
- package/claude-assets/agents/cfn-dev-team/developers/graphql-specialist.md +101 -19
- package/claude-assets/agents/cfn-dev-team/developers/rust-developer.md +108 -14
- package/claude-assets/agents/cfn-dev-team/reviewers/{reviewer.md → code-reviewer.md} +95 -8
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/code-quality-validator.md +107 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/perf-analyzer.md +98 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/performance-benchmarker.md +95 -7
- package/claude-assets/agents/cfn-dev-team/reviewers/quality/security-specialist.md +136 -9
- package/claude-assets/agents/cfn-dev-team/testers/api-testing-specialist.md +108 -1
- package/claude-assets/agents/cfn-dev-team/testers/chaos-engineering-specialist.md +107 -13
- package/claude-assets/agents/cfn-dev-team/testers/contract-tester.md +737 -0
- package/claude-assets/agents/cfn-dev-team/testers/e2e/playwright-tester.md +1 -1
- package/claude-assets/agents/cfn-dev-team/testers/integration-tester.md +828 -0
- package/claude-assets/agents/cfn-dev-team/testers/interaction-tester.md +106 -7
- package/claude-assets/agents/cfn-dev-team/testers/load-testing-specialist.md +77 -0
- package/claude-assets/agents/cfn-dev-team/testers/mutation-testing-specialist.md +684 -0
- package/claude-assets/agents/cfn-dev-team/testers/playwright-tester.md +110 -1
- package/claude-assets/agents/cfn-dev-team/testers/tester.md +94 -7
- package/claude-assets/agents/cfn-dev-team/utility/code-booster.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/epic-creator.md +87 -13
- package/claude-assets/agents/cfn-dev-team/utility/memory-leak-specialist.md +103 -7
- package/claude-assets/agents/cfn-dev-team/utility/researcher.md +1 -3
- package/claude-assets/agents/cfn-dev-team/utility/z-ai-specialist.md +94 -7
- package/claude-assets/agents/docker-coordinators/cfn-docker-v3-coordinator.md +46 -0
- package/claude-assets/agents/project-only-agents/npm-package-specialist.md +1 -1
- package/claude-assets/cfn-extras/skills/advanced-features/cfn-agent-swap/recommend-swap.sh +59 -59
- package/claude-assets/cfn-extras/skills/analytics/cfn-improvement-recommender/recommend-improvements.sh +91 -91
- package/claude-assets/cfn-extras/skills/analytics/cfn-pattern-extraction/extract-patterns.sh +79 -79
- package/claude-assets/cfn-extras/skills/analytics/cfn-retrospective-report/generate-report.sh +100 -100
- package/claude-assets/cfn-extras/skills/analytics/cfn-telemetry/start-telemetry.sh +110 -110
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/add-bullet.sh +145 -145
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/log-merge.sh +67 -67
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/monitor-injection-performance.sh +137 -137
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/optimize-injection-pipeline.sh +168 -168
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/query-reflections.sh +35 -35
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/store-reflection.sh +45 -45
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/track-ab-test.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-ace-system/update-reflection.sh +41 -41
- package/claude-assets/cfn-extras/skills/deprecated/cfn-cli-setup/validate-cli-environment.sh +191 -191
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/create-campaign.sh +231 -231
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/get-campaign-performance.sh +190 -190
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/pause-campaign.sh +142 -142
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/set-budget.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-ad-campaigns/operations/update-bid-strategy.sh +133 -133
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/get-conversation-history.sh +121 -121
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/qualify-lead.sh +156 -156
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/schedule-demo.sh +181 -181
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/send-message.sh +137 -137
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-chatbot-conversations/operations/transfer-to-human.sh +179 -179
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/create-campaign.sh +183 -183
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/get-delivery-status.sh +139 -139
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/opt-out.sh +150 -150
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/schedule-campaign.sh +187 -187
- package/claude-assets/cfn-extras/skills/marketing/cfn-marketing-sms-campaigns/operations/send-sms.sh +181 -181
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/test-web-portal-skill.sh +50 -50
- package/claude-assets/cfn-extras/skills/ui-portal/cfn-web-portal/validate-deployment.sh +84 -84
- package/claude-assets/cfn-extras/skills/utility/cfn-environment-sanitization/sanitize-environment.sh +243 -243
- package/claude-assets/commands/cfn-loop-cli.md +29 -6
- package/claude-assets/commands/switch-api.md +31 -10
- package/claude-assets/hooks/cfn-lint-sql-injection.sh +61 -0
- package/claude-assets/hooks/cfn-post-edit-cfn-retrospective.sh +33 -2
- package/claude-assets/hooks/cfn-pre-edit-security-warning.sh +40 -0
- package/claude-assets/hooks/detect-hardcoded-credentials.sh +212 -0
- package/claude-assets/skills/SKILL_TEMPLATE.md +774 -0
- package/claude-assets/skills/agent-lifecycle/execute-lifecycle-hook.sh +84 -113
- package/claude-assets/skills/agent-lifecycle/simple-audit.sh +33 -6
- package/claude-assets/skills/agent-template-generator/SKILL.md +440 -0
- package/claude-assets/skills/agent-template-generator/generate-agent.sh +405 -0
- package/claude-assets/skills/agent-validation-linter/SKILL.md +589 -0
- package/claude-assets/skills/agent-validation-linter/lint-agents.sh +271 -0
- package/claude-assets/skills/bootstrap/bash-fundamentals.md +786 -0
- package/claude-assets/skills/bootstrap/database-connection.md +464 -0
- package/claude-assets/skills/bootstrap/error-handling.md +580 -0
- package/claude-assets/skills/bootstrap/file-operations.md +699 -0
- package/claude-assets/skills/bootstrap/skill-loader.md +616 -0
- package/claude-assets/skills/bootstrap/sqlite-params.sh +287 -0
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh +22 -24
- package/claude-assets/skills/cfn-automatic-memory-persistence/test-memory-persistence.sh +17 -16
- package/claude-assets/skills/cfn-deployment/SKILL.md +293 -0
- package/claude-assets/skills/cfn-deployment/execute.sh +21 -0
- package/claude-assets/skills/cfn-docker-agent-spawning/SKILL.md +28 -4
- package/claude-assets/skills/cfn-docker-agent-spawning/spawn-agent.sh +3 -1
- package/claude-assets/skills/cfn-docker-loop-orchestration/orchestrate.sh +224 -20
- package/claude-assets/skills/cfn-environment-sanitization/sanitize-environment.sh +38 -0
- package/claude-assets/skills/cfn-error-batching-strategy/lib/core-functions.sh +47 -47
- package/claude-assets/skills/cfn-file-operations/SKILL.md +290 -0
- package/claude-assets/skills/cfn-file-operations/execute.sh +129 -0
- package/claude-assets/skills/cfn-file-operations/lib/atomic-write.sh +294 -0
- package/claude-assets/skills/cfn-file-operations/lib/lock.sh +361 -0
- package/claude-assets/skills/cfn-file-operations/test.sh +369 -0
- package/claude-assets/skills/cfn-log-operations/SKILL.md +308 -0
- package/claude-assets/skills/cfn-log-operations/execute.sh +420 -0
- package/claude-assets/skills/cfn-log-operations/lib/rotate.sh +406 -0
- package/claude-assets/skills/cfn-log-operations/lib/search.sh +448 -0
- package/claude-assets/skills/cfn-log-operations/test.sh +394 -0
- package/claude-assets/skills/cfn-loop-orchestration/helpers/gate-check.sh +550 -46
- package/claude-assets/skills/cfn-loop-orchestration/helpers/parse-test-results.sh +277 -0
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh +238 -29
- package/claude-assets/skills/cfn-loop-orchestration/security_utils.sh +24 -0
- package/claude-assets/skills/cfn-loop-orchestration/test-iteration-context-injection.sh +366 -0
- package/claude-assets/skills/cfn-parameterized-queries/SKILL.md +339 -0
- package/claude-assets/skills/cfn-playbook/query-playbook.sh +19 -15
- package/claude-assets/skills/cfn-playbook/update-playbook.sh +25 -14
- package/claude-assets/skills/cfn-process-instrumentation/instrument-process.sh +44 -0
- package/claude-assets/skills/cfn-promotion/SKILL.md +305 -0
- package/claude-assets/skills/cfn-redis-coordination/CENTRALIZED_REDIS_WRAPPER.md +319 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-log.sh.bak +124 -0
- package/claude-assets/skills/cfn-redis-coordination/agent-recovery.sh +2 -2
- package/claude-assets/skills/cfn-redis-coordination/collect-confidence-scores.sh +30 -0
- package/claude-assets/skills/cfn-redis-coordination/get-context.sh +33 -0
- package/claude-assets/skills/cfn-redis-coordination/get-success-criteria.sh +54 -0
- package/claude-assets/skills/cfn-redis-coordination/invoke-waiting-mode.sh +6 -2
- package/claude-assets/skills/cfn-redis-coordination/redis-cli-wrapper.sh +24 -3
- package/claude-assets/skills/cfn-redis-coordination/redis-functions.sh +34 -0
- package/claude-assets/skills/cfn-redis-coordination/report-completion.sh +24 -31
- package/claude-assets/skills/cfn-redis-coordination/store-context.sh +4 -0
- package/claude-assets/skills/cfn-redis-coordination/store-success-criteria.sh +85 -0
- package/claude-assets/skills/cfn-redis-coordination/update-all-scripts.sh +67 -0
- package/claude-assets/skills/cfn-skill-loader/SKILL.md +466 -0
- package/claude-assets/skills/cfn-skill-loader/execute.sh +344 -0
- package/claude-assets/skills/cfn-sqlite-memory/ttl-cleanup.sh +17 -25
- package/claude-assets/skills/cfn-task-audit/get-audit-data.sh +42 -21
- package/claude-assets/skills/cfn-task-audit/store-task-audit.sh +17 -10
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh +17 -14
- package/claude-assets/skills/cfn-test-runner/detect-regressions.sh.backup-1763392821 +55 -0
- package/claude-assets/skills/cfn-test-runner/store-benchmarks.sh +17 -19
- package/claude-assets/skills/cfn-transparency-middleware/test-e2e.sh +15 -0
- package/claude-assets/skills/cfn-transparency-middleware/tests/input-validation.sh +15 -0
- package/claude-assets/skills/cfn-utilities/SKILL.md +237 -0
- package/claude-assets/skills/cfn-utilities/execute.sh +32 -0
- package/claude-assets/skills/cfn-utilities/lib/errors.sh +56 -0
- package/claude-assets/skills/cfn-utilities/lib/file-ops.sh +164 -0
- package/claude-assets/skills/cfn-utilities/lib/logging.sh +77 -0
- package/claude-assets/skills/cfn-utilities/lib/retry.sh +127 -0
- package/claude-assets/skills/cfn-utilities/test.sh +317 -0
- package/claude-assets/skills/integration/agent-handoff.sh +62 -64
- package/claude-assets/skills/json-validation/SKILL.md +431 -0
- package/claude-assets/skills/json-validation/test-validate-success-criteria.sh +421 -0
- package/claude-assets/skills/json-validation/validate-success-criteria.sh +197 -0
- package/claude-assets/skills/redis-coordination/validate-parameters.sh +34 -0
- package/claude-assets/skills/workflow-codification/DEPLOY_QUICK_REFERENCE.md +106 -0
- package/claude-assets/skills/workflow-codification/PROPAGATE_UPDATE_QUICK_REFERENCE.md +366 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh +481 -0
- package/claude-assets/skills/workflow-codification/deploy-approved-skill.sh.backup-1763392820 +512 -0
- package/claude-assets/skills/workflow-codification/lib/security-utils.sh +204 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh +648 -0
- package/claude-assets/skills/workflow-codification/propagate-skill-update.sh.backup-1763392820 +664 -0
- package/claude-assets/skills/workflow-codification/test-integration.sh +15 -0
- package/claude-assets/skills/workflow-codification/test-metadata-update.sh +350 -0
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh +55 -14
- package/claude-assets/skills/workflow-codification/track-cost-savings.sh.backup-1763392821 +445 -0
- package/claude-assets/skills/workflow-codification/track-edge-case.sh +27 -60
- package/claude-assets/skills/workflow-codification/workflow-codification.db +0 -0
- package/dist/ace/ace-curator.js +10 -2
- package/dist/ace/ace-curator.js.map +1 -1
- package/dist/ace/ace-generator.js +4 -0
- package/dist/ace/ace-generator.js.map +1 -1
- package/dist/ace/ace-reflector.js +1 -1
- package/dist/ace/ace-reflector.js.map +1 -1
- package/dist/ace/context-injection.js +24 -2
- package/dist/ace/context-injection.js.map +1 -1
- package/dist/agents/task-agent-integration.js +1 -1
- package/dist/agents/task-agent-integration.js.map +1 -1
- package/dist/api/health-endpoints.js +390 -0
- package/dist/api/health-endpoints.js.map +1 -0
- package/dist/cli/agent-executor.js +4 -1
- package/dist/cli/agent-executor.js.map +1 -1
- package/dist/cli/agent-prompt-builder.js +89 -1
- package/dist/cli/agent-prompt-builder.js.map +1 -1
- package/dist/cli/agent-spawn.js +130 -37
- package/dist/cli/agent-spawn.js.map +1 -1
- package/dist/cli/config-manager.js +109 -91
- package/dist/cli/config-manager.js.map +1 -1
- package/dist/cli/conversation-fork-cleanup.js +201 -0
- package/dist/cli/conversation-fork-cleanup.js.map +1 -0
- package/dist/cli/conversation-fork.js +16 -3
- package/dist/cli/conversation-fork.js.map +1 -1
- package/dist/cli/skill-cache-validator.js +412 -0
- package/dist/cli/skill-cache-validator.js.map +1 -0
- package/dist/cli/skill-cli.js +991 -0
- package/dist/cli/skill-cli.js.map +1 -0
- package/dist/cli/skill-execution-logger.js +284 -0
- package/dist/cli/skill-execution-logger.js.map +1 -0
- package/dist/cli/skill-loader.js +457 -0
- package/dist/cli/skill-loader.js.map +1 -0
- package/dist/coordination/event-bus.js +2 -2
- package/dist/coordination/event-bus.js.map +1 -1
- package/dist/coordination/fleet-manager.js +1 -1
- package/dist/coordination/fleet-manager.js.map +1 -1
- package/dist/coordination/index.js +23 -9
- package/dist/coordination/index.js.map +1 -1
- package/dist/coordination/types/fleet-manager.types.js.map +1 -1
- package/dist/db/migration-manager.js +483 -0
- package/dist/db/migration-manager.js.map +1 -0
- package/dist/db/skills-query.js +535 -0
- package/dist/db/skills-query.js.map +1 -0
- package/dist/integration/DatabaseHandoff.js +1 -1
- package/dist/integration/DatabaseHandoff.js.map +1 -1
- package/dist/jobs/edge-case-analyzer.js +367 -0
- package/dist/jobs/edge-case-analyzer.js.map +1 -0
- package/dist/jobs/promotion-sla-enforcer.js +288 -0
- package/dist/jobs/promotion-sla-enforcer.js.map +1 -0
- package/dist/lib/agent-output-parser.js.map +1 -1
- package/dist/lib/agent-output-validator.js.map +1 -1
- package/dist/lib/agent-workspace.js +281 -0
- package/dist/lib/agent-workspace.js.map +1 -0
- package/dist/lib/atomic-file-writer.js +377 -0
- package/dist/lib/atomic-file-writer.js.map +1 -0
- package/dist/lib/backup-manager.js +779 -0
- package/dist/lib/backup-manager.js.map +1 -0
- package/dist/lib/checkpoint-manager.js +837 -0
- package/dist/lib/checkpoint-manager.js.map +1 -0
- package/dist/lib/circuit-breaker.js +340 -0
- package/dist/lib/circuit-breaker.js.map +1 -0
- package/dist/lib/completion-signal-handler.js +243 -0
- package/dist/lib/completion-signal-handler.js.map +1 -0
- package/dist/lib/config-manager.js +312 -0
- package/dist/lib/config-manager.js.map +1 -0
- package/dist/lib/config-migrator.js +386 -0
- package/dist/lib/config-migrator.js.map +1 -0
- package/dist/lib/config-validator.js.map +1 -1
- package/dist/lib/correlation-cache.js +311 -0
- package/dist/lib/correlation-cache.js.map +1 -0
- package/dist/lib/correlation.js +263 -0
- package/dist/lib/correlation.js.map +1 -0
- package/dist/lib/database-service/connection-pool-manager.js +520 -0
- package/dist/lib/database-service/connection-pool-manager.js.map +1 -0
- package/dist/lib/database-service/correlation.js +329 -0
- package/dist/lib/database-service/correlation.js.map +1 -0
- package/dist/lib/database-service/errors.js +120 -0
- package/dist/lib/database-service/errors.js.map +1 -0
- package/dist/lib/database-service/index.js +168 -0
- package/dist/lib/database-service/index.js.map +1 -0
- package/dist/lib/database-service/postgres-adapter.js +526 -0
- package/dist/lib/database-service/postgres-adapter.js.map +1 -0
- package/dist/lib/database-service/redis-adapter.js +360 -0
- package/dist/lib/database-service/redis-adapter.js.map +1 -0
- package/dist/lib/database-service/sqlite-adapter.js +544 -0
- package/dist/lib/database-service/sqlite-adapter.js.map +1 -0
- package/dist/lib/database-service/transaction-manager.js +773 -0
- package/dist/lib/database-service/transaction-manager.js.map +1 -0
- package/dist/lib/database-service/types.js +23 -0
- package/dist/lib/database-service/types.js.map +1 -0
- package/dist/lib/deadlock-resolver.js +292 -0
- package/dist/lib/deadlock-resolver.js.map +1 -0
- package/dist/lib/distributed-lock.js +451 -0
- package/dist/lib/distributed-lock.js.map +1 -0
- package/dist/lib/edge-case-deduplicator.js +227 -0
- package/dist/lib/edge-case-deduplicator.js.map +1 -0
- package/dist/lib/encryption-manager.js +322 -0
- package/dist/lib/encryption-manager.js.map +1 -0
- package/dist/lib/error-aggregator.js +234 -0
- package/dist/lib/error-aggregator.js.map +1 -0
- package/dist/lib/errors.js +287 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/file-lock-manager.js +578 -0
- package/dist/lib/file-lock-manager.js.map +1 -0
- package/dist/lib/file-operations.js +367 -0
- package/dist/lib/file-operations.js.map +1 -0
- package/dist/lib/idempotent-write.js +237 -0
- package/dist/lib/idempotent-write.js.map +1 -0
- package/dist/lib/integration-schema-validator.js +522 -0
- package/dist/lib/integration-schema-validator.js.map +1 -0
- package/dist/lib/lock-health-monitor.js +298 -0
- package/dist/lib/lock-health-monitor.js.map +1 -0
- package/dist/lib/log-shipper.js +422 -0
- package/dist/lib/log-shipper.js.map +1 -0
- package/dist/lib/logging.js +146 -0
- package/dist/lib/logging.js.map +1 -0
- package/dist/lib/message-deduplicator.js +439 -0
- package/dist/lib/message-deduplicator.js.map +1 -0
- package/dist/lib/multi-system-query.js +604 -0
- package/dist/lib/multi-system-query.js.map +1 -0
- package/dist/lib/orphan-detector.js +332 -0
- package/dist/lib/orphan-detector.js.map +1 -0
- package/dist/lib/password-generator.js +166 -0
- package/dist/lib/password-generator.js.map +1 -0
- package/dist/lib/path-validator.js +429 -0
- package/dist/lib/path-validator.js.map +1 -0
- package/dist/lib/query-translator.js +905 -0
- package/dist/lib/query-translator.js.map +1 -0
- package/dist/lib/queue-recovery.js +469 -0
- package/dist/lib/queue-recovery.js.map +1 -0
- package/dist/lib/redis-queue-manager.js +512 -0
- package/dist/lib/redis-queue-manager.js.map +1 -0
- package/dist/lib/reflection-archiver.js +272 -0
- package/dist/lib/reflection-archiver.js.map +1 -0
- package/dist/lib/retry-manager.js +453 -0
- package/dist/lib/retry-manager.js.map +1 -0
- package/dist/lib/retry.js +262 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/schema-transform.js +695 -0
- package/dist/lib/schema-transform.js.map +1 -0
- package/dist/lib/schema-validator.js +491 -0
- package/dist/lib/schema-validator.js.map +1 -0
- package/dist/lib/skill-cache.js +297 -0
- package/dist/lib/skill-cache.js.map +1 -0
- package/dist/lib/skill-content-manager.js +337 -0
- package/dist/lib/skill-content-manager.js.map +1 -0
- package/dist/lib/skill-frontmatter-parser.js +237 -0
- package/dist/lib/skill-frontmatter-parser.js.map +1 -0
- package/dist/lib/skill-git-integration.js +275 -0
- package/dist/lib/skill-git-integration.js.map +1 -0
- package/dist/lib/skill-markdown-validator.js +396 -0
- package/dist/lib/skill-markdown-validator.js.map +1 -0
- package/dist/lib/skill-output-parser.js +312 -0
- package/dist/lib/skill-output-parser.js.map +1 -0
- package/dist/lib/unified-query-api.js +467 -0
- package/dist/lib/unified-query-api.js.map +1 -0
- package/dist/middleware/auth-middleware.js +350 -0
- package/dist/middleware/auth-middleware.js.map +1 -0
- package/dist/middleware/schema-validation.js +347 -0
- package/dist/middleware/schema-validation.js.map +1 -0
- package/dist/providers/anthropic-provider.js +1 -1
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/provider-factory.js +2 -2
- package/dist/providers/provider-factory.js.map +1 -1
- package/dist/services/edge-case-analyzer.js +321 -0
- package/dist/services/edge-case-analyzer.js.map +1 -0
- package/dist/services/edge-case-deduplicator.js +266 -0
- package/dist/services/edge-case-deduplicator.js.map +1 -0
- package/dist/services/edge-case-detector.js +337 -0
- package/dist/services/edge-case-detector.js.map +1 -0
- package/dist/services/edge-case-tracker.js +547 -0
- package/dist/services/edge-case-tracker.js.map +1 -0
- package/dist/services/health-check-system.js +586 -0
- package/dist/services/health-check-system.js.map +1 -0
- package/dist/services/metrics-logger.js +412 -0
- package/dist/services/metrics-logger.js.map +1 -0
- package/dist/services/patch-generator.js +378 -0
- package/dist/services/patch-generator.js.map +1 -0
- package/dist/services/patch-validator.js +337 -0
- package/dist/services/patch-validator.js.map +1 -0
- package/dist/services/performance-monitor.js +811 -0
- package/dist/services/performance-monitor.js.map +1 -0
- package/dist/services/promotion-pipeline.js +918 -0
- package/dist/services/promotion-pipeline.js.map +1 -0
- package/dist/services/promotion-validator.js +394 -0
- package/dist/services/promotion-validator.js.map +1 -0
- package/dist/services/reflection-logger.js +388 -0
- package/dist/services/reflection-logger.js.map +1 -0
- package/dist/services/skill-deployment.js +472 -0
- package/dist/services/skill-deployment.js.map +1 -0
- package/dist/services/skill-loader.js +427 -0
- package/dist/services/skill-loader.js.map +1 -0
- package/dist/services/skill-promotion.js +372 -0
- package/dist/services/skill-promotion.js.map +1 -0
- package/dist/services/skill-validator.js +454 -0
- package/dist/services/skill-validator.js.map +1 -0
- package/dist/services/skill-versioning.js +244 -0
- package/dist/services/skill-versioning.js.map +1 -0
- package/dist/services/workspace-supervisor.js +597 -0
- package/dist/services/workspace-supervisor.js.map +1 -0
- package/dist/types/edge-case.js +45 -0
- package/dist/types/edge-case.js.map +1 -0
- package/docs/BUG_19_MEMORY_LEAK_TASK_MODE.md +405 -0
- package/docs/MEMORY_CLEANUP_GUIDE.md +358 -0
- package/docs/MEMORY_LEAK_FIX_SUMMARY.md +322 -0
- package/docs/REDIS_CLEANUP_EXECUTIVE_SUMMARY.md +319 -0
- package/docs/REDIS_CLEANUP_VERIFICATION_REPORT.md +574 -0
- package/package.json +35 -4
- package/readme/README.md +53 -5
- package/scripts/backup-cleanup.sh +627 -0
- package/scripts/cleanup-workspaces.sh +412 -0
- package/scripts/cleanup-yaml-configs.sh +141 -0
- package/scripts/deploy-approved-skills.sh +263 -0
- package/scripts/health-check.sh +447 -0
- package/scripts/log-aggregator.sh +554 -0
- package/scripts/log-monitor.sh +629 -0
- package/scripts/manage-agent-workspaces.sh +434 -0
- package/scripts/migrate-schema.sh +533 -0
- package/scripts/promote-staged-skills.sh +423 -0
- package/scripts/verify-no-secrets.sh +88 -35
- package/scripts/verify-redis-cleanup.sh +173 -0
- package/tests/README.md +84 -0
- package/tests/test-memory-leak-task-mode.sh +435 -0
- package/.claude/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/.claude/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/.claude/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/.claude/skills/agent-lifecycle/SKILL.md +0 -60
- package/.claude/skills/agent-lifecycle/execute-lifecycle-hook.sh +0 -573
- package/.claude/skills/agent-lifecycle/simple-audit.sh +0 -31
- package/.claude/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/.claude/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
- package/README.md.backup_before_replace +0 -781
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/adaptive-coordinator.md.backup +0 -161
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/blocking-coordinator-example.md.backup +0 -728
- package/claude-assets/cfn-extras/agents/deprecated-coordinators/mesh-coordinator.md.backup +0 -131
- package/claude-assets/skills/cfn-agent-spawning/spawn-agent.sh.backup +0 -273
- package/claude-assets/skills/cfn-loop-orchestration/orchestrate.sh.backup +0 -949
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Skill Versioning Service
|
|
3
|
+
*
|
|
4
|
+
* Provides semantic versioning management for skill deployment.
|
|
5
|
+
* Part of Task 1.1: Automated Skill Deployment Pipeline
|
|
6
|
+
*
|
|
7
|
+
* @example
|
|
8
|
+
* ```typescript
|
|
9
|
+
* const version = await getNextVersion('authentication', 'minor');
|
|
10
|
+
* // Returns '1.1.0' if current version is '1.0.0'
|
|
11
|
+
*
|
|
12
|
+
* const isValid = validateVersion('1.2.3'); // true
|
|
13
|
+
* const isValid = validateVersion('v1.2.3'); // false
|
|
14
|
+
* ```
|
|
15
|
+
*/ import { StandardError, ErrorCode } from '../lib/errors.js';
|
|
16
|
+
import { createLogger } from '../lib/logging.js';
|
|
17
|
+
const logger = createLogger('skill-versioning');
|
|
18
|
+
/**
|
|
19
|
+
* Validate semantic version format (x.y.z)
|
|
20
|
+
*
|
|
21
|
+
* @param version - Version string to validate
|
|
22
|
+
* @returns True if valid semantic version format
|
|
23
|
+
*/ export function validateVersion(version) {
|
|
24
|
+
// Must match semantic versioning format: x.y.z where x, y, z are non-negative integers
|
|
25
|
+
const semverRegex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/;
|
|
26
|
+
return semverRegex.test(version);
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Parse semantic version string into components
|
|
30
|
+
*
|
|
31
|
+
* @param version - Version string to parse
|
|
32
|
+
* @returns Parsed version components
|
|
33
|
+
* @throws StandardError if version format is invalid
|
|
34
|
+
*/ export function parseVersion(version) {
|
|
35
|
+
if (!validateVersion(version)) {
|
|
36
|
+
throw new StandardError(ErrorCode.VALIDATION_FAILED, `Invalid semantic version format: ${version}`, {
|
|
37
|
+
version,
|
|
38
|
+
expectedFormat: 'x.y.z'
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
const parts = version.split('.').map(Number);
|
|
42
|
+
return {
|
|
43
|
+
major: parts[0],
|
|
44
|
+
minor: parts[1],
|
|
45
|
+
patch: parts[2],
|
|
46
|
+
raw: version
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Compare two semantic versions
|
|
51
|
+
*
|
|
52
|
+
* @param v1 - First version
|
|
53
|
+
* @param v2 - Second version
|
|
54
|
+
* @returns -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2
|
|
55
|
+
*/ export function compareVersions(v1, v2) {
|
|
56
|
+
const parsed1 = parseVersion(v1);
|
|
57
|
+
const parsed2 = parseVersion(v2);
|
|
58
|
+
if (parsed1.major !== parsed2.major) {
|
|
59
|
+
return parsed1.major > parsed2.major ? 1 : -1;
|
|
60
|
+
}
|
|
61
|
+
if (parsed1.minor !== parsed2.minor) {
|
|
62
|
+
return parsed1.minor > parsed2.minor ? 1 : -1;
|
|
63
|
+
}
|
|
64
|
+
if (parsed1.patch !== parsed2.patch) {
|
|
65
|
+
return parsed1.patch > parsed2.patch ? 1 : -1;
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Increment version based on change type
|
|
71
|
+
*
|
|
72
|
+
* @param version - Current version
|
|
73
|
+
* @param changeType - Type of change (major, minor, patch)
|
|
74
|
+
* @returns New version string
|
|
75
|
+
*/ export function incrementVersion(version, changeType) {
|
|
76
|
+
const parsed = parseVersion(version);
|
|
77
|
+
switch(changeType){
|
|
78
|
+
case 'major':
|
|
79
|
+
return `${parsed.major + 1}.0.0`;
|
|
80
|
+
case 'minor':
|
|
81
|
+
return `${parsed.major}.${parsed.minor + 1}.0`;
|
|
82
|
+
case 'patch':
|
|
83
|
+
return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}`;
|
|
84
|
+
default:
|
|
85
|
+
throw new StandardError(ErrorCode.INVALID_INPUT, `Invalid version change type: ${changeType}`, {
|
|
86
|
+
changeType,
|
|
87
|
+
validTypes: [
|
|
88
|
+
'major',
|
|
89
|
+
'minor',
|
|
90
|
+
'patch'
|
|
91
|
+
]
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* Get the next version for a skill based on change type
|
|
97
|
+
*
|
|
98
|
+
* @param dbService - Database service instance
|
|
99
|
+
* @param skillName - Name of the skill
|
|
100
|
+
* @param changeType - Type of change (major, minor, patch)
|
|
101
|
+
* @returns Next version string
|
|
102
|
+
* @throws StandardError if skill not found or version conflict
|
|
103
|
+
*/ export async function getNextVersion(dbService, skillName, changeType) {
|
|
104
|
+
logger.info('Getting next version for skill', {
|
|
105
|
+
skillName,
|
|
106
|
+
changeType
|
|
107
|
+
});
|
|
108
|
+
try {
|
|
109
|
+
const adapter = dbService.getAdapter('sqlite');
|
|
110
|
+
// Get current version from skills table
|
|
111
|
+
const result = await adapter.query('SELECT version FROM skills WHERE name = ? ORDER BY created_at DESC LIMIT 1', [
|
|
112
|
+
skillName
|
|
113
|
+
]);
|
|
114
|
+
if (!result.rows || result.rows.length === 0) {
|
|
115
|
+
// No existing version, start at 1.0.0
|
|
116
|
+
logger.info('No existing version found, starting at 1.0.0', {
|
|
117
|
+
skillName
|
|
118
|
+
});
|
|
119
|
+
return '1.0.0';
|
|
120
|
+
}
|
|
121
|
+
const currentVersion = result.rows[0].version;
|
|
122
|
+
const nextVersion = incrementVersion(currentVersion, changeType);
|
|
123
|
+
logger.info('Calculated next version', {
|
|
124
|
+
skillName,
|
|
125
|
+
currentVersion,
|
|
126
|
+
nextVersion,
|
|
127
|
+
changeType
|
|
128
|
+
});
|
|
129
|
+
return nextVersion;
|
|
130
|
+
} catch (error) {
|
|
131
|
+
logger.error('Failed to get next version', error, {
|
|
132
|
+
skillName,
|
|
133
|
+
changeType
|
|
134
|
+
});
|
|
135
|
+
throw new StandardError(ErrorCode.DB_QUERY_FAILED, `Failed to get next version for skill: ${skillName}`, {
|
|
136
|
+
skillName,
|
|
137
|
+
changeType
|
|
138
|
+
}, error);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Check if version already exists for a skill
|
|
143
|
+
*
|
|
144
|
+
* @param dbService - Database service instance
|
|
145
|
+
* @param skillName - Name of the skill
|
|
146
|
+
* @param version - Version to check
|
|
147
|
+
* @returns True if version exists
|
|
148
|
+
*/ export async function versionExists(dbService, skillName, version) {
|
|
149
|
+
logger.debug('Checking if version exists', {
|
|
150
|
+
skillName,
|
|
151
|
+
version
|
|
152
|
+
});
|
|
153
|
+
try {
|
|
154
|
+
const adapter = dbService.getAdapter('sqlite');
|
|
155
|
+
const result = await adapter.query('SELECT COUNT(*) as count FROM skills WHERE name = ? AND version = ?', [
|
|
156
|
+
skillName,
|
|
157
|
+
version
|
|
158
|
+
]);
|
|
159
|
+
const count = result.rows?.[0]?.count || 0;
|
|
160
|
+
const exists = count > 0;
|
|
161
|
+
logger.debug('Version existence check complete', {
|
|
162
|
+
skillName,
|
|
163
|
+
version,
|
|
164
|
+
exists
|
|
165
|
+
});
|
|
166
|
+
return exists;
|
|
167
|
+
} catch (error) {
|
|
168
|
+
logger.error('Failed to check version existence', error, {
|
|
169
|
+
skillName,
|
|
170
|
+
version
|
|
171
|
+
});
|
|
172
|
+
throw new StandardError(ErrorCode.DB_QUERY_FAILED, `Failed to check version existence for skill: ${skillName}`, {
|
|
173
|
+
skillName,
|
|
174
|
+
version
|
|
175
|
+
}, error);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Get all versions for a skill, sorted by semantic version
|
|
180
|
+
*
|
|
181
|
+
* @param dbService - Database service instance
|
|
182
|
+
* @param skillName - Name of the skill
|
|
183
|
+
* @returns Array of version strings, sorted from oldest to newest
|
|
184
|
+
*/ export async function getSkillVersions(dbService, skillName) {
|
|
185
|
+
logger.debug('Getting all versions for skill', {
|
|
186
|
+
skillName
|
|
187
|
+
});
|
|
188
|
+
try {
|
|
189
|
+
const adapter = dbService.getAdapter('sqlite');
|
|
190
|
+
const result = await adapter.query('SELECT version FROM skills WHERE name = ? ORDER BY created_at ASC', [
|
|
191
|
+
skillName
|
|
192
|
+
]);
|
|
193
|
+
const versions = (result.rows || []).map((row)=>row.version);
|
|
194
|
+
// Sort by semantic version
|
|
195
|
+
versions.sort(compareVersions);
|
|
196
|
+
logger.debug('Retrieved skill versions', {
|
|
197
|
+
skillName,
|
|
198
|
+
count: versions.length
|
|
199
|
+
});
|
|
200
|
+
return versions;
|
|
201
|
+
} catch (error) {
|
|
202
|
+
logger.error('Failed to get skill versions', error, {
|
|
203
|
+
skillName
|
|
204
|
+
});
|
|
205
|
+
throw new StandardError(ErrorCode.DB_QUERY_FAILED, `Failed to get versions for skill: ${skillName}`, {
|
|
206
|
+
skillName
|
|
207
|
+
}, error);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get the latest version for a skill
|
|
212
|
+
*
|
|
213
|
+
* @param dbService - Database service instance
|
|
214
|
+
* @param skillName - Name of the skill
|
|
215
|
+
* @returns Latest version string, or null if no versions exist
|
|
216
|
+
*/ export async function getLatestVersion(dbService, skillName) {
|
|
217
|
+
logger.debug('Getting latest version for skill', {
|
|
218
|
+
skillName
|
|
219
|
+
});
|
|
220
|
+
try {
|
|
221
|
+
const versions = await getSkillVersions(dbService, skillName);
|
|
222
|
+
if (versions.length === 0) {
|
|
223
|
+
logger.debug('No versions found for skill', {
|
|
224
|
+
skillName
|
|
225
|
+
});
|
|
226
|
+
return null;
|
|
227
|
+
}
|
|
228
|
+
const latestVersion = versions[versions.length - 1];
|
|
229
|
+
logger.debug('Retrieved latest version', {
|
|
230
|
+
skillName,
|
|
231
|
+
latestVersion
|
|
232
|
+
});
|
|
233
|
+
return latestVersion;
|
|
234
|
+
} catch (error) {
|
|
235
|
+
logger.error('Failed to get latest version', error, {
|
|
236
|
+
skillName
|
|
237
|
+
});
|
|
238
|
+
throw new StandardError(ErrorCode.DB_QUERY_FAILED, `Failed to get latest version for skill: ${skillName}`, {
|
|
239
|
+
skillName
|
|
240
|
+
}, error);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
//# sourceMappingURL=skill-versioning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/services/skill-versioning.ts"],"sourcesContent":["/**\r\n * Skill Versioning Service\r\n *\r\n * Provides semantic versioning management for skill deployment.\r\n * Part of Task 1.1: Automated Skill Deployment Pipeline\r\n *\r\n * @example\r\n * ```typescript\r\n * const version = await getNextVersion('authentication', 'minor');\r\n * // Returns '1.1.0' if current version is '1.0.0'\r\n *\r\n * const isValid = validateVersion('1.2.3'); // true\r\n * const isValid = validateVersion('v1.2.3'); // false\r\n * ```\r\n */\r\n\r\nimport { DatabaseService } from '../lib/database-service.js';\r\nimport { StandardError, ErrorCode } from '../lib/errors.js';\r\nimport { createLogger, Logger } from '../lib/logging.js';\r\n\r\nconst logger = createLogger('skill-versioning');\r\n\r\n/**\r\n * Semantic version change type\r\n */\r\nexport type VersionChangeType = 'major' | 'minor' | 'patch';\r\n\r\n/**\r\n * Parsed semantic version\r\n */\r\nexport interface ParsedVersion {\r\n major: number;\r\n minor: number;\r\n patch: number;\r\n raw: string;\r\n}\r\n\r\n/**\r\n * Validate semantic version format (x.y.z)\r\n *\r\n * @param version - Version string to validate\r\n * @returns True if valid semantic version format\r\n */\r\nexport function validateVersion(version: string): boolean {\r\n // Must match semantic versioning format: x.y.z where x, y, z are non-negative integers\r\n const semverRegex = /^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)$/;\r\n return semverRegex.test(version);\r\n}\r\n\r\n/**\r\n * Parse semantic version string into components\r\n *\r\n * @param version - Version string to parse\r\n * @returns Parsed version components\r\n * @throws StandardError if version format is invalid\r\n */\r\nexport function parseVersion(version: string): ParsedVersion {\r\n if (!validateVersion(version)) {\r\n throw new StandardError(\r\n ErrorCode.VALIDATION_FAILED,\r\n `Invalid semantic version format: ${version}`,\r\n { version, expectedFormat: 'x.y.z' }\r\n );\r\n }\r\n\r\n const parts = version.split('.').map(Number);\r\n return {\r\n major: parts[0],\r\n minor: parts[1],\r\n patch: parts[2],\r\n raw: version,\r\n };\r\n}\r\n\r\n/**\r\n * Compare two semantic versions\r\n *\r\n * @param v1 - First version\r\n * @param v2 - Second version\r\n * @returns -1 if v1 < v2, 0 if v1 === v2, 1 if v1 > v2\r\n */\r\nexport function compareVersions(v1: string, v2: string): number {\r\n const parsed1 = parseVersion(v1);\r\n const parsed2 = parseVersion(v2);\r\n\r\n if (parsed1.major !== parsed2.major) {\r\n return parsed1.major > parsed2.major ? 1 : -1;\r\n }\r\n\r\n if (parsed1.minor !== parsed2.minor) {\r\n return parsed1.minor > parsed2.minor ? 1 : -1;\r\n }\r\n\r\n if (parsed1.patch !== parsed2.patch) {\r\n return parsed1.patch > parsed2.patch ? 1 : -1;\r\n }\r\n\r\n return 0;\r\n}\r\n\r\n/**\r\n * Increment version based on change type\r\n *\r\n * @param version - Current version\r\n * @param changeType - Type of change (major, minor, patch)\r\n * @returns New version string\r\n */\r\nexport function incrementVersion(version: string, changeType: VersionChangeType): string {\r\n const parsed = parseVersion(version);\r\n\r\n switch (changeType) {\r\n case 'major':\r\n return `${parsed.major + 1}.0.0`;\r\n case 'minor':\r\n return `${parsed.major}.${parsed.minor + 1}.0`;\r\n case 'patch':\r\n return `${parsed.major}.${parsed.minor}.${parsed.patch + 1}`;\r\n default:\r\n throw new StandardError(\r\n ErrorCode.INVALID_INPUT,\r\n `Invalid version change type: ${changeType}`,\r\n { changeType, validTypes: ['major', 'minor', 'patch'] }\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get the next version for a skill based on change type\r\n *\r\n * @param dbService - Database service instance\r\n * @param skillName - Name of the skill\r\n * @param changeType - Type of change (major, minor, patch)\r\n * @returns Next version string\r\n * @throws StandardError if skill not found or version conflict\r\n */\r\nexport async function getNextVersion(\r\n dbService: DatabaseService,\r\n skillName: string,\r\n changeType: VersionChangeType\r\n): Promise<string> {\r\n logger.info('Getting next version for skill', { skillName, changeType });\r\n\r\n try {\r\n const adapter = dbService.getAdapter('sqlite');\r\n\r\n // Get current version from skills table\r\n const result = await adapter.query(\r\n 'SELECT version FROM skills WHERE name = ? ORDER BY created_at DESC LIMIT 1',\r\n [skillName]\r\n );\r\n\r\n if (!result.rows || result.rows.length === 0) {\r\n // No existing version, start at 1.0.0\r\n logger.info('No existing version found, starting at 1.0.0', { skillName });\r\n return '1.0.0';\r\n }\r\n\r\n const currentVersion = result.rows[0].version as string;\r\n const nextVersion = incrementVersion(currentVersion, changeType);\r\n\r\n logger.info('Calculated next version', {\r\n skillName,\r\n currentVersion,\r\n nextVersion,\r\n changeType,\r\n });\r\n\r\n return nextVersion;\r\n } catch (error) {\r\n logger.error('Failed to get next version', error as Error, { skillName, changeType });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to get next version for skill: ${skillName}`,\r\n { skillName, changeType },\r\n error as Error\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Check if version already exists for a skill\r\n *\r\n * @param dbService - Database service instance\r\n * @param skillName - Name of the skill\r\n * @param version - Version to check\r\n * @returns True if version exists\r\n */\r\nexport async function versionExists(\r\n dbService: DatabaseService,\r\n skillName: string,\r\n version: string\r\n): Promise<boolean> {\r\n logger.debug('Checking if version exists', { skillName, version });\r\n\r\n try {\r\n const adapter = dbService.getAdapter('sqlite');\r\n\r\n const result = await adapter.query(\r\n 'SELECT COUNT(*) as count FROM skills WHERE name = ? AND version = ?',\r\n [skillName, version]\r\n );\r\n\r\n const count = result.rows?.[0]?.count as number || 0;\r\n const exists = count > 0;\r\n\r\n logger.debug('Version existence check complete', { skillName, version, exists });\r\n return exists;\r\n } catch (error) {\r\n logger.error('Failed to check version existence', error as Error, { skillName, version });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to check version existence for skill: ${skillName}`,\r\n { skillName, version },\r\n error as Error\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get all versions for a skill, sorted by semantic version\r\n *\r\n * @param dbService - Database service instance\r\n * @param skillName - Name of the skill\r\n * @returns Array of version strings, sorted from oldest to newest\r\n */\r\nexport async function getSkillVersions(\r\n dbService: DatabaseService,\r\n skillName: string\r\n): Promise<string[]> {\r\n logger.debug('Getting all versions for skill', { skillName });\r\n\r\n try {\r\n const adapter = dbService.getAdapter('sqlite');\r\n\r\n const result = await adapter.query(\r\n 'SELECT version FROM skills WHERE name = ? ORDER BY created_at ASC',\r\n [skillName]\r\n );\r\n\r\n const versions = (result.rows || []).map(row => row.version as string);\r\n\r\n // Sort by semantic version\r\n versions.sort(compareVersions);\r\n\r\n logger.debug('Retrieved skill versions', { skillName, count: versions.length });\r\n return versions;\r\n } catch (error) {\r\n logger.error('Failed to get skill versions', error as Error, { skillName });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to get versions for skill: ${skillName}`,\r\n { skillName },\r\n error as Error\r\n );\r\n }\r\n}\r\n\r\n/**\r\n * Get the latest version for a skill\r\n *\r\n * @param dbService - Database service instance\r\n * @param skillName - Name of the skill\r\n * @returns Latest version string, or null if no versions exist\r\n */\r\nexport async function getLatestVersion(\r\n dbService: DatabaseService,\r\n skillName: string\r\n): Promise<string | null> {\r\n logger.debug('Getting latest version for skill', { skillName });\r\n\r\n try {\r\n const versions = await getSkillVersions(dbService, skillName);\r\n\r\n if (versions.length === 0) {\r\n logger.debug('No versions found for skill', { skillName });\r\n return null;\r\n }\r\n\r\n const latestVersion = versions[versions.length - 1];\r\n logger.debug('Retrieved latest version', { skillName, latestVersion });\r\n return latestVersion;\r\n } catch (error) {\r\n logger.error('Failed to get latest version', error as Error, { skillName });\r\n throw new StandardError(\r\n ErrorCode.DB_QUERY_FAILED,\r\n `Failed to get latest version for skill: ${skillName}`,\r\n { skillName },\r\n error as Error\r\n );\r\n }\r\n}\r\n"],"names":["StandardError","ErrorCode","createLogger","logger","validateVersion","version","semverRegex","test","parseVersion","VALIDATION_FAILED","expectedFormat","parts","split","map","Number","major","minor","patch","raw","compareVersions","v1","v2","parsed1","parsed2","incrementVersion","changeType","parsed","INVALID_INPUT","validTypes","getNextVersion","dbService","skillName","info","adapter","getAdapter","result","query","rows","length","currentVersion","nextVersion","error","DB_QUERY_FAILED","versionExists","debug","count","exists","getSkillVersions","versions","row","sort","getLatestVersion","latestVersion"],"mappings":"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"}
|