agentic-qe 3.14.3 → 3.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/v3/qe-coverage-specialist.md +1 -1
- package/.claude/agents/v3/qe-fleet-commander.md +1 -1
- package/.claude/agents/v3/qe-pentest-validator.md +1 -1
- package/.claude/agents/v3/qe-queen-coordinator.md +1 -1
- package/.claude/agents/v3/qe-risk-assessor.md +1 -1
- package/.claude/agents/v3/qe-root-cause-analyzer.md +1 -1
- package/.claude/agents/v3/qe-security-auditor.md +1 -1
- package/.claude/agents/v3/qe-test-architect.md +1 -1
- package/.claude/commands/aqe-costs.md +10 -10
- package/.claude/helpers/advisor-call.cjs +3 -3
- package/.claude/helpers/v3/advisor-call.cjs +3 -3
- package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +1 -1
- package/.claude/skills/.validation/examples/performance-testing-output.example.json +1 -1
- package/.claude/skills/.validation/examples/security-testing-output.example.json +1 -1
- package/.claude/skills/.validation/examples/testability-scoring-output.example.json +1 -1
- package/.claude/skills/.validation/schemas/skill-eval.schema.json +4 -1
- package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +1 -1
- package/.claude/skills/.validation/schemas/skill-output.template.json +1 -1
- package/.claude/skills/.validation/templates/eval.template.yaml +1 -1
- package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +1 -1
- package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
- package/.claude/skills/.validation/test-data/sample-output.json +1 -1
- package/.claude/skills/a11y-ally/SKILL.md +1 -1
- package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +1 -1
- package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
- package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +1 -1
- package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
- package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +1 -1
- package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +1 -1
- package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1 -1
- package/.claude/skills/contract-testing/evals/contract-testing.yaml +1 -1
- package/.claude/skills/database-testing/evals/database-testing.yaml +1 -1
- package/.claude/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +1 -1
- package/.claude/skills/localization-testing/evals/localization-testing.yaml +1 -1
- package/.claude/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +1 -1
- package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
- package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +1 -1
- package/.claude/skills/mutation-testing/test-data/sample-output.json +1 -1
- package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +1 -1
- package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +1 -1
- package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +1 -1
- package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
- package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +1 -1
- package/.claude/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +1 -1
- package/.claude/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
- package/.claude/skills/performance-testing/evals/performance-testing.yaml +1 -1
- package/.claude/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +1 -1
- package/.claude/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +1 -1
- package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +1 -1
- package/.claude/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +1 -1
- package/.claude/skills/qcsd-refinement-swarm/evals/qcsd-refinement-swarm.yaml +1 -1
- package/.claude/skills/qe-browser/evals/qe-browser.yaml +1 -1
- package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
- package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
- package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
- package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
- package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +2 -2
- package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
- package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
- package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
- package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +1 -1
- package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +1 -1
- package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
- package/.claude/skills/regression-testing/evals/regression-testing.yaml +1 -1
- package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +1 -1
- package/.claude/skills/security-testing/evals/security-testing.yaml +1 -1
- package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +1 -1
- package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +1 -1
- package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +1 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +1 -1
- package/.claude/skills/test-data-management/evals/test-data-management.yaml +1 -1
- package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +1 -1
- package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +1 -1
- package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +1 -1
- package/.claude/skills/validation-pipeline/evals/validation-pipeline.yaml +1 -1
- package/.claude/skills/verification-quality/evals/verification-quality.yaml +1 -1
- package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +1 -1
- package/.claude/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +1 -1
- package/.opencode/agents/collective-intelligence-coordinator.yaml +1 -1
- package/.opencode/agents/ddd-domain-expert.yaml +1 -1
- package/.opencode/agents/memory-specialist.yaml +1 -1
- package/.opencode/agents/performance-engineer.yaml +1 -1
- package/.opencode/agents/qe-accessibility-auditor.yaml +1 -1
- package/.opencode/agents/qe-api-contract-validator.yaml +1 -1
- package/.opencode/agents/qe-bdd-generator.yaml +1 -1
- package/.opencode/agents/qe-chaos-engineer.yaml +1 -1
- package/.opencode/agents/qe-code-complexity.yaml +1 -1
- package/.opencode/agents/qe-code-intelligence.yaml +1 -1
- package/.opencode/agents/qe-coverage-analyzer.yaml +1 -1
- package/.opencode/agents/qe-defect-predictor.yaml +1 -1
- package/.opencode/agents/qe-dependency-mapper.yaml +1 -1
- package/.opencode/agents/qe-deployment-advisor.yaml +1 -1
- package/.opencode/agents/qe-devils-advocate.yaml +1 -1
- package/.opencode/agents/qe-flaky-hunter.yaml +1 -1
- package/.opencode/agents/qe-fleet-commander.yaml +1 -1
- package/.opencode/agents/qe-gap-detector.yaml +1 -1
- package/.opencode/agents/qe-graphql-tester.yaml +1 -1
- package/.opencode/agents/qe-impact-analyzer.yaml +1 -1
- package/.opencode/agents/qe-integration-architect.yaml +1 -1
- package/.opencode/agents/qe-integration-tester.yaml +1 -1
- package/.opencode/agents/qe-kg-builder.yaml +1 -1
- package/.opencode/agents/qe-learning-coordinator.yaml +1 -1
- package/.opencode/agents/qe-load-tester.yaml +1 -1
- package/.opencode/agents/qe-message-broker-tester.yaml +1 -1
- package/.opencode/agents/qe-metrics-optimizer.yaml +1 -1
- package/.opencode/agents/qe-middleware-validator.yaml +1 -1
- package/.opencode/agents/qe-mutation-tester.yaml +1 -1
- package/.opencode/agents/qe-odata-contract-tester.yaml +1 -1
- package/.opencode/agents/qe-parallel-executor.yaml +1 -1
- package/.opencode/agents/qe-pattern-learner.yaml +1 -1
- package/.opencode/agents/qe-pentest-validator.yaml +1 -1
- package/.opencode/agents/qe-performance-tester.yaml +1 -1
- package/.opencode/agents/qe-product-factors-assessor.yaml +1 -1
- package/.opencode/agents/qe-property-tester.yaml +1 -1
- package/.opencode/agents/qe-quality-criteria-recommender.yaml +1 -1
- package/.opencode/agents/qe-quality-gate.yaml +1 -1
- package/.opencode/agents/qe-queen-coordinator.yaml +1 -1
- package/.opencode/agents/qe-qx-partner.yaml +1 -1
- package/.opencode/agents/qe-regression-analyzer.yaml +1 -1
- package/.opencode/agents/qe-requirements-validator.yaml +1 -1
- package/.opencode/agents/qe-responsive-tester.yaml +1 -1
- package/.opencode/agents/qe-retry-handler.yaml +1 -1
- package/.opencode/agents/qe-risk-assessor.yaml +1 -1
- package/.opencode/agents/qe-root-cause-analyzer.yaml +1 -1
- package/.opencode/agents/qe-sap-idoc-tester.yaml +1 -1
- package/.opencode/agents/qe-sap-rfc-tester.yaml +1 -1
- package/.opencode/agents/qe-security-auditor.yaml +1 -1
- package/.opencode/agents/qe-security-scanner.yaml +1 -1
- package/.opencode/agents/qe-soap-tester.yaml +1 -1
- package/.opencode/agents/qe-sod-analyzer.yaml +1 -1
- package/.opencode/agents/qe-tdd-specialist.yaml +1 -1
- package/.opencode/agents/qe-test-generator.yaml +1 -1
- package/.opencode/agents/qe-test-idea-rewriter.yaml +1 -1
- package/.opencode/agents/qe-transfer-specialist.yaml +1 -1
- package/.opencode/agents/qe-visual-tester.yaml +1 -1
- package/.opencode/agents/security-architect.yaml +1 -1
- package/.opencode/agents/security-auditor.yaml +1 -1
- package/CHANGELOG.md +111 -0
- package/README.md +7 -2
- package/assets/agents/v3/helpers/advisor-call.cjs +3 -3
- package/assets/agents/v3/qe-coverage-specialist.md +1 -1
- package/assets/agents/v3/qe-fleet-commander.md +1 -1
- package/assets/agents/v3/qe-pentest-validator.md +1 -1
- package/assets/agents/v3/qe-queen-coordinator.md +1 -1
- package/assets/agents/v3/qe-risk-assessor.md +1 -1
- package/assets/agents/v3/qe-root-cause-analyzer.md +1 -1
- package/assets/agents/v3/qe-security-auditor.md +1 -1
- package/assets/agents/v3/qe-test-architect.md +1 -1
- package/assets/skills/.validation/examples/chaos-engineering-output.example.json +1 -1
- package/assets/skills/.validation/examples/performance-testing-output.example.json +1 -1
- package/assets/skills/.validation/examples/security-testing-output.example.json +1 -1
- package/assets/skills/.validation/examples/testability-scoring-output.example.json +1 -1
- package/assets/skills/.validation/schemas/skill-eval.schema.json +4 -1
- package/assets/skills/.validation/schemas/skill-frontmatter.schema.json +1 -1
- package/assets/skills/.validation/schemas/skill-output.template.json +1 -1
- package/assets/skills/.validation/templates/eval.template.yaml +1 -1
- package/assets/skills/.validation/templates/security-testing-eval.template.yaml +1 -1
- package/assets/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
- package/assets/skills/.validation/test-data/sample-output.json +1 -1
- package/assets/skills/a11y-ally/SKILL.md +1 -1
- package/assets/skills/a11y-ally/evals/a11y-ally.yaml +1 -1
- package/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
- package/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +1 -1
- package/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
- package/assets/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +1 -1
- package/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +1 -1
- package/assets/skills/compliance-testing/evals/compliance-testing.yaml +1 -1
- package/assets/skills/contract-testing/evals/contract-testing.yaml +1 -1
- package/assets/skills/database-testing/evals/database-testing.yaml +1 -1
- package/assets/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +1 -1
- package/assets/skills/localization-testing/evals/localization-testing.yaml +1 -1
- package/assets/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +1 -1
- package/assets/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
- package/assets/skills/mutation-testing/evals/mutation-testing.yaml +1 -1
- package/assets/skills/mutation-testing/test-data/sample-output.json +1 -1
- package/assets/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +1 -1
- package/assets/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +1 -1
- package/assets/skills/n8n-security-testing/evals/n8n-security-testing.yaml +1 -1
- package/assets/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
- package/assets/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +1 -1
- package/assets/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +1 -1
- package/assets/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
- package/assets/skills/performance-testing/evals/performance-testing.yaml +1 -1
- package/assets/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +1 -1
- package/assets/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +1 -1
- package/assets/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +1 -1
- package/assets/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +1 -1
- package/assets/skills/qcsd-refinement-swarm/evals/qcsd-refinement-swarm.yaml +1 -1
- package/assets/skills/qe-browser/evals/qe-browser.yaml +1 -1
- package/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
- package/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
- package/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
- package/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
- package/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +2 -2
- package/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
- package/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
- package/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
- package/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +1 -1
- package/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +1 -1
- package/assets/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
- package/assets/skills/regression-testing/evals/regression-testing.yaml +1 -1
- package/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +1 -1
- package/assets/skills/security-testing/evals/security-testing.yaml +1 -1
- package/assets/skills/security-visual-testing/evals/security-visual-testing.yaml +1 -1
- package/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +1 -1
- package/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +1 -1
- package/assets/skills/skills-manifest.json +1 -1
- package/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +1 -1
- package/assets/skills/test-data-management/evals/test-data-management.yaml +1 -1
- package/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +1 -1
- package/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +1 -1
- package/assets/skills/testability-scoring/evals/testability-scoring.yaml +1 -1
- package/assets/skills/validation-pipeline/evals/validation-pipeline.yaml +1 -1
- package/assets/skills/verification-quality/evals/verification-quality.yaml +1 -1
- package/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +1 -1
- package/assets/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +1 -1
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-TNNNJRDG.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-TQOMLWWX.js → agent-booster-wasm-5PC7D2FW.js} +2 -2
- package/dist/cli/chunks/{agent-handler-Q3SEMMI2.js → agent-handler-RDNTK4CA.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-SJXAQSZI.js → agent-memory-branch-NAAMBWIR.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-5ZRMYJLB.js +2 -0
- package/dist/cli/chunks/{arena-7RC7TBGW.js → arena-HXTWJ5YY.js} +4 -4
- package/dist/cli/chunks/{arena-UPB7TKUY.js → arena-KXFHRWX4.js} +2 -2
- package/dist/cli/chunks/{audit-IXN5R4WB.js → audit-YSGA7UWT.js} +3 -3
- package/dist/cli/chunks/base-KWZHOPSH.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-RP4DEGK3.js → better-sqlite3-UICJZIDG.js} +2 -2
- package/dist/cli/chunks/brain-handler-ET6YAP4B.js +90 -0
- package/dist/cli/chunks/{branch-enumerator-VPRWDGFJ.js → branch-enumerator-SS7UNVIA.js} +2 -2
- package/dist/cli/chunks/{browser-B6E7JPPJ.js → browser-77GI6KBE.js} +2 -2
- package/dist/cli/chunks/browser-workflow-2FZTKDUL.js +2 -0
- package/dist/cli/chunks/{chunk-ZHXWGNYM.js → chunk-2JW3BCGG.js} +1 -1
- package/dist/cli/chunks/{chunk-TGLAWI62.js → chunk-33YYYWBQ.js} +1 -1
- package/dist/cli/chunks/{chunk-BN7DKW5D.js → chunk-34WO57CW.js} +1 -1
- package/dist/cli/chunks/{chunk-TTMHIOQ3.js → chunk-3QHGWY7T.js} +2 -2
- package/dist/cli/chunks/chunk-3TW5W5LX.js +2 -0
- package/dist/cli/chunks/{chunk-E3FBW6G2.js → chunk-3UPAMMCB.js} +1 -1
- package/dist/cli/chunks/{chunk-MDZ6RRLX.js → chunk-3VOQRIQM.js} +2 -2
- package/dist/cli/chunks/{chunk-G5C2XVZC.js → chunk-3X3DJZJJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4C6UJIHB.js → chunk-4MHXCAG2.js} +1 -1
- package/dist/cli/chunks/{chunk-7BUERZYL.js → chunk-4OYFXLBK.js} +2 -2
- package/dist/cli/chunks/{chunk-TFHQE6NK.js → chunk-55RWDRJD.js} +3 -3
- package/dist/cli/chunks/chunk-5R3QL7WN.js +14 -0
- package/dist/cli/chunks/{chunk-ZUG5MOUB.js → chunk-5SJHQ2CO.js} +2 -2
- package/dist/cli/chunks/{chunk-VIDBBB6F.js → chunk-5YPYDPBJ.js} +2 -2
- package/dist/cli/chunks/chunk-5Z6XZV7K.js +65 -0
- package/dist/cli/chunks/{chunk-JV4FZUE7.js → chunk-64PFWE2F.js} +2 -2
- package/dist/cli/chunks/{chunk-TISSZFHO.js → chunk-6CQN24ZK.js} +1 -1
- package/dist/cli/chunks/{chunk-G6DCESPU.js → chunk-6J62K3SW.js} +2 -2
- package/dist/cli/chunks/{chunk-7SLAZAVU.js → chunk-6KJABXAR.js} +2 -2
- package/dist/cli/chunks/{chunk-KF63AYXD.js → chunk-6QYNWR7U.js} +2 -2
- package/dist/cli/chunks/{chunk-74PK3NEW.js → chunk-6TPKK7LD.js} +2 -2
- package/dist/cli/chunks/{chunk-JRYZKBY2.js → chunk-6UWGMOND.js} +2 -2
- package/dist/cli/chunks/{chunk-ZN3J6TZD.js → chunk-6VRA2QGL.js} +1 -1
- package/dist/cli/chunks/{chunk-YCBDE2N7.js → chunk-7D777LTF.js} +2 -2
- package/dist/cli/chunks/chunk-7ZIOFPL3.js +2 -0
- package/dist/cli/chunks/chunk-A4FYONNU.js +2 -0
- package/dist/cli/chunks/{chunk-5Y5TC6BY.js → chunk-AIHDEEJO.js} +2 -2
- package/dist/cli/chunks/{chunk-N4H2QOT5.js → chunk-AUXFKCQL.js} +2 -2
- package/dist/cli/chunks/{chunk-7G6UX2QN.js → chunk-AWWNB2T7.js} +2 -2
- package/dist/cli/chunks/{chunk-33VPWGCM.js → chunk-BDESSCVR.js} +3 -3
- package/dist/cli/chunks/{chunk-OVDKWCD7.js → chunk-BFP7KO7P.js} +2 -2
- package/dist/cli/chunks/{chunk-MXMFGSWR.js → chunk-BGE6FOLM.js} +2 -2
- package/dist/cli/chunks/{chunk-2GNRW3OD.js → chunk-BOARZKU3.js} +2 -2
- package/dist/cli/chunks/{chunk-4JBFJTHJ.js → chunk-BOZZYWCR.js} +1 -1
- package/dist/cli/chunks/{chunk-D4Z2N74A.js → chunk-C2WU3533.js} +1 -1
- package/dist/cli/chunks/{chunk-B7SWW5A6.js → chunk-CDHQFHRP.js} +2 -2
- package/dist/cli/chunks/chunk-CDKG6EI7.js +16 -0
- package/dist/cli/chunks/{chunk-IU4EBTA2.js → chunk-CIKSHTEQ.js} +3 -3
- package/dist/cli/chunks/{chunk-RTJ2M6V6.js → chunk-CIZ5JPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-CR3QGHVN.js → chunk-CLTMDCSE.js} +2 -2
- package/dist/cli/chunks/{chunk-T35GZXTU.js → chunk-CNG6GQEZ.js} +2 -2
- package/dist/cli/chunks/{chunk-IQEJGZV6.js → chunk-CSU5NYOX.js} +3 -3
- package/dist/cli/chunks/chunk-CU46J64M.js +4 -0
- package/dist/cli/chunks/{chunk-LLVGTEHU.js → chunk-CXQPR5MY.js} +1 -1
- package/dist/cli/chunks/{chunk-5BLFXQEB.js → chunk-DA5K5754.js} +1 -1
- package/dist/cli/chunks/{chunk-5FOZO7KM.js → chunk-DAEFDCJ4.js} +45 -45
- package/dist/cli/chunks/{chunk-SJPZSCZP.js → chunk-DEYLEDJN.js} +2 -2
- package/dist/cli/chunks/{chunk-LHGNNZ76.js → chunk-DFZCKIGY.js} +3 -3
- package/dist/cli/chunks/{chunk-YAKS3CAB.js → chunk-DHJPWQBR.js} +2 -2
- package/dist/cli/chunks/{chunk-37BASGWC.js → chunk-DOTK76IJ.js} +2 -2
- package/dist/cli/chunks/{chunk-STRDSVH3.js → chunk-DPFRKBOG.js} +2 -2
- package/dist/cli/chunks/{chunk-H5ZRV5K5.js → chunk-EDJ3O7RH.js} +2 -2
- package/dist/cli/chunks/{chunk-DBA3N742.js → chunk-EKQ673SA.js} +1 -1
- package/dist/cli/chunks/chunk-F3SBRQC6.js +2 -0
- package/dist/cli/chunks/{chunk-HOQQCY2K.js → chunk-FGYMFUE2.js} +2 -2
- package/dist/cli/chunks/{chunk-FKG5OQFT.js → chunk-FLYOJOKN.js} +1 -1
- package/dist/cli/chunks/{chunk-MWWAMDHI.js → chunk-FRH6VAUS.js} +1 -1
- package/dist/cli/chunks/{chunk-UYJHYMEQ.js → chunk-FWGOHAAB.js} +2 -2
- package/dist/cli/chunks/{chunk-HRUU7E3D.js → chunk-G6T45OIC.js} +2 -2
- package/dist/cli/chunks/{chunk-4Q35TI6Z.js → chunk-GPLQ6DOK.js} +2 -2
- package/dist/cli/chunks/{chunk-PI74GOE4.js → chunk-HDSAM2RE.js} +2 -2
- package/dist/cli/chunks/chunk-HIVA55CJ.js +2 -0
- package/dist/cli/chunks/{chunk-B5XFDFBT.js → chunk-HIYXCDEP.js} +1 -1
- package/dist/cli/chunks/{chunk-ZK5JKHP4.js → chunk-HUWNIPZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-H6XBM2LY.js → chunk-HV2J7KKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-IFFZR6GY.js → chunk-IFCLB7FJ.js} +1 -1
- package/dist/cli/chunks/{chunk-3ABRGG3C.js → chunk-IPR4QP3H.js} +2 -2
- package/dist/cli/chunks/{chunk-7FYMDKQH.js → chunk-ISDMD6EU.js} +165 -167
- package/dist/cli/chunks/{chunk-B2ZONZPZ.js → chunk-J6GNQS62.js} +2 -2
- package/dist/cli/chunks/{chunk-G6ZHTF42.js → chunk-JBNEE5UH.js} +2 -2
- package/dist/cli/chunks/chunk-JZ3ORVZ3.js +54 -0
- package/dist/cli/chunks/{chunk-5IAB5NRZ.js → chunk-KCZR45PA.js} +2 -2
- package/dist/cli/chunks/chunk-KGT36Z42.js +14 -0
- package/dist/cli/chunks/{chunk-IP7NSFQQ.js → chunk-KHFNNVJA.js} +2 -2
- package/dist/cli/chunks/{chunk-2WT7AKKK.js → chunk-KPA7MZ6C.js} +2 -2
- package/dist/cli/chunks/{chunk-7JQHPANT.js → chunk-KSKEF7LZ.js} +3 -3
- package/dist/cli/chunks/{chunk-F67AV5P2.js → chunk-M2JBBZQB.js} +2 -2
- package/dist/cli/chunks/{chunk-SGXSB7YO.js → chunk-M4WJKGVK.js} +1 -1
- package/dist/cli/chunks/{chunk-4UDZLD42.js → chunk-M5QUBZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-PZTVH2AS.js → chunk-MCUJEZT6.js} +2 -2
- package/dist/cli/chunks/{chunk-KPMGTVB4.js → chunk-MDWCE7YW.js} +1 -1
- package/dist/cli/chunks/{chunk-LS3EUMBP.js → chunk-MEGDYJPV.js} +5 -5
- package/dist/cli/chunks/chunk-MIQTXNBG.js +4 -0
- package/dist/cli/chunks/{chunk-VWNHKYK7.js → chunk-MNW6QGNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-NN76NTOX.js → chunk-MOBNBMFW.js} +1 -1
- package/dist/cli/chunks/{chunk-SG47AXJG.js → chunk-MTZH7AHC.js} +1 -1
- package/dist/cli/chunks/chunk-MVNP7GIR.js +2 -0
- package/dist/cli/chunks/chunk-MVPCNSPY.js +2 -0
- package/dist/cli/chunks/chunk-NA7B2QYB.js +2 -0
- package/dist/cli/chunks/{chunk-26GM5CWD.js → chunk-NDPFGIMJ.js} +3 -3
- package/dist/cli/chunks/{chunk-ELU4IC3I.js → chunk-NJBGXDQ7.js} +1 -1
- package/dist/cli/chunks/chunk-OBAP2TXZ.js +2 -0
- package/dist/cli/chunks/{chunk-NTSXHZTC.js → chunk-OCWWP5PL.js} +4 -4
- package/dist/cli/chunks/{chunk-XA7CG3LH.js → chunk-ODKLFVYC.js} +2 -2
- package/dist/cli/chunks/{chunk-IKIITGU5.js → chunk-ONII3572.js} +4 -4
- package/dist/cli/chunks/{chunk-JBB7E26R.js → chunk-OSLYSG3B.js} +2 -2
- package/dist/cli/chunks/{chunk-CB5JPRIZ.js → chunk-OULHKEVH.js} +2 -2
- package/dist/cli/chunks/{chunk-YGB6R5DW.js → chunk-PAWXJ73E.js} +1 -1
- package/dist/cli/chunks/chunk-PEPFCPES.js +2 -0
- package/dist/cli/chunks/{chunk-FUE6LL72.js → chunk-PFR4G3DJ.js} +2 -2
- package/dist/cli/chunks/chunk-PO3IXGMQ.js +2 -0
- package/dist/cli/chunks/{chunk-OY7MLMEX.js → chunk-PZJOPURC.js} +5 -5
- package/dist/cli/chunks/{chunk-UHQY3GK7.js → chunk-Q5DO24IJ.js} +2 -2
- package/dist/cli/chunks/chunk-QGIU2WRL.js +2 -0
- package/dist/cli/chunks/{chunk-4RP5VUBI.js → chunk-R4VL6E65.js} +2 -2
- package/dist/cli/chunks/{chunk-RKJZWWB7.js → chunk-R5NE6B2M.js} +2 -2
- package/dist/cli/chunks/{chunk-5F6DWHQG.js → chunk-RJCYCLZV.js} +2 -2
- package/dist/cli/chunks/{chunk-GNTVFN7D.js → chunk-SGYJ4NFZ.js} +1 -1
- package/dist/cli/chunks/{chunk-OYMLHX2B.js → chunk-SRKETSFF.js} +1 -1
- package/dist/cli/chunks/{chunk-XX7HUSX2.js → chunk-STJCATGN.js} +2 -2
- package/dist/cli/chunks/{chunk-C46DMCWF.js → chunk-STM3UDNO.js} +1 -1
- package/dist/cli/chunks/{chunk-EY4OQHU3.js → chunk-T6BVLVI5.js} +1 -1
- package/dist/cli/chunks/{chunk-LKN7JQTW.js → chunk-TDZ53WO2.js} +2 -2
- package/dist/cli/chunks/{chunk-OV5EZO3U.js → chunk-TPGED2IF.js} +2 -2
- package/dist/cli/chunks/{chunk-DX3C5HPN.js → chunk-TSRSV3LD.js} +1 -1
- package/dist/cli/chunks/{chunk-Y2DVFVGI.js → chunk-TT23RRB7.js} +1 -1
- package/dist/cli/chunks/{chunk-XXCYQXK3.js → chunk-TWAWHOP7.js} +2 -2
- package/dist/cli/chunks/{chunk-2IGT5WNQ.js → chunk-U5K45TFH.js} +1 -1
- package/dist/cli/chunks/{chunk-SQ3PPISY.js → chunk-UDHKLT4C.js} +1 -1
- package/dist/cli/chunks/{chunk-YDNSLLBS.js → chunk-UEM7ZF5K.js} +2 -2
- package/dist/cli/chunks/{chunk-4XPPMADQ.js → chunk-UGVHCMUN.js} +6 -6
- package/dist/cli/chunks/{chunk-YL7T3VV7.js → chunk-V3QLFNA2.js} +2 -2
- package/dist/cli/chunks/{chunk-YEXPFHV6.js → chunk-VD6QRULW.js} +2 -2
- package/dist/cli/chunks/{chunk-OVPJQWHW.js → chunk-VIHTL3U2.js} +2 -2
- package/dist/cli/chunks/chunk-W7BWUTVV.js +2 -0
- package/dist/cli/chunks/{chunk-3P6NCFI2.js → chunk-WLG5AJ4N.js} +2 -2
- package/dist/cli/chunks/{chunk-V4AOVDCJ.js → chunk-XC7DYDSY.js} +8 -8
- package/dist/cli/chunks/{chunk-LTBCAFTZ.js → chunk-XJ7QNVI5.js} +3 -3
- package/dist/cli/chunks/chunk-XRT2WRMS.js +2 -0
- package/dist/cli/chunks/{chunk-UMENRGHK.js → chunk-XRYF6JV7.js} +2 -2
- package/dist/cli/chunks/{chunk-SHGKY3QB.js → chunk-XWMZ6D6N.js} +2 -2
- package/dist/cli/chunks/{chunk-72UJXEKQ.js → chunk-Y3MW3YBC.js} +2 -2
- package/dist/cli/chunks/chunk-YNXS6CGV.js +2 -0
- package/dist/cli/chunks/{chunk-LVLBIKJD.js → chunk-Z3RHREWF.js} +1 -1
- package/dist/cli/chunks/{chunk-HXE5NBJG.js → chunk-ZBAKA4YB.js} +1 -1
- package/dist/cli/chunks/chunk-ZBJ4XOOV.js +180 -0
- package/dist/cli/chunks/chunk-ZBQY5GLF.js +11 -0
- package/dist/cli/chunks/{chunk-NBWQBQO5.js → chunk-ZJ26AQA5.js} +1 -1
- package/dist/cli/chunks/{chunk-TJEIOE7F.js → chunk-ZNEMGX5O.js} +1 -1
- package/dist/cli/chunks/{chunk-AB4U6ZNI.js → chunk-ZNPKDCZR.js} +2 -2
- package/dist/cli/chunks/{chunk-WYMGK5DX.js → chunk-ZZDIMOOV.js} +2 -2
- package/dist/cli/chunks/ci-464KPQNP.js +81 -0
- package/dist/cli/chunks/{ci-output-LK3MBXLZ.js → ci-output-I7FX2RSO.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7AIXACR7.js → circuit-breaker-3FW237WW.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-UA7EO6VN.js → claude-flow-setup-6JKMBPGU.js} +2 -2
- package/dist/cli/chunks/client-7E4LM2WW.js +2 -0
- package/dist/cli/chunks/{cline-installer-YDDCKKEV.js → cline-installer-UWFHT6VY.js} +2 -2
- package/dist/cli/chunks/{code-URB7UAKW.js → code-KQSUT3FS.js} +29 -29
- package/dist/cli/chunks/{code-index-extractor-BL6HWH4Q.js → code-index-extractor-PABBNUSC.js} +2 -2
- package/dist/cli/chunks/{codex-installer-2AVEO4EA.js → codex-installer-CQ24DTP5.js} +2 -2
- package/dist/cli/chunks/{completions-RCKBSSSS.js → completions-7RWHAUAR.js} +2 -2
- package/dist/cli/chunks/complexity-analyzer-XPOAF33E.js +2 -0
- package/dist/cli/chunks/{continuedev-installer-VOTCEBFH.js → continuedev-installer-V4F2FIZP.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-NVTGLZX3.js → copilot-installer-JMICURQB.js} +2 -2
- package/dist/cli/chunks/core-handlers-IFG3757P.js +2 -0
- package/dist/cli/chunks/cost-tracker-5OFHEYFJ.js +2 -0
- package/dist/cli/chunks/{coverage-ZTPJWXWE.js → coverage-QKN57JDS.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-EK7W4PGP.js +2 -0
- package/dist/cli/chunks/{cursor-installer-CMGJQMHX.js → cursor-installer-GBJ7YXSM.js} +2 -2
- package/dist/cli/chunks/{daemon-V456IWR3.js → daemon-GKP7CMEK.js} +3 -3
- package/dist/cli/chunks/{daemon-Y2I3YVIU.js → daemon-IAVSO6HK.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-ZCBBOD3D.js → dag-attention-scheduler-S225TCI7.js} +2 -2
- package/dist/cli/chunks/{detect-2GHEA4A3.js → detect-IUYH422U.js} +2 -2
- package/dist/cli/chunks/{dist-node-44AGYJCH.js → dist-node-2YRE6A7C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-IDLIEP6X.js → domain-handler-PL2TZC6H.js} +2 -2
- package/dist/cli/chunks/domain-plugins-HCGLXKIT.js +2 -0
- package/dist/cli/chunks/{domain-transfer-KLEXGIRF.js → domain-transfer-KQJRUPXA.js} +2 -2
- package/dist/cli/chunks/dream-NFSCSLY7.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-DUW6K35A.js → embed-and-insert-pattern-ZPAG7235.js} +2 -2
- package/dist/cli/chunks/eval-WCK7KNFN.js +17 -0
- package/dist/cli/chunks/{experience-capture-middleware-CJJJN7CF.js → experience-capture-middleware-2MSQWSAR.js} +3 -3
- package/dist/cli/chunks/{fast-paths-LGLLKX6P.js → fast-paths-VYOSIBKF.js} +2 -2
- package/dist/cli/chunks/{feature-flags-33D3I4DD.js → feature-flags-UJRHFBRX.js} +2 -2
- package/dist/cli/chunks/{feature-flags-QL4NCEGW.js → feature-flags-WCFUKHNQ.js} +2 -2
- package/dist/cli/chunks/{file-discovery-GKCYJPFZ.js → file-discovery-JDGL4ZWS.js} +2 -2
- package/dist/cli/chunks/fleet-ROXVMZ2F.js +43 -0
- package/dist/cli/chunks/{gnn-wrapper-ELSGT67Z.js → gnn-wrapper-NIO4ZCO3.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZUI3DOOP.js → heartbeat-handler-PI42WD3C.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-ZATCDJDK.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-WXQABRCA.js +2 -0
- package/dist/cli/chunks/hnsw-index-TPSWLEA5.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-EZMM5JWL.js → hnsw-legacy-bridge-YLC7SPK2.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-G4CE3EOS.js → hnswlib-node-LG6OS3B7.js} +2 -2
- package/dist/cli/chunks/{hooks-LCVXXA55.js → hooks-WVALP5GX.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-6Z7RQ3HI.js → hypergraph-engine-GJEMW3EG.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-PLI2GYPK.js → hypergraph-handler-BLF6LXEV.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HNIU45P5.js +2 -0
- package/dist/cli/chunks/{init-handler-7VH3QJ5Y.js → init-handler-K25RWRYY.js} +6 -6
- package/dist/cli/chunks/init-wizard-JUIPBMHG.js +2 -0
- package/dist/cli/chunks/kernel-5BOZQ754.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-U3MW62DE.js → kilocode-installer-BXN6WZ7G.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-PPEAC44T.js → kiro-installer-PM362DLN.js} +12 -12
- package/dist/cli/chunks/knowledge-graph-EWDAENWM.js +2 -0
- package/dist/cli/chunks/learning-CPERDDRG.js +122 -0
- package/dist/cli/chunks/llm-router-GOAV5FPI.js +37 -0
- package/dist/cli/chunks/llm-router-service-3YT7JGBS.js +2 -0
- package/dist/cli/chunks/{load-VO7ABNHV.js → load-2BG6SHAK.js} +2 -2
- package/dist/cli/chunks/load-test-BP2CPLIV.js +2 -0
- package/dist/cli/chunks/{mcp-THXEINCL.js → mcp-5TTB37DC.js} +2 -2
- package/dist/cli/chunks/{memory-FZTT7ADM.js → memory-4NHBYT6S.js} +5 -5
- package/dist/cli/chunks/memory-backend-4PYQBPRM.js +2 -0
- package/dist/cli/chunks/memory-handlers-2B27NITS.js +2 -0
- package/dist/cli/chunks/multi-model-executor-KCWSGCDT.js +14 -0
- package/dist/cli/chunks/{opencode-installer-GQ7J5SBG.js → opencode-installer-ATZLLK74.js} +2 -2
- package/dist/cli/chunks/{orchestrator-66JK2OS5.js → orchestrator-RKB7XJRG.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-OYOQOV2O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-O6XHM2G5.js → pattern-usage-recorder-7VE4XDAI.js} +2 -2
- package/dist/cli/chunks/pipeline-LQZSNDD2.js +19 -0
- package/dist/cli/chunks/{platform-Q7UH7FZQ.js → platform-OD5H5U6G.js} +2 -2
- package/dist/cli/chunks/{plugin-7OFLNGOS.js → plugin-EJ6K2MGU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-OSRDK2FW.js → prime-radiant-advanced-wasm-OIHTKJMN.js} +2 -2
- package/dist/cli/chunks/protocol-executor-3ATJTXWG.js +2 -0
- package/dist/cli/chunks/{protocol-handler-WLYTX6FS.js → protocol-handler-NRBROAU7.js} +2 -2
- package/dist/cli/chunks/{prove-QVNE4V3J.js → prove-EJOGEGD3.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-LLMYZT4X.js +2 -0
- package/dist/cli/chunks/{quality-DNE2RKE5.js → quality-E55UC73D.js} +2 -2
- package/dist/cli/chunks/{quality-gate-2K35GCSI.js → quality-gate-OIQATNT3.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-RN7L6KG5.js +2 -0
- package/dist/cli/chunks/{real-embeddings-SF42ML7G.js → real-embeddings-FPFFNOSZ.js} +2 -2
- package/dist/cli/chunks/ref-validation-OPO6J7OL.js +2 -0
- package/dist/cli/chunks/{roocode-installer-NCEZPF5L.js → roocode-installer-ODY5KRWU.js} +2 -2
- package/dist/cli/chunks/router-MDHITQ2V.js +2 -0
- package/dist/cli/chunks/routing-feedback-5XLNJ3Y3.js +2 -0
- package/dist/cli/chunks/{routing-handler-4MXXZRYP.js → routing-handler-KQM6VWLC.js} +4 -4
- package/dist/cli/chunks/{ruvector-commands-WDFMMCMK.js → ruvector-commands-U2GVV6PF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JBW4O3II.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-BPPQL4XJ.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-JT7ZCJY7.js → rvf-migration-coordinator-V2GHCJKN.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-S4562CG5.js +2 -0
- package/dist/cli/chunks/rvf-store-integrity-KMIHD3LP.js +2 -0
- package/dist/cli/chunks/safe-db-FIRHSXVF.js +2 -0
- package/dist/cli/chunks/schedule-RVXFB4HK.js +2 -0
- package/dist/cli/chunks/scheduler-IKKAMAOO.js +2 -0
- package/dist/cli/chunks/{security-CJJ3WJSB.js → security-P5NM353C.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6RGCTLHD.js → shared-rvf-adapter-LVIUOO4S.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-KIA6Q6MT.js → shared-rvf-dual-writer-2CSG7C4W.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-SQ3HCUQ7.js +2 -0
- package/dist/cli/chunks/{status-handler-BADQV2KA.js → status-handler-6TU6O37R.js} +2 -2
- package/dist/cli/chunks/{structural-health-VMYEYRZG.js → structural-health-KBIJSTXJ.js} +2 -2
- package/dist/cli/chunks/{sync-PXLROLHB.js → sync-LNHI5SB7.js} +2 -2
- package/dist/cli/chunks/{sync-ULY7T5II.js → sync-UHOX6RJW.js} +2 -2
- package/dist/cli/chunks/task-handler-AVDHMLGI.js +49 -0
- package/dist/cli/chunks/task-handlers-KYK4VTRA.js +9 -0
- package/dist/cli/chunks/{test-WCLURQUT.js → test-DHAAI3DU.js} +4 -4
- package/dist/cli/chunks/test-scheduling-XDBZ3QC2.js +15 -0
- package/dist/cli/chunks/{token-bootstrap-GTI24JAL.js → token-bootstrap-GUTTLPZX.js} +2 -2
- package/dist/cli/chunks/{token-usage-DRVG6PKO.js → token-usage-Q2YG5YQN.js} +2 -2
- package/dist/cli/chunks/{transformers-IMDDAMYQ.js → transformers-F5UQTQCY.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-WBZIHVFA.js → tree-sitter-wasm-parser-DEGOHS6F.js} +2 -2
- package/dist/cli/chunks/types-JQ7EQO5Q.js +2 -0
- package/dist/cli/chunks/unified-memory-CXHLHB5I.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-I7WAE54M.js +2 -0
- package/dist/cli/chunks/unified-persistence-6CPF65WI.js +2 -0
- package/dist/cli/chunks/{upgrade-6ALSDWDD.js → upgrade-TJRVGHGD.js} +2 -2
- package/dist/cli/chunks/{validate-XF4ZG3LC.js → validate-BWPCVHBN.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-P5TAFRDA.js → validate-swarm-QVVKCQLP.js} +2 -2
- package/dist/cli/chunks/{vibium-2XDXKNKZ.js → vibium-ZFATIWHO.js} +2 -2
- package/dist/cli/chunks/visual-security-GNPHME5H.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-4JVRQPX5.js → web-tree-sitter-KPLY7ONR.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-WYJXVDO5.js → windsurf-installer-H7XM7ISA.js} +2 -2
- package/dist/cli/chunks/{witness-chain-RPZ2SE2V.js → witness-chain-RRN6NDCH.js} +2 -2
- package/dist/cli/chunks/witness-chain-VT4UHHBR.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-LXG2VBQQ.js → witness-key-manager-DFRL42GE.js} +2 -2
- package/dist/cli/chunks/workflow-2ZQO6WYI.js +51 -0
- package/dist/cli/chunks/workflow-orchestrator-DB3HIECD.js +2 -0
- package/dist/cli/chunks/{wrappers-DIJNNFU6.js → wrappers-SUS6XEJD.js} +2 -2
- package/dist/cli/commands/ci.js +54 -28
- package/dist/cli/commands/code.js +6 -0
- package/dist/cli/commands/eval.js +3 -2
- package/dist/cli/commands/fleet.js +35 -16
- package/dist/cli/commands/learning-snapshot.d.ts +38 -0
- package/dist/cli/commands/learning-snapshot.js +171 -0
- package/dist/cli/commands/learning.js +16 -64
- package/dist/cli/commands/llm-router.js +13 -12
- package/dist/cli/commands/pipeline.js +9 -0
- package/dist/cli/commands/workflow.js +9 -1
- package/dist/cli/handlers/task-handler.js +19 -9
- package/dist/cli/helpers/domain-plugins.d.ts +5 -0
- package/dist/cli/helpers/domain-plugins.js +11 -0
- package/dist/cli/index.js +17 -8
- package/dist/cli/utils/ci-config.d.ts +3 -0
- package/dist/context/sources/git-source.d.ts +2 -0
- package/dist/context/sources/git-source.js +9 -2
- package/dist/coordination/cancelled-task-settlement.d.ts +11 -0
- package/dist/coordination/cancelled-task-settlement.js +15 -0
- package/dist/coordination/consensus/providers/claude-provider.d.ts +2 -2
- package/dist/coordination/consensus/providers/claude-provider.js +18 -25
- package/dist/coordination/consensus/providers/gemini-provider.d.ts +14 -4
- package/dist/coordination/consensus/providers/gemini-provider.js +39 -36
- package/dist/coordination/consensus/providers/ollama-provider.d.ts +8 -7
- package/dist/coordination/consensus/providers/ollama-provider.js +16 -18
- package/dist/coordination/consensus/providers/openai-provider.d.ts +14 -4
- package/dist/coordination/consensus/providers/openai-provider.js +36 -34
- package/dist/coordination/consensus/providers/openrouter-provider.d.ts +5 -5
- package/dist/coordination/consensus/providers/openrouter-provider.js +64 -37
- package/dist/coordination/handlers/test-execution-handlers.js +5 -3
- package/dist/coordination/interfaces.d.ts +2 -2
- package/dist/coordination/protocol-executor.js +68 -9
- package/dist/coordination/queen-coordinator.js +10 -4
- package/dist/coordination/queen-event-handlers.js +17 -0
- package/dist/coordination/queen-task-management.js +25 -0
- package/dist/coordination/queen-types.d.ts +2 -0
- package/dist/coordination/task-executor.js +4 -8
- package/dist/coordination/workflow-composition.d.ts +19 -0
- package/dist/coordination/workflow-composition.js +114 -0
- package/dist/coordination/workflow-orchestrator.d.ts +3 -2
- package/dist/coordination/workflow-orchestrator.js +219 -85
- package/dist/coordination/workflow-types.d.ts +30 -1
- package/dist/coordination/yaml-pipeline-loader.js +9 -5
- package/dist/domains/chaos-resilience/services/chaos-engineer.js +2 -7
- package/dist/domains/code-intelligence/services/knowledge-graph.js +2 -7
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +9 -40
- package/dist/domains/constants.d.ts +1 -6
- package/dist/domains/constants.js +2 -6
- package/dist/domains/contract-testing/services/contract-validator.js +2 -7
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +2 -12
- package/dist/domains/coverage-analysis/services/gap-detector.js +2 -7
- package/dist/domains/defect-intelligence/services/defect-predictor.js +2 -12
- package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +2 -7
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -7
- package/dist/domains/quality-assessment/services/deployment-advisor.js +2 -7
- package/dist/domains/quality-assessment/services/quality-analyzer.js +2 -7
- package/dist/domains/requirements-validation/services/requirements-validator.js +2 -7
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +3 -7
- package/dist/domains/test-execution/services/flaky-detector.js +33 -3
- package/dist/domains/test-execution/services/retry-handler.js +22 -14
- package/dist/domains/test-execution/services/test-executor.js +42 -21
- package/dist/domains/test-generation/services/test-generator.js +2 -7
- package/dist/domains/visual-accessibility/services/visual-tester.js +2 -7
- package/dist/init/init-wizard-steps.js +1 -1
- package/dist/init/kiro-installer.js +9 -8
- package/dist/init/opencode-installer.js +1 -1
- package/dist/init/phases/07-hooks.js +4 -2
- package/dist/init/phases/12-verification.js +1 -1
- package/dist/init/settings-merge.d.ts +10 -3
- package/dist/init/settings-merge.js +40 -9
- package/dist/integrations/agentic-flow/model-router/types.js +6 -8
- package/dist/integrations/ruvector/brain-exporter.js +9 -15
- package/dist/integrations/ruvector/brain-rvf-exporter.js +17 -30
- package/dist/integrations/ruvector/brain-shared.d.ts +5 -1
- package/dist/integrations/ruvector/brain-shared.js +70 -4
- package/dist/integrations/ruvector/rvf-dual-writer.js +36 -15
- package/dist/integrations/ruvector/rvf-store-integrity.d.ts +14 -9
- package/dist/integrations/ruvector/rvf-store-integrity.js +39 -9
- package/dist/integrations/ruvector/shared-rvf-adapter.js +20 -23
- package/dist/kernel/memory-factory.js +14 -4
- package/dist/kernel/project-root.js +10 -8
- package/dist/kernel/unified-memory.js +1 -1
- package/dist/learning/local-judge-client.d.ts +6 -5
- package/dist/learning/local-judge-client.js +7 -6
- package/dist/learning/pattern-store.js +29 -11
- package/dist/mcp/bundle.js +488 -488
- package/dist/mcp/handlers/index.d.ts +1 -1
- package/dist/mcp/handlers/index.js +1 -1
- package/dist/mcp/handlers/pipeline-handlers.d.ts +31 -1
- package/dist/mcp/handlers/pipeline-handlers.js +63 -0
- package/dist/mcp/handlers/task-handlers.d.ts +1 -0
- package/dist/mcp/handlers/task-handlers.js +12 -4
- package/dist/mcp/protocol-server.d.ts +2 -0
- package/dist/mcp/protocol-server.js +104 -49
- package/dist/mcp/security/sampling-server.js +2 -1
- package/dist/mcp/tool-annotations.js +1 -1
- package/dist/mcp/tools/test-execution/schedule.js +7 -0
- package/dist/mcp/types.d.ts +5 -1
- package/dist/optimization/session-cache.d.ts +5 -0
- package/dist/optimization/session-cache.js +23 -0
- package/dist/routing/advisor/multi-model-executor.d.ts +4 -1
- package/dist/routing/advisor/multi-model-executor.js +8 -1
- package/dist/routing/free-tier/ladder.d.ts +2 -1
- package/dist/routing/free-tier/ladder.js +3 -2
- package/dist/routing/security/cyber-pin.d.ts +35 -11
- package/dist/routing/security/cyber-pin.js +76 -14
- package/dist/routing/value-score.js +1 -1
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/git/ref-validation.d.ts +20 -0
- package/dist/shared/git/ref-validation.js +43 -0
- package/dist/shared/llm/anthropic-params.d.ts +40 -0
- package/dist/shared/llm/anthropic-params.js +51 -0
- package/dist/shared/llm/cost-tracker.d.ts +15 -2
- package/dist/shared/llm/cost-tracker.js +62 -10
- package/dist/shared/llm/index.d.ts +2 -2
- package/dist/shared/llm/index.js +2 -2
- package/dist/shared/llm/interfaces.d.ts +1 -1
- package/dist/shared/llm/metrics/cost-metrics.js +5 -4
- package/dist/shared/llm/model-mapping.js +131 -0
- package/dist/shared/llm/model-registry.d.ts +37 -11
- package/dist/shared/llm/model-registry.js +393 -18
- package/dist/shared/llm/openai-params.d.ts +35 -0
- package/dist/shared/llm/openai-params.js +54 -0
- package/dist/shared/llm/provider-manager.js +4 -3
- package/dist/shared/llm/providers/azure-openai.d.ts +11 -0
- package/dist/shared/llm/providers/azure-openai.js +26 -15
- package/dist/shared/llm/providers/bedrock.js +11 -19
- package/dist/shared/llm/providers/claude.js +6 -29
- package/dist/shared/llm/providers/codex.js +4 -3
- package/dist/shared/llm/providers/gemini.d.ts +3 -2
- package/dist/shared/llm/providers/gemini.js +19 -10
- package/dist/shared/llm/providers/ollama.d.ts +2 -0
- package/dist/shared/llm/providers/ollama.js +30 -20
- package/dist/shared/llm/providers/openai.js +10 -17
- package/dist/shared/llm/providers/openrouter.d.ts +1 -1
- package/dist/shared/llm/providers/openrouter.js +57 -21
- package/dist/shared/llm/router/agent-router-config.js +33 -32
- package/dist/shared/llm/router/hybrid-router.js +21 -9
- package/dist/shared/llm/router/routing-rules.js +9 -8
- package/dist/shared/llm/router/types.js +81 -13
- package/dist/shared/llm/translation/message-formatter.js +4 -23
- package/dist/shared/vitest-json-report.d.ts +7 -7
- package/dist/shared/vitest-json-report.js +23 -14
- package/dist/test-scheduling/executors/vitest-executor.d.ts +7 -2
- package/dist/test-scheduling/executors/vitest-executor.js +157 -47
- package/dist/test-scheduling/git-aware/test-selector.js +3 -0
- package/dist/test-scheduling/phase-scheduler.d.ts +1 -0
- package/dist/test-scheduling/phase-scheduler.js +23 -1
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-AKQYU6UH.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-MICRPL3N.js +0 -2
- package/dist/cli/chunks/base-DZK36ITB.js +0 -2
- package/dist/cli/chunks/brain-handler-H5OVZ22L.js +0 -90
- package/dist/cli/chunks/browser-workflow-ADK54DOE.js +0 -2
- package/dist/cli/chunks/chunk-42VSQ2MX.js +0 -4
- package/dist/cli/chunks/chunk-44WISFTU.js +0 -2
- package/dist/cli/chunks/chunk-4OUPCTBS.js +0 -16
- package/dist/cli/chunks/chunk-4TXAP3YH.js +0 -2
- package/dist/cli/chunks/chunk-4W7QVUNO.js +0 -2
- package/dist/cli/chunks/chunk-527HQAY7.js +0 -14
- package/dist/cli/chunks/chunk-5DFHE4H5.js +0 -180
- package/dist/cli/chunks/chunk-5P3G6ZW4.js +0 -2
- package/dist/cli/chunks/chunk-6F2RM6X2.js +0 -2
- package/dist/cli/chunks/chunk-7Y2CEXRS.js +0 -65
- package/dist/cli/chunks/chunk-AWNYEAGB.js +0 -2
- package/dist/cli/chunks/chunk-CBOPBYPU.js +0 -2
- package/dist/cli/chunks/chunk-FD2JFEQC.js +0 -2
- package/dist/cli/chunks/chunk-I4NDQGKP.js +0 -2
- package/dist/cli/chunks/chunk-L2GKMBDP.js +0 -2
- package/dist/cli/chunks/chunk-QLWNXBRU.js +0 -2
- package/dist/cli/chunks/chunk-R2AFVFRF.js +0 -2
- package/dist/cli/chunks/chunk-ROX7NLS4.js +0 -14
- package/dist/cli/chunks/chunk-T62DH4GG.js +0 -11
- package/dist/cli/chunks/chunk-UMNYF5EZ.js +0 -2
- package/dist/cli/chunks/chunk-UTVRQEZM.js +0 -54
- package/dist/cli/chunks/chunk-Y5SQBI2F.js +0 -2
- package/dist/cli/chunks/ci-YVKDQWIX.js +0 -81
- package/dist/cli/chunks/client-M72GXFVQ.js +0 -2
- package/dist/cli/chunks/complexity-analyzer-LEDG62YK.js +0 -2
- package/dist/cli/chunks/core-handlers-C32RAMVI.js +0 -2
- package/dist/cli/chunks/cost-tracker-GJIFB2BM.js +0 -2
- package/dist/cli/chunks/cross-domain-router-UGFUCPKC.js +0 -2
- package/dist/cli/chunks/dream-UFBBXY5W.js +0 -2
- package/dist/cli/chunks/eval-PR6YWDFM.js +0 -17
- package/dist/cli/chunks/fleet-QNT6X2YI.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-VQWHSGTY.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BS3NXWGU.js +0 -2
- package/dist/cli/chunks/hnsw-index-JP26B4HW.js +0 -2
- package/dist/cli/chunks/impact-analyzer-WRE4CWPJ.js +0 -2
- package/dist/cli/chunks/init-wizard-OFOEYB75.js +0 -2
- package/dist/cli/chunks/kernel-MXNFWNUD.js +0 -2
- package/dist/cli/chunks/knowledge-graph-7JE2TVKJ.js +0 -2
- package/dist/cli/chunks/learning-7B5NITDV.js +0 -122
- package/dist/cli/chunks/llm-router-BNEPT5OB.js +0 -37
- package/dist/cli/chunks/llm-router-service-GTDVDKSU.js +0 -2
- package/dist/cli/chunks/load-test-JZ4CLSBF.js +0 -2
- package/dist/cli/chunks/memory-backend-Q54CC5A5.js +0 -2
- package/dist/cli/chunks/memory-handlers-IIBJXKHZ.js +0 -2
- package/dist/cli/chunks/multi-model-executor-HEDVOZ6X.js +0 -14
- package/dist/cli/chunks/pattern-null-store-W33O7FYO.js +0 -2
- package/dist/cli/chunks/pipeline-UOG6UO6D.js +0 -19
- package/dist/cli/chunks/protocol-executor-VGN4M7XY.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-7VB5LJGS.js +0 -2
- package/dist/cli/chunks/queen-coordinator-HIDMJMMG.js +0 -2
- package/dist/cli/chunks/router-CTIJS4D7.js +0 -2
- package/dist/cli/chunks/routing-feedback-LFYYZS5J.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-MNPMIWVM.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-DXOKSSNW.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-PZKUKA7R.js +0 -2
- package/dist/cli/chunks/rvf-store-integrity-Q3FGYKFT.js +0 -2
- package/dist/cli/chunks/safe-db-73BLFV2C.js +0 -2
- package/dist/cli/chunks/schedule-YVTGTTI4.js +0 -2
- package/dist/cli/chunks/scheduler-5DSAFIRQ.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-LRG4IPCU.js +0 -2
- package/dist/cli/chunks/task-handler-L7E2I267.js +0 -49
- package/dist/cli/chunks/task-handlers-6DPKE4AK.js +0 -9
- package/dist/cli/chunks/test-scheduling-4CNJA6TW.js +0 -15
- package/dist/cli/chunks/types-TXMY5M2K.js +0 -2
- package/dist/cli/chunks/unified-memory-VBQ572X4.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-J3L74ZRY.js +0 -2
- package/dist/cli/chunks/unified-persistence-EM2VYRTQ.js +0 -2
- package/dist/cli/chunks/visual-security-GX4S7K6O.js +0 -2
- package/dist/cli/chunks/witness-chain-QGKMHCNW.js +0 -2
- package/dist/cli/chunks/workflow-2OYNO7UU.js +0 -51
- package/dist/cli/chunks/workflow-orchestrator-KWHIJMFV.js +0 -2
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.4");process.exit(0)}
|
|
2
|
+
import"./chunk-TWAWHOP7.js";import{b as $}from"./chunk-3X3DJZJJ.js";import{d as C}from"./chunk-GPLQ6DOK.js";import{b as k,c as W,d as v}from"./chunk-OSLYSG3B.js";import{c as b}from"./chunk-DHJPWQBR.js";import"./chunk-STM3UDNO.js";import"./chunk-G6T45OIC.js";import"./chunk-TT23RRB7.js";import{Command as D}from"commander";import o from"chalk";function O(w,i){let h=w.indexOf("=");return h>0&&(i[w.substring(0,h)]=w.substring(h+1)),i}function V(w,i,h){let m=new D("workflow").description("Manage QE workflows and pipelines (ADR-041)");return m.command("run <file>").description("Execute a QE pipeline from YAML file").option("-w, --watch","Watch execution progress").option("-v, --verbose","Show detailed output").option("--params <json>","Additional parameters as JSON","{}").action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
|
|
3
|
+
Running workflow from: ${n}
|
|
4
|
+
`));let l=k(u);if(!l.success||!l.workflow){console.log(o.red("Failed to parse pipeline:"));for(let g of l.errors)console.log(o.red(` ${g}`));await i(1)}let f={...b(t.params,"params")};if(l.pipeline){for(let g of l.pipeline.stages)if(g.params)for(let[y,p]of Object.entries(g.params))f[y]=p}if(!w.workflowOrchestrator.getWorkflow(l.workflow.id)){let g=w.workflowOrchestrator.registerWorkflow(l.workflow);g.success||(console.log(o.red(`Failed to register workflow: ${g.error.message}`)),await i(1))}let c=await w.workflowOrchestrator.executeWorkflow(l.workflow.id,f);if(!c.success){console.log(o.red(`Failed to start workflow: ${c.error.message}`)),await i(1);return}let a=c.value;if(console.log(o.cyan(` Execution ID: ${a}`)),console.log(o.gray(` Workflow: ${l.workflow.name}`)),console.log(o.gray(` Stages: ${l.workflow.steps.length}`)),console.log(""),t.watch){console.log(o.blue(`Workflow Progress:
|
|
5
|
+
`));let g,y=Date.now();for(;;){let d=w.workflowOrchestrator.getWorkflowStatus(a);if(!d)break;if(!g||g.progress!==d.progress||g.status!==d.status||JSON.stringify(g.currentSteps)!==JSON.stringify(d.currentSteps)){process.stdout.write("\r\x1B[K");let S="\u2588".repeat(Math.floor(d.progress/5))+"\u2591".repeat(20-Math.floor(d.progress/5)),R=d.status==="completed"?o.green:d.status==="failed"?o.red:d.status==="running"?o.yellow:o.gray;console.log(` [${S}] ${d.progress}% - ${R(d.status)}`),d.currentSteps.length>0&&t.verbose&&console.log(o.gray(` Running: ${d.currentSteps.join(", ")}`)),g=d}if(d.status==="completed"||d.status==="failed"||d.status==="cancelled")break;await new Promise(S=>setTimeout(S,500))}let p=w.workflowOrchestrator.getWorkflowStatus(a);if(p){console.log("");let d=p.duration||Date.now()-y;p.status==="completed"?(console.log(o.green("Workflow completed successfully")),console.log(o.gray(` Duration: ${$(d)}`)),console.log(o.gray(` Completed: ${p.completedSteps.length} stages`)),p.skippedSteps.length>0&&console.log(o.yellow(` Skipped: ${p.skippedSteps.length} stages`))):p.status==="failed"?(console.log(o.red("Workflow failed")),console.log(o.red(` Error: ${p.error}`)),console.log(o.gray(` Failed stages: ${p.failedSteps.join(", ")}`))):console.log(o.yellow(`Workflow ${p.status}`))}console.log(""),await i(p?.status==="completed"?0:1);return}else console.log(o.green("Workflow execution started")),console.log(o.gray(` Use 'aqe workflow status ${a}' to check progress`));console.log(""),await i(0)}catch(l){console.error(o.red(`
|
|
6
|
+
Failed to run workflow:`),l),await i(1)}}),m.command("schedule <file>").description("Schedule a QE pipeline for recurring execution").option("-c, --cron <expression>","Override cron schedule from file").option("-e, --enable","Enable immediately",!0).action(async(n,t)=>{if(!await h())return;let u=(await import("path")).resolve(n);try{console.log(o.blue(`
|
|
7
|
+
Scheduling workflow from: ${n}
|
|
8
|
+
`));let l=k(u);if(!l.success||!l.pipeline||!l.workflow){console.log(o.red("Failed to parse pipeline:"));for(let a of l.errors)console.log(o.red(` ${a}`));await i(1)}let s=t.cron||l.pipeline.schedule;if(s||(console.log(o.red("No schedule specified")),console.log(o.gray(' Add "schedule" field to YAML or use --cron option')),await i(1)),!w.workflowOrchestrator.getWorkflow(l.workflow.id)){let a=w.workflowOrchestrator.registerWorkflow(l.workflow);a.success||(console.log(o.red(`Failed to register workflow: ${a.error.message}`)),await i(1))}let r=C({workflowId:l.workflow.id,pipelinePath:u,schedule:s,scheduleDescription:v(s),enabled:t.enable!==!1});await w.persistentScheduler.saveSchedule(r);let c={id:r.id,workflowId:r.workflowId,pipelinePath:r.pipelinePath,schedule:r.schedule,scheduleDescription:r.scheduleDescription,nextRun:new Date(r.nextRun),enabled:r.enabled,createdAt:new Date(r.createdAt)};w.scheduledWorkflows.set(c.id,c),console.log(o.green("Workflow scheduled successfully (persisted to disk)")),console.log(o.cyan(` Schedule ID: ${r.id}`)),console.log(o.gray(` Workflow: ${l.workflow.name}`)),console.log(o.gray(` Schedule: ${s}`)),console.log(o.gray(` Description: ${r.scheduleDescription}`)),console.log(o.gray(` Next run: ${r.nextRun}`)),console.log(o.gray(` Status: ${r.enabled?o.green("enabled"):o.yellow("disabled")}`)),console.log(o.yellow(`
|
|
9
|
+
Note: Scheduled workflows require daemon mode to run automatically`)),console.log(o.gray(" Start daemon with: npx aqe daemon start")),console.log(o.gray(" Schedules are persisted to: ~/.aqe/schedules.json")),console.log(""),await i(0)}catch(l){console.error(o.red(`
|
|
10
|
+
Failed to schedule workflow:`),l),await i(1)}}),m.command("list").description("List workflows").option("-s, --scheduled","Show only scheduled workflows").option("-a, --active","Show only active executions").option("--all","Show all workflows (registered + scheduled + active)").action(async n=>{if(await h())try{if(console.log(o.blue(`
|
|
11
|
+
Workflows
|
|
12
|
+
`)),n.scheduled||n.all){console.log(o.cyan("Scheduled Workflows:"));let t=await w.persistentScheduler.getSchedules();if(t.length===0)console.log(o.gray(` No scheduled workflows
|
|
13
|
+
`));else for(let e of t){let u=e.enabled?o.green("*"):o.gray("o");console.log(` ${u} ${o.white(e.workflowId)}`),console.log(o.gray(` ID: ${e.id}`)),console.log(o.gray(` Schedule: ${e.schedule} (${e.scheduleDescription})`)),console.log(o.gray(` File: ${e.pipelinePath}`)),console.log(o.gray(` Next run: ${e.nextRun}`)),e.lastRun&&console.log(o.gray(` Last run: ${e.lastRun}`)),console.log(o.gray(` Status: ${e.enabled?o.green("enabled"):o.yellow("disabled")}`)),console.log("")}}if(n.active||n.all){console.log(o.cyan("Active Executions:"));let t=w.workflowOrchestrator.getActiveExecutions();if(t.length===0)console.log(o.gray(` No active executions
|
|
14
|
+
`));else for(let e of t){let u=e.status==="running"?o.yellow:o.gray;console.log(` ${u("*")} ${o.white(e.workflowName)}`),console.log(o.gray(` Execution: ${e.executionId}`)),console.log(o.gray(` Status: ${e.status}`)),console.log(o.gray(` Progress: ${e.progress}%`)),e.currentSteps.length>0&&console.log(o.gray(` Current: ${e.currentSteps.join(", ")}`)),console.log("")}}if(!n.scheduled&&!n.active||n.all){console.log(o.cyan("Registered Workflows:"));let t=w.workflowOrchestrator.listWorkflows();if(t.length===0)console.log(o.gray(` No registered workflows
|
|
15
|
+
`));else for(let e of t)console.log(` ${o.white(e.name)} (${o.cyan(e.id)})`),console.log(o.gray(` Version: ${e.version}`)),console.log(o.gray(` Steps: ${e.stepCount}`)),e.description&&console.log(o.gray(` ${e.description}`)),e.tags&&e.tags.length>0&&console.log(o.gray(` Tags: ${e.tags.join(", ")}`)),e.triggers&&e.triggers.length>0&&console.log(o.gray(` Triggers: ${e.triggers.join(", ")}`)),console.log("")}await i(0)}catch(t){console.error(o.red(`
|
|
16
|
+
Failed to list workflows:`),t),await i(1)}}),m.command("validate <file>").description("Validate a pipeline YAML file").option("-v, --verbose","Show detailed validation results").action(async(n,t)=>{let e=await import("fs"),l=(await import("path")).resolve(n);try{console.log(o.blue(`
|
|
17
|
+
Validating pipeline: ${n}
|
|
18
|
+
`)),e.existsSync(l)||(console.log(o.red(`File not found: ${l}`)),await i(1));let s=k(l);if(!s.success){console.log(o.red("Parse errors:"));for(let r of s.errors)console.log(o.red(` * ${r}`));await i(1)}let f=W(s.pipeline);if(f.valid)console.log(o.green(`Pipeline is valid
|
|
19
|
+
`));else{console.log(o.red(`Pipeline has errors:
|
|
20
|
+
`));for(let r of f.errors)console.log(o.red(` x [${r.path}] ${r.message}`));console.log("")}if(f.warnings.length>0){console.log(o.yellow("Warnings:"));for(let r of f.warnings)console.log(o.yellow(` * [${r.path}] ${r.message}`));console.log("")}if(t.verbose&&s.pipeline){let r=s.pipeline;console.log(o.cyan(`Pipeline Details:
|
|
21
|
+
`)),console.log(o.gray(` Name: ${r.name}`)),console.log(o.gray(` Version: ${r.version||"1.0.0"}`)),r.description&&console.log(o.gray(` Description: ${r.description}`)),r.schedule&&console.log(o.gray(` Schedule: ${r.schedule} (${v(r.schedule)})`)),r.tags&&r.tags.length>0&&console.log(o.gray(` Tags: ${r.tags.join(", ")}`)),console.log(o.cyan(`
|
|
22
|
+
Stages:`));for(let c=0;c<r.stages.length;c++){let a=r.stages[c];console.log(` ${c+1}. ${o.white(a.name)}`),console.log(o.gray(` Command: ${a.command}`)),a.params&&console.log(o.gray(` Params: ${JSON.stringify(a.params)}`)),a.depends_on&&a.depends_on.length>0&&console.log(o.gray(` Depends on: ${a.depends_on.join(", ")}`)),a.timeout&&console.log(o.gray(` Timeout: ${a.timeout}s`))}if(r.triggers&&r.triggers.length>0){console.log(o.cyan(`
|
|
23
|
+
Triggers:`));for(let c of r.triggers)console.log(o.gray(` * ${c.event}`)),c.branches&&console.log(o.gray(` Branches: ${c.branches.join(", ")}`))}}if(t.verbose&&s.workflow){console.log(o.cyan(`
|
|
24
|
+
Converted Workflow ID: `)+o.white(s.workflow.id)),console.log(o.gray(` Steps: ${s.workflow.steps.length}`));for(let r of s.workflow.steps)console.log(o.gray(` * ${r.id}: ${r.domain}.${r.action}`))}console.log(""),await i(f.valid?0:1)}catch(s){console.error(o.red(`
|
|
25
|
+
Validation failed:`),s),await i(1)}}),m.command("status <executionId>").description("Get workflow execution status").option("-v, --verbose","Show detailed step results").action(async(n,t)=>{if(await h())try{let e=w.workflowOrchestrator.getWorkflowStatus(n);if(!e){console.log(o.red(`
|
|
26
|
+
Execution not found: ${n}
|
|
27
|
+
`)),await i(1);return}console.log(o.blue(`
|
|
28
|
+
Workflow Execution Status
|
|
29
|
+
`));let u=e.status==="completed"?o.green:e.status==="failed"?o.red:e.status==="running"?o.yellow:o.gray;console.log(` Execution ID: ${o.cyan(e.executionId)}`),console.log(` Workflow: ${o.white(e.workflowName)} (${e.workflowId})`),console.log(` Status: ${u(e.status)}`),console.log(` Progress: ${e.progress}%`),console.log(` Started: ${e.startedAt.toISOString()}`),e.completedAt&&console.log(` Completed: ${e.completedAt.toISOString()}`),e.duration&&console.log(` Duration: ${$(e.duration)}`),console.log(o.cyan(`
|
|
30
|
+
Step Summary:`)),console.log(o.gray(` Completed: ${e.completedSteps.length}`)),console.log(o.gray(` Skipped: ${e.skippedSteps.length}`)),console.log(o.gray(` Failed: ${e.failedSteps.length}`)),e.currentSteps.length>0&&console.log(o.yellow(` Running: ${e.currentSteps.join(", ")}`)),e.error&&console.log(o.red(`
|
|
31
|
+
Error: ${e.error}`));for(let l of e.parallelCompositionReceipts??[]){console.log(` Composition ${l.groupId}: ${l.disposition}`);for(let s of l.conflicts)console.log(` ${s.kind}: ${s.stepA}.${s.pathA} / ${s.stepB}.${s.pathB}`)}if(t.verbose&&e.stepResults.size>0){console.log(o.cyan(`
|
|
32
|
+
Step Results:`));for(let[l,s]of e.stepResults){let f=s.status==="completed"?o.green:s.status==="failed"?o.red:s.status==="skipped"?o.yellow:o.gray;console.log(` ${f("*")} ${o.white(l)}: ${f(s.status)}`),s.duration&&console.log(o.gray(` Duration: ${$(s.duration)}`)),s.error&&console.log(o.red(` Error: ${s.error}`)),s.retryCount&&s.retryCount>0&&console.log(o.yellow(` Retries: ${s.retryCount}`))}}console.log(""),await i(0)}catch(e){console.error(o.red(`
|
|
33
|
+
Failed to get workflow status:`),e),await i(1)}}),m.command("cancel <executionId>").description("Cancel a running workflow").action(async n=>{if(await h())try{let t=await w.workflowOrchestrator.cancelWorkflow(n);t.success?console.log(o.green(`
|
|
34
|
+
Workflow cancelled: ${n}
|
|
35
|
+
`)):console.log(o.red(`
|
|
36
|
+
Failed to cancel workflow: ${t.error.message}
|
|
37
|
+
`)),await i(t.success?0:1)}catch(t){console.error(o.red(`
|
|
38
|
+
Failed to cancel workflow:`),t),await i(1)}}),m.command("browser-list").description("List available browser workflow templates").action(async()=>{try{let{BrowserWorkflowTool:n}=await import("./browser-workflow-2FZTKDUL.js"),e=await new n().invoke({});if(e.success&&e.data){console.log(o.blue(`
|
|
39
|
+
Browser Workflow Templates:
|
|
40
|
+
`));for(let u of e.data.availableTemplates)console.log(` ${o.cyan(u)}`);console.log("")}else console.log(o.red(`Failed: ${e.error||"Unknown error"}`));await i(0)}catch(n){console.error(o.red(`
|
|
41
|
+
Failed:`),n),await i(1)}}),m.command("browser-load [template]").description("Load and validate a browser workflow template or inline YAML").option("--yaml <yaml>","Inline YAML workflow definition").option("-v, --var <key=value>","Variable override (repeatable)",O,{}).option("-F, --format <format>","Output format (text|json)","text").option("-o, --output <path>","Write output to file").action(async(n,t)=>{try{let{BrowserWorkflowTool:e}=await import("./browser-workflow-2FZTKDUL.js"),{writeOutput:u,toJSON:l}=await import("./ci-output-I7FX2RSO.js"),s=new e,f={variables:t.var||{}};if(t.yaml)f.workflowYaml=t.yaml;else if(n)if(n.endsWith(".yaml")||n.endsWith(".yml")){let c=await import("fs"),g=(await import("path")).resolve(n);c.existsSync(g)||(console.log(o.red(`
|
|
42
|
+
File not found: ${g}
|
|
43
|
+
`)),await i(1)),f.workflowYaml=c.readFileSync(g,"utf-8")}else f.templateName=n;else console.log(o.red(`
|
|
44
|
+
Provide a template name or --yaml. Use "workflow browser-list" to see templates.
|
|
45
|
+
`)),await i(1);console.log(o.blue(`
|
|
46
|
+
Loading browser workflow${n?": "+n:""}...
|
|
47
|
+
`));let r=await s.invoke(f);if(r.success&&r.data){let c=r.data;if(t.format==="json")u(l(c),t.output);else{if(console.log(o.green(` Workflow: ${c.workflowName}`)),c.description&&console.log(o.gray(` ${c.description}`)),console.log(` Source: ${o.cyan(c.source)}`),console.log(` Steps: ${o.white(c.steps.length)}`),c.steps.length>0){console.log(o.cyan(`
|
|
48
|
+
Steps:`));for(let a of c.steps){let g=a.optional?o.gray(" (optional)"):"",y=a.assertionCount>0?o.gray(` [${a.assertionCount} assertions]`):"";console.log(` ${o.white(a.name)} \u2014 ${a.action}${g}${y}`)}}if(c.variables.defined.length>0){console.log(o.cyan(`
|
|
49
|
+
Variables:`));for(let a of c.variables.defined){let g=a.required?o.red("*"):"",y=a.hasDefault?o.gray(" (has default)"):"";console.log(` ${g}${o.white(a.name)}: ${a.type}${y}`)}}if(!c.validation.valid){console.log(o.red(`
|
|
50
|
+
Validation errors:`));for(let a of c.validation.errors)console.log(o.red(` - ${a}`))}console.log("")}await i(c.validation.valid?0:1)}else console.log(o.red(`Failed: ${r.error||"Unknown error"}`)),await i(1)}catch(e){console.error(o.red(`
|
|
51
|
+
Failed:`),e),await i(1)}}),m}export{V as createWorkflowCommand};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.4");process.exit(0)}
|
|
2
|
+
import{a,b,c,d}from"./chunk-CDKG6EI7.js";import"./chunk-AUXFKCQL.js";import"./chunk-55RWDRJD.js";import"./chunk-R4VL6E65.js";import"./chunk-RJCYCLZV.js";import"./chunk-NA7B2QYB.js";import"./chunk-Y3MW3YBC.js";import"./chunk-PEPFCPES.js";import"./chunk-DHJPWQBR.js";import"./chunk-STM3UDNO.js";import"./chunk-G6T45OIC.js";import"./chunk-SRKETSFF.js";import"./chunk-BGE6FOLM.js";import"./chunk-5YPYDPBJ.js";import"./chunk-HDSAM2RE.js";import"./chunk-KCZR45PA.js";import"./chunk-BFP7KO7P.js";import"./chunk-ODKLFVYC.js";import"./chunk-VD6QRULW.js";import"./chunk-KHFNNVJA.js";import"./chunk-CNG6GQEZ.js";import"./chunk-TT23RRB7.js";export{b as DEFAULT_WORKFLOW_CONFIG,a as WorkflowEvents,c as WorkflowOrchestrator,d as createWorkflowOrchestrator};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.
|
|
2
|
-
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-
|
|
1
|
+
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.14.4");process.exit(0)}
|
|
2
|
+
import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v as L,w as M,x as N}from"./chunk-3QHGWY7T.js";import{a as v,b as w,c as x,d as y,e as z,f as A,g as B,h as C,i as D,j as E,k as F,l as G,m as H,n as I,o as J,p as K}from"./chunk-M2JBBZQB.js";import"./chunk-55RWDRJD.js";import"./chunk-R4VL6E65.js";import"./chunk-RJCYCLZV.js";import"./chunk-NA7B2QYB.js";import"./chunk-Y3MW3YBC.js";import"./chunk-PEPFCPES.js";import"./chunk-DHJPWQBR.js";import"./chunk-G6T45OIC.js";import"./chunk-BGE6FOLM.js";import"./chunk-5YPYDPBJ.js";import"./chunk-HDSAM2RE.js";import"./chunk-KCZR45PA.js";import"./chunk-BFP7KO7P.js";import"./chunk-ODKLFVYC.js";import"./chunk-VD6QRULW.js";import"./chunk-KHFNNVJA.js";import"./chunk-CNG6GQEZ.js";import"./chunk-TT23RRB7.js";export{z as GNNLayerFactory,i as QEFlashAttention,x as QEGNNEmbeddingIndex,y as QEGNNIndexFactory,a as QESONA,e as QE_FLASH_ATTENTION_CONFIG,g as QE_PERFORMANCE_TARGETS,f as QE_SONA_CONFIG,A as TensorCompressionFactory,u as batchComputeAttention,K as batchDifferentiableSearch,M as checkRuvectorPackagesAvailable,c as createDomainQESONA,j as createQEFlashAttention,b as createQESONA,D as getDifferentiableSearch,F as getGetCompressionLevel,E as getHierarchicalForward,G as getInit,h as getOptimalBlockConfig,k as getQEFlashAttentionConfig,n as getRuvectorDotProductAttention,m as getRuvectorFlashAttention,p as getRuvectorHyperbolicAttention,B as getRuvectorLayer,q as getRuvectorLinearAttention,r as getRuvectorMoEAttention,o as getRuvectorMultiHeadAttention,L as getRuvectorPackageVersions,C as getTensorCompress,l as getWorkloadTypes,N as initAllRuvectorPackages,w as initGNN,d as isAttentionAvailable,v as isGNNAvailable,s as toFloat32Array,H as toFloat32ArrayGNN,J as toIEmbedding,t as toNumberArrayAttn,I as toNumberArrayGNN};
|
package/dist/cli/commands/ci.js
CHANGED
|
@@ -12,10 +12,11 @@ import * as path from 'path';
|
|
|
12
12
|
import { findCIConfigFile, parseCIConfigFile, getDefaultCIConfig, } from '../utils/ci-config.js';
|
|
13
13
|
import { writeOutput, toJSON } from '../utils/ci-output.js';
|
|
14
14
|
import { buildCoverageData } from '../utils/coverage-data.js';
|
|
15
|
+
import { evaluateQualityEvidence, loadQualityEvidence, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
15
16
|
// ============================================================================
|
|
16
17
|
// Phase Execution
|
|
17
18
|
// ============================================================================
|
|
18
|
-
async function executePhase(phase, context, outputDir,
|
|
19
|
+
async function executePhase(phase, context, outputDir, phaseIndex) {
|
|
19
20
|
const startTime = Date.now();
|
|
20
21
|
const artifacts = [];
|
|
21
22
|
if (!phase.enabled) {
|
|
@@ -130,25 +131,25 @@ async function executePhase(phase, context, outputDir, outputFormat) {
|
|
|
130
131
|
break;
|
|
131
132
|
}
|
|
132
133
|
case 'quality-gate': {
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
134
|
+
// Use the same evidence contract as `aqe quality --gate` and registered
|
|
135
|
+
// MCP quality_assess. The domain API has no evaluate() method.
|
|
136
|
+
try {
|
|
137
|
+
const metrics = await loadQualityEvidence(context.kernel.memory);
|
|
138
|
+
const assessment = evaluateQualityEvidence(metrics);
|
|
139
|
+
details = { ...assessment, metrics, evidenceStatus: 'measured' };
|
|
140
|
+
status = assessment.passed ? 'passed' : 'failed';
|
|
141
|
+
summary = `Quality gate: ${assessment.passed ? 'PASSED' : 'FAILED'} (${assessment.checks.filter(check => check.passed).length}/${assessment.checks.length} measured checks passed)`;
|
|
136
142
|
}
|
|
137
|
-
|
|
138
|
-
if (result.success && result.value) {
|
|
139
|
-
const assessment = result.value;
|
|
140
|
-
const passed = assessment.passed ?? assessment.meetsThreshold ?? true;
|
|
141
|
-
details = { passed, score: assessment.score || assessment.grade, checks: assessment.checks };
|
|
142
|
-
status = passed ? 'passed' : 'failed';
|
|
143
|
-
summary = `Quality gate: ${passed ? 'PASSED' : 'FAILED'} (score: ${assessment.score || assessment.grade || 'N/A'})`;
|
|
144
|
-
const artifactPath = path.join(outputDir, 'quality-gate.json');
|
|
145
|
-
fs.writeFileSync(artifactPath, toJSON(assessment), 'utf-8');
|
|
146
|
-
artifacts.push(artifactPath);
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
143
|
+
catch (error) {
|
|
149
144
|
status = 'failed';
|
|
150
|
-
summary =
|
|
145
|
+
summary = `Quality gate: ${error instanceof Error ? error.message : String(error)}`;
|
|
146
|
+
details = { passed: false, evidenceStatus: 'unavailable', error: summary, checks: [] };
|
|
151
147
|
}
|
|
148
|
+
// Each gate owns its evidence. A later passing gate must not overwrite
|
|
149
|
+
// an earlier failure when a pipeline contains multiple gate phases.
|
|
150
|
+
const artifactPath = path.join(outputDir, `quality-gate-${phaseIndex + 1}.json`);
|
|
151
|
+
fs.writeFileSync(artifactPath, toJSON(details), 'utf-8');
|
|
152
|
+
artifacts.push(artifactPath);
|
|
152
153
|
break;
|
|
153
154
|
}
|
|
154
155
|
case 'code-intelligence': {
|
|
@@ -222,7 +223,7 @@ function generateCombinedReport(result) {
|
|
|
222
223
|
let md = `# AQE CI/CD Report\n\n`;
|
|
223
224
|
md += `**Status:** ${result.overallStatus === 'passed' ? 'PASSED' : result.overallStatus === 'warning' ? 'WARNING' : 'FAILED'}\n`;
|
|
224
225
|
md += `**Duration:** ${(result.duration / 1000).toFixed(1)}s\n`;
|
|
225
|
-
md += `**Quality Gate:** ${result
|
|
226
|
+
md += `**Quality Gate:** ${describeQualityGate(result)}\n\n`;
|
|
226
227
|
md += `## Phases\n\n`;
|
|
227
228
|
md += `| Phase | Type | Status | Duration | Summary |\n`;
|
|
228
229
|
md += `|-------|------|--------|----------|---------|\n`;
|
|
@@ -244,6 +245,11 @@ function generateCombinedReport(result) {
|
|
|
244
245
|
}
|
|
245
246
|
return md;
|
|
246
247
|
}
|
|
248
|
+
function describeQualityGate(result) {
|
|
249
|
+
const status = result.qualityGateStatus === 'not-run' ? 'Not run' :
|
|
250
|
+
result.qualityGatePassed ? 'Passed' : 'Failed';
|
|
251
|
+
return `${status} (${result.qualityGateEnforced ? 'enforced' : 'advisory'})`;
|
|
252
|
+
}
|
|
247
253
|
// ============================================================================
|
|
248
254
|
// Command
|
|
249
255
|
// ============================================================================
|
|
@@ -318,15 +324,21 @@ export function createCICommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
318
324
|
// Create output directory
|
|
319
325
|
const outputDir = path.resolve(config.output.directory);
|
|
320
326
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
327
|
+
const gateReportPath = path.join(outputDir, 'quality-gate.json');
|
|
328
|
+
// Invalidate an earlier approval before executing any phase. This also
|
|
329
|
+
// covers early stops, disabled gates, and --phase selections without a gate.
|
|
330
|
+
fs.writeFileSync(gateReportPath, toJSON({
|
|
331
|
+
passed: false, status: 'not-run', evidenceStatus: 'not-run',
|
|
332
|
+
enforced: config.qualityGate.enforced, phases: [],
|
|
333
|
+
}), 'utf-8');
|
|
321
334
|
// Execute phases
|
|
322
335
|
const phaseResults = [];
|
|
323
|
-
let pipelineFailed = false;
|
|
324
336
|
for (const phase of config.phases) {
|
|
325
337
|
if (format === 'text') {
|
|
326
338
|
const spinner = ` [${phaseResults.length + 1}/${config.phases.length}] ${phase.name}...`;
|
|
327
339
|
process.stdout.write(chalk.cyan(spinner));
|
|
328
340
|
}
|
|
329
|
-
const result = await executePhase(phase, context, outputDir,
|
|
341
|
+
const result = await executePhase(phase, context, outputDir, phaseResults.length);
|
|
330
342
|
phaseResults.push(result);
|
|
331
343
|
if (format === 'text') {
|
|
332
344
|
const statusColor = result.status === 'passed' ? chalk.green :
|
|
@@ -339,8 +351,7 @@ export function createCICommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
339
351
|
console.log(chalk.gray(` ${result.summary}`));
|
|
340
352
|
}
|
|
341
353
|
}
|
|
342
|
-
if (result.status === 'failed') {
|
|
343
|
-
pipelineFailed = true;
|
|
354
|
+
if (result.status === 'failed' && (result.type !== 'quality-gate' || config.qualityGate.enforced)) {
|
|
344
355
|
if (!phase.continueOnFailure) {
|
|
345
356
|
if (format === 'text') {
|
|
346
357
|
console.log(chalk.red(`\n Pipeline stopped: "${phase.name}" failed (continue_on_failure: false)\n`));
|
|
@@ -350,11 +361,16 @@ export function createCICommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
350
361
|
}
|
|
351
362
|
}
|
|
352
363
|
// Determine overall status
|
|
353
|
-
const hasFailure = phaseResults.some(r => r.status === 'failed');
|
|
354
|
-
const hasWarning = phaseResults.some(r => r.status === 'warning'
|
|
355
|
-
|
|
356
|
-
const
|
|
357
|
-
const
|
|
364
|
+
const hasFailure = phaseResults.some(r => r.status === 'failed' && r.type !== 'quality-gate');
|
|
365
|
+
const hasWarning = phaseResults.some(r => r.status === 'warning' ||
|
|
366
|
+
(r.type === 'quality-gate' && r.status === 'failed' && !config.qualityGate.enforced));
|
|
367
|
+
const gateResults = phaseResults.filter(r => r.type === 'quality-gate');
|
|
368
|
+
const expectedGates = config.phases.filter(phase => phase.type === 'quality-gate').length;
|
|
369
|
+
const qualityGatePassed = gateResults.length > 0 && gateResults.length === expectedGates &&
|
|
370
|
+
gateResults.every(r => r.status === 'passed');
|
|
371
|
+
const qualityGateStatus = qualityGatePassed ? 'passed' :
|
|
372
|
+
gateResults.some(r => r.status === 'failed') ? 'failed' : 'not-run';
|
|
373
|
+
const overallStatus = hasFailure || (config.qualityGate.enforced && !qualityGatePassed) ? 'failed' :
|
|
358
374
|
hasWarning ? 'warning' : 'passed';
|
|
359
375
|
const completedAt = new Date();
|
|
360
376
|
const duration = completedAt.getTime() - startedAt.getTime();
|
|
@@ -365,9 +381,19 @@ export function createCICommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
365
381
|
duration,
|
|
366
382
|
phases: phaseResults,
|
|
367
383
|
qualityGatePassed,
|
|
384
|
+
qualityGateStatus,
|
|
385
|
+
qualityGateEnforced: config.qualityGate.enforced,
|
|
368
386
|
overallStatus,
|
|
369
387
|
exitCode: overallStatus === 'failed' ? 1 : 0,
|
|
370
388
|
};
|
|
389
|
+
fs.writeFileSync(gateReportPath, toJSON({
|
|
390
|
+
...(gateResults.length === 1 ? gateResults[0].details : {}),
|
|
391
|
+
passed: qualityGatePassed,
|
|
392
|
+
status: qualityGateStatus,
|
|
393
|
+
enforced: config.qualityGate.enforced,
|
|
394
|
+
...(qualityGateStatus === 'not-run' ? { evidenceStatus: 'not-run' } : {}),
|
|
395
|
+
phases: gateResults,
|
|
396
|
+
}), 'utf-8');
|
|
371
397
|
// Write combined report
|
|
372
398
|
if (config.output.combinedReport) {
|
|
373
399
|
const reportPath = path.join(outputDir, 'ci-report.md');
|
|
@@ -388,7 +414,7 @@ export function createCICommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
388
414
|
const statusColor = overallStatus === 'passed' ? chalk.green :
|
|
389
415
|
overallStatus === 'failed' ? chalk.red : chalk.yellow;
|
|
390
416
|
console.log(` ${statusColor(`Pipeline: ${overallStatus.toUpperCase()}`)} (${(duration / 1000).toFixed(1)}s)`);
|
|
391
|
-
console.log(` Quality Gate: ${
|
|
417
|
+
console.log(` Quality Gate: ${describeQualityGate(runResult)}`);
|
|
392
418
|
console.log(chalk.gray(` Artifacts: ${outputDir}/`));
|
|
393
419
|
console.log('');
|
|
394
420
|
}
|
|
@@ -56,6 +56,12 @@ Examples:
|
|
|
56
56
|
const targetPath = path.resolve(target || '.');
|
|
57
57
|
let paths;
|
|
58
58
|
if (gitSince) {
|
|
59
|
+
const { getGitRefError } = await import('../../shared/git/ref-validation.js');
|
|
60
|
+
const refError = getGitRefError(gitSince, '--git-since ref');
|
|
61
|
+
if (refError) {
|
|
62
|
+
console.log(chalk.red(refError));
|
|
63
|
+
return await cleanupAndExit(1);
|
|
64
|
+
}
|
|
59
65
|
// Use git diff to find changed files since the ref
|
|
60
66
|
// SEC: Use execFileSync with array args to prevent shell injection (CWE-78)
|
|
61
67
|
const { execFileSync } = await import('child_process');
|
|
@@ -17,6 +17,7 @@ import * as path from 'path';
|
|
|
17
17
|
import * as yaml from 'yaml';
|
|
18
18
|
import { createParallelEvalRunner, DEFAULT_PARALLEL_EVAL_CONFIG, MockLLMExecutor, } from '../../validation/parallel-eval-runner.js';
|
|
19
19
|
import { resolveEvalExecutor } from '../../validation/provider-llm-executor.js';
|
|
20
|
+
import { DEFAULT_SONNET_MODEL } from '../../shared/llm/model-registry.js';
|
|
20
21
|
import { createCommandEvalRunner, isCommandEvalSuite, } from '../../validation/command-eval-runner.js';
|
|
21
22
|
import { createSkillValidationLearner, } from '../../learning/skill-validation-learner.js';
|
|
22
23
|
import { createRealQEReasoningBank, } from '../../learning/real-qe-reasoning-bank.js';
|
|
@@ -585,7 +586,7 @@ export function createEvalCommand() {
|
|
|
585
586
|
.command('run')
|
|
586
587
|
.description('Run eval suite for a single skill')
|
|
587
588
|
.requiredOption('-s, --skill <skill>', 'Skill name to evaluate')
|
|
588
|
-
.requiredOption('-m, --model <model>',
|
|
589
|
+
.requiredOption('-m, --model <model>', `Model to use (e.g., ${DEFAULT_SONNET_MODEL})`)
|
|
589
590
|
.option('-p, --parallel', 'Enable parallel execution', false)
|
|
590
591
|
.option('-w, --workers <n>', 'Number of parallel workers', parseInt, 5)
|
|
591
592
|
.option('-b, --batch-size <n>', 'Test cases per batch', parseInt, 4)
|
|
@@ -615,7 +616,7 @@ export function createEvalCommand() {
|
|
|
615
616
|
.command('run-all')
|
|
616
617
|
.description('Run eval suites for multiple skills')
|
|
617
618
|
.option('--skills-tier <tier>', 'Skill tier (1=all, 2=P0+P1, 3=P0 only)', parseInt, 3)
|
|
618
|
-
.option('--models <models>', 'Comma-separated models to test',
|
|
619
|
+
.option('--models <models>', 'Comma-separated models to test', DEFAULT_SONNET_MODEL)
|
|
619
620
|
.option('-p, --parallel', 'Enable parallel execution', true)
|
|
620
621
|
.option('-w, --workers <n>', 'Number of parallel workers', parseInt, 5)
|
|
621
622
|
.option('-o, --output <path>', 'Output file path for report')
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
* Fleet operations with multi-agent progress tracking.
|
|
5
5
|
*/
|
|
6
6
|
import { Command } from 'commander';
|
|
7
|
-
import { secureRandomFloat } from '../../shared/utils/crypto-random.js';
|
|
8
7
|
import chalk from 'chalk';
|
|
8
|
+
import { loadCLIDomainPlugins } from '../helpers/domain-plugins.js';
|
|
9
9
|
import { ALL_DOMAINS } from '../../shared/types/index.js';
|
|
10
10
|
import { QEKernelImpl } from '../../kernel/kernel.js';
|
|
11
11
|
import { CrossDomainEventRouter } from '../../coordination/cross-domain-router.js';
|
|
@@ -99,6 +99,7 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
99
99
|
enableExperienceBridge: false,
|
|
100
100
|
});
|
|
101
101
|
await context.kernel.initialize();
|
|
102
|
+
const domainPlugins = await loadCLIDomainPlugins(context.kernel.plugins);
|
|
102
103
|
console.log(chalk.green(' * Kernel initialized'));
|
|
103
104
|
context.router = new CrossDomainEventRouter(context.kernel.eventBus);
|
|
104
105
|
await context.router.initialize();
|
|
@@ -113,7 +114,7 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
113
114
|
return context.kernel.getDomainAPI(domain);
|
|
114
115
|
};
|
|
115
116
|
const protocolExecutor = new DefaultProtocolExecutor(context.kernel.eventBus, context.kernel.memory, getDomainAPI);
|
|
116
|
-
context.queen = createQueenCoordinator(context.kernel, context.router, protocolExecutor, undefined);
|
|
117
|
+
context.queen = createQueenCoordinator(context.kernel, context.router, protocolExecutor, undefined, domainPlugins);
|
|
117
118
|
await context.queen.initialize();
|
|
118
119
|
console.log(chalk.green(' * Queen coordinator initialized'));
|
|
119
120
|
context.initialized = true;
|
|
@@ -220,9 +221,15 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
220
221
|
.option('--parallel <count>', 'Number of parallel agents', '4')
|
|
221
222
|
.action(async (operation, options) => {
|
|
222
223
|
if (!await ensureInitialized())
|
|
223
|
-
return;
|
|
224
|
+
return cleanupAndExit(1);
|
|
224
225
|
try {
|
|
225
|
-
const parallelCount =
|
|
226
|
+
const parallelCount = Number(options.parallel);
|
|
227
|
+
if (!Number.isSafeInteger(parallelCount) || parallelCount < 1) {
|
|
228
|
+
throw new Error('--parallel must be a positive integer');
|
|
229
|
+
}
|
|
230
|
+
if (!['test', 'analyze', 'scan'].includes(operation)) {
|
|
231
|
+
throw new Error(`Unsupported operation: ${operation}`);
|
|
232
|
+
}
|
|
226
233
|
console.log(chalk.blue(`\n Fleet Operation: ${operation}\n`));
|
|
227
234
|
const progress = new FleetProgressManager({
|
|
228
235
|
title: `${operation.charAt(0).toUpperCase() + operation.slice(1)} Progress`,
|
|
@@ -234,7 +241,7 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
234
241
|
analyze: 'coverage-analysis',
|
|
235
242
|
scan: 'security-compliance',
|
|
236
243
|
};
|
|
237
|
-
const domain = domainMap[operation]
|
|
244
|
+
const domain = domainMap[operation];
|
|
238
245
|
const agentOperations = Array.from({ length: parallelCount }, (_, i) => {
|
|
239
246
|
const agentId = `${operation}-agent-${i + 1}`;
|
|
240
247
|
return {
|
|
@@ -251,16 +258,9 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
251
258
|
progress: 0,
|
|
252
259
|
});
|
|
253
260
|
}
|
|
254
|
-
const results = await Promise.all(agentOperations.map(async (op
|
|
255
|
-
await new Promise(resolve => setTimeout(resolve, index * 200));
|
|
261
|
+
const results = await Promise.all(agentOperations.map(async (op) => {
|
|
256
262
|
progress.updateAgent(op.id, 0, { status: 'running' });
|
|
257
263
|
try {
|
|
258
|
-
for (let p = 10; p <= 90; p += 20) {
|
|
259
|
-
await new Promise(resolve => setTimeout(resolve, secureRandomFloat(300, 500)));
|
|
260
|
-
progress.updateAgent(op.id, p, {
|
|
261
|
-
eta: Math.round((100 - p) * 50),
|
|
262
|
-
});
|
|
263
|
-
}
|
|
264
264
|
const taskResult = await context.queen.submitTask({
|
|
265
265
|
type: operation === 'test' ? 'generate-tests' :
|
|
266
266
|
operation === 'analyze' ? 'analyze-coverage' :
|
|
@@ -270,10 +270,29 @@ export function createFleetCommand(context, cleanupAndExit, ensureInitialized, r
|
|
|
270
270
|
payload: { target: options.target, workerId: op.id },
|
|
271
271
|
timeout: 60000,
|
|
272
272
|
});
|
|
273
|
-
|
|
274
|
-
|
|
273
|
+
if (!taskResult.success) {
|
|
274
|
+
throw taskResult.error;
|
|
275
|
+
}
|
|
276
|
+
// Submission is only an acknowledgement. Keep the process alive
|
|
277
|
+
// until the domain reports a terminal result or the task expires.
|
|
278
|
+
const deadline = Date.now() + 60000;
|
|
279
|
+
while (Date.now() < deadline) {
|
|
280
|
+
const task = context.queen.getTaskStatus(taskResult.value);
|
|
281
|
+
if (!task)
|
|
282
|
+
throw new Error(`Task status unavailable: ${taskResult.value}`);
|
|
283
|
+
if (task.status === 'completed') {
|
|
284
|
+
progress.completeAgent(op.id, true);
|
|
285
|
+
return { id: op.id, success: true };
|
|
286
|
+
}
|
|
287
|
+
if (task.status === 'failed' || task.status === 'cancelled') {
|
|
288
|
+
throw new Error(task.error || `Task ${task.status}`);
|
|
289
|
+
}
|
|
290
|
+
await new Promise(resolve => setTimeout(resolve, 250));
|
|
291
|
+
}
|
|
292
|
+
throw new Error(`Task timed out: ${taskResult.value}`);
|
|
275
293
|
}
|
|
276
|
-
catch {
|
|
294
|
+
catch (error) {
|
|
295
|
+
console.error(chalk.red(` ${op.name}: ${error instanceof Error ? error.message : String(error)}`));
|
|
277
296
|
progress.completeAgent(op.id, false);
|
|
278
297
|
return { id: op.id, success: false };
|
|
279
298
|
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
interface SnapshotInfo {
|
|
2
|
+
schemaVersion: number;
|
|
3
|
+
pages: number;
|
|
4
|
+
verification: {
|
|
5
|
+
valid: true;
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export interface LearningBackupResult {
|
|
10
|
+
backupPath: string;
|
|
11
|
+
sourceSizeKB: number;
|
|
12
|
+
backupSizeKB: number;
|
|
13
|
+
compressed: boolean;
|
|
14
|
+
schemaVersion: number;
|
|
15
|
+
verification: SnapshotInfo['verification'];
|
|
16
|
+
}
|
|
17
|
+
/** Publish only a complete standalone image; the existing artifact survives staging failures. */
|
|
18
|
+
export declare function backupLearningDatabase(source: string, output: string, options?: {
|
|
19
|
+
compress?: boolean;
|
|
20
|
+
verify?: boolean;
|
|
21
|
+
}): Promise<LearningBackupResult>;
|
|
22
|
+
export interface LearningRestoreResult {
|
|
23
|
+
sizeKB: number;
|
|
24
|
+
schemaVersion: number;
|
|
25
|
+
wasCompressed: boolean;
|
|
26
|
+
safetyBackupPath?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Validate before replacing anything and retain a verified pre-restore image.
|
|
30
|
+
* SQLite mediates the destination write: never unlink its DB/WAL/SHM files.
|
|
31
|
+
* Stop project writers before restore; this does not coordinate later writes
|
|
32
|
+
* from other processes or refresh their in-memory learning caches.
|
|
33
|
+
*/
|
|
34
|
+
export declare function restoreLearningDatabase(input: string, destination: string, options?: {
|
|
35
|
+
force?: boolean;
|
|
36
|
+
}): Promise<LearningRestoreResult>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=learning-snapshot.d.ts.map
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/** Consistent, verified SQLite images for the learning backup/restore commands. */
|
|
2
|
+
import { existsSync, realpathSync, statSync } from 'node:fs';
|
|
3
|
+
import { mkdir, mkdtemp, rename, rm, stat } from 'node:fs/promises';
|
|
4
|
+
import { basename, dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { randomUUID } from 'node:crypto';
|
|
6
|
+
import { openDatabase } from '../../shared/safe-db.js';
|
|
7
|
+
import { compressFile, decompressFile } from './learning-helpers.js';
|
|
8
|
+
function inspectSnapshot(file) {
|
|
9
|
+
const db = openDatabase(file, { readonly: true, fileMustExist: true });
|
|
10
|
+
try {
|
|
11
|
+
const checks = db.pragma('integrity_check');
|
|
12
|
+
if (checks.length !== 1 || checks[0].integrity_check !== 'ok') {
|
|
13
|
+
throw new Error('Database integrity verification failed');
|
|
14
|
+
}
|
|
15
|
+
const hasVersion = db.prepare("SELECT 1 FROM sqlite_master WHERE type='table' AND name='schema_version'").get();
|
|
16
|
+
const version = hasVersion
|
|
17
|
+
? db.prepare('SELECT version FROM schema_version WHERE id = 1').get()
|
|
18
|
+
: undefined;
|
|
19
|
+
return {
|
|
20
|
+
schemaVersion: version?.version ?? 0,
|
|
21
|
+
pages: db.pragma('page_count', { simple: true }),
|
|
22
|
+
verification: { valid: true, message: 'Database integrity verified' },
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
finally {
|
|
26
|
+
db.close();
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
function canonicalPath(file) {
|
|
30
|
+
return existsSync(file) ? realpathSync(file) : join(realpathSync(dirname(file)), basename(file));
|
|
31
|
+
}
|
|
32
|
+
function sameFile(left, right) {
|
|
33
|
+
if (canonicalPath(left) === canonicalPath(right))
|
|
34
|
+
return true;
|
|
35
|
+
if (!existsSync(left) || !existsSync(right))
|
|
36
|
+
return false;
|
|
37
|
+
const a = statSync(left);
|
|
38
|
+
const b = statSync(right);
|
|
39
|
+
return a.dev === b.dev && a.ino === b.ino;
|
|
40
|
+
}
|
|
41
|
+
function assertDistinct(source, destination) {
|
|
42
|
+
const sourcePath = canonicalPath(source);
|
|
43
|
+
const destinationPath = canonicalPath(destination);
|
|
44
|
+
for (const suffix of ['', '-wal', '-shm', '-journal']) {
|
|
45
|
+
if (sameFile(`${sourcePath}${suffix}`, destination)
|
|
46
|
+
|| sameFile(source, `${destinationPath}${suffix}`)) {
|
|
47
|
+
throw new Error('Backup source and destination must not alias the same database or its sidecars');
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function assertRegularFile(file) {
|
|
52
|
+
if (!statSync(file).isFile())
|
|
53
|
+
throw new Error('Backup input must be a regular file');
|
|
54
|
+
}
|
|
55
|
+
/** Awaiting backup alone is insufficient: a busy destination can report 0/0. */
|
|
56
|
+
async function copySqliteSnapshot(source, destination, options = {}) {
|
|
57
|
+
const db = openDatabase(source, { readonly: true, fileMustExist: true });
|
|
58
|
+
try {
|
|
59
|
+
const result = await db.backup(destination);
|
|
60
|
+
if (result.totalPages <= 0 || result.remainingPages !== 0
|
|
61
|
+
|| (options.expectedPages !== undefined && result.totalPages !== options.expectedPages)) {
|
|
62
|
+
throw new Error('SQLite snapshot did not complete; the source may be empty or the destination busy');
|
|
63
|
+
}
|
|
64
|
+
if (options.standalone) {
|
|
65
|
+
// Only private new images are normalized. A WAL header otherwise makes
|
|
66
|
+
// SQLite try to create sidecars when reading an archive on readonly media.
|
|
67
|
+
const image = openDatabase(destination, { fileMustExist: true, walMode: false });
|
|
68
|
+
try {
|
|
69
|
+
if (image.pragma('journal_mode = DELETE', { simple: true }) !== 'delete') {
|
|
70
|
+
throw new Error('Could not create a standalone SQLite image');
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
image.close();
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
const inspected = inspectSnapshot(destination);
|
|
78
|
+
if (inspected.pages !== result.totalPages) {
|
|
79
|
+
throw new Error('SQLite snapshot page count does not match the completed backup');
|
|
80
|
+
}
|
|
81
|
+
return inspected;
|
|
82
|
+
}
|
|
83
|
+
finally {
|
|
84
|
+
db.close();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Publish only a complete standalone image; the existing artifact survives staging failures. */
|
|
88
|
+
export async function backupLearningDatabase(source, output, options = {}) {
|
|
89
|
+
assertRegularFile(source);
|
|
90
|
+
const finalPath = resolve(options.compress ? `${output}.gz` : output);
|
|
91
|
+
await mkdir(dirname(finalPath), { recursive: true });
|
|
92
|
+
assertDistinct(source, resolve(output));
|
|
93
|
+
assertDistinct(source, finalPath);
|
|
94
|
+
const staging = await mkdtemp(join(dirname(finalPath), '.aqe-backup-'));
|
|
95
|
+
try {
|
|
96
|
+
const image = join(staging, 'snapshot.db');
|
|
97
|
+
const info = await copySqliteSnapshot(source, image, { standalone: true });
|
|
98
|
+
const published = options.compress ? await compressFile(image) : image;
|
|
99
|
+
if (options.compress && options.verify) {
|
|
100
|
+
const checkedImage = join(staging, 'verified.db');
|
|
101
|
+
await decompressFile(published, checkedImage);
|
|
102
|
+
inspectSnapshot(checkedImage);
|
|
103
|
+
}
|
|
104
|
+
const sourceSizeKB = Number(((await stat(source)).size / 1024).toFixed(2));
|
|
105
|
+
const backupSizeKB = Number(((await stat(published)).size / 1024).toFixed(2));
|
|
106
|
+
// An existing DB+WAL pair may be live. Never replace its main file while
|
|
107
|
+
// leaving old sidecars that could be replayed against the new image.
|
|
108
|
+
if (['-wal', '-shm', '-journal'].some(suffix => existsSync(`${finalPath}${suffix}`))) {
|
|
109
|
+
throw new Error('Backup destination has SQLite sidecars; choose an unused output path');
|
|
110
|
+
}
|
|
111
|
+
await rename(published, finalPath);
|
|
112
|
+
return { backupPath: finalPath, sourceSizeKB, backupSizeKB, compressed: !!options.compress,
|
|
113
|
+
schemaVersion: info.schemaVersion, verification: info.verification };
|
|
114
|
+
}
|
|
115
|
+
finally {
|
|
116
|
+
await rm(staging, { recursive: true, force: true });
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Validate before replacing anything and retain a verified pre-restore image.
|
|
121
|
+
* SQLite mediates the destination write: never unlink its DB/WAL/SHM files.
|
|
122
|
+
* Stop project writers before restore; this does not coordinate later writes
|
|
123
|
+
* from other processes or refresh their in-memory learning caches.
|
|
124
|
+
*/
|
|
125
|
+
export async function restoreLearningDatabase(input, destination, options = {}) {
|
|
126
|
+
assertRegularFile(input);
|
|
127
|
+
await mkdir(dirname(destination), { recursive: true });
|
|
128
|
+
assertDistinct(input, destination);
|
|
129
|
+
if (existsSync(destination) && !options.force) {
|
|
130
|
+
throw new Error(`Database already exists at: ${destination}. Use --force to overwrite`);
|
|
131
|
+
}
|
|
132
|
+
const staging = await mkdtemp(join(dirname(destination), '.aqe-restore-'));
|
|
133
|
+
let safetyBackupPath;
|
|
134
|
+
try {
|
|
135
|
+
const wasCompressed = input.endsWith('.gz');
|
|
136
|
+
const image = join(staging, 'snapshot.db');
|
|
137
|
+
let source = input;
|
|
138
|
+
if (wasCompressed) {
|
|
139
|
+
source = join(staging, 'decompressed.db');
|
|
140
|
+
await decompressFile(input, source);
|
|
141
|
+
}
|
|
142
|
+
// A legacy uncompressed backup may still need its companion WAL.
|
|
143
|
+
const info = await copySqliteSnapshot(source, image, { standalone: true });
|
|
144
|
+
const sizeKB = Number(((await stat(image)).size / 1024).toFixed(2));
|
|
145
|
+
if (existsSync(destination)) {
|
|
146
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
147
|
+
const candidate = `${destination}.pre-restore-${timestamp}-${randomUUID()}.db`;
|
|
148
|
+
try {
|
|
149
|
+
await copySqliteSnapshot(destination, candidate, { standalone: true });
|
|
150
|
+
safetyBackupPath = candidate;
|
|
151
|
+
}
|
|
152
|
+
catch (error) {
|
|
153
|
+
await rm(candidate, { force: true });
|
|
154
|
+
throw new Error('Cannot create a verified safety backup of the existing database; restore refused. Stop project processes and preserve the database and its sidecars before restoring into an absent destination.', { cause: error });
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
await copySqliteSnapshot(image, destination, { expectedPages: info.pages });
|
|
158
|
+
return { sizeKB, schemaVersion: info.schemaVersion, wasCompressed, safetyBackupPath };
|
|
159
|
+
}
|
|
160
|
+
catch (error) {
|
|
161
|
+
if (safetyBackupPath) {
|
|
162
|
+
const detail = error instanceof Error ? error.message : 'SQLite snapshot failed';
|
|
163
|
+
throw new Error(`Restore failed: ${detail}; previous database snapshot preserved at ${safetyBackupPath}`, { cause: error });
|
|
164
|
+
}
|
|
165
|
+
throw error;
|
|
166
|
+
}
|
|
167
|
+
finally {
|
|
168
|
+
await rm(staging, { recursive: true, force: true });
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=learning-snapshot.js.map
|