agentic-qe 3.14.2 → 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 +183 -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-SD5N32MX.js → agent-booster-wasm-5PC7D2FW.js} +2 -2
- package/dist/cli/chunks/{agent-handler-OZRSJM7F.js → agent-handler-RDNTK4CA.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NYTRANRN.js → agent-memory-branch-NAAMBWIR.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-5ZRMYJLB.js +2 -0
- package/dist/cli/chunks/{arena-EX3SC2DP.js → arena-HXTWJ5YY.js} +4 -4
- package/dist/cli/chunks/{arena-FOTVSRK4.js → arena-KXFHRWX4.js} +2 -2
- package/dist/cli/chunks/{audit-Q5GHSUQY.js → audit-YSGA7UWT.js} +3 -3
- package/dist/cli/chunks/base-KWZHOPSH.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-S7M5R2HS.js → better-sqlite3-UICJZIDG.js} +2 -2
- package/dist/cli/chunks/brain-handler-ET6YAP4B.js +90 -0
- package/dist/cli/chunks/{branch-enumerator-RWAXTGEU.js → branch-enumerator-SS7UNVIA.js} +2 -2
- package/dist/cli/chunks/{browser-IGDESJGF.js → browser-77GI6KBE.js} +2 -2
- package/dist/cli/chunks/browser-workflow-2FZTKDUL.js +2 -0
- package/dist/cli/chunks/{chunk-U54OOA24.js → chunk-2JW3BCGG.js} +1 -1
- package/dist/cli/chunks/{chunk-LML5VTFK.js → chunk-33YYYWBQ.js} +1 -1
- package/dist/cli/chunks/{chunk-P64DMQ2C.js → chunk-34WO57CW.js} +1 -1
- package/dist/cli/chunks/{chunk-57TNBR2P.js → chunk-3QHGWY7T.js} +2 -2
- package/dist/cli/chunks/chunk-3TW5W5LX.js +2 -0
- package/dist/cli/chunks/{chunk-S4MR6RTE.js → chunk-3UPAMMCB.js} +1 -1
- package/dist/cli/chunks/{chunk-5WJUNRTY.js → chunk-3VOQRIQM.js} +2 -2
- package/dist/cli/chunks/{chunk-4RT7I7PI.js → chunk-3X3DJZJJ.js} +1 -1
- package/dist/cli/chunks/{chunk-RFNEHNJV.js → chunk-4MHXCAG2.js} +1 -1
- package/dist/cli/chunks/{chunk-PMUBG2RU.js → chunk-4OYFXLBK.js} +2 -2
- package/dist/cli/chunks/{chunk-W2FLULF4.js → chunk-55RWDRJD.js} +3 -3
- package/dist/cli/chunks/chunk-5R3QL7WN.js +14 -0
- package/dist/cli/chunks/{chunk-RHJVDCLV.js → chunk-5SJHQ2CO.js} +2 -2
- package/dist/cli/chunks/{chunk-HBTC4L53.js → chunk-5YPYDPBJ.js} +2 -2
- package/dist/cli/chunks/chunk-5Z6XZV7K.js +65 -0
- package/dist/cli/chunks/{chunk-6EHN7Q2Q.js → chunk-64PFWE2F.js} +2 -2
- package/dist/cli/chunks/{chunk-KFXZDQ5J.js → chunk-6CQN24ZK.js} +1 -1
- package/dist/cli/chunks/{chunk-WVY22NHZ.js → chunk-6J62K3SW.js} +2 -2
- package/dist/cli/chunks/{chunk-TLPL3EQY.js → chunk-6KJABXAR.js} +2 -2
- package/dist/cli/chunks/{chunk-PZKZY6PB.js → chunk-6QYNWR7U.js} +2 -2
- package/dist/cli/chunks/{chunk-A7N3YUDJ.js → chunk-6TPKK7LD.js} +2 -2
- package/dist/cli/chunks/{chunk-RYJHREYS.js → chunk-6UWGMOND.js} +2 -2
- package/dist/cli/chunks/{chunk-XPLSLHRB.js → chunk-6VRA2QGL.js} +1 -1
- package/dist/cli/chunks/{chunk-Q3JHS3UD.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-7AFBNU6K.js → chunk-AIHDEEJO.js} +2 -2
- package/dist/cli/chunks/{chunk-L2F7FVIU.js → chunk-AUXFKCQL.js} +2 -2
- package/dist/cli/chunks/{chunk-67A6PEZM.js → chunk-AWWNB2T7.js} +2 -2
- package/dist/cli/chunks/{chunk-DVHWLAEO.js → chunk-BDESSCVR.js} +3 -3
- package/dist/cli/chunks/{chunk-JQ2ZD3WO.js → chunk-BFP7KO7P.js} +2 -2
- package/dist/cli/chunks/{chunk-N5ZRUOMR.js → chunk-BGE6FOLM.js} +2 -2
- package/dist/cli/chunks/{chunk-BWRHOIYC.js → chunk-BOARZKU3.js} +2 -2
- package/dist/cli/chunks/{chunk-CTCQOYBS.js → chunk-BOZZYWCR.js} +1 -1
- package/dist/cli/chunks/{chunk-NHHWLJQF.js → chunk-C2WU3533.js} +1 -1
- package/dist/cli/chunks/{chunk-5EHLGOWW.js → chunk-CDHQFHRP.js} +2 -2
- package/dist/cli/chunks/chunk-CDKG6EI7.js +16 -0
- package/dist/cli/chunks/{chunk-RGH3WGWD.js → chunk-CIKSHTEQ.js} +3 -3
- package/dist/cli/chunks/{chunk-K574FLVB.js → chunk-CIZ5JPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-LWUJQGCS.js → chunk-CLTMDCSE.js} +2 -2
- package/dist/cli/chunks/{chunk-GHQ5PUOV.js → chunk-CNG6GQEZ.js} +2 -2
- package/dist/cli/chunks/{chunk-3C2K4YMS.js → chunk-CSU5NYOX.js} +3 -3
- package/dist/cli/chunks/chunk-CU46J64M.js +4 -0
- package/dist/cli/chunks/{chunk-EH5OCHAJ.js → chunk-CXQPR5MY.js} +1 -1
- package/dist/cli/chunks/chunk-DA5K5754.js +96 -0
- package/dist/cli/chunks/{chunk-FVGTINVR.js → chunk-DAEFDCJ4.js} +81 -65
- package/dist/cli/chunks/{chunk-MH73D5TN.js → chunk-DEYLEDJN.js} +2 -2
- package/dist/cli/chunks/{chunk-7FWP7CZY.js → chunk-DFZCKIGY.js} +3 -3
- package/dist/cli/chunks/{chunk-QXTW7XCS.js → chunk-DHJPWQBR.js} +2 -2
- package/dist/cli/chunks/{chunk-NAZVPZJS.js → chunk-DOTK76IJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RCI64RIJ.js → chunk-DPFRKBOG.js} +2 -2
- package/dist/cli/chunks/{chunk-WMW47QMR.js → chunk-EDJ3O7RH.js} +2 -2
- package/dist/cli/chunks/{chunk-4K27ESCA.js → chunk-EKQ673SA.js} +1 -1
- package/dist/cli/chunks/chunk-F3SBRQC6.js +2 -0
- package/dist/cli/chunks/{chunk-4N44UJGI.js → chunk-FGYMFUE2.js} +2 -2
- package/dist/cli/chunks/chunk-FLYOJOKN.js +2 -0
- package/dist/cli/chunks/{chunk-W4OQYLYO.js → chunk-FRH6VAUS.js} +1 -1
- package/dist/cli/chunks/{chunk-VOYJJ3KA.js → chunk-FWGOHAAB.js} +2 -2
- package/dist/cli/chunks/{chunk-D4RCV4LY.js → chunk-G6T45OIC.js} +2 -2
- package/dist/cli/chunks/{chunk-2EHFEMRU.js → chunk-GPLQ6DOK.js} +2 -2
- package/dist/cli/chunks/{chunk-RVCWSAXI.js → chunk-HDSAM2RE.js} +2 -2
- package/dist/cli/chunks/chunk-HIVA55CJ.js +2 -0
- package/dist/cli/chunks/{chunk-6F4WHN7D.js → chunk-HIYXCDEP.js} +1 -1
- package/dist/cli/chunks/{chunk-NRR23SJV.js → chunk-HUWNIPZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-4M6A3PVJ.js → chunk-HV2J7KKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CJHVOBJY.js → chunk-IFCLB7FJ.js} +1 -1
- package/dist/cli/chunks/{chunk-Q335R4MR.js → chunk-IPR4QP3H.js} +2 -2
- package/dist/cli/chunks/{chunk-HZMLNM2T.js → chunk-ISDMD6EU.js} +178 -175
- package/dist/cli/chunks/chunk-J6GNQS62.js +5 -0
- package/dist/cli/chunks/{chunk-3DFFFXXO.js → chunk-JBNEE5UH.js} +2 -2
- package/dist/cli/chunks/chunk-JZ3ORVZ3.js +54 -0
- package/dist/cli/chunks/{chunk-T4C56HBW.js → chunk-KCZR45PA.js} +2 -2
- package/dist/cli/chunks/chunk-KGT36Z42.js +14 -0
- package/dist/cli/chunks/{chunk-JIUF6NV6.js → chunk-KHFNNVJA.js} +2 -2
- package/dist/cli/chunks/{chunk-7SK6IMGZ.js → chunk-KPA7MZ6C.js} +2 -2
- package/dist/cli/chunks/{chunk-G2CLZVYI.js → chunk-KSKEF7LZ.js} +3 -3
- package/dist/cli/chunks/{chunk-6LMLN5R2.js → chunk-M2JBBZQB.js} +2 -2
- package/dist/cli/chunks/{chunk-UHTAI4ZB.js → chunk-M4WJKGVK.js} +1 -1
- package/dist/cli/chunks/{chunk-KZOBLLXW.js → chunk-M5QUBZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-42WUDDUU.js → chunk-MCUJEZT6.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFGND4QK.js → chunk-MDWCE7YW.js} +1 -1
- package/dist/cli/chunks/{chunk-TYVQNYXX.js → chunk-MEGDYJPV.js} +7 -7
- package/dist/cli/chunks/chunk-MIQTXNBG.js +4 -0
- package/dist/cli/chunks/{chunk-PFXX5Q32.js → chunk-MNW6QGNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-IVGVOGIZ.js → chunk-MOBNBMFW.js} +1 -1
- package/dist/cli/chunks/{chunk-NWFIJNEB.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-E3Q7WNJD.js → chunk-NDPFGIMJ.js} +3 -3
- package/dist/cli/chunks/{chunk-GHUPID5E.js → chunk-NJBGXDQ7.js} +1 -1
- package/dist/cli/chunks/chunk-OBAP2TXZ.js +2 -0
- package/dist/cli/chunks/{chunk-OBCKP3G4.js → chunk-OCWWP5PL.js} +4 -4
- package/dist/cli/chunks/{chunk-CJCT452S.js → chunk-ODKLFVYC.js} +2 -2
- package/dist/cli/chunks/{chunk-YN6W2XIT.js → chunk-ONII3572.js} +4 -4
- package/dist/cli/chunks/{chunk-QW4LN5NK.js → chunk-OSLYSG3B.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ6NEJMO.js → chunk-OULHKEVH.js} +2 -2
- package/dist/cli/chunks/{chunk-CG2MUD7U.js → chunk-PAWXJ73E.js} +1 -1
- package/dist/cli/chunks/chunk-PEPFCPES.js +2 -0
- package/dist/cli/chunks/{chunk-UIGEUEBT.js → chunk-PFR4G3DJ.js} +2 -2
- package/dist/cli/chunks/chunk-PO3IXGMQ.js +2 -0
- package/dist/cli/chunks/{chunk-6SZKLWZT.js → chunk-PZJOPURC.js} +5 -5
- package/dist/cli/chunks/{chunk-ARMZYHYL.js → chunk-Q5DO24IJ.js} +2 -2
- package/dist/cli/chunks/chunk-QGIU2WRL.js +2 -0
- package/dist/cli/chunks/{chunk-N3RN4QTC.js → chunk-R4VL6E65.js} +2 -2
- package/dist/cli/chunks/{chunk-MWQTACNA.js → chunk-R5NE6B2M.js} +2 -2
- package/dist/cli/chunks/{chunk-T46LOLW3.js → chunk-RJCYCLZV.js} +2 -2
- package/dist/cli/chunks/{chunk-CH2TQCV5.js → chunk-SGYJ4NFZ.js} +1 -1
- package/dist/cli/chunks/{chunk-NG2UVPTW.js → chunk-SRKETSFF.js} +1 -1
- package/dist/cli/chunks/{chunk-QFUX7ELG.js → chunk-STJCATGN.js} +2 -2
- package/dist/cli/chunks/{chunk-CIESXO73.js → chunk-STM3UDNO.js} +1 -1
- package/dist/cli/chunks/{chunk-C7AXRI7E.js → chunk-T6BVLVI5.js} +1 -1
- package/dist/cli/chunks/{chunk-HSJ5FQCF.js → chunk-TDZ53WO2.js} +2 -2
- package/dist/cli/chunks/{chunk-YF5OP6CR.js → chunk-TPGED2IF.js} +2 -2
- package/dist/cli/chunks/{chunk-2TG24LYQ.js → chunk-TSRSV3LD.js} +1 -1
- package/dist/cli/chunks/{chunk-6VKJAMZY.js → chunk-TT23RRB7.js} +1 -1
- package/dist/cli/chunks/{chunk-WXMSRBQF.js → chunk-TWAWHOP7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCDXJ27H.js → chunk-U5K45TFH.js} +1 -1
- package/dist/cli/chunks/{chunk-3WV4H33V.js → chunk-UDHKLT4C.js} +1 -1
- package/dist/cli/chunks/{chunk-VNAKBHJI.js → chunk-UEM7ZF5K.js} +2 -2
- package/dist/cli/chunks/{chunk-4ZUZDFAA.js → chunk-UGVHCMUN.js} +6 -6
- package/dist/cli/chunks/{chunk-NNOMDM4N.js → chunk-V3QLFNA2.js} +2 -2
- package/dist/cli/chunks/{chunk-S7N4BKI3.js → chunk-VD6QRULW.js} +2 -2
- package/dist/cli/chunks/{chunk-WBH4C4BG.js → chunk-VIHTL3U2.js} +2 -2
- package/dist/cli/chunks/chunk-W7BWUTVV.js +2 -0
- package/dist/cli/chunks/{chunk-IWFL6EFI.js → chunk-WLG5AJ4N.js} +2 -2
- package/dist/cli/chunks/{chunk-KEEBUVGV.js → chunk-XC7DYDSY.js} +8 -8
- package/dist/cli/chunks/{chunk-F2KRT2II.js → chunk-XJ7QNVI5.js} +3 -3
- package/dist/cli/chunks/chunk-XRT2WRMS.js +2 -0
- package/dist/cli/chunks/{chunk-ADK7DF3G.js → chunk-XRYF6JV7.js} +2 -2
- package/dist/cli/chunks/{chunk-PWEIDHT7.js → chunk-XWMZ6D6N.js} +2 -2
- package/dist/cli/chunks/{chunk-ICKLBATY.js → chunk-Y3MW3YBC.js} +2 -2
- package/dist/cli/chunks/chunk-YNXS6CGV.js +2 -0
- package/dist/cli/chunks/{chunk-PVHO6KLB.js → chunk-Z3RHREWF.js} +1 -1
- package/dist/cli/chunks/{chunk-EAJK25IS.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-R5RNOLHI.js → chunk-ZJ26AQA5.js} +1 -1
- package/dist/cli/chunks/{chunk-KPFG4OIM.js → chunk-ZNEMGX5O.js} +1 -1
- package/dist/cli/chunks/{chunk-2H5YJ5ZK.js → chunk-ZNPKDCZR.js} +2 -2
- package/dist/cli/chunks/{chunk-DW6ZMNMR.js → chunk-ZZDIMOOV.js} +2 -2
- package/dist/cli/chunks/ci-464KPQNP.js +81 -0
- package/dist/cli/chunks/ci-output-I7FX2RSO.js +2 -0
- package/dist/cli/chunks/{circuit-breaker-4WST3QSA.js → circuit-breaker-3FW237WW.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-KB4TKMYI.js → claude-flow-setup-6JKMBPGU.js} +2 -2
- package/dist/cli/chunks/client-7E4LM2WW.js +2 -0
- package/dist/cli/chunks/{cline-installer-W2ZHQ6WM.js → cline-installer-UWFHT6VY.js} +2 -2
- package/dist/cli/chunks/{code-TF2AVR5D.js → code-KQSUT3FS.js} +29 -29
- package/dist/cli/chunks/{code-index-extractor-RMDRUVQJ.js → code-index-extractor-PABBNUSC.js} +2 -2
- package/dist/cli/chunks/{codex-installer-VSTRHJHV.js → codex-installer-CQ24DTP5.js} +2 -2
- package/dist/cli/chunks/{completions-3Q37QVFR.js → completions-7RWHAUAR.js} +2 -2
- package/dist/cli/chunks/complexity-analyzer-XPOAF33E.js +2 -0
- package/dist/cli/chunks/{continuedev-installer-VTEXM455.js → continuedev-installer-V4F2FIZP.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-AGY7DQUS.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-TT64IOS4.js → coverage-QKN57JDS.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-EK7W4PGP.js +2 -0
- package/dist/cli/chunks/{cursor-installer-OVOJIOHN.js → cursor-installer-GBJ7YXSM.js} +2 -2
- package/dist/cli/chunks/{daemon-DMFZMXKA.js → daemon-GKP7CMEK.js} +3 -3
- package/dist/cli/chunks/{daemon-XCULEHWY.js → daemon-IAVSO6HK.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-WW2RX4B5.js → dag-attention-scheduler-S225TCI7.js} +2 -2
- package/dist/cli/chunks/{detect-QNWIM232.js → detect-IUYH422U.js} +2 -2
- package/dist/cli/chunks/{dist-node-6GQIY3CG.js → dist-node-2YRE6A7C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6RJPDELX.js → domain-handler-PL2TZC6H.js} +2 -2
- package/dist/cli/chunks/domain-plugins-HCGLXKIT.js +2 -0
- package/dist/cli/chunks/{domain-transfer-WK524LBS.js → domain-transfer-KQJRUPXA.js} +2 -2
- package/dist/cli/chunks/dream-NFSCSLY7.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-SO6GWJW7.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-BCCJ35OX.js → experience-capture-middleware-2MSQWSAR.js} +3 -3
- package/dist/cli/chunks/{fast-paths-CATDDBEU.js → fast-paths-VYOSIBKF.js} +2 -2
- package/dist/cli/chunks/{feature-flags-BUXNAORY.js → feature-flags-UJRHFBRX.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KNNWWP5G.js → feature-flags-WCFUKHNQ.js} +2 -2
- package/dist/cli/chunks/{file-discovery-S4HF3O7D.js → file-discovery-JDGL4ZWS.js} +2 -2
- package/dist/cli/chunks/fleet-ROXVMZ2F.js +43 -0
- package/dist/cli/chunks/{gnn-wrapper-G7ABZUG7.js → gnn-wrapper-NIO4ZCO3.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-UFMELIWT.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-YIILSRXI.js → hnsw-legacy-bridge-YLC7SPK2.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-TSVRMXDH.js → hnswlib-node-LG6OS3B7.js} +2 -2
- package/dist/cli/chunks/{hooks-OHQPNK74.js → hooks-WVALP5GX.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-LY7PJDSL.js → hypergraph-engine-GJEMW3EG.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-YGDYZO6H.js → hypergraph-handler-BLF6LXEV.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HNIU45P5.js +2 -0
- package/dist/cli/chunks/{init-handler-MTK65LI3.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-3IICU4RS.js → kilocode-installer-BXN6WZ7G.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MXOVQYQA.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-F4PVAMXQ.js → load-2BG6SHAK.js} +2 -2
- package/dist/cli/chunks/load-test-BP2CPLIV.js +2 -0
- package/dist/cli/chunks/{mcp-DUYJUEME.js → mcp-5TTB37DC.js} +2 -2
- package/dist/cli/chunks/{memory-XTTYORAS.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-33ULBU2F.js → opencode-installer-ATZLLK74.js} +2 -2
- package/dist/cli/chunks/{orchestrator-34ZJEKTJ.js → orchestrator-RKB7XJRG.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-OYOQOV2O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GZ2M3F2E.js → pattern-usage-recorder-7VE4XDAI.js} +2 -2
- package/dist/cli/chunks/pipeline-LQZSNDD2.js +19 -0
- package/dist/cli/chunks/{platform-VKJFJIAW.js → platform-OD5H5U6G.js} +2 -2
- package/dist/cli/chunks/{plugin-5C5UBQUQ.js → plugin-EJ6K2MGU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-KO2PQI3D.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-ZF74NIKA.js → protocol-handler-NRBROAU7.js} +2 -2
- package/dist/cli/chunks/{prove-MO5TQQU4.js → prove-EJOGEGD3.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-LLMYZT4X.js +2 -0
- package/dist/cli/chunks/{quality-EYIN6AER.js → quality-E55UC73D.js} +2 -2
- package/dist/cli/chunks/{quality-gate-V6OQM57O.js → quality-gate-OIQATNT3.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-RN7L6KG5.js +2 -0
- package/dist/cli/chunks/{real-embeddings-AR7TZX7U.js → real-embeddings-FPFFNOSZ.js} +2 -2
- package/dist/cli/chunks/ref-validation-OPO6J7OL.js +2 -0
- package/dist/cli/chunks/{roocode-installer-46E626VZ.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-ZNRVW6QW.js → routing-handler-KQM6VWLC.js} +4 -4
- package/dist/cli/chunks/{ruvector-commands-4L2CQMWS.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-H4RVGBIA.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-P5NM353C.js +13 -0
- package/dist/cli/chunks/{shared-rvf-adapter-M6NNIZ5W.js → shared-rvf-adapter-LVIUOO4S.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LHMFCYVE.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-GMIOXQIE.js → status-handler-6TU6O37R.js} +2 -2
- package/dist/cli/chunks/{structural-health-YZXHVHM6.js → structural-health-KBIJSTXJ.js} +2 -2
- package/dist/cli/chunks/{sync-GMPCPV5L.js → sync-LNHI5SB7.js} +2 -2
- package/dist/cli/chunks/{sync-N56UQGCS.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-GQNCKRSP.js → test-DHAAI3DU.js} +11 -11
- package/dist/cli/chunks/test-scheduling-XDBZ3QC2.js +15 -0
- package/dist/cli/chunks/{token-bootstrap-76SRNXGG.js → token-bootstrap-GUTTLPZX.js} +2 -2
- package/dist/cli/chunks/{token-usage-O7CZDP5Q.js → token-usage-Q2YG5YQN.js} +2 -2
- package/dist/cli/chunks/{transformers-LTU4LSSC.js → transformers-F5UQTQCY.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-NQSQCMBM.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-OQWRBZ3R.js → upgrade-TJRVGHGD.js} +2 -2
- package/dist/cli/chunks/{validate-TH5SRP3E.js → validate-BWPCVHBN.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UITL2JUS.js → validate-swarm-QVVKCQLP.js} +2 -2
- package/dist/cli/chunks/{vibium-O6PRAG4J.js → vibium-ZFATIWHO.js} +2 -2
- package/dist/cli/chunks/visual-security-GNPHME5H.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-XBFBY4OF.js → web-tree-sitter-KPLY7ONR.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DVT5NRNY.js → windsurf-installer-H7XM7ISA.js} +2 -2
- package/dist/cli/chunks/{witness-chain-VRSH2F36.js → witness-chain-RRN6NDCH.js} +2 -2
- package/dist/cli/chunks/witness-chain-VT4UHHBR.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-GFHRDKQ4.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-5LLLT7GM.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/security.js +167 -100
- package/dist/cli/commands/test.js +1 -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/cli/utils/ci-output.d.ts +17 -0
- package/dist/cli/utils/ci-output.js +34 -2
- 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/handler-types.d.ts +3 -0
- package/dist/coordination/handlers/quality-handlers.js +10 -0
- package/dist/coordination/handlers/security-handlers.js +168 -72
- package/dist/coordination/handlers/test-execution-handlers.js +39 -43
- package/dist/coordination/interfaces.d.ts +2 -2
- package/dist/coordination/protocol-executor.js +68 -9
- package/dist/coordination/protocols/security-audit.d.ts +3 -0
- package/dist/coordination/protocols/security-audit.js +61 -39
- 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/result-saver.js +36 -5
- package/dist/coordination/task-executor.d.ts +3 -1
- package/dist/coordination/task-executor.js +8 -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/interfaces.d.ts +5 -0
- package/dist/domains/security-compliance/interfaces.js +0 -6
- package/dist/domains/security-compliance/scan-discovery.d.ts +12 -0
- package/dist/domains/security-compliance/scan-discovery.js +105 -0
- package/dist/domains/security-compliance/scan-evidence.d.ts +57 -0
- package/dist/domains/security-compliance/scan-evidence.js +2 -0
- package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +3 -2
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +112 -72
- package/dist/domains/security-compliance/services/semgrep-integration.d.ts +9 -2
- package/dist/domains/security-compliance/services/semgrep-integration.js +68 -20
- package/dist/domains/test-execution/services/flaky-detector.js +46 -5
- package/dist/domains/test-execution/services/retry-handler.js +38 -20
- package/dist/domains/test-execution/services/test-executor.js +84 -29
- 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-hooks.js +2 -2
- 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/agentic-flow/reasoning-bank/index.js +3 -20
- package/dist/integrations/coherence/engines/cohomology-adapter.js +100 -30
- 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 +548 -527
- package/dist/mcp/handlers/domain-handler-configs.d.ts +22 -1
- package/dist/mcp/handlers/domain-handler-configs.js +50 -19
- package/dist/mcp/handlers/domain-handlers.d.ts +7 -5
- package/dist/mcp/handlers/domain-handlers.js +7 -5
- 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 +112 -53
- 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 +10 -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.d.ts +4 -0
- package/dist/shared/llm/router/hybrid-router.js +95 -35
- package/dist/shared/llm/router/routing-rules.js +9 -8
- package/dist/shared/llm/router/types.d.ts +9 -2
- package/dist/shared/llm/router/types.js +81 -13
- package/dist/shared/llm/translation/message-formatter.js +4 -23
- package/dist/shared/test-runner-verdict.d.ts +29 -0
- package/dist/shared/test-runner-verdict.js +43 -0
- package/dist/shared/vitest-json-report.d.ts +45 -0
- package/dist/shared/vitest-json-report.js +80 -0
- package/dist/test-scheduling/executors/vitest-executor.d.ts +7 -2
- package/dist/test-scheduling/executors/vitest-executor.js +174 -52
- 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/dist/validation/frontier-judge.d.ts +7 -4
- package/dist/validation/frontier-judge.js +11 -6
- package/package.json +6 -6
- package/dist/cli/chunks/adapter-OJF6LAJV.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-FGT474XB.js +0 -2
- package/dist/cli/chunks/base-HH765JFV.js +0 -2
- package/dist/cli/chunks/brain-handler-5FSA46R5.js +0 -90
- package/dist/cli/chunks/browser-workflow-NPM4FUPI.js +0 -2
- package/dist/cli/chunks/chunk-2LKAMMMI.js +0 -2
- package/dist/cli/chunks/chunk-4AKGBUYD.js +0 -4
- package/dist/cli/chunks/chunk-4MH22236.js +0 -2
- package/dist/cli/chunks/chunk-4PH7O5ZH.js +0 -2
- package/dist/cli/chunks/chunk-4UCMTYFQ.js +0 -65
- package/dist/cli/chunks/chunk-DRO5NJZA.js +0 -11
- package/dist/cli/chunks/chunk-FPHPP5TQ.js +0 -2
- package/dist/cli/chunks/chunk-FREF6Y4L.js +0 -14
- package/dist/cli/chunks/chunk-G6AV2HGY.js +0 -54
- package/dist/cli/chunks/chunk-GJAWEUIN.js +0 -16
- package/dist/cli/chunks/chunk-IUNMW454.js +0 -2
- package/dist/cli/chunks/chunk-JDXLCNKV.js +0 -2
- package/dist/cli/chunks/chunk-OC2CKU7I.js +0 -2
- package/dist/cli/chunks/chunk-OX6T26CD.js +0 -180
- package/dist/cli/chunks/chunk-PHHXHG2W.js +0 -2
- package/dist/cli/chunks/chunk-SEHCX4NH.js +0 -2
- package/dist/cli/chunks/chunk-TENYL5TI.js +0 -14
- package/dist/cli/chunks/chunk-U2AY57XZ.js +0 -5
- package/dist/cli/chunks/chunk-UYTWDS2R.js +0 -2
- package/dist/cli/chunks/chunk-VSYBMNIR.js +0 -2
- package/dist/cli/chunks/chunk-WBMRADQP.js +0 -81
- package/dist/cli/chunks/chunk-ZWRQ5VAU.js +0 -2
- package/dist/cli/chunks/chunk-ZYLSOBOR.js +0 -2
- package/dist/cli/chunks/ci-NTRH7PAW.js +0 -81
- package/dist/cli/chunks/ci-output-F57RSD35.js +0 -2
- package/dist/cli/chunks/client-GPZEC54E.js +0 -2
- package/dist/cli/chunks/complexity-analyzer-3FNFLACD.js +0 -2
- package/dist/cli/chunks/core-handlers-YMGHYIBR.js +0 -2
- package/dist/cli/chunks/cost-tracker-LTZAQBX7.js +0 -2
- package/dist/cli/chunks/cross-domain-router-ECBNTGYJ.js +0 -2
- package/dist/cli/chunks/dream-EHGKCFWH.js +0 -2
- package/dist/cli/chunks/eval-GL544IPO.js +0 -17
- package/dist/cli/chunks/fleet-DQVQQONW.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-UFEL2CBW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BLSD45CX.js +0 -2
- package/dist/cli/chunks/hnsw-index-A3RZODEN.js +0 -2
- package/dist/cli/chunks/impact-analyzer-OXHD3FOH.js +0 -2
- package/dist/cli/chunks/init-wizard-PKZL7QBU.js +0 -2
- package/dist/cli/chunks/kernel-XWPM72UJ.js +0 -2
- package/dist/cli/chunks/knowledge-graph-FRKR5XWI.js +0 -2
- package/dist/cli/chunks/learning-EV5LSOOM.js +0 -122
- package/dist/cli/chunks/llm-router-7LYDJUOT.js +0 -37
- package/dist/cli/chunks/llm-router-service-R7A5HHDM.js +0 -2
- package/dist/cli/chunks/load-test-5IKDWSYL.js +0 -2
- package/dist/cli/chunks/memory-backend-7VW5QCMO.js +0 -2
- package/dist/cli/chunks/memory-handlers-VZH3R2TQ.js +0 -2
- package/dist/cli/chunks/multi-model-executor-R6XCTMCF.js +0 -14
- package/dist/cli/chunks/pattern-null-store-BU6LCB2W.js +0 -2
- package/dist/cli/chunks/pipeline-SR5OTY45.js +0 -19
- package/dist/cli/chunks/protocol-executor-BSP5LWJN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-J2RC7P25.js +0 -2
- package/dist/cli/chunks/queen-coordinator-XI5AJV2V.js +0 -2
- package/dist/cli/chunks/router-VXQYYA3D.js +0 -2
- package/dist/cli/chunks/routing-feedback-HZQTASFF.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-BDTLLJER.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-IB343MDN.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-Y7SN7LHU.js +0 -2
- package/dist/cli/chunks/rvf-store-integrity-OJGWWPLL.js +0 -2
- package/dist/cli/chunks/safe-db-2VTKKBJU.js +0 -2
- package/dist/cli/chunks/schedule-QJ4CFGJY.js +0 -2
- package/dist/cli/chunks/scheduler-2NHDQPC3.js +0 -2
- package/dist/cli/chunks/security-JF3BVNRO.js +0 -14
- package/dist/cli/chunks/sqlite-persistence-NVVAPZN3.js +0 -2
- package/dist/cli/chunks/task-handler-VTNRGAXP.js +0 -49
- package/dist/cli/chunks/task-handlers-FYSDH55N.js +0 -9
- package/dist/cli/chunks/test-scheduling-GPRXSIRP.js +0 -15
- package/dist/cli/chunks/types-OP6IWE6N.js +0 -2
- package/dist/cli/chunks/unified-memory-DSTIEDSH.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-KBV3P4OS.js +0 -2
- package/dist/cli/chunks/unified-persistence-XKCOUBKY.js +0 -2
- package/dist/cli/chunks/visual-security-TTWSPZTZ.js +0 -2
- package/dist/cli/chunks/witness-chain-2KY73HPN.js +0 -2
- package/dist/cli/chunks/workflow-HAZ6YKOG.js +0 -51
- package/dist/cli/chunks/workflow-orchestrator-UK56AVOT.js +0 -2
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
* - Message role mapping
|
|
9
9
|
*/
|
|
10
10
|
import { isBuiltinExtendedProviderType } from '../router/types.js';
|
|
11
|
+
import { resolveModelPricing } from '../cost-tracker.js';
|
|
11
12
|
// ============================================================================
|
|
12
13
|
// System Prompt Handling
|
|
13
14
|
// ============================================================================
|
|
@@ -220,31 +221,11 @@ export function formatResponse(response, sourceProvider, latencyMs, cached = fal
|
|
|
220
221
|
}
|
|
221
222
|
/**
|
|
222
223
|
* Calculate cost based on model pricing
|
|
223
|
-
* Note: This is a simplified version - real implementation should use model-mapping pricing
|
|
224
224
|
*/
|
|
225
225
|
function calculateCost(inputTokens, outputTokens, model) {
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
'claude-sonnet-4-6': { input: 3, output: 15 },
|
|
230
|
-
'claude-haiku-4-5-20251001': { input: 0.8, output: 4 },
|
|
231
|
-
'gpt-4o': { input: 2.5, output: 10 },
|
|
232
|
-
'gpt-4o-mini': { input: 0.15, output: 0.6 },
|
|
233
|
-
'gemini-pro': { input: 1.25, output: 5 },
|
|
234
|
-
'gemini-2.0-pro': { input: 1.25, output: 5 },
|
|
235
|
-
};
|
|
236
|
-
// Find matching pricing or use default
|
|
237
|
-
let modelPricing = pricing[model];
|
|
238
|
-
if (!modelPricing) {
|
|
239
|
-
// Try prefix matching
|
|
240
|
-
for (const [key, value] of Object.entries(pricing)) {
|
|
241
|
-
if (model.includes(key) || key.includes(model.split('-')[0])) {
|
|
242
|
-
modelPricing = value;
|
|
243
|
-
break;
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
modelPricing = modelPricing || { input: 1, output: 2 }; // Default fallback
|
|
226
|
+
// Shared pricing (cost tracker table, then model registry); unknown models
|
|
227
|
+
// keep the historical conservative fallback rather than being treated as free.
|
|
228
|
+
const modelPricing = resolveModelPricing(model) ?? { input: 1, output: 2 };
|
|
248
229
|
const inputCost = (inputTokens / 1_000_000) * modelPricing.input;
|
|
249
230
|
const outputCost = (outputTokens / 1_000_000) * modelPricing.output;
|
|
250
231
|
return {
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** A runner or suite error is not an assertion result. */
|
|
2
|
+
export declare class TestRunnerExecutionError extends Error {
|
|
3
|
+
constructor(message: string);
|
|
4
|
+
}
|
|
5
|
+
interface RunnerCounts {
|
|
6
|
+
passed: number;
|
|
7
|
+
failed: number;
|
|
8
|
+
skipped: number;
|
|
9
|
+
}
|
|
10
|
+
interface RunnerReport {
|
|
11
|
+
success?: boolean;
|
|
12
|
+
numFailedTestSuites?: number;
|
|
13
|
+
numRuntimeErrorTestSuites?: number;
|
|
14
|
+
testResults?: Array<{
|
|
15
|
+
status?: string;
|
|
16
|
+
message?: string;
|
|
17
|
+
assertionResults?: Array<{
|
|
18
|
+
status?: string;
|
|
19
|
+
}>;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Preserve ordinary assertion failures, but reject incomplete/failed execution
|
|
24
|
+
* that assertion counts cannot represent. Process status is authoritative even
|
|
25
|
+
* when a runner emits success=true (for example, Vitest unhandled rejections).
|
|
26
|
+
*/
|
|
27
|
+
export declare function getTestRunnerExecutionError(runner: string, files: string, exitCode: number | null, counts: RunnerCounts, output: string, report?: RunnerReport): TestRunnerExecutionError | undefined;
|
|
28
|
+
export {};
|
|
29
|
+
//# sourceMappingURL=test-runner-verdict.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** A runner or suite error is not an assertion result. */
|
|
2
|
+
export class TestRunnerExecutionError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = 'TestRunnerExecutionError';
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Preserve ordinary assertion failures, but reject incomplete/failed execution
|
|
10
|
+
* that assertion counts cannot represent. Process status is authoritative even
|
|
11
|
+
* when a runner emits success=true (for example, Vitest unhandled rejections).
|
|
12
|
+
*/
|
|
13
|
+
export function getTestRunnerExecutionError(runner, files, exitCode, counts, output, report) {
|
|
14
|
+
const suites = report?.testResults ?? [];
|
|
15
|
+
const suiteErrors = suites.filter(suite => suite.status === 'failed' && (
|
|
16
|
+
// Jest also uses message for ordinary assertion failures; Vitest reserves
|
|
17
|
+
// it for suite errors such as collection and afterAll failures.
|
|
18
|
+
(runner === 'vitest' && suite.message)
|
|
19
|
+
|| !suite.assertionResults?.some(assertion => assertion.status === 'failed')));
|
|
20
|
+
let reason;
|
|
21
|
+
if (exitCode === null) {
|
|
22
|
+
reason = 'terminated without an exit code';
|
|
23
|
+
}
|
|
24
|
+
else if (counts.passed + counts.failed + counts.skipped === 0) {
|
|
25
|
+
reason = 'reported zero tests';
|
|
26
|
+
}
|
|
27
|
+
else if (suiteErrors.length > 0 || (report?.numRuntimeErrorTestSuites ?? 0) > 0
|
|
28
|
+
|| ((report?.numFailedTestSuites ?? 0) > 0 && counts.failed === 0)) {
|
|
29
|
+
reason = 'reported a suite execution error';
|
|
30
|
+
}
|
|
31
|
+
else if ((exitCode !== 0 || report?.success === false) && counts.failed === 0) {
|
|
32
|
+
reason = 'failed without a failed assertion';
|
|
33
|
+
}
|
|
34
|
+
if (!reason)
|
|
35
|
+
return undefined;
|
|
36
|
+
const diagnostics = [
|
|
37
|
+
...suiteErrors.map(suite => suite.message).filter(Boolean),
|
|
38
|
+
output.trim(),
|
|
39
|
+
].filter(Boolean).join('\n').slice(0, 4000);
|
|
40
|
+
return new TestRunnerExecutionError(`${runner} ${reason} for ${files} (exit code ${exitCode ?? 'unknown'}).` +
|
|
41
|
+
(diagnostics ? `\n${diagnostics}` : ''));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=test-runner-verdict.js.map
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest JSON report handling that works on Vitest 4 and 5.
|
|
3
|
+
*
|
|
4
|
+
* Vitest 5 no longer prints the `--reporter=json` document to stdout; it
|
|
5
|
+
* writes `.vitest/json/output.json` and prints only
|
|
6
|
+
* `JSON report written to <path>`. Vitest 4 prints the document to stdout
|
|
7
|
+
* unless `--outputFile` is given, in which case it behaves like Vitest 5.
|
|
8
|
+
*
|
|
9
|
+
* Passing an explicit `--outputFile` therefore gives one contract on both
|
|
10
|
+
* majors: the report is always in a file we own. Every runner integration
|
|
11
|
+
* that spawns `vitest run --reporter=json` must go through this module
|
|
12
|
+
* instead of parsing stdout directly.
|
|
13
|
+
*/
|
|
14
|
+
export interface VitestJsonReport {
|
|
15
|
+
/** Absolute path the report will be written to. */
|
|
16
|
+
readonly path: string;
|
|
17
|
+
/** CLI arguments to append to `vitest run --reporter=json`. */
|
|
18
|
+
readonly args: readonly string[];
|
|
19
|
+
/**
|
|
20
|
+
* Read this invocation's report. Missing reports return undefined so callers
|
|
21
|
+
* can distinguish them from a completed run; malformed reports throw.
|
|
22
|
+
* Stdout is diagnostic text, never a substitute for the requested report.
|
|
23
|
+
*/
|
|
24
|
+
read(stdout: string): string | undefined;
|
|
25
|
+
/** Remove the temporary report directory. Safe to call more than once. */
|
|
26
|
+
cleanup(): void;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Read the report owned by a finished Vitest run. The stdout parameter stays
|
|
30
|
+
* for existing callers but is never treated as result evidence.
|
|
31
|
+
*/
|
|
32
|
+
export declare function resolveVitestJsonOutput(_stdout: string, reportPath: string | undefined): string | undefined;
|
|
33
|
+
/**
|
|
34
|
+
* Create a per-run report location. The directory is unique per call so
|
|
35
|
+
* concurrent runs never read each other's output.
|
|
36
|
+
*/
|
|
37
|
+
export declare function createVitestJsonReport(): VitestJsonReport;
|
|
38
|
+
/**
|
|
39
|
+
* True when a command vector (runner command plus arguments) is a
|
|
40
|
+
* `vitest ... --reporter=json` invocation that has not already been given an
|
|
41
|
+
* output file. Pass the runner command as the first element when the caller
|
|
42
|
+
* configures it separately (for example `testRunner: 'vitest'`).
|
|
43
|
+
*/
|
|
44
|
+
export declare function needsVitestJsonReportFile(args: readonly string[]): boolean;
|
|
45
|
+
//# sourceMappingURL=vitest-json-report.d.ts.map
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Vitest JSON report handling that works on Vitest 4 and 5.
|
|
3
|
+
*
|
|
4
|
+
* Vitest 5 no longer prints the `--reporter=json` document to stdout; it
|
|
5
|
+
* writes `.vitest/json/output.json` and prints only
|
|
6
|
+
* `JSON report written to <path>`. Vitest 4 prints the document to stdout
|
|
7
|
+
* unless `--outputFile` is given, in which case it behaves like Vitest 5.
|
|
8
|
+
*
|
|
9
|
+
* Passing an explicit `--outputFile` therefore gives one contract on both
|
|
10
|
+
* majors: the report is always in a file we own. Every runner integration
|
|
11
|
+
* that spawns `vitest run --reporter=json` must go through this module
|
|
12
|
+
* instead of parsing stdout directly.
|
|
13
|
+
*/
|
|
14
|
+
import { mkdtempSync, readFileSync, rmSync } from 'node:fs';
|
|
15
|
+
import { tmpdir } from 'node:os';
|
|
16
|
+
import { join } from 'node:path';
|
|
17
|
+
/**
|
|
18
|
+
* Read the report owned by a finished Vitest run. The stdout parameter stays
|
|
19
|
+
* for existing callers but is never treated as result evidence.
|
|
20
|
+
*/
|
|
21
|
+
export function resolveVitestJsonOutput(_stdout, reportPath) {
|
|
22
|
+
if (!reportPath)
|
|
23
|
+
return undefined;
|
|
24
|
+
let content;
|
|
25
|
+
try {
|
|
26
|
+
content = readFileSync(reportPath, 'utf-8');
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (error.code === 'ENOENT')
|
|
30
|
+
return undefined;
|
|
31
|
+
throw new Error('Could not read the current Vitest JSON report.');
|
|
32
|
+
}
|
|
33
|
+
try {
|
|
34
|
+
const parsed = JSON.parse(content);
|
|
35
|
+
if (!parsed || !Array.isArray(parsed.testResults))
|
|
36
|
+
throw new Error('Invalid report');
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
throw new Error('The current Vitest JSON report is malformed.');
|
|
40
|
+
}
|
|
41
|
+
return content;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Create a per-run report location. The directory is unique per call so
|
|
45
|
+
* concurrent runs never read each other's output.
|
|
46
|
+
*/
|
|
47
|
+
export function createVitestJsonReport() {
|
|
48
|
+
const dir = mkdtempSync(join(tmpdir(), 'aqe-vitest-report-'));
|
|
49
|
+
const path = join(dir, 'report.json');
|
|
50
|
+
let cleaned = false;
|
|
51
|
+
return {
|
|
52
|
+
path,
|
|
53
|
+
args: [`--outputFile=${path}`],
|
|
54
|
+
read: (stdout) => resolveVitestJsonOutput(stdout, path),
|
|
55
|
+
cleanup: () => {
|
|
56
|
+
if (cleaned)
|
|
57
|
+
return;
|
|
58
|
+
cleaned = true;
|
|
59
|
+
try {
|
|
60
|
+
rmSync(dir, { recursive: true, force: true });
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Best effort: a leftover temp dir is not worth failing a test run over.
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* True when a command vector (runner command plus arguments) is a
|
|
70
|
+
* `vitest ... --reporter=json` invocation that has not already been given an
|
|
71
|
+
* output file. Pass the runner command as the first element when the caller
|
|
72
|
+
* configures it separately (for example `testRunner: 'vitest'`).
|
|
73
|
+
*/
|
|
74
|
+
export function needsVitestJsonReportFile(args) {
|
|
75
|
+
const isVitest = args.some(arg => /(^|[\\/])vitest(\.cmd|\.js|\.mjs)?$/i.test(arg));
|
|
76
|
+
const jsonReporter = args.some((arg, i) => arg === '--reporter=json' || (arg === '--reporter' && args[i + 1] === 'json'));
|
|
77
|
+
const hasOutputFile = args.some(arg => arg.startsWith('--outputFile'));
|
|
78
|
+
return isVitest && jsonReporter && !hasOutputFile;
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=vitest-json-report.js.map
|
|
@@ -25,11 +25,12 @@ export interface VitestConfig {
|
|
|
25
25
|
* is detected historically by tracking pass/fail patterns over time.
|
|
26
26
|
*/
|
|
27
27
|
flakyTracker?: FlakyTestTracker;
|
|
28
|
+
/** Grace period before forcefully stopping a test process tree. */
|
|
29
|
+
terminationGraceMs?: number;
|
|
28
30
|
}
|
|
29
31
|
export declare class VitestPhaseExecutor implements PhaseExecutor {
|
|
30
32
|
private readonly config;
|
|
31
|
-
private
|
|
32
|
-
private isAborted;
|
|
33
|
+
private currentCommand;
|
|
33
34
|
constructor(config?: VitestConfig);
|
|
34
35
|
execute(phase: TestPhase, testFiles?: string[]): Promise<PhaseResult>;
|
|
35
36
|
isReady(): Promise<boolean>;
|
|
@@ -38,6 +39,10 @@ export declare class VitestPhaseExecutor implements PhaseExecutor {
|
|
|
38
39
|
private buildArgs;
|
|
39
40
|
private runVitest;
|
|
40
41
|
private runCommand;
|
|
42
|
+
private terminateProcessTree;
|
|
43
|
+
private signalGroup;
|
|
44
|
+
private waitForGroupExit;
|
|
45
|
+
private waitForClose;
|
|
41
46
|
private parseResult;
|
|
42
47
|
private getCoverageFromReport;
|
|
43
48
|
private createErrorResult;
|
|
@@ -4,15 +4,16 @@
|
|
|
4
4
|
* A REAL test executor that actually runs tests using Vitest.
|
|
5
5
|
* No simulation. No fake data. Real test execution.
|
|
6
6
|
*/
|
|
7
|
-
import { spawn } from 'child_process';
|
|
7
|
+
import { execFile, spawn } from 'child_process';
|
|
8
8
|
import { safeJsonParse } from '../../shared/safe-json.js';
|
|
9
|
+
import { getTestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
10
|
+
import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
|
|
9
11
|
// ============================================================================
|
|
10
12
|
// Vitest Executor Implementation
|
|
11
13
|
// ============================================================================
|
|
12
14
|
export class VitestPhaseExecutor {
|
|
13
15
|
config;
|
|
14
|
-
|
|
15
|
-
isAborted = false;
|
|
16
|
+
currentCommand = null;
|
|
16
17
|
constructor(config = {}) {
|
|
17
18
|
this.config = config;
|
|
18
19
|
}
|
|
@@ -20,7 +21,6 @@ export class VitestPhaseExecutor {
|
|
|
20
21
|
// PhaseExecutor Interface
|
|
21
22
|
// --------------------------------------------------------------------------
|
|
22
23
|
async execute(phase, testFiles) {
|
|
23
|
-
this.isAborted = false;
|
|
24
24
|
const startTime = Date.now();
|
|
25
25
|
try {
|
|
26
26
|
const args = this.buildArgs(phase, testFiles);
|
|
@@ -47,11 +47,7 @@ export class VitestPhaseExecutor {
|
|
|
47
47
|
return 'vitest-executor';
|
|
48
48
|
}
|
|
49
49
|
async abort() {
|
|
50
|
-
this.
|
|
51
|
-
if (this.currentProcess) {
|
|
52
|
-
this.currentProcess.kill('SIGTERM');
|
|
53
|
-
this.currentProcess = null;
|
|
54
|
-
}
|
|
50
|
+
await this.currentCommand?.terminate(new Error('Test execution aborted'));
|
|
55
51
|
}
|
|
56
52
|
// --------------------------------------------------------------------------
|
|
57
53
|
// Private Methods
|
|
@@ -95,19 +91,37 @@ export class VitestPhaseExecutor {
|
|
|
95
91
|
return args;
|
|
96
92
|
}
|
|
97
93
|
async runVitest(args, timeoutMs) {
|
|
98
|
-
|
|
99
|
-
//
|
|
94
|
+
// Vitest 5 writes --reporter=json output to a file instead of stdout; an
|
|
95
|
+
// explicit --outputFile gives Vitest 4 and 5 the same contract.
|
|
96
|
+
const report = createVitestJsonReport();
|
|
97
|
+
let document;
|
|
98
|
+
let exitCode;
|
|
99
|
+
let stderr;
|
|
100
|
+
try {
|
|
101
|
+
const run = await this.runCommand(this.config.vitestPath || 'npx', [...args, ...report.args], timeoutMs);
|
|
102
|
+
exitCode = run.exitCode;
|
|
103
|
+
stderr = run.stderr;
|
|
104
|
+
const currentReport = report.read(run.stdout);
|
|
105
|
+
if (currentReport === undefined) {
|
|
106
|
+
throw new Error('The current Vitest JSON report is missing for this phase.');
|
|
107
|
+
}
|
|
108
|
+
document = currentReport;
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
report.cleanup();
|
|
112
|
+
}
|
|
113
|
+
// Parse JSON report from Vitest
|
|
114
|
+
let result;
|
|
100
115
|
try {
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
const jsonEnd = stdout.lastIndexOf('}');
|
|
116
|
+
const jsonStart = document.indexOf('{');
|
|
117
|
+
const jsonEnd = document.lastIndexOf('}');
|
|
104
118
|
if (jsonStart === -1 || jsonEnd === -1) {
|
|
105
119
|
throw new Error('No JSON output from Vitest');
|
|
106
120
|
}
|
|
107
|
-
const jsonStr =
|
|
108
|
-
|
|
121
|
+
const jsonStr = document.slice(jsonStart, jsonEnd + 1);
|
|
122
|
+
result = safeJsonParse(jsonStr);
|
|
109
123
|
}
|
|
110
|
-
catch
|
|
124
|
+
catch {
|
|
111
125
|
// If JSON parsing fails, create a basic result from exit code
|
|
112
126
|
return {
|
|
113
127
|
numTotalTestSuites: 0,
|
|
@@ -122,46 +136,154 @@ export class VitestPhaseExecutor {
|
|
|
122
136
|
testResults: [],
|
|
123
137
|
};
|
|
124
138
|
}
|
|
139
|
+
const executionError = getTestRunnerExecutionError('vitest', 'phase', exitCode, {
|
|
140
|
+
passed: result.numPassedTests,
|
|
141
|
+
failed: result.numFailedTests,
|
|
142
|
+
skipped: result.numPendingTests,
|
|
143
|
+
}, stderr, result);
|
|
144
|
+
if (executionError)
|
|
145
|
+
throw executionError;
|
|
146
|
+
return result;
|
|
125
147
|
}
|
|
126
148
|
runCommand(command, args, timeoutMs) {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
});
|
|
147
|
-
this.currentProcess.stderr?.on('data', (data) => {
|
|
148
|
-
stderr += data.toString();
|
|
149
|
-
});
|
|
150
|
-
this.currentProcess.on('close', (code) => {
|
|
151
|
-
clearTimeout(timeout);
|
|
152
|
-
this.currentProcess = null;
|
|
153
|
-
if (this.isAborted) {
|
|
154
|
-
reject(new Error('Test execution aborted'));
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
resolve({ stdout, stderr, exitCode: code ?? 1 });
|
|
149
|
+
if (this.currentCommand) {
|
|
150
|
+
return Promise.reject(new Error('Test executor already has an active process'));
|
|
151
|
+
}
|
|
152
|
+
// shell: false prevents argument injection. A fresh POSIX process group
|
|
153
|
+
// lets cancellation reach npx, Vitest, and the workers it started.
|
|
154
|
+
const executable = process.platform === 'win32' && command === 'npx' ? 'npx.cmd' : command;
|
|
155
|
+
const child = spawn(executable, args, {
|
|
156
|
+
cwd: this.config.cwd || process.cwd(),
|
|
157
|
+
env: { ...process.env, ...this.config.env },
|
|
158
|
+
shell: false,
|
|
159
|
+
detached: process.platform !== 'win32',
|
|
160
|
+
});
|
|
161
|
+
// Detached workers do not receive the terminal's SIGINT. The CLI may
|
|
162
|
+
// exit synchronously from its signal handler, so kill this owned group
|
|
163
|
+
// synchronously while the command is active.
|
|
164
|
+
const stopOnExit = () => {
|
|
165
|
+
if (child.pid) {
|
|
166
|
+
try {
|
|
167
|
+
process.kill(-child.pid, 'SIGKILL');
|
|
158
168
|
}
|
|
159
|
-
|
|
160
|
-
|
|
169
|
+
catch { /* already exited */ }
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
if (process.platform !== 'win32')
|
|
173
|
+
process.once('exit', stopOnExit);
|
|
174
|
+
let stdout = '';
|
|
175
|
+
let stderr = '';
|
|
176
|
+
let exitCode = 1;
|
|
177
|
+
let terminalError;
|
|
178
|
+
let terminationError;
|
|
179
|
+
let termination;
|
|
180
|
+
let rejectTermination;
|
|
181
|
+
const terminationFailed = new Promise((_, reject) => { rejectTermination = reject; });
|
|
182
|
+
child.stdout?.on('data', data => { stdout += data.toString(); });
|
|
183
|
+
child.stderr?.on('data', data => { stderr += data.toString(); });
|
|
184
|
+
const closed = new Promise((resolve, reject) => {
|
|
185
|
+
child.once('close', code => { exitCode = code ?? 1; resolve(); });
|
|
186
|
+
child.once('error', reject);
|
|
187
|
+
});
|
|
188
|
+
const active = {
|
|
189
|
+
terminate: (reason) => {
|
|
190
|
+
terminalError ??= reason;
|
|
191
|
+
termination ??= this.terminateProcessTree(child, closed).catch(error => {
|
|
192
|
+
terminationError = error;
|
|
193
|
+
rejectTermination(error);
|
|
194
|
+
throw error;
|
|
195
|
+
});
|
|
196
|
+
return termination;
|
|
197
|
+
},
|
|
198
|
+
};
|
|
199
|
+
this.currentCommand = active;
|
|
200
|
+
const timeout = setTimeout(() => {
|
|
201
|
+
void active.terminate(new Error(`Test execution timed out after ${timeoutMs}ms`)).catch(() => { });
|
|
202
|
+
}, timeoutMs);
|
|
203
|
+
return (async () => {
|
|
204
|
+
try {
|
|
205
|
+
// A failed kill must settle the phase even if the child never closes.
|
|
206
|
+
await Promise.race([closed, terminationFailed]);
|
|
207
|
+
if (termination)
|
|
208
|
+
await termination;
|
|
209
|
+
if (terminalError)
|
|
210
|
+
throw terminalError;
|
|
211
|
+
return { stdout, stderr, exitCode };
|
|
212
|
+
}
|
|
213
|
+
finally {
|
|
161
214
|
clearTimeout(timeout);
|
|
162
|
-
|
|
163
|
-
|
|
215
|
+
if (process.platform !== 'win32')
|
|
216
|
+
process.removeListener('exit', stopOnExit);
|
|
217
|
+
// A failed kill leaves an unknown survivor. Keep this executor closed
|
|
218
|
+
// to new work rather than replacing the only handle to that tree.
|
|
219
|
+
if (this.currentCommand === active && !terminationError)
|
|
220
|
+
this.currentCommand = null;
|
|
221
|
+
}
|
|
222
|
+
})();
|
|
223
|
+
}
|
|
224
|
+
async terminateProcessTree(child, closed) {
|
|
225
|
+
const pid = child.pid;
|
|
226
|
+
if (!pid) {
|
|
227
|
+
await closed;
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
if (process.platform === 'win32') {
|
|
231
|
+
// taskkill /T follows the descendant tree; killing only npx.cmd leaves
|
|
232
|
+
// its Vitest child running. There is no POSIX-style process group here.
|
|
233
|
+
await new Promise((resolve, reject) => {
|
|
234
|
+
execFile('taskkill', ['/PID', String(pid), '/T', '/F'], { timeout: 2000 }, error => {
|
|
235
|
+
if (error)
|
|
236
|
+
reject(error);
|
|
237
|
+
else
|
|
238
|
+
resolve();
|
|
239
|
+
});
|
|
164
240
|
});
|
|
241
|
+
await this.waitForClose(closed, 2000);
|
|
242
|
+
return;
|
|
243
|
+
}
|
|
244
|
+
this.signalGroup(pid, 'SIGTERM');
|
|
245
|
+
const requestedGrace = this.config.terminationGraceMs;
|
|
246
|
+
const graceMs = requestedGrace !== undefined && Number.isFinite(requestedGrace)
|
|
247
|
+
? Math.max(0, Math.min(requestedGrace, 30_000))
|
|
248
|
+
: 1000;
|
|
249
|
+
if (!await this.waitForGroupExit(pid, graceMs)) {
|
|
250
|
+
this.signalGroup(pid, 'SIGKILL');
|
|
251
|
+
if (!await this.waitForGroupExit(pid, 2000)) {
|
|
252
|
+
throw new Error(`Test process group ${pid} survived SIGKILL`);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
await this.waitForClose(closed, 2000);
|
|
256
|
+
}
|
|
257
|
+
signalGroup(pid, signal) {
|
|
258
|
+
try {
|
|
259
|
+
if (!process.kill(-pid, signal))
|
|
260
|
+
throw new Error(`Failed to send ${signal} to test process group ${pid}`);
|
|
261
|
+
}
|
|
262
|
+
catch (error) {
|
|
263
|
+
if (error.code !== 'ESRCH')
|
|
264
|
+
throw error;
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
async waitForGroupExit(pid, timeoutMs) {
|
|
268
|
+
const deadline = Date.now() + timeoutMs;
|
|
269
|
+
for (;;) {
|
|
270
|
+
try {
|
|
271
|
+
process.kill(-pid, 0);
|
|
272
|
+
}
|
|
273
|
+
catch (error) {
|
|
274
|
+
if (error.code === 'ESRCH')
|
|
275
|
+
return true;
|
|
276
|
+
throw error;
|
|
277
|
+
}
|
|
278
|
+
if (Date.now() >= deadline)
|
|
279
|
+
return false;
|
|
280
|
+
await new Promise(resolve => setTimeout(resolve, 25));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async waitForClose(closed, timeoutMs) {
|
|
284
|
+
await new Promise((resolve, reject) => {
|
|
285
|
+
const timer = setTimeout(() => reject(new Error('Test process did not close after termination')), timeoutMs);
|
|
286
|
+
closed.then(() => { clearTimeout(timer); resolve(); }, error => { clearTimeout(timer); reject(error); });
|
|
165
287
|
});
|
|
166
288
|
}
|
|
167
289
|
async parseResult(phase, vitestResult, durationMs) {
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { spawn } from 'child_process';
|
|
14
14
|
import { resolve, dirname, basename } from 'path';
|
|
15
|
+
import { assertSafeGitRef } from '../../shared/git/ref-validation.js';
|
|
15
16
|
// ============================================================================
|
|
16
17
|
// Default Mapping Rules
|
|
17
18
|
// ============================================================================
|
|
@@ -72,6 +73,7 @@ export class GitAwareTestSelector {
|
|
|
72
73
|
}
|
|
73
74
|
this.cwd = config.cwd || process.cwd();
|
|
74
75
|
this.baseRef = config.baseRef || 'HEAD~1';
|
|
76
|
+
assertSafeGitRef(this.baseRef, 'base ref');
|
|
75
77
|
this.mappingRules = config.mappingRules || DEFAULT_MAPPING_RULES;
|
|
76
78
|
this.impactAnalyzer = config.impactAnalyzer;
|
|
77
79
|
}
|
|
@@ -175,6 +177,7 @@ export class GitAwareTestSelector {
|
|
|
175
177
|
* Get the merge base between current branch and main
|
|
176
178
|
*/
|
|
177
179
|
async getMergeBase(targetBranch = 'main') {
|
|
180
|
+
assertSafeGitRef(targetBranch, 'target branch');
|
|
178
181
|
try {
|
|
179
182
|
const output = await this.git(['merge-base', 'HEAD', targetBranch]);
|
|
180
183
|
return output.trim();
|
|
@@ -21,6 +21,7 @@ export class PhaseScheduler {
|
|
|
21
21
|
startTime;
|
|
22
22
|
endTime;
|
|
23
23
|
abortController;
|
|
24
|
+
abortRequested = false;
|
|
24
25
|
constructor(executor, config = {
|
|
25
26
|
phases: DEFAULT_TEST_PHASES,
|
|
26
27
|
failFast: true,
|
|
@@ -45,6 +46,7 @@ export class PhaseScheduler {
|
|
|
45
46
|
this.results = [];
|
|
46
47
|
this.startTime = new Date();
|
|
47
48
|
this.abortController = new AbortController();
|
|
49
|
+
this.abortRequested = false;
|
|
48
50
|
try {
|
|
49
51
|
for (const phase of this.config.phases) {
|
|
50
52
|
// Check if paused (pause() can be called externally during execution)
|
|
@@ -56,6 +58,9 @@ export class PhaseScheduler {
|
|
|
56
58
|
break;
|
|
57
59
|
}
|
|
58
60
|
const result = await this.executePhaseWithRetry(phase);
|
|
61
|
+
if (this.abortRequested) {
|
|
62
|
+
throw new Error('Phase aborted');
|
|
63
|
+
}
|
|
59
64
|
this.results.push(result);
|
|
60
65
|
this.currentPhaseIndex++;
|
|
61
66
|
this.config.onPhaseComplete?.(result);
|
|
@@ -64,13 +69,19 @@ export class PhaseScheduler {
|
|
|
64
69
|
break;
|
|
65
70
|
}
|
|
66
71
|
}
|
|
72
|
+
if (this.abortRequested) {
|
|
73
|
+
throw new Error('Phase aborted');
|
|
74
|
+
}
|
|
67
75
|
this.endTime = new Date();
|
|
68
76
|
this.state = this.results.every((r) => r.success) ? 'completed' : 'failed';
|
|
69
77
|
this.config.onAllComplete?.(this.results);
|
|
70
78
|
return this.results;
|
|
71
79
|
}
|
|
72
80
|
catch (error) {
|
|
73
|
-
|
|
81
|
+
// abort() owns the final state after its executor has actually stopped.
|
|
82
|
+
// Until then, do not report a successful or quiesced scheduler run.
|
|
83
|
+
if (!this.abortRequested)
|
|
84
|
+
this.state = 'failed';
|
|
74
85
|
this.endTime = new Date();
|
|
75
86
|
throw error;
|
|
76
87
|
}
|
|
@@ -83,6 +94,7 @@ export class PhaseScheduler {
|
|
|
83
94
|
if (!phase) {
|
|
84
95
|
throw new Error(`Phase not found: ${phaseId}`);
|
|
85
96
|
}
|
|
97
|
+
this.abortRequested = false;
|
|
86
98
|
return this.executePhaseWithRetry(phase);
|
|
87
99
|
}
|
|
88
100
|
/**
|
|
@@ -105,6 +117,7 @@ export class PhaseScheduler {
|
|
|
105
117
|
* Abort execution immediately
|
|
106
118
|
*/
|
|
107
119
|
async abort() {
|
|
120
|
+
this.abortRequested = true;
|
|
108
121
|
this.abortController?.abort();
|
|
109
122
|
await this.executor.abort();
|
|
110
123
|
this.state = 'idle';
|
|
@@ -143,13 +156,22 @@ export class PhaseScheduler {
|
|
|
143
156
|
let lastResult;
|
|
144
157
|
const maxAttempts = this.config.retryFailedPhases ? this.config.maxRetries : 1;
|
|
145
158
|
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
159
|
+
if (this.abortRequested) {
|
|
160
|
+
throw new Error('Phase aborted');
|
|
161
|
+
}
|
|
146
162
|
try {
|
|
147
163
|
lastResult = await this.executor.execute(phase);
|
|
164
|
+
if (this.abortRequested) {
|
|
165
|
+
throw new Error('Phase aborted');
|
|
166
|
+
}
|
|
148
167
|
if (lastResult.success || !this.config.retryFailedPhases) {
|
|
149
168
|
return lastResult;
|
|
150
169
|
}
|
|
151
170
|
}
|
|
152
171
|
catch (error) {
|
|
172
|
+
if (this.abortRequested) {
|
|
173
|
+
throw new Error('Phase aborted');
|
|
174
|
+
}
|
|
153
175
|
this.config.onError?.(error, phase);
|
|
154
176
|
if (attempt === maxAttempts) {
|
|
155
177
|
return this.createErrorResult(phase, error);
|