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
|
@@ -14,7 +14,7 @@ import { BaseModelProvider } from '../model-provider';
|
|
|
14
14
|
* Popular models available through OpenRouter
|
|
15
15
|
* OpenRouter supports 100+ models - these are the most useful for security verification
|
|
16
16
|
*/
|
|
17
|
-
export type OpenRouterModel = 'anthropic/claude-
|
|
17
|
+
export type OpenRouterModel = 'anthropic/claude-sonnet-5' | 'anthropic/claude-opus-5' | 'anthropic/claude-opus-5.5' | 'anthropic/claude-haiku-4.5' | 'openai/gpt-6-sol' | 'openai/gpt-6-luna' | 'openai/gpt-6-astra' | 'openai/gpt-oss-120b' | 'google/gemini-3.8-flash' | 'google/gemini-3.1-pro-preview' | 'google/gemini-2.5-pro' | 'google/gemini-2.5-flash' | 'meta-llama/llama-4-maverick' | 'meta-llama/llama-4-scout' | 'mistralai/mistral-large-2512' | 'deepseek/deepseek-v4-pro' | 'deepseek/deepseek-v4.1-flash' | 'qwen/qwen3-coder' | string;
|
|
18
18
|
/**
|
|
19
19
|
* Model tier for cost/capability classification
|
|
20
20
|
*/
|
|
@@ -67,7 +67,7 @@ export declare function getCostOptimizedModels(): OpenRouterModel[];
|
|
|
67
67
|
* ```typescript
|
|
68
68
|
* const provider = new OpenRouterModelProvider({
|
|
69
69
|
* apiKey: process.env.OPENROUTER_API_KEY,
|
|
70
|
-
* defaultModel: 'anthropic/claude-
|
|
70
|
+
* defaultModel: 'anthropic/claude-sonnet-5',
|
|
71
71
|
* });
|
|
72
72
|
*
|
|
73
73
|
* const result = await provider.complete('Analyze this code for vulnerabilities...');
|
|
@@ -135,13 +135,13 @@ export declare class OpenRouterModelProvider extends BaseModelProvider {
|
|
|
135
135
|
*
|
|
136
136
|
* // With specific model
|
|
137
137
|
* const provider = createOpenRouterProvider({
|
|
138
|
-
* defaultModel: 'meta-llama/llama-
|
|
138
|
+
* defaultModel: 'meta-llama/llama-4-maverick',
|
|
139
139
|
* });
|
|
140
140
|
*
|
|
141
141
|
* // With fallback models
|
|
142
142
|
* const provider = createOpenRouterProvider({
|
|
143
|
-
* defaultModel: 'anthropic/claude-
|
|
144
|
-
* fallbackModels: ['openai/gpt-
|
|
143
|
+
* defaultModel: 'anthropic/claude-sonnet-5',
|
|
144
|
+
* fallbackModels: ['openai/gpt-6-sol', 'google/gemini-2.5-pro'],
|
|
145
145
|
* });
|
|
146
146
|
* ```
|
|
147
147
|
*/
|
|
@@ -10,42 +10,69 @@
|
|
|
10
10
|
*/
|
|
11
11
|
import { BaseModelProvider } from '../model-provider.js';
|
|
12
12
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
13
|
+
import { resolveModelPricing } from '../../../shared/llm/cost-tracker.js';
|
|
13
14
|
// ============================================================================
|
|
14
15
|
// Model Cost and Tier Information
|
|
15
16
|
// ============================================================================
|
|
16
17
|
/**
|
|
17
|
-
* Cost per 1M tokens for
|
|
18
|
-
*
|
|
18
|
+
* Cost per 1M tokens for current models (input/output)
|
|
19
|
+
* From the OpenRouter public catalog (2026-09-27) - check OpenRouter for current prices
|
|
19
20
|
*/
|
|
20
21
|
const MODEL_COSTS = {
|
|
21
22
|
// Claude models
|
|
22
|
-
'anthropic/claude-
|
|
23
|
-
'anthropic/claude-
|
|
24
|
-
'anthropic/claude-
|
|
25
|
-
'anthropic/claude-
|
|
23
|
+
'anthropic/claude-sonnet-5': { input: 2, output: 10, tier: 'standard' },
|
|
24
|
+
'anthropic/claude-opus-5': { input: 5, output: 25, tier: 'premium' },
|
|
25
|
+
'anthropic/claude-opus-5.5': { input: 4, output: 20, tier: 'premium' },
|
|
26
|
+
'anthropic/claude-haiku-4.5': { input: 1, output: 5, tier: 'cheap' },
|
|
26
27
|
// OpenAI models
|
|
27
|
-
'openai/gpt-
|
|
28
|
-
'openai/gpt-
|
|
29
|
-
'openai/gpt-
|
|
30
|
-
'openai/gpt-
|
|
28
|
+
'openai/gpt-6-astra': { input: 10, output: 50, tier: 'premium' },
|
|
29
|
+
'openai/gpt-6-sol': { input: 2, output: 10, tier: 'standard' },
|
|
30
|
+
'openai/gpt-6-luna': { input: 0.1, output: 0.5, tier: 'cheap' },
|
|
31
|
+
'openai/gpt-oss-120b': { input: 0.15, output: 0.6, tier: 'cheap' },
|
|
31
32
|
// Google models
|
|
32
|
-
'google/gemini-pro-
|
|
33
|
-
'google/gemini-
|
|
33
|
+
'google/gemini-3.1-pro-preview': { input: 2, output: 12, tier: 'standard' },
|
|
34
|
+
'google/gemini-2.5-pro': { input: 1.25, output: 10, tier: 'standard' },
|
|
35
|
+
'google/gemini-3.8-flash': { input: 0.75, output: 3.75, tier: 'cheap' },
|
|
36
|
+
'google/gemini-2.5-flash': { input: 0.3, output: 2.5, tier: 'cheap' },
|
|
34
37
|
// Llama models
|
|
35
|
-
'meta-llama/llama-
|
|
36
|
-
'meta-llama/llama-
|
|
37
|
-
'meta-llama/llama-3.1-8b-instruct': { input: 0.055, output: 0.055, tier: 'free' },
|
|
38
|
+
'meta-llama/llama-4-maverick': { input: 0.1875, output: 0.6525, tier: 'cheap' },
|
|
39
|
+
'meta-llama/llama-4-scout': { input: 0.1, output: 0.3, tier: 'cheap' },
|
|
38
40
|
// Mistral models
|
|
39
|
-
'mistralai/mistral-large': { input:
|
|
40
|
-
'mistralai/mixtral-8x22b-instruct': { input: 0.65, output: 0.65, tier: 'cheap' },
|
|
41
|
+
'mistralai/mistral-large-2512': { input: 0.5, output: 1.5, tier: 'cheap' },
|
|
41
42
|
// DeepSeek models
|
|
42
|
-
'deepseek/deepseek-
|
|
43
|
-
'deepseek/deepseek-
|
|
43
|
+
'deepseek/deepseek-v4-pro': { input: 0.348, output: 0.696, tier: 'cheap' },
|
|
44
|
+
'deepseek/deepseek-v4.1-flash': { input: 0.035, output: 0.29, tier: 'cheap' },
|
|
44
45
|
// Qwen models
|
|
45
|
-
'qwen/
|
|
46
|
-
// Cohere models
|
|
47
|
-
'cohere/command-r-plus': { input: 2.5, output: 10, tier: 'standard' },
|
|
46
|
+
'qwen/qwen3-coder': { input: 0.3, output: 1, tier: 'cheap' },
|
|
48
47
|
};
|
|
48
|
+
/**
|
|
49
|
+
* Deprecated models no longer served by OpenRouter. Pricing only, so historical
|
|
50
|
+
* usage still costs correctly — excluded from supported models and tier lists.
|
|
51
|
+
*/
|
|
52
|
+
const DEPRECATED_MODEL_COSTS = {
|
|
53
|
+
'anthropic/claude-3.5-sonnet': { input: 3, output: 15 },
|
|
54
|
+
'anthropic/claude-3-opus': { input: 15, output: 75 },
|
|
55
|
+
'anthropic/claude-3-sonnet': { input: 3, output: 15 },
|
|
56
|
+
'anthropic/claude-3-haiku': { input: 0.25, output: 1.25 },
|
|
57
|
+
'openai/gpt-4-turbo': { input: 10, output: 30 },
|
|
58
|
+
'openai/gpt-4': { input: 30, output: 60 },
|
|
59
|
+
'openai/gpt-4o': { input: 5, output: 15 },
|
|
60
|
+
'openai/gpt-4o-mini': { input: 0.15, output: 0.6 },
|
|
61
|
+
'google/gemini-pro-1.5': { input: 3.5, output: 10.5 },
|
|
62
|
+
'google/gemini-flash-1.5': { input: 0.075, output: 0.3 },
|
|
63
|
+
'meta-llama/llama-3.1-405b-instruct': { input: 2.7, output: 2.7 },
|
|
64
|
+
'meta-llama/llama-3.1-70b-instruct': { input: 0.52, output: 0.75 },
|
|
65
|
+
'meta-llama/llama-3.1-8b-instruct': { input: 0.055, output: 0.055 },
|
|
66
|
+
'mistralai/mistral-large': { input: 3, output: 9 },
|
|
67
|
+
'mistralai/mixtral-8x22b-instruct': { input: 0.65, output: 0.65 },
|
|
68
|
+
'deepseek/deepseek-chat': { input: 0.14, output: 0.28 },
|
|
69
|
+
'deepseek/deepseek-coder': { input: 0.14, output: 0.28 },
|
|
70
|
+
'qwen/qwen-2.5-72b-instruct': { input: 0.35, output: 0.4 },
|
|
71
|
+
'cohere/command-r-plus': { input: 2.5, output: 10 },
|
|
72
|
+
};
|
|
73
|
+
function lookupModelCost(model) {
|
|
74
|
+
return MODEL_COSTS[model] ?? DEPRECATED_MODEL_COSTS[model] ?? resolveModelPricing(model);
|
|
75
|
+
}
|
|
49
76
|
/**
|
|
50
77
|
* Get models by tier for cost optimization
|
|
51
78
|
*/
|
|
@@ -60,10 +87,10 @@ export function getModelsByTier(tier) {
|
|
|
60
87
|
*/
|
|
61
88
|
export function getRecommendedSecurityModels() {
|
|
62
89
|
return [
|
|
63
|
-
'anthropic/claude-
|
|
64
|
-
'openai/gpt-
|
|
65
|
-
'google/gemini-
|
|
66
|
-
'
|
|
90
|
+
'anthropic/claude-sonnet-5', // Best for security analysis
|
|
91
|
+
'openai/gpt-6-sol', // Strong reasoning
|
|
92
|
+
'google/gemini-2.5-pro', // Good code understanding
|
|
93
|
+
'deepseek/deepseek-v4-pro', // Cost-effective alternative
|
|
67
94
|
];
|
|
68
95
|
}
|
|
69
96
|
/**
|
|
@@ -71,17 +98,17 @@ export function getRecommendedSecurityModels() {
|
|
|
71
98
|
*/
|
|
72
99
|
export function getCostOptimizedModels() {
|
|
73
100
|
return [
|
|
74
|
-
'anthropic/claude-
|
|
75
|
-
'openai/gpt-
|
|
76
|
-
'google/gemini-flash
|
|
77
|
-
'
|
|
101
|
+
'anthropic/claude-haiku-4.5', // Fast and cheap Claude
|
|
102
|
+
'openai/gpt-6-luna', // Cheap GPT-6
|
|
103
|
+
'google/gemini-3.8-flash', // Cheap Gemini
|
|
104
|
+
'qwen/qwen3-coder', // Very cheap alternative
|
|
78
105
|
];
|
|
79
106
|
}
|
|
80
107
|
// ============================================================================
|
|
81
108
|
// OpenRouter Provider Implementation
|
|
82
109
|
// ============================================================================
|
|
83
110
|
const DEFAULT_CONFIG = {
|
|
84
|
-
defaultModel: 'anthropic/claude-
|
|
111
|
+
defaultModel: 'anthropic/claude-sonnet-5',
|
|
85
112
|
defaultTimeout: 120000, // 2 minutes
|
|
86
113
|
maxRetries: 3,
|
|
87
114
|
retryDelayMs: 1000,
|
|
@@ -97,7 +124,7 @@ const DEFAULT_CONFIG = {
|
|
|
97
124
|
* ```typescript
|
|
98
125
|
* const provider = new OpenRouterModelProvider({
|
|
99
126
|
* apiKey: process.env.OPENROUTER_API_KEY,
|
|
100
|
-
* defaultModel: 'anthropic/claude-
|
|
127
|
+
* defaultModel: 'anthropic/claude-sonnet-5',
|
|
101
128
|
* });
|
|
102
129
|
*
|
|
103
130
|
* const result = await provider.complete('Analyze this code for vulnerabilities...');
|
|
@@ -127,7 +154,7 @@ export class OpenRouterModelProvider extends BaseModelProvider {
|
|
|
127
154
|
this.id = `openrouter-${(this.config.defaultModel ?? 'default').replace(/[^a-z0-9]/gi, '-')}`;
|
|
128
155
|
this.name = `OpenRouter (${this.config.defaultModel ?? 'default'})`;
|
|
129
156
|
// Set cost per token based on default model
|
|
130
|
-
const modelCosts =
|
|
157
|
+
const modelCosts = lookupModelCost(this.config.defaultModel);
|
|
131
158
|
if (modelCosts) {
|
|
132
159
|
this.costPerToken = {
|
|
133
160
|
input: modelCosts.input / 1_000_000,
|
|
@@ -183,7 +210,7 @@ export class OpenRouterModelProvider extends BaseModelProvider {
|
|
|
183
210
|
this.requestCount++;
|
|
184
211
|
// Track cost
|
|
185
212
|
if (response.usage) {
|
|
186
|
-
const costs =
|
|
213
|
+
const costs = lookupModelCost(tryModel) || { input: 1, output: 2 };
|
|
187
214
|
const cost = (response.usage.prompt_tokens * costs.input +
|
|
188
215
|
response.usage.completion_tokens * costs.output) /
|
|
189
216
|
1_000_000;
|
|
@@ -330,13 +357,13 @@ Format your response with: verdict (confirmed/rejected/uncertain), confidence (0
|
|
|
330
357
|
*
|
|
331
358
|
* // With specific model
|
|
332
359
|
* const provider = createOpenRouterProvider({
|
|
333
|
-
* defaultModel: 'meta-llama/llama-
|
|
360
|
+
* defaultModel: 'meta-llama/llama-4-maverick',
|
|
334
361
|
* });
|
|
335
362
|
*
|
|
336
363
|
* // With fallback models
|
|
337
364
|
* const provider = createOpenRouterProvider({
|
|
338
|
-
* defaultModel: 'anthropic/claude-
|
|
339
|
-
* fallbackModels: ['openai/gpt-
|
|
365
|
+
* defaultModel: 'anthropic/claude-sonnet-5',
|
|
366
|
+
* fallbackModels: ['openai/gpt-6-sol', 'google/gemini-2.5-pro'],
|
|
340
367
|
* });
|
|
341
368
|
* ```
|
|
342
369
|
*/
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* of DomainTaskExecutor needed to register and implement handlers.
|
|
6
6
|
*/
|
|
7
7
|
import type { Result } from '../../shared/types';
|
|
8
|
+
import type { MemoryBackend } from '../../kernel/interfaces.js';
|
|
8
9
|
import type { QueenTask, TaskType } from '../queen-coordinator';
|
|
9
10
|
import type { CoverageAnalyzerService } from '../../domains/coverage-analysis';
|
|
10
11
|
import type { SecurityScannerService } from '../../domains/security-compliance';
|
|
@@ -20,6 +21,8 @@ export type InstanceTaskHandler = (task: QueenTask) => Promise<Result<unknown, E
|
|
|
20
21
|
export interface TaskHandlerContext {
|
|
21
22
|
/** Register a handler for a given task type */
|
|
22
23
|
registerHandler(type: TaskType, handler: InstanceTaskHandler): void;
|
|
24
|
+
/** Initialized kernel memory, including canonical measured quality evidence. */
|
|
25
|
+
readonly memory: MemoryBackend;
|
|
23
26
|
/** Lazy service getters */
|
|
24
27
|
getCoverageAnalyzer(): CoverageAnalyzerService;
|
|
25
28
|
getSecurityScanner(): SecurityScannerService;
|
|
@@ -7,11 +7,21 @@
|
|
|
7
7
|
import { ok, err } from '../../shared/types/index.js';
|
|
8
8
|
import { toError } from '../../shared/error-utils.js';
|
|
9
9
|
import { discoverSourceFiles } from './handler-utils.js';
|
|
10
|
+
import { evaluateQualityEvidence, loadQualityEvidence, } from '../../domains/quality-assessment/quality-evidence.js';
|
|
10
11
|
export function registerQualityHandlers(ctx) {
|
|
11
12
|
// Register quality assessment handler - REAL IMPLEMENTATION
|
|
12
13
|
ctx.registerHandler('assess-quality', async (task) => {
|
|
13
14
|
const payload = task.payload;
|
|
14
15
|
try {
|
|
16
|
+
// An explicit gate evaluates the same measured, timestamped evidence as
|
|
17
|
+
// `aqe quality --gate`. Static source scores cannot substitute for it.
|
|
18
|
+
if (payload.runGate === true) {
|
|
19
|
+
const measured = await loadQualityEvidence(ctx.memory);
|
|
20
|
+
return ok({
|
|
21
|
+
...evaluateQualityEvidence(measured),
|
|
22
|
+
metrics: measured,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
15
25
|
const analyzer = ctx.getQualityAnalyzer();
|
|
16
26
|
const threshold = payload.threshold || 80;
|
|
17
27
|
// Determine source files to analyze
|
|
@@ -7,48 +7,47 @@
|
|
|
7
7
|
import * as fs from 'fs/promises';
|
|
8
8
|
import * as path from 'path';
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
|
+
import { createHash } from 'node:crypto';
|
|
10
11
|
import { toError } from '../../shared/error-utils.js';
|
|
11
12
|
import { FilePath } from '../../shared/value-objects/index.js';
|
|
12
|
-
import {
|
|
13
|
+
import { generateSecurityRecommendations } from './handler-utils.js';
|
|
14
|
+
import { discoverSecurityFiles, isSecuritySourceFile } from '../../domains/security-compliance/scan-discovery.js';
|
|
13
15
|
export function registerSecurityHandlers(ctx) {
|
|
14
16
|
// Register security scan handler - REAL IMPLEMENTATION
|
|
15
17
|
ctx.registerHandler('scan-security', async (task) => {
|
|
16
18
|
const payload = task.payload;
|
|
17
19
|
try {
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
const filesToScan =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
informational: 0,
|
|
30
|
-
topVulnerabilities: [],
|
|
31
|
-
recommendations: ['No source files found to scan'],
|
|
32
|
-
scanTypes: {
|
|
33
|
-
sast: payload.sast !== false,
|
|
34
|
-
dast: payload.dast || false,
|
|
35
|
-
},
|
|
36
|
-
warning: `No source files found in ${targetPath}`,
|
|
37
|
-
});
|
|
38
|
-
}
|
|
20
|
+
const targetPath = path.resolve(payload.target || process.cwd());
|
|
21
|
+
const sastRequested = payload.sast !== false;
|
|
22
|
+
const discoveryResult = sastRequested ? await discoverSecurityFiles(targetPath) : undefined;
|
|
23
|
+
const filesToScan = discoveryResult?.files ?? [];
|
|
24
|
+
const fileEvidence = [];
|
|
25
|
+
const engines = [];
|
|
26
|
+
const genericRules = new Map();
|
|
27
|
+
const genericErrors = [];
|
|
28
|
+
const manifestErrors = [];
|
|
29
|
+
const manifestRules = new Map();
|
|
30
|
+
const limitations = [];
|
|
39
31
|
// Separate files by language capability
|
|
40
|
-
const jstsFiles = filesToScan.filter(f => /\.(ts|tsx|js|jsx|mjs|cjs)
|
|
41
|
-
const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)
|
|
32
|
+
const jstsFiles = filesToScan.filter(f => /\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
|
|
33
|
+
const otherFiles = filesToScan.filter(f => !/\.(ts|tsx|js|jsx|mjs|cjs)$/i.test(f));
|
|
42
34
|
// Run basic cross-language security patterns on non-JS/TS files
|
|
43
35
|
const crossLangVulns = [];
|
|
44
36
|
// Run secret/CORS patterns on ALL files (not just otherFiles) to catch JS/TS secrets too
|
|
45
37
|
for (const filePath of filesToScan) {
|
|
38
|
+
if (!isSecuritySourceFile(filePath)) {
|
|
39
|
+
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'unsupported',
|
|
40
|
+
readLines: 0, analyzedLines: 0, reason: 'Outside the declared source-language policy.' });
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
46
43
|
try {
|
|
47
|
-
const
|
|
44
|
+
const source = await fs.readFile(filePath);
|
|
45
|
+
const content = source.toString('utf-8');
|
|
48
46
|
const lines = content.split('\n');
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
:
|
|
47
|
+
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'analyzed',
|
|
48
|
+
sourceDigest: createHash('sha256').update(source).digest('hex'),
|
|
49
|
+
readLines: lines.length, analyzedLines: lines.length });
|
|
50
|
+
const relPath = path.relative(targetPath, filePath) || path.basename(filePath);
|
|
52
51
|
// Pattern: Hardcoded secrets/keys
|
|
53
52
|
// Fix #287: Use \w* around keywords to match SECRET_KEY, JWT_SECRET, API_TOKEN, etc.
|
|
54
53
|
const secretPatterns = [
|
|
@@ -56,7 +55,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
56
55
|
{ regex: /\w*(?:token|auth_token|access_key|secret_key)\w*\s*[=:]\s*['"][^'"]{8,}['"]/gi, title: 'Hardcoded credential', severity: 'critical' },
|
|
57
56
|
{ regex: /(?:AWS_SECRET|GITHUB_TOKEN|SLACK_TOKEN|OPENAI_API_KEY)\s*[=:]\s*['"][^'"]+['"]/gi, title: 'Hardcoded cloud credential', severity: 'critical' },
|
|
58
57
|
];
|
|
59
|
-
for (const pattern of secretPatterns) {
|
|
58
|
+
for (const [index, pattern] of secretPatterns.entries()) {
|
|
59
|
+
genericRules.set(`secret-${index}`, pattern.regex.toString());
|
|
60
60
|
for (let i = 0; i < lines.length; i++) {
|
|
61
61
|
// Use matchAll to find ALL secrets on a single line (not just first)
|
|
62
62
|
const matches = [...lines[i].matchAll(pattern.regex)];
|
|
@@ -73,6 +73,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
73
73
|
}
|
|
74
74
|
// Pattern: SQL injection risks
|
|
75
75
|
const sqlPatterns = /(?:execute|query|cursor\.execute)\s*\(\s*(?:f['"]|['"].*%s|['"].*\+\s*\w)/gi;
|
|
76
|
+
genericRules.set('sql-interpolation', sqlPatterns.toString());
|
|
76
77
|
for (let i = 0; i < lines.length; i++) {
|
|
77
78
|
if (sqlPatterns.test(lines[i])) {
|
|
78
79
|
crossLangVulns.push({
|
|
@@ -93,7 +94,8 @@ export function registerSecurityHandlers(ctx) {
|
|
|
93
94
|
/@CrossOrigin\(\s*origins?\s*=\s*["']\*["']/i, // Spring Boot
|
|
94
95
|
/\.Header\(\)\.Set\(["']Access-Control-Allow-Origin["'],\s*["']\*["']/i, // Go
|
|
95
96
|
];
|
|
96
|
-
for (const corsPattern of corsPatterns) {
|
|
97
|
+
for (const [index, corsPattern] of corsPatterns.entries()) {
|
|
98
|
+
genericRules.set(`cors-${index}`, corsPattern.toString());
|
|
97
99
|
if (corsPattern.test(content)) {
|
|
98
100
|
crossLangVulns.push({
|
|
99
101
|
title: 'CORS wildcard origin',
|
|
@@ -106,6 +108,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
106
108
|
}
|
|
107
109
|
}
|
|
108
110
|
// Pattern: Debug/development mode enabled
|
|
111
|
+
genericRules.set('debug-mode', /(?:DEBUG|debug)\s*[=:]\s*(?:True|true|1)/i.toString());
|
|
109
112
|
if (/(?:DEBUG|debug)\s*[=:]\s*(?:True|true|1)/i.test(content)) {
|
|
110
113
|
crossLangVulns.push({
|
|
111
114
|
title: 'Debug mode enabled',
|
|
@@ -116,6 +119,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
116
119
|
});
|
|
117
120
|
}
|
|
118
121
|
// Pattern: Eval/exec usage
|
|
122
|
+
genericRules.set('eval-exec', /\b(?:eval|exec)\s*\(/i.toString());
|
|
119
123
|
if (/\b(?:eval|exec)\s*\(/i.test(content)) {
|
|
120
124
|
crossLangVulns.push({
|
|
121
125
|
title: 'Dangerous eval/exec usage',
|
|
@@ -126,16 +130,24 @@ export function registerSecurityHandlers(ctx) {
|
|
|
126
130
|
});
|
|
127
131
|
}
|
|
128
132
|
}
|
|
129
|
-
catch {
|
|
130
|
-
|
|
133
|
+
catch (error) {
|
|
134
|
+
const reason = `Source read failed: ${safeErrorCode(error)}`;
|
|
135
|
+
genericErrors.push(`${filePath}: ${reason}`);
|
|
136
|
+
fileEvidence.push({ path: filePath, engineId: 'generic-patterns', status: 'unreadable',
|
|
137
|
+
readLines: 0, analyzedLines: 0, reason });
|
|
131
138
|
}
|
|
132
139
|
}
|
|
133
140
|
// Also check dependency manifests for known vulnerable packages
|
|
134
141
|
const depManifests = ['requirements.txt', 'pyproject.toml', 'Gemfile', 'go.mod', 'Cargo.toml'];
|
|
135
|
-
for (const manifest of depManifests) {
|
|
142
|
+
for (const manifest of sastRequested ? depManifests : []) {
|
|
136
143
|
const manifestPath = path.join(targetPath, manifest);
|
|
137
144
|
try {
|
|
138
|
-
const
|
|
145
|
+
const manifestSource = await fs.readFile(manifestPath);
|
|
146
|
+
const manifestContent = manifestSource.toString('utf-8');
|
|
147
|
+
const manifestLines = manifestContent.split('\n').length;
|
|
148
|
+
fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'analyzed',
|
|
149
|
+
sourceDigest: createHash('sha256').update(manifestSource).digest('hex'), readLines: manifestLines, analyzedLines: manifestLines });
|
|
150
|
+
manifestRules.set('dependency-audit-advisory', 'Presence of a supported dependency manifest');
|
|
139
151
|
crossLangVulns.push({
|
|
140
152
|
title: 'Dependency audit recommended',
|
|
141
153
|
severity: 'informational',
|
|
@@ -151,6 +163,7 @@ export function registerSecurityHandlers(ctx) {
|
|
|
151
163
|
{ pkg: 'python-multipart', pattern: /python-multipart/i, cve: 'CVE-2026-24486', severity: 'critical', title: 'python-multipart DoS (CVE-2026-24486)', description: 'python-multipart denial of service via crafted multipart data — upgrade to >=0.0.18' },
|
|
152
164
|
];
|
|
153
165
|
for (const known of knownCVEs) {
|
|
166
|
+
manifestRules.set(known.cve, known.pattern.toString());
|
|
154
167
|
if (known.pattern.test(manifestContent)) {
|
|
155
168
|
crossLangVulns.push({
|
|
156
169
|
title: known.title,
|
|
@@ -163,32 +176,108 @@ export function registerSecurityHandlers(ctx) {
|
|
|
163
176
|
}
|
|
164
177
|
}
|
|
165
178
|
}
|
|
166
|
-
catch {
|
|
167
|
-
|
|
179
|
+
catch (error) {
|
|
180
|
+
const code = error.code;
|
|
181
|
+
if (code !== 'ENOENT' && code !== 'ENOTDIR') {
|
|
182
|
+
const reason = `Manifest read failed: ${safeErrorCode(error)}`;
|
|
183
|
+
manifestErrors.push(`${manifestPath}: ${reason}`);
|
|
184
|
+
fileEvidence.push({ path: manifestPath, engineId: 'dependency-manifest-patterns', status: 'unreadable',
|
|
185
|
+
readLines: 0, analyzedLines: 0, reason });
|
|
186
|
+
}
|
|
168
187
|
}
|
|
169
188
|
}
|
|
189
|
+
const genericAnalyzed = fileEvidence.filter(file => file.engineId === 'generic-patterns' && file.status === 'analyzed').length;
|
|
190
|
+
const manifestsAnalyzed = fileEvidence.filter(file => file.engineId === 'dependency-manifest-patterns' && file.status === 'analyzed').length;
|
|
191
|
+
engines.push({ id: 'dependency-manifest-patterns', requested: sastRequested, required: false,
|
|
192
|
+
status: !sastRequested ? 'disabled' : manifestErrors.length > 0 ? (manifestsAnalyzed > 0 ? 'partial' : 'failed') : manifestsAnalyzed > 0 ? 'completed' : 'not-run',
|
|
193
|
+
scope: 'parent-directory', target: targetPath, analyzedFiles: manifestsAnalyzed,
|
|
194
|
+
ruleIds: [...manifestRules.keys()].sort(), rulesetDigest: createHash('sha256').update(JSON.stringify([...manifestRules.entries()].sort())).digest('hex'),
|
|
195
|
+
ruleCoverage: 'known', errors: manifestErrors, limitations: ['Manifest name patterns are advisories, not a resolved dependency or version audit.'] });
|
|
196
|
+
const genericLimitations = ['Generic text patterns do not establish language-specific or dependency vulnerability coverage.'];
|
|
197
|
+
engines.push({ id: 'generic-patterns', requested: sastRequested, required: sastRequested,
|
|
198
|
+
status: !sastRequested ? 'disabled' : genericErrors.length > 0 ? (genericAnalyzed > 0 ? 'partial' : 'failed')
|
|
199
|
+
: genericAnalyzed === filesToScan.length && genericAnalyzed > 0 ? 'completed'
|
|
200
|
+
: genericAnalyzed > 0 ? 'partial' : filesToScan.length > 0 ? 'unavailable' : 'not-run',
|
|
201
|
+
scope: 'requested-files', analyzedFiles: genericAnalyzed,
|
|
202
|
+
ruleIds: [...genericRules.keys()].sort(),
|
|
203
|
+
rulesetDigest: createHash('sha256').update(JSON.stringify([...genericRules.entries()].sort())).digest('hex'),
|
|
204
|
+
ruleCoverage: 'known', errors: genericErrors, limitations: genericLimitations });
|
|
170
205
|
// Convert JS/TS file paths to FilePath value objects for the SAST scanner
|
|
171
206
|
const filePathObjects = jstsFiles.map(filePath => FilePath.create(filePath));
|
|
172
|
-
//
|
|
207
|
+
// Only returned execution receipts can establish SAST coverage.
|
|
173
208
|
let sastResult = null;
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
209
|
+
if (sastRequested && filePathObjects.length > 0) {
|
|
210
|
+
try {
|
|
211
|
+
const result = await ctx.getSecurityScanner().scanFiles(filePathObjects);
|
|
212
|
+
if (result.success) {
|
|
213
|
+
sastResult = result.value;
|
|
214
|
+
if (sastResult.evidence) {
|
|
215
|
+
fileEvidence.push(...sastResult.evidence.files);
|
|
216
|
+
engines.push(...sastResult.evidence.engines);
|
|
217
|
+
limitations.push(...sastResult.evidence.limitations);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
engines.push(unverifiedEngine('sast', 'requested-files'));
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
engines.push(failedEngine('sast', 'requested-files', result.error));
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
engines.push(failedEngine('sast', 'requested-files', error));
|
|
178
229
|
}
|
|
179
230
|
}
|
|
180
|
-
|
|
231
|
+
else {
|
|
232
|
+
engines.push({ id: 'sast', requested: sastRequested, required: false,
|
|
233
|
+
status: sastRequested ? 'not-run' : 'disabled', scope: 'requested-files', analyzedFiles: 0,
|
|
234
|
+
ruleCoverage: 'unknown', errors: [], limitations: sastRequested ? ['No JS/TS files were available for language-specific SAST.'] : [] });
|
|
235
|
+
}
|
|
181
236
|
let dastResult = null;
|
|
182
237
|
if (payload.dast && payload.targetUrl) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
238
|
+
try {
|
|
239
|
+
const result = await ctx.getSecurityScanner().scanUrl(payload.targetUrl, {
|
|
240
|
+
activeScanning: true, maxDepth: 3, timeout: 30000,
|
|
241
|
+
});
|
|
242
|
+
if (result.success) {
|
|
243
|
+
dastResult = result.value;
|
|
244
|
+
// Legacy DAST results contain findings, but no execution coverage receipt.
|
|
245
|
+
engines.push({ ...unverifiedEngine('dast', 'url'), target: payload.targetUrl });
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
engines.push({ ...failedEngine('dast', 'url', result.error), target: payload.targetUrl });
|
|
249
|
+
}
|
|
190
250
|
}
|
|
251
|
+
catch (error) {
|
|
252
|
+
engines.push({ ...failedEngine('dast', 'url', error), target: payload.targetUrl });
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
engines.push({ id: 'dast', requested: payload.dast === true, required: payload.dast === true,
|
|
257
|
+
status: payload.dast ? 'not-run' : 'disabled', scope: 'url', ruleCoverage: 'unknown',
|
|
258
|
+
errors: payload.dast ? ['DAST was requested without targetUrl.'] : [], limitations: [] });
|
|
191
259
|
}
|
|
260
|
+
if (payload.compliance?.length) {
|
|
261
|
+
engines.push({ id: 'compliance', requested: true, required: true, status: 'not-run',
|
|
262
|
+
scope: 'requested-files', ruleCoverage: 'unknown', errors: [],
|
|
263
|
+
limitations: ['Requested compliance checks are not executed by this task handler.'] });
|
|
264
|
+
}
|
|
265
|
+
const requestedPaths = new Set(filesToScan);
|
|
266
|
+
const analyzedPaths = new Set(fileEvidence.filter(file => file.status === 'analyzed' && requestedPaths.has(file.path)).map(file => file.path));
|
|
267
|
+
const requiredEngines = engines.filter(engine => engine.requested && engine.required);
|
|
268
|
+
const hasExecuted = analyzedPaths.size > 0;
|
|
269
|
+
const complete = hasExecuted && requiredEngines.every(engine => engine.status === 'completed') &&
|
|
270
|
+
(!discoveryResult || discoveryResult.discovery.status === 'complete');
|
|
271
|
+
const evidence = {
|
|
272
|
+
schemaVersion: 1, completeness: complete ? 'complete' : hasExecuted ? 'partial' : 'none',
|
|
273
|
+
requestedFiles: filesToScan.length, requestedPaths: filesToScan, duplicateInputs: 0,
|
|
274
|
+
files: fileEvidence, engines,
|
|
275
|
+
limitations: [...new Set([...limitations, ...engines.flatMap(engine => [...engine.limitations, ...engine.errors]),
|
|
276
|
+
...(discoveryResult?.discovery.issues.map(issue => `${issue.path}: ${issue.reason}`) ?? [])])],
|
|
277
|
+
...(discoveryResult ? { discovery: discoveryResult.discovery } : {}),
|
|
278
|
+
};
|
|
279
|
+
const deepAnalysisPerformed = Boolean(sastResult?.evidence?.engines.some(engine => engine.id === 'patterns' && (engine.status === 'completed' || engine.status === 'partial') &&
|
|
280
|
+
(engine.analyzedFiles ?? 0) > 0));
|
|
192
281
|
// Combine results from all scan sources - SAST, DAST, and cross-language patterns
|
|
193
282
|
const crossLangSeverityCounts = {
|
|
194
283
|
critical: crossLangVulns.filter(v => v.severity === 'critical').length,
|
|
@@ -224,7 +313,9 @@ export function registerSecurityHandlers(ctx) {
|
|
|
224
313
|
description: v.description,
|
|
225
314
|
}));
|
|
226
315
|
// Generate recommendations based on findings
|
|
227
|
-
const recommendations =
|
|
316
|
+
const recommendations = allVulns.length === 0 && evidence.completeness !== 'complete'
|
|
317
|
+
? ['No findings reported; requested analysis is incomplete or unverified. Inspect execution receipts.']
|
|
318
|
+
: generateSecurityRecommendations(allVulns);
|
|
228
319
|
return ok({
|
|
229
320
|
vulnerabilities: allVulns.length,
|
|
230
321
|
critical: summary.critical,
|
|
@@ -233,33 +324,24 @@ export function registerSecurityHandlers(ctx) {
|
|
|
233
324
|
low: summary.low,
|
|
234
325
|
informational: summary.informational,
|
|
235
326
|
topVulnerabilities,
|
|
327
|
+
findings: allVulns,
|
|
236
328
|
recommendations,
|
|
237
329
|
scanTypes: {
|
|
238
330
|
sast: payload.sast !== false,
|
|
239
331
|
dast: payload.dast || false,
|
|
240
332
|
},
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
...(jstsFiles.length === 0 ? {
|
|
254
|
-
note: otherFiles.length > 0
|
|
255
|
-
? 'NO LANGUAGE-SPECIFIC ANALYSIS RAN. Only cross-language pattern matching ' +
|
|
256
|
-
'(secrets, CORS, eval/exec) was applied to these files — full SAST is ' +
|
|
257
|
-
'implemented for JS/TS only. A zero-finding result here means "nothing ' +
|
|
258
|
-
'matched a generic pattern", NOT "no vulnerabilities". Run a ' +
|
|
259
|
-
'language-specific tool (cargo audit / clippy, bandit, gosec, semgrep) ' +
|
|
260
|
-
'for real coverage of this codebase.'
|
|
261
|
-
: 'No source files were analyzed.',
|
|
262
|
-
} : {}),
|
|
333
|
+
status: evidence.completeness === 'complete' ? 'completed' : evidence.completeness === 'partial' ? 'partial' : 'unavailable',
|
|
334
|
+
evidence,
|
|
335
|
+
limitations: evidence.limitations,
|
|
336
|
+
filesScanned: analyzedPaths.size,
|
|
337
|
+
jstsFilesScanned: jstsFiles.filter(file => analyzedPaths.has(file)).length,
|
|
338
|
+
otherFilesScanned: otherFiles.filter(file => analyzedPaths.has(file)).length,
|
|
339
|
+
...(sastResult?.evidence ? { coverage: sastResult.coverage } : {}),
|
|
340
|
+
deepAnalysisPerformed,
|
|
341
|
+
analysisDepth: deepAnalysisPerformed
|
|
342
|
+
? (otherFiles.length > 0 ? 'sast-patterns-on-js-ts; generic-patterns-on-other-languages' : 'sast-patterns')
|
|
343
|
+
: genericAnalyzed > 0 ? 'pattern-matching-only' : 'none',
|
|
344
|
+
...(!deepAnalysisPerformed ? { note: 'No verified language-specific SAST ran. Generic pattern matches and partial findings do not establish that the target is free of vulnerabilities.' } : {}),
|
|
263
345
|
});
|
|
264
346
|
}
|
|
265
347
|
catch (error) {
|
|
@@ -267,4 +349,18 @@ export function registerSecurityHandlers(ctx) {
|
|
|
267
349
|
}
|
|
268
350
|
});
|
|
269
351
|
}
|
|
352
|
+
function failedEngine(id, scope, error) {
|
|
353
|
+
const reason = id === 'sast' && error instanceof Error && error.message.startsWith('No valid rule sets found:')
|
|
354
|
+
? 'No valid rule sets configured.' : `${id} execution failed (${safeErrorCode(error)}).`;
|
|
355
|
+
return { id, requested: true, required: true, status: 'failed', scope,
|
|
356
|
+
ruleCoverage: 'unknown', errors: [reason], limitations: [] };
|
|
357
|
+
}
|
|
358
|
+
function safeErrorCode(error) {
|
|
359
|
+
const code = error?.code;
|
|
360
|
+
return typeof code === 'string' && /^[A-Z0-9_]{1,32}$/.test(code) ? code : 'UNKNOWN';
|
|
361
|
+
}
|
|
362
|
+
function unverifiedEngine(id, scope) {
|
|
363
|
+
return { id, requested: true, required: true, status: 'unverified', scope,
|
|
364
|
+
ruleCoverage: 'unknown', errors: [], limitations: [`${id} returned no execution receipt; coverage is unverified.`] };
|
|
365
|
+
}
|
|
270
366
|
//# sourceMappingURL=security-handlers.js.map
|