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
|
@@ -185,29 +185,21 @@ export function checkTestRunners(projectPath) {
|
|
|
185
185
|
*/
|
|
186
186
|
function countVitestTests(projectPath, config) {
|
|
187
187
|
try {
|
|
188
|
-
// Use vitest list for safe enumeration (NO execution)
|
|
189
|
-
// --reporter=json
|
|
190
|
-
const output = execSync('npx vitest list --
|
|
188
|
+
// Use vitest list for safe enumeration (NO execution). --json emits one
|
|
189
|
+
// entry per discovered test in Vitest 4 and 5; --reporter=json does not.
|
|
190
|
+
const output = execSync('npx vitest list --json', {
|
|
191
191
|
cwd: projectPath,
|
|
192
192
|
encoding: 'utf-8',
|
|
193
193
|
timeout: Math.min(config.timeout, 30000), // Cap at 30s for listing
|
|
194
194
|
maxBuffer: 10 * 1024 * 1024, // 10MB buffer (reduced from 50MB)
|
|
195
195
|
});
|
|
196
|
-
// Parse JSON output from vitest list
|
|
197
196
|
try {
|
|
198
197
|
const data = safeJsonParse(output);
|
|
199
|
-
//
|
|
200
|
-
if (Array.isArray(data)) {
|
|
201
|
-
|
|
202
|
-
for (const file of data) {
|
|
203
|
-
// Each file entry has a `tests` array
|
|
204
|
-
if (file.tests && Array.isArray(file.tests)) {
|
|
205
|
-
total += countTestsRecursive(file.tests);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
return classifyTests(total, 'vitest', projectPath);
|
|
198
|
+
// Vitest list --json returns a flat array of { name, file, location? }.
|
|
199
|
+
if (Array.isArray(data) && data.every(test => test && typeof test.name === 'string' && typeof test.file === 'string')) {
|
|
200
|
+
return classifyTests(data.length, 'vitest', projectPath);
|
|
209
201
|
}
|
|
210
|
-
//
|
|
202
|
+
// Preserve compatibility with older structured runner output.
|
|
211
203
|
if (data && typeof data.numTotalTests === 'number') {
|
|
212
204
|
return classifyTests(data.numTotalTests, 'vitest', projectPath);
|
|
213
205
|
}
|
|
@@ -228,34 +220,11 @@ function countVitestTests(projectPath, config) {
|
|
|
228
220
|
// If vitest list produced no usable output, fall back to file pattern
|
|
229
221
|
return countTestsByFilePattern(projectPath, config);
|
|
230
222
|
}
|
|
231
|
-
catch
|
|
223
|
+
catch {
|
|
232
224
|
// vitest list failed (not installed, timeout, etc.) - fall back to file pattern
|
|
233
225
|
return countTestsByFilePattern(projectPath, config);
|
|
234
226
|
}
|
|
235
227
|
}
|
|
236
|
-
/**
|
|
237
|
-
* Recursively count tests in vitest's nested test structure
|
|
238
|
-
*/
|
|
239
|
-
function countTestsRecursive(tests) {
|
|
240
|
-
let count = 0;
|
|
241
|
-
for (const test of tests) {
|
|
242
|
-
if (typeof test === 'object' && test !== null) {
|
|
243
|
-
const t = test;
|
|
244
|
-
// Count this test if it has a name (actual test, not describe block)
|
|
245
|
-
if (t.type === 'test' || t.mode === 'run' || t.mode === 'skip') {
|
|
246
|
-
count++;
|
|
247
|
-
}
|
|
248
|
-
// Recurse into children (nested describes)
|
|
249
|
-
if (Array.isArray(t.tests)) {
|
|
250
|
-
count += countTestsRecursive(t.tests);
|
|
251
|
-
}
|
|
252
|
-
if (Array.isArray(t.children)) {
|
|
253
|
-
count += countTestsRecursive(t.children);
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
return count;
|
|
258
|
-
}
|
|
259
228
|
/**
|
|
260
229
|
* Count tests using Jest
|
|
261
230
|
* Uses `jest --listTests` for accurate test file discovery WITHOUT execution.
|
|
@@ -286,7 +255,7 @@ function countJestTests(projectPath, config) {
|
|
|
286
255
|
// If jest --listTests produced no files, fall back to file pattern
|
|
287
256
|
return countTestsByFilePattern(projectPath, config);
|
|
288
257
|
}
|
|
289
|
-
catch
|
|
258
|
+
catch {
|
|
290
259
|
// jest --listTests failed - fall back to file pattern
|
|
291
260
|
return countTestsByFilePattern(projectPath, config);
|
|
292
261
|
}
|
|
@@ -460,12 +460,7 @@ export declare const LLM_ANALYSIS_CONSTANTS: {
|
|
|
460
460
|
/**
|
|
461
461
|
* Model tier mapping.
|
|
462
462
|
*/
|
|
463
|
-
readonly MODEL_TIERS:
|
|
464
|
-
readonly 1: "claude-haiku-4-5";
|
|
465
|
-
readonly 2: "claude-sonnet-4-6";
|
|
466
|
-
readonly 3: "claude-sonnet-4-6";
|
|
467
|
-
readonly 4: "claude-opus-4-7";
|
|
468
|
-
};
|
|
463
|
+
readonly MODEL_TIERS: Readonly<Record<1 | 4 | 2 | 3, string>>;
|
|
469
464
|
};
|
|
470
465
|
export type TestExecutionConstants = typeof TEST_EXECUTION_CONSTANTS;
|
|
471
466
|
export type E2EConstants = typeof E2E_CONSTANTS;
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* @see ADR-051: LLM-Powered Analysis
|
|
9
9
|
*/
|
|
10
|
+
import { CLAUDE_TIER_MODELS } from '../shared/llm/model-registry.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Test Execution Constants
|
|
12
13
|
// ============================================================================
|
|
@@ -493,11 +494,6 @@ export const LLM_ANALYSIS_CONSTANTS = {
|
|
|
493
494
|
/**
|
|
494
495
|
* Model tier mapping.
|
|
495
496
|
*/
|
|
496
|
-
MODEL_TIERS:
|
|
497
|
-
1: 'claude-haiku-4-5',
|
|
498
|
-
2: 'claude-sonnet-4-6',
|
|
499
|
-
3: 'claude-sonnet-4-6',
|
|
500
|
-
4: 'claude-opus-4-7',
|
|
501
|
-
},
|
|
497
|
+
MODEL_TIERS: CLAUDE_TIER_MODELS,
|
|
502
498
|
};
|
|
503
499
|
//# sourceMappingURL=constants.js.map
|
|
@@ -8,6 +8,7 @@ import { createSafeRegex } from '../../../shared/security/regex-safety-validator
|
|
|
8
8
|
import { CONTRACT_CONSTANTS, LLM_ANALYSIS_CONSTANTS } from '../../constants.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
strictMode: true,
|
|
13
14
|
validateExamples: true,
|
|
@@ -46,13 +47,7 @@ export class ContractValidatorService {
|
|
|
46
47
|
* ADR-051: Get model name for tier
|
|
47
48
|
*/
|
|
48
49
|
getModelForTier(tier) {
|
|
49
|
-
|
|
50
|
-
1: 'claude-haiku-4-5',
|
|
51
|
-
2: 'claude-sonnet-4-6',
|
|
52
|
-
3: 'claude-sonnet-4-6',
|
|
53
|
-
4: 'claude-opus-4-7',
|
|
54
|
-
};
|
|
55
|
-
return models[tier] || models[2];
|
|
50
|
+
return getClaudeModelForTier(tier);
|
|
56
51
|
}
|
|
57
52
|
/**
|
|
58
53
|
* ADR-051: LLM-powered contract analysis
|
|
@@ -9,6 +9,7 @@ import { ok, err } from '../../../shared/types/index.js';
|
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
11
|
import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
12
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
const DEFAULT_CONFIG = {
|
|
13
14
|
defaultThreshold: 80,
|
|
14
15
|
enableLLMAnalysis: true, // On by default - opt-out
|
|
@@ -182,18 +183,7 @@ export class CoverageAnalyzerService {
|
|
|
182
183
|
* Get model ID for the configured tier
|
|
183
184
|
*/
|
|
184
185
|
getModelForTier(tier) {
|
|
185
|
-
|
|
186
|
-
case 1:
|
|
187
|
-
return 'claude-haiku-4-5-20251001';
|
|
188
|
-
case 2:
|
|
189
|
-
return 'claude-sonnet-4-6';
|
|
190
|
-
case 3:
|
|
191
|
-
return 'claude-sonnet-4-6';
|
|
192
|
-
case 4:
|
|
193
|
-
return 'claude-opus-4-7';
|
|
194
|
-
default:
|
|
195
|
-
return 'claude-sonnet-4-6';
|
|
196
|
-
}
|
|
186
|
+
return getClaudeModelForTier(tier);
|
|
197
187
|
}
|
|
198
188
|
/**
|
|
199
189
|
* Analyze coverage gaps using LLM for intelligent insights
|
|
@@ -8,6 +8,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
minCoverage: 80,
|
|
13
14
|
enableLLMAnalysis: true, // On by default - opt-out
|
|
@@ -59,13 +60,7 @@ export class GapDetectorService {
|
|
|
59
60
|
* Get model ID for the configured tier
|
|
60
61
|
*/
|
|
61
62
|
getModelForTier(tier) {
|
|
62
|
-
|
|
63
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
64
|
-
case 2: return 'claude-sonnet-4-6';
|
|
65
|
-
case 3: return 'claude-sonnet-4-6';
|
|
66
|
-
case 4: return 'claude-opus-4-7';
|
|
67
|
-
default: return 'claude-sonnet-4-6';
|
|
68
|
-
}
|
|
63
|
+
return getClaudeModelForTier(tier);
|
|
69
64
|
}
|
|
70
65
|
/**
|
|
71
66
|
* Analyze coverage gaps using LLM for intelligent prioritization
|
|
@@ -13,6 +13,7 @@ import { FileReader } from '../../../shared/io/index.js';
|
|
|
13
13
|
import { TypeScriptParser } from '../../../shared/parsers/index.js';
|
|
14
14
|
import { toError } from '../../../shared/error-utils.js';
|
|
15
15
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
16
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
16
17
|
// LLMDefectAnalysis is imported from ../interfaces
|
|
17
18
|
const DEFAULT_CONFIG = {
|
|
18
19
|
defaultThreshold: 0.5,
|
|
@@ -111,18 +112,7 @@ export class DefectPredictorService {
|
|
|
111
112
|
* Get model ID for the configured tier
|
|
112
113
|
*/
|
|
113
114
|
getModelForTier(tier) {
|
|
114
|
-
|
|
115
|
-
case 1:
|
|
116
|
-
return 'claude-haiku-4-5-20251001';
|
|
117
|
-
case 2:
|
|
118
|
-
return 'claude-sonnet-4-6';
|
|
119
|
-
case 3:
|
|
120
|
-
return 'claude-sonnet-4-6';
|
|
121
|
-
case 4:
|
|
122
|
-
return 'claude-opus-4-7';
|
|
123
|
-
default:
|
|
124
|
-
return 'claude-sonnet-4-6';
|
|
125
|
-
}
|
|
115
|
+
return getClaudeModelForTier(tier);
|
|
126
116
|
}
|
|
127
117
|
/**
|
|
128
118
|
* Analyze defect risk using LLM for enhanced insights
|
|
@@ -8,6 +8,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
8
8
|
import { ok, err } from '../../../shared/types/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
maxTimelineEvents: 20,
|
|
13
14
|
maxRelatedFiles: 10,
|
|
@@ -193,13 +194,7 @@ export class RootCauseAnalyzerService {
|
|
|
193
194
|
* Get model ID for the configured tier
|
|
194
195
|
*/
|
|
195
196
|
getModelForTier(tier) {
|
|
196
|
-
|
|
197
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
198
|
-
case 2: return 'claude-sonnet-4-6';
|
|
199
|
-
case 3: return 'claude-sonnet-4-6';
|
|
200
|
-
case 4: return 'claude-opus-4-7';
|
|
201
|
-
default: return 'claude-sonnet-4-6';
|
|
202
|
-
}
|
|
197
|
+
return getClaudeModelForTier(tier);
|
|
203
198
|
}
|
|
204
199
|
/**
|
|
205
200
|
* Analyze root cause using LLM for deeper insights
|
|
@@ -8,6 +8,7 @@ import { ok, err } from '../../../shared/types/index.js';
|
|
|
8
8
|
import { rehydrateDates } from '../../../shared/utils/kv-date-rehydrate.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { createQEFlashAttention, } from '../../../integrations/ruvector/wrappers.js';
|
|
11
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
minExperiencesForPattern: 5,
|
|
13
14
|
patternConfidenceThreshold: 0.7,
|
|
@@ -162,13 +163,7 @@ export class LearningCoordinatorService {
|
|
|
162
163
|
* @returns Model ID string
|
|
163
164
|
*/
|
|
164
165
|
getModelForTier(tier) {
|
|
165
|
-
|
|
166
|
-
1: 'claude-haiku-4-5',
|
|
167
|
-
2: 'claude-sonnet-4-6',
|
|
168
|
-
3: 'claude-sonnet-4-6',
|
|
169
|
-
4: 'claude-opus-4-7',
|
|
170
|
-
};
|
|
171
|
-
return models[tier] || models[2];
|
|
166
|
+
return getClaudeModelForTier(tier);
|
|
172
167
|
}
|
|
173
168
|
/**
|
|
174
169
|
* ADR-051: LLM-powered pattern synthesis
|
|
@@ -9,6 +9,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
9
9
|
import { ok, err } from '../../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../../shared/error-utils.js';
|
|
11
11
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
12
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
const DEFAULT_CONFIG = {
|
|
13
14
|
riskWeights: {
|
|
14
15
|
coverage: 0.15,
|
|
@@ -68,13 +69,7 @@ export class DeploymentAdvisorService {
|
|
|
68
69
|
* Get model ID for the configured tier
|
|
69
70
|
*/
|
|
70
71
|
getModelForTier(tier) {
|
|
71
|
-
|
|
72
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
73
|
-
case 2: return 'claude-sonnet-4-6';
|
|
74
|
-
case 3: return 'claude-sonnet-4-6';
|
|
75
|
-
case 4: return 'claude-opus-4-7';
|
|
76
|
-
default: return 'claude-sonnet-4-6';
|
|
77
|
-
}
|
|
72
|
+
return getClaudeModelForTier(tier);
|
|
78
73
|
}
|
|
79
74
|
/**
|
|
80
75
|
* Generate deployment advice using LLM for deeper insights
|
|
@@ -8,6 +8,7 @@ import { ok, err } from '../../../shared/types/index.js';
|
|
|
8
8
|
import { getCodeMetricsAnalyzer } from '../../../shared/metrics/index.js';
|
|
9
9
|
import { toError } from '../../../shared/error-utils.js';
|
|
10
10
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
11
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
11
12
|
const DEFAULT_CONFIG = {
|
|
12
13
|
enableTrendAnalysis: true,
|
|
13
14
|
trendDataPointsMin: 3,
|
|
@@ -77,13 +78,7 @@ export class QualityAnalyzerService {
|
|
|
77
78
|
* Get model ID for the configured tier
|
|
78
79
|
*/
|
|
79
80
|
getModelForTier(tier) {
|
|
80
|
-
|
|
81
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
82
|
-
case 2: return 'claude-sonnet-4-6';
|
|
83
|
-
case 3: return 'claude-sonnet-4-6';
|
|
84
|
-
case 4: return 'claude-opus-4-7';
|
|
85
|
-
default: return 'claude-sonnet-4-6';
|
|
86
|
-
}
|
|
81
|
+
return getClaudeModelForTier(tier);
|
|
87
82
|
}
|
|
88
83
|
/**
|
|
89
84
|
* Generate quality insights using LLM
|
|
@@ -9,6 +9,7 @@ import { LoggerFactory } from '../../../logging/index.js';
|
|
|
9
9
|
import { ok, err } from '../../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../../shared/error-utils.js';
|
|
11
11
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
12
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
12
13
|
const DEFAULT_CONFIG = {
|
|
13
14
|
enableAmbiguityDetection: true,
|
|
14
15
|
minAcceptanceCriteria: 1,
|
|
@@ -83,13 +84,7 @@ export class RequirementsValidatorService {
|
|
|
83
84
|
* Get model ID for the configured tier
|
|
84
85
|
*/
|
|
85
86
|
getModelForTier(tier) {
|
|
86
|
-
|
|
87
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
88
|
-
case 2: return 'claude-sonnet-4-6';
|
|
89
|
-
case 3: return 'claude-sonnet-4-6';
|
|
90
|
-
case 4: return 'claude-opus-4-7';
|
|
91
|
-
default: return 'claude-sonnet-4-6';
|
|
92
|
-
}
|
|
87
|
+
return getClaudeModelForTier(tier);
|
|
93
88
|
}
|
|
94
89
|
/**
|
|
95
90
|
* Analyze requirements with LLM for deeper insights
|
|
@@ -11,6 +11,7 @@ import { ok, err } from '../../../../shared/types/index.js';
|
|
|
11
11
|
import { ALL_SECURITY_PATTERNS, BUILT_IN_RULE_SETS } from './security-patterns.js';
|
|
12
12
|
import { toError } from '../../../../shared/error-utils.js';
|
|
13
13
|
import { safeJsonParse } from '../../../../shared/safe-json.js';
|
|
14
|
+
import { CLAUDE_TIER_MODELS, DEFAULT_OPUS_MODEL } from '../../../../shared/llm/model-registry.js';
|
|
14
15
|
import { isSemgrepAvailable, runSemgrepWithRules, convertSemgrepFindings, } from '../semgrep-integration.js';
|
|
15
16
|
// ============================================================================
|
|
16
17
|
// SAST Scanner Service
|
|
@@ -537,13 +538,8 @@ export class SASTScanner {
|
|
|
537
538
|
* Get model ID for the configured tier
|
|
538
539
|
*/
|
|
539
540
|
getModelForTier(tier) {
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
case 2: return 'claude-sonnet-4-6';
|
|
543
|
-
case 3: return 'claude-sonnet-4-6';
|
|
544
|
-
case 4: return 'claude-opus-4-7';
|
|
545
|
-
default: return 'claude-opus-4-7'; // Default to Opus for security
|
|
546
|
-
}
|
|
541
|
+
// Default to Opus for security when the tier is out of range
|
|
542
|
+
return CLAUDE_TIER_MODELS[tier] ?? DEFAULT_OPUS_MODEL;
|
|
547
543
|
}
|
|
548
544
|
/**
|
|
549
545
|
* Analyze vulnerability with LLM for deeper insights
|
|
@@ -11,6 +11,7 @@ import { ok, err } from '../../../shared/types/index.js';
|
|
|
11
11
|
import { TEST_EXECUTION_CONSTANTS, RETRY_CONSTANTS } from '../../constants.js';
|
|
12
12
|
import { toError } from '../../../shared/error-utils.js';
|
|
13
13
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
14
|
+
import { getTestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
14
15
|
import { createVitestJsonReport, needsVitestJsonReportFile } from '../../../shared/vitest-json-report.js';
|
|
15
16
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
16
17
|
const DEFAULT_FLAKY_CONFIG = {
|
|
@@ -291,13 +292,38 @@ export class FlakyDetectorService {
|
|
|
291
292
|
child.on('close', (code) => {
|
|
292
293
|
clearTimeout(timeout);
|
|
293
294
|
const duration = Date.now() - startTime;
|
|
294
|
-
|
|
295
|
+
let reportText;
|
|
296
|
+
try {
|
|
297
|
+
reportText = report ? report.read(stdout) : stdout;
|
|
298
|
+
}
|
|
299
|
+
catch (error) {
|
|
300
|
+
report?.cleanup();
|
|
301
|
+
reject(toError(error));
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
295
304
|
report?.cleanup();
|
|
305
|
+
if (reportText === undefined) {
|
|
306
|
+
reject(new Error(`The current Vitest JSON report is missing for ${file}.`));
|
|
307
|
+
return;
|
|
308
|
+
}
|
|
296
309
|
try {
|
|
297
310
|
// Parse the test results from the JSON report (or stdout for other runners)
|
|
298
311
|
const parsedResults = this.parseTestOutput(reportText, stderr, code ?? 0, file, runId, runIndex, duration);
|
|
312
|
+
if (report) {
|
|
313
|
+
const verdictReport = safeJsonParse(reportText);
|
|
314
|
+
const assertions = verdictReport.testResults?.flatMap(suite => suite.assertionResults ?? []) ?? [];
|
|
315
|
+
const executionError = getTestRunnerExecutionError('vitest', file, code, {
|
|
316
|
+
passed: assertions.filter(test => test.status === 'passed').length,
|
|
317
|
+
failed: assertions.filter(test => test.status === 'failed').length,
|
|
318
|
+
skipped: assertions.filter(test => test.status === 'skipped' || test.status === 'pending').length,
|
|
319
|
+
}, stderr, verdictReport);
|
|
320
|
+
if (executionError)
|
|
321
|
+
throw executionError;
|
|
322
|
+
}
|
|
299
323
|
// If parsing fails but we have an exit code, create a single result for the file
|
|
300
324
|
if (parsedResults.size === 0) {
|
|
325
|
+
if (report)
|
|
326
|
+
throw new Error(`The current Vitest JSON report has no test results for ${file}.`);
|
|
301
327
|
const testId = this.generateTestId(file, 'main');
|
|
302
328
|
results.set(testId, [
|
|
303
329
|
{
|
|
@@ -321,6 +347,10 @@ export class FlakyDetectorService {
|
|
|
321
347
|
resolve(results);
|
|
322
348
|
}
|
|
323
349
|
catch (parseError) {
|
|
350
|
+
if (report) {
|
|
351
|
+
reject(toError(parseError));
|
|
352
|
+
return;
|
|
353
|
+
}
|
|
324
354
|
// If we can't parse output but process completed, create result from exit code
|
|
325
355
|
const testId = this.generateTestId(file, 'main');
|
|
326
356
|
results.set(testId, [
|
|
@@ -356,7 +386,7 @@ export class FlakyDetectorService {
|
|
|
356
386
|
return this.parseVitestJson(parsed, file, runId, runIndex);
|
|
357
387
|
}
|
|
358
388
|
}
|
|
359
|
-
catch
|
|
389
|
+
catch {
|
|
360
390
|
// Non-critical: not valid JSON, try other formats
|
|
361
391
|
logger.debug('Vitest JSON parse failed:');
|
|
362
392
|
}
|
|
@@ -370,7 +400,7 @@ export class FlakyDetectorService {
|
|
|
370
400
|
}
|
|
371
401
|
}
|
|
372
402
|
}
|
|
373
|
-
catch
|
|
403
|
+
catch {
|
|
374
404
|
// Non-critical: not Jest format
|
|
375
405
|
logger.debug('Jest JSON parse failed:');
|
|
376
406
|
}
|
|
@@ -324,7 +324,7 @@ export class RetryHandlerService {
|
|
|
324
324
|
return 'mocha';
|
|
325
325
|
}
|
|
326
326
|
}
|
|
327
|
-
catch
|
|
327
|
+
catch {
|
|
328
328
|
// Non-critical: package.json read errors during test runner detection
|
|
329
329
|
logger.debug('package.json read failed:');
|
|
330
330
|
}
|
|
@@ -409,8 +409,16 @@ export class RetryHandlerService {
|
|
|
409
409
|
}
|
|
410
410
|
// Parse result based on exit code and output (Vitest writes the JSON
|
|
411
411
|
// report to the --outputFile; read it back rather than trusting stdout).
|
|
412
|
-
|
|
413
|
-
|
|
412
|
+
try {
|
|
413
|
+
const reportText = report ? report.read(stdout) : stdout;
|
|
414
|
+
if (reportText === undefined) {
|
|
415
|
+
throw new Error('The current Vitest JSON report is missing for the retry run.');
|
|
416
|
+
}
|
|
417
|
+
settle(resolve, this.parseTestResult(code, reportText, stderr));
|
|
418
|
+
}
|
|
419
|
+
catch (error) {
|
|
420
|
+
settle(reject, toError(error));
|
|
421
|
+
}
|
|
414
422
|
});
|
|
415
423
|
proc.on('error', (err) => {
|
|
416
424
|
clearTimeout(timeoutHandle);
|
|
@@ -425,55 +433,55 @@ export class RetryHandlerService {
|
|
|
425
433
|
* Parse test runner output to determine pass/fail status
|
|
426
434
|
*/
|
|
427
435
|
parseTestResult(exitCode, stdout, stderr) {
|
|
428
|
-
//
|
|
429
|
-
if (exitCode === 0) {
|
|
430
|
-
return { passed: true };
|
|
431
|
-
}
|
|
432
|
-
// Try to parse JSON output for more detailed error info
|
|
436
|
+
// A passing process and a passing report must agree when JSON is available.
|
|
433
437
|
try {
|
|
434
438
|
// Vitest JSON output
|
|
435
439
|
const vitestMatch = stdout.match(/\{[\s\S]*"testResults"[\s\S]*\}/);
|
|
436
440
|
if (vitestMatch) {
|
|
437
441
|
const result = safeJsonParse(vitestMatch[0]);
|
|
438
|
-
if (
|
|
442
|
+
if (exitCode === 0 && result.success !== false
|
|
443
|
+
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0) {
|
|
439
444
|
return { passed: true };
|
|
440
445
|
}
|
|
441
446
|
const failedTest = result.testResults?.[0]?.assertionResults?.find((r) => r.status === 'failed');
|
|
442
447
|
return {
|
|
443
448
|
passed: false,
|
|
444
|
-
error: failedTest?.failureMessages?.join('\n')
|
|
449
|
+
error: failedTest?.failureMessages?.join('\n') || stderr || `Test failed with exit code ${exitCode}`,
|
|
445
450
|
};
|
|
446
451
|
}
|
|
447
452
|
// Jest JSON output
|
|
448
453
|
const jestMatch = stdout.match(/\{[\s\S]*"numFailedTests"[\s\S]*\}/);
|
|
449
454
|
if (jestMatch) {
|
|
450
455
|
const result = safeJsonParse(jestMatch[0]);
|
|
451
|
-
if (
|
|
456
|
+
if (exitCode === 0 && result.success !== false
|
|
457
|
+
&& result.numFailedTests === 0 && result.numFailedTestSuites === 0) {
|
|
452
458
|
return { passed: true };
|
|
453
459
|
}
|
|
454
460
|
const failedTest = result.testResults?.[0]?.assertionResults?.find((r) => r.status === 'failed');
|
|
455
461
|
return {
|
|
456
462
|
passed: false,
|
|
457
|
-
error: failedTest?.failureMessages?.join('\n')
|
|
463
|
+
error: failedTest?.failureMessages?.join('\n') || stderr || `Test failed with exit code ${exitCode}`,
|
|
458
464
|
};
|
|
459
465
|
}
|
|
460
466
|
// Mocha JSON output
|
|
461
467
|
const mochaMatch = stdout.match(/\{[\s\S]*"stats"[\s\S]*"failures"[\s\S]*\}/);
|
|
462
468
|
if (mochaMatch) {
|
|
463
469
|
const result = safeJsonParse(mochaMatch[0]);
|
|
464
|
-
if (result.stats?.failures === 0) {
|
|
470
|
+
if (exitCode === 0 && result.stats?.failures === 0) {
|
|
465
471
|
return { passed: true };
|
|
466
472
|
}
|
|
467
473
|
const failure = result.failures?.[0];
|
|
468
474
|
return {
|
|
469
475
|
passed: false,
|
|
470
|
-
error: failure?.err?.message
|
|
476
|
+
error: failure?.err?.message || stderr || `Test failed with exit code ${exitCode}`,
|
|
471
477
|
};
|
|
472
478
|
}
|
|
473
479
|
}
|
|
474
480
|
catch {
|
|
475
481
|
// JSON parsing failed, fall back to simple exit code check
|
|
476
482
|
}
|
|
483
|
+
if (exitCode === 0)
|
|
484
|
+
return { passed: true };
|
|
477
485
|
// Non-zero exit code means failure
|
|
478
486
|
const errorOutput = stderr || stdout || `Test failed with exit code ${exitCode}`;
|
|
479
487
|
return {
|
|
@@ -15,6 +15,7 @@ import { secureRandom, secureRandomInt } from '../../../shared/utils/crypto-rand
|
|
|
15
15
|
import { writeQualityEvidence } from '../../quality-assessment/quality-evidence.js';
|
|
16
16
|
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../../shared/test-runner-verdict.js';
|
|
17
17
|
import { createVitestJsonReport } from '../../../shared/vitest-json-report.js';
|
|
18
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
18
19
|
const DEFAULT_CONFIG = {
|
|
19
20
|
simulateForTesting: false,
|
|
20
21
|
simulatedTestsPerFile: 5,
|
|
@@ -241,13 +242,7 @@ export class TestExecutorService {
|
|
|
241
242
|
* ADR-051: Get model name for tier
|
|
242
243
|
*/
|
|
243
244
|
getModelForTier(tier) {
|
|
244
|
-
|
|
245
|
-
1: 'claude-haiku-4-5',
|
|
246
|
-
2: 'claude-sonnet-4-6',
|
|
247
|
-
3: 'claude-sonnet-4-6',
|
|
248
|
-
4: 'claude-opus-4-7',
|
|
249
|
-
};
|
|
250
|
-
return models[tier] || models[2];
|
|
245
|
+
return getClaudeModelForTier(tier);
|
|
251
246
|
}
|
|
252
247
|
/**
|
|
253
248
|
* ADR-051: LLM-powered test failure analysis
|
|
@@ -273,7 +268,7 @@ Provide:
|
|
|
273
268
|
});
|
|
274
269
|
return response.content;
|
|
275
270
|
}
|
|
276
|
-
catch
|
|
271
|
+
catch {
|
|
277
272
|
logger.warn('LLM analysis failed:');
|
|
278
273
|
return null;
|
|
279
274
|
}
|
|
@@ -379,26 +374,38 @@ Provide:
|
|
|
379
374
|
let stdout = '';
|
|
380
375
|
let stderr = '';
|
|
381
376
|
let killed = false;
|
|
382
|
-
|
|
383
|
-
|
|
377
|
+
let settled = false;
|
|
378
|
+
const finish = (result, cleanup = true) => {
|
|
379
|
+
if (settled)
|
|
380
|
+
return;
|
|
381
|
+
settled = true;
|
|
382
|
+
if (cleanup)
|
|
383
|
+
report?.cleanup();
|
|
384
384
|
resolve(result);
|
|
385
385
|
};
|
|
386
386
|
// Spawn the test runner process
|
|
387
387
|
// Note: shell: false (default) to prevent command injection (CWE-78)
|
|
388
388
|
// Arguments are passed as array to avoid shell interpretation
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
389
|
+
let proc;
|
|
390
|
+
try {
|
|
391
|
+
proc = spawn(command, args, {
|
|
392
|
+
cwd: process.cwd(),
|
|
393
|
+
env: {
|
|
394
|
+
...process.env,
|
|
395
|
+
FORCE_COLOR: '0', // Disable color codes for easier parsing
|
|
396
|
+
CI: 'true', // Enable CI mode for consistent output
|
|
397
|
+
},
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
catch (error) {
|
|
401
|
+
finish(err(new Error(`Failed to spawn test runner: ${toErrorMessage(error)}. Is '${command}' installed?`)));
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
397
404
|
// Set timeout
|
|
398
405
|
const timeoutId = setTimeout(() => {
|
|
399
406
|
killed = true;
|
|
400
407
|
proc.kill('SIGTERM');
|
|
401
|
-
finish(err(new Error(`Test execution timed out after ${timeout}ms for files: ${fileLabel}`)));
|
|
408
|
+
finish(err(new Error(`Test execution timed out after ${timeout}ms for files: ${fileLabel}`)), false);
|
|
402
409
|
}, timeout);
|
|
403
410
|
proc.stdout?.on('data', (data) => {
|
|
404
411
|
stdout += data.toString();
|
|
@@ -409,11 +416,23 @@ Provide:
|
|
|
409
416
|
proc.on('close', (code) => {
|
|
410
417
|
clearTimeout(timeoutId);
|
|
411
418
|
if (killed) {
|
|
412
|
-
|
|
419
|
+
report?.cleanup();
|
|
420
|
+
return; // Timeout result was already returned; child has now closed.
|
|
413
421
|
}
|
|
414
422
|
// Parse results based on framework. Vitest 5 writes the JSON report to
|
|
415
423
|
// a file instead of stdout, so read it back through the report handle.
|
|
416
|
-
|
|
424
|
+
let reportText;
|
|
425
|
+
try {
|
|
426
|
+
reportText = report ? report.read(stdout) : stdout;
|
|
427
|
+
}
|
|
428
|
+
catch (error) {
|
|
429
|
+
finish(err(toError(error)));
|
|
430
|
+
return;
|
|
431
|
+
}
|
|
432
|
+
if (reportText === undefined) {
|
|
433
|
+
finish(err(new Error(`The current Vitest JSON report is missing for ${fileLabel}.`)));
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
417
436
|
const parseResult = this.parseTestOutput(reportText, stderr, fileLabel, framework, code);
|
|
418
437
|
// If no coverage in stdout JSON, try reading from disk
|
|
419
438
|
// (vitest/jest write coverage to coverage/coverage-summary.json)
|
|
@@ -430,6 +449,8 @@ Provide:
|
|
|
430
449
|
});
|
|
431
450
|
proc.on('error', (error) => {
|
|
432
451
|
clearTimeout(timeoutId);
|
|
452
|
+
if (killed)
|
|
453
|
+
return;
|
|
433
454
|
finish(err(new Error(`Failed to spawn test runner: ${error.message}. Is '${command}' installed?`)));
|
|
434
455
|
});
|
|
435
456
|
});
|