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
|
@@ -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
|
*/
|
|
@@ -186,18 +186,20 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
186
186
|
let output;
|
|
187
187
|
try {
|
|
188
188
|
execution = spawnSync('npx', ['vitest', 'run', ...testFiles, '--reporter=json', ...report.args], options);
|
|
189
|
-
output =
|
|
189
|
+
output = execution.error || execution.signal
|
|
190
|
+
? ''
|
|
191
|
+
: report.read(execution.stdout || '') ?? '';
|
|
190
192
|
}
|
|
191
193
|
finally {
|
|
192
194
|
report.cleanup();
|
|
193
195
|
}
|
|
194
196
|
// Preserve the existing Jest fallback when Vitest cannot produce a report.
|
|
195
|
-
if (!output.includes('{') && execution.status !== 0) {
|
|
197
|
+
if (!output.includes('{') && execution.status !== 0 && !execution.error && !execution.signal) {
|
|
196
198
|
runner = 'jest';
|
|
197
199
|
execution = spawnSync('npx', ['jest', ...testFiles, '--json'], options);
|
|
198
200
|
output = execution.stdout || '';
|
|
199
201
|
}
|
|
200
|
-
const diagnostics = [execution.error?.message, execution.stderr, output].filter(Boolean).join('\n');
|
|
202
|
+
const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
|
|
201
203
|
if (execution.error) {
|
|
202
204
|
return err(new TestRunnerExecutionError(`${runner} could not complete: ${diagnostics.slice(0, 4000)}`));
|
|
203
205
|
}
|
|
@@ -69,7 +69,7 @@ export interface Protocol {
|
|
|
69
69
|
/**
|
|
70
70
|
* Status of a protocol action execution
|
|
71
71
|
*/
|
|
72
|
-
export type ActionExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'skipped' | 'cancelled';
|
|
72
|
+
export type ActionExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'unknown' | 'skipped' | 'cancelled';
|
|
73
73
|
/**
|
|
74
74
|
* Result of a single action execution
|
|
75
75
|
*/
|
|
@@ -94,7 +94,7 @@ export interface ActionExecutionResult {
|
|
|
94
94
|
/**
|
|
95
95
|
* Status of protocol execution
|
|
96
96
|
*/
|
|
97
|
-
export type ProtocolExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'cancelled' | 'paused';
|
|
97
|
+
export type ProtocolExecutionStatus = 'pending' | 'running' | 'completed' | 'failed' | 'unknown' | 'cancelled' | 'paused';
|
|
98
98
|
/**
|
|
99
99
|
* Protocol execution state
|
|
100
100
|
*/
|
|
@@ -6,6 +6,13 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
6
6
|
import { ok, err, } from '../shared/types/index.js';
|
|
7
7
|
import { createEvent } from '../shared/events/index.js';
|
|
8
8
|
import { toErrorMessage, toError } from '../shared/error-utils.js';
|
|
9
|
+
/** The caller stopped waiting, but the domain operation may still take effect. */
|
|
10
|
+
class ActionTimeoutError extends Error {
|
|
11
|
+
constructor(timeoutMs) {
|
|
12
|
+
super(`Action timed out after ${timeoutMs}ms; outcome is unknown`);
|
|
13
|
+
this.name = 'ActionTimeoutError';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
9
16
|
// ============================================================================
|
|
10
17
|
// Protocol Events
|
|
11
18
|
// ============================================================================
|
|
@@ -13,10 +20,12 @@ const ProtocolEvents = {
|
|
|
13
20
|
ProtocolStarted: 'coordination.ProtocolStarted',
|
|
14
21
|
ProtocolCompleted: 'coordination.ProtocolCompleted',
|
|
15
22
|
ProtocolFailed: 'coordination.ProtocolFailed',
|
|
23
|
+
ProtocolOutcomeUnknown: 'coordination.ProtocolOutcomeUnknown',
|
|
16
24
|
ProtocolCancelled: 'coordination.ProtocolCancelled',
|
|
17
25
|
ActionStarted: 'coordination.ActionStarted',
|
|
18
26
|
ActionCompleted: 'coordination.ActionCompleted',
|
|
19
27
|
ActionFailed: 'coordination.ActionFailed',
|
|
28
|
+
ActionOutcomeUnknown: 'coordination.ActionOutcomeUnknown',
|
|
20
29
|
};
|
|
21
30
|
// ============================================================================
|
|
22
31
|
// Protocol Executor Implementation
|
|
@@ -256,18 +265,22 @@ export class DefaultProtocolExecutor {
|
|
|
256
265
|
// Execute actions
|
|
257
266
|
await this.executeActions(context);
|
|
258
267
|
// Check for failures
|
|
259
|
-
const
|
|
268
|
+
const results = Array.from(context.actionResults.values());
|
|
269
|
+
const unknownActions = results.filter((r) => r.status === 'unknown').map((r) => r.actionId);
|
|
270
|
+
const failedActions = results.filter((r) => r.status === 'failed').map((r) => r.actionId);
|
|
260
271
|
if (context.cancelled) {
|
|
261
272
|
execution.status = 'cancelled';
|
|
262
273
|
}
|
|
263
|
-
else if (
|
|
274
|
+
else if (unknownActions.length > 0) {
|
|
275
|
+
execution.status = 'unknown';
|
|
276
|
+
await this.publishEvent(ProtocolEvents.ProtocolOutcomeUnknown, { executionId, protocolId: protocol.id, unknownActions, failedActions }, correlationId);
|
|
277
|
+
}
|
|
278
|
+
else if (failedActions.length > 0) {
|
|
264
279
|
execution.status = 'failed';
|
|
265
280
|
await this.publishEvent(ProtocolEvents.ProtocolFailed, {
|
|
266
281
|
executionId,
|
|
267
282
|
protocolId: protocol.id,
|
|
268
|
-
failedActions
|
|
269
|
-
.filter((r) => r.status === 'failed')
|
|
270
|
-
.map((r) => r.actionId),
|
|
283
|
+
failedActions,
|
|
271
284
|
}, correlationId);
|
|
272
285
|
}
|
|
273
286
|
else {
|
|
@@ -313,6 +326,23 @@ export class DefaultProtocolExecutor {
|
|
|
313
326
|
const readyActions = protocol.actions.filter((action) => pending.has(action.id) &&
|
|
314
327
|
this.dependenciesSatisfied(action, completed));
|
|
315
328
|
if (readyActions.length === 0 && pending.size > 0) {
|
|
329
|
+
// A failed/unknown prerequisite cannot authorize a dependent action.
|
|
330
|
+
// Mark the dependent skipped instead of misreporting a deadlock.
|
|
331
|
+
let skipped = false;
|
|
332
|
+
for (const action of protocol.actions) {
|
|
333
|
+
if (!pending.has(action.id))
|
|
334
|
+
continue;
|
|
335
|
+
if (action.dependsOn?.some((dep) => {
|
|
336
|
+
const status = actionResults.get(dep)?.status;
|
|
337
|
+
return status !== undefined && status !== 'completed';
|
|
338
|
+
})) {
|
|
339
|
+
actionResults.set(action.id, { actionId: action.id, status: 'skipped' });
|
|
340
|
+
pending.delete(action.id);
|
|
341
|
+
skipped = true;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (skipped)
|
|
345
|
+
continue;
|
|
316
346
|
// Deadlock - some actions can't be executed
|
|
317
347
|
throw new Error(`Deadlock detected: actions ${Array.from(pending).join(', ')} cannot proceed`);
|
|
318
348
|
}
|
|
@@ -402,6 +432,26 @@ export class DefaultProtocolExecutor {
|
|
|
402
432
|
}
|
|
403
433
|
catch (error) {
|
|
404
434
|
lastError = toError(error);
|
|
435
|
+
if (error instanceof ActionTimeoutError) {
|
|
436
|
+
// Promise.race cannot cancel the losing provider call. It may have
|
|
437
|
+
// committed an effect already, so replay would be unsafe.
|
|
438
|
+
const completedAt = new Date();
|
|
439
|
+
await this.publishEvent(ProtocolEvents.ActionOutcomeUnknown, {
|
|
440
|
+
executionId: context.execution.executionId,
|
|
441
|
+
actionId: action.id,
|
|
442
|
+
error: error.message,
|
|
443
|
+
attempts,
|
|
444
|
+
}, context.execution.correlationId);
|
|
445
|
+
return {
|
|
446
|
+
actionId: action.id,
|
|
447
|
+
status: 'unknown',
|
|
448
|
+
startedAt,
|
|
449
|
+
completedAt,
|
|
450
|
+
duration: completedAt.getTime() - startedAt.getTime(),
|
|
451
|
+
error: error.message,
|
|
452
|
+
retryAttempts: attempts > 1 ? attempts - 1 : undefined,
|
|
453
|
+
};
|
|
454
|
+
}
|
|
405
455
|
// Retry if configured and not last attempt
|
|
406
456
|
if (attempts < maxAttempts && action.retry) {
|
|
407
457
|
const backoff = action.retry.backoffMs *
|
|
@@ -441,10 +491,19 @@ export class DefaultProtocolExecutor {
|
|
|
441
491
|
* Execute a promise with timeout
|
|
442
492
|
*/
|
|
443
493
|
async executeWithTimeout(promise, timeoutMs) {
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
494
|
+
let timer;
|
|
495
|
+
try {
|
|
496
|
+
return await Promise.race([
|
|
497
|
+
promise,
|
|
498
|
+
new Promise((_, reject) => {
|
|
499
|
+
timer = setTimeout(() => reject(new ActionTimeoutError(timeoutMs)), timeoutMs);
|
|
500
|
+
}),
|
|
501
|
+
]);
|
|
502
|
+
}
|
|
503
|
+
finally {
|
|
504
|
+
if (timer)
|
|
505
|
+
clearTimeout(timer);
|
|
506
|
+
}
|
|
448
507
|
}
|
|
449
508
|
/**
|
|
450
509
|
* Set up event-based triggers for a protocol
|
|
@@ -351,13 +351,19 @@ export class QueenCoordinator {
|
|
|
351
351
|
const execution = this.tasks.get(taskId);
|
|
352
352
|
if (!execution)
|
|
353
353
|
return err(new Error(`Task not found: ${taskId}`));
|
|
354
|
+
// Repeated cancellation is one decision, not another event or capacity release.
|
|
355
|
+
if (execution.status === 'cancelled')
|
|
356
|
+
return ok(undefined);
|
|
354
357
|
if (execution.status === 'completed' || execution.status === 'failed') {
|
|
355
358
|
return err(new Error(`Task already finished: ${taskId}`));
|
|
356
359
|
}
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
this.tasks.set(taskId, {
|
|
360
|
+
const cancellationResultPending = execution.status === 'running' || execution.status === 'assigned';
|
|
361
|
+
// Keep the capacity slot until the outstanding result arrives. Stopping an
|
|
362
|
+
// agent does not necessarily stop a domain plugin or its child process.
|
|
363
|
+
this.tasks.set(taskId, {
|
|
364
|
+
...execution, status: 'cancelled', completedAt: new Date(),
|
|
365
|
+
cancellationResultPending,
|
|
366
|
+
});
|
|
361
367
|
removeFromQueues(this.taskQueue, this.domainQueues, execution.task);
|
|
362
368
|
for (const agentId of execution.assignedAgents) {
|
|
363
369
|
await this.agentCoordinator.stop(agentId);
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { getCrossPhaseHookExecutor } from '../hooks/cross-phase-hooks.js';
|
|
8
8
|
// Governance
|
|
9
9
|
import { queenGovernanceAdapter } from '../governance/index.js';
|
|
10
|
+
import { settleCancelledTask } from './cancelled-task-settlement.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Event subscription
|
|
12
13
|
// ============================================================================
|
|
@@ -51,6 +52,14 @@ async function handleDomainEvent(ctx, event) {
|
|
|
51
52
|
// ============================================================================
|
|
52
53
|
export async function handleTaskCompleted(ctx, event) {
|
|
53
54
|
const { taskId, result } = event.payload;
|
|
55
|
+
const cancelled = settleCancelledTask(ctx.tasks, taskId);
|
|
56
|
+
if (cancelled.ignored) {
|
|
57
|
+
if (cancelled.settledNow) {
|
|
58
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
59
|
+
await ctx.processQueue();
|
|
60
|
+
}
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
54
63
|
const execution = ctx.tasks.get(taskId);
|
|
55
64
|
if (execution) {
|
|
56
65
|
// CC-002 FIX: Decrement the atomic counter when task completes
|
|
@@ -154,6 +163,14 @@ export async function handleTaskCompleted(ctx, event) {
|
|
|
154
163
|
// ============================================================================
|
|
155
164
|
export async function handleTaskFailed(ctx, event) {
|
|
156
165
|
const { taskId, error } = event.payload;
|
|
166
|
+
const cancelled = settleCancelledTask(ctx.tasks, taskId);
|
|
167
|
+
if (cancelled.ignored) {
|
|
168
|
+
if (cancelled.settledNow) {
|
|
169
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
170
|
+
await ctx.processQueue();
|
|
171
|
+
}
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
157
174
|
const execution = ctx.tasks.get(taskId);
|
|
158
175
|
if (execution) {
|
|
159
176
|
// CC-002 FIX: Decrement the atomic counter when task fails
|
|
@@ -7,6 +7,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
7
7
|
import { ok, err } from '../shared/types/index.js';
|
|
8
8
|
import { binaryInsert, createdAtComparator } from '../shared/utils/index.js';
|
|
9
9
|
import { TASK_DOMAIN_MAP } from './queen-types.js';
|
|
10
|
+
import { settleCancelledTask } from './cancelled-task-settlement.js';
|
|
10
11
|
// ============================================================================
|
|
11
12
|
// Task comparator for priority queue binary insertion
|
|
12
13
|
// ============================================================================
|
|
@@ -214,6 +215,14 @@ export async function assignTaskToDomain(ctx, task, domain) {
|
|
|
214
215
|
...(routeDecision?.triggerMultiModel ? ['advisor:triggerMultiModel'] : []),
|
|
215
216
|
];
|
|
216
217
|
const spawnResult = await ctx.requestAgentSpawn(domain, agentType, spawnCapabilities);
|
|
218
|
+
// A queued task can be cancelled while routing or agent spawn is awaiting.
|
|
219
|
+
// Do not recreate it as running or dispatch its plugin afterward.
|
|
220
|
+
if (ctx.tasks.get(task.id)?.status === 'cancelled') {
|
|
221
|
+
if (spawnResult.success)
|
|
222
|
+
await ctx.agentCoordinator.stop(spawnResult.value);
|
|
223
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
224
|
+
return ok(task.id);
|
|
225
|
+
}
|
|
217
226
|
const agentIds = [];
|
|
218
227
|
if (spawnResult.success) {
|
|
219
228
|
agentIds.push(spawnResult.value);
|
|
@@ -252,6 +261,14 @@ export async function assignTaskToDomain(ctx, task, domain) {
|
|
|
252
261
|
};
|
|
253
262
|
const execResult = await plugin.executeTask(request, (result) => handleTaskCompletionCallback(ctx, result));
|
|
254
263
|
if (!execResult.success) {
|
|
264
|
+
const cancelled = settleCancelledTask(ctx.tasks, task.id);
|
|
265
|
+
if (cancelled.ignored) {
|
|
266
|
+
if (cancelled.settledNow) {
|
|
267
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
268
|
+
await processQueue(ctx);
|
|
269
|
+
}
|
|
270
|
+
return ok(task.id);
|
|
271
|
+
}
|
|
255
272
|
ctx.tasks.set(task.id, {
|
|
256
273
|
...execution,
|
|
257
274
|
status: 'failed',
|
|
@@ -298,6 +315,14 @@ async function handleTaskCompletionCallback(ctx, result) {
|
|
|
298
315
|
console.warn(`[Queen] Received completion for unknown task: ${result.taskId}`);
|
|
299
316
|
return;
|
|
300
317
|
}
|
|
318
|
+
const cancelled = settleCancelledTask(ctx.tasks, result.taskId);
|
|
319
|
+
if (cancelled.ignored) {
|
|
320
|
+
if (cancelled.settledNow) {
|
|
321
|
+
ctx.runningTaskCounter = Math.max(0, ctx.runningTaskCounter - 1);
|
|
322
|
+
await processQueue(ctx);
|
|
323
|
+
}
|
|
324
|
+
return;
|
|
325
|
+
}
|
|
301
326
|
const updated = {
|
|
302
327
|
...execution,
|
|
303
328
|
status: result.success ? 'completed' : 'failed',
|
|
@@ -42,6 +42,8 @@ export interface TaskExecution {
|
|
|
42
42
|
readonly assignedAgents: string[];
|
|
43
43
|
readonly startedAt?: Date;
|
|
44
44
|
readonly completedAt?: Date;
|
|
45
|
+
/** True until an already-running task result arrives after cancellation. */
|
|
46
|
+
readonly cancellationResultPending?: boolean;
|
|
45
47
|
readonly result?: unknown;
|
|
46
48
|
readonly error?: string;
|
|
47
49
|
readonly retryCount: number;
|
|
@@ -16,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
16
16
|
import { toErrorMessage } from '../shared/error-utils.js';
|
|
17
17
|
import { createResultSaver } from './result-saver.js';
|
|
18
18
|
import { createLogger } from '../logging/logger-factory.js';
|
|
19
|
+
import { getClaudeModelForTier } from '../shared/llm/model-registry.js';
|
|
19
20
|
// ADR-051: Agent Booster integration for Tier 0 tasks
|
|
20
21
|
import { createAgentBoosterAdapter, } from '../integrations/agentic-flow/agent-booster/index.js';
|
|
21
22
|
// ADR-051: Task Router for outcome recording
|
|
@@ -60,14 +61,9 @@ function resolveQualityAnalyzerService(memory) {
|
|
|
60
61
|
* Per ADR-026: 3-tier model routing
|
|
61
62
|
*/
|
|
62
63
|
function getModelForTier(tier) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
case 2: return 'claude-sonnet-4-6';
|
|
67
|
-
case 3: return 'claude-sonnet-4-6'; // Extended thinking
|
|
68
|
-
case 4: return 'claude-opus-4-7';
|
|
69
|
-
default: return 'claude-sonnet-4-6';
|
|
70
|
-
}
|
|
64
|
+
if (tier === 0)
|
|
65
|
+
return 'agent-booster'; // Special case - WASM transforms
|
|
66
|
+
return getClaudeModelForTier(tier); // Tier 3 = extended thinking, same model as tier 2
|
|
71
67
|
}
|
|
72
68
|
/**
|
|
73
69
|
* Map task type and code context to transform type for Agent Booster
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Pure output-path conflict detection and payload-free composition hashing. */
|
|
2
|
+
import type { ParallelCompositionReceipt, WorkflowStepDefinition } from './workflow-types.js';
|
|
3
|
+
interface WritePath {
|
|
4
|
+
stepId: string;
|
|
5
|
+
path: string;
|
|
6
|
+
segments: string[];
|
|
7
|
+
}
|
|
8
|
+
/** Include the implicit `results[step.id]` write as well as declared mappings. */
|
|
9
|
+
export declare function parallelWritePaths(step: WorkflowStepDefinition): WritePath[];
|
|
10
|
+
export declare function parallelOutputConflicts(steps: WorkflowStepDefinition[]): ParallelCompositionReceipt['conflicts'];
|
|
11
|
+
/** A declared read of a concurrently runnable sibling needs an explicit dependency. */
|
|
12
|
+
export declare function parallelUndeclaredReads(steps: WorkflowStepDefinition[]): Array<{
|
|
13
|
+
stepId: string;
|
|
14
|
+
sourcePath: string;
|
|
15
|
+
otherStepId: string;
|
|
16
|
+
}>;
|
|
17
|
+
export declare function hashWorkflowValue(value: unknown): string;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=workflow-composition.d.ts.map
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/** Pure output-path conflict detection and payload-free composition hashing. */
|
|
2
|
+
import { createHash } from 'node:crypto';
|
|
3
|
+
/** Include the implicit `results[step.id]` write as well as declared mappings. */
|
|
4
|
+
export function parallelWritePaths(step) {
|
|
5
|
+
if (['__proto__', 'constructor', 'prototype'].includes(step.id)) {
|
|
6
|
+
throw new Error(`parallel_output_invalid_path: unsafe step ID ${step.id}`);
|
|
7
|
+
}
|
|
8
|
+
const paths = [{ stepId: step.id, path: step.id, segments: [step.id] }];
|
|
9
|
+
for (const target of Object.values(step.outputMapping ?? {}).sort()) {
|
|
10
|
+
const segments = target.split('.');
|
|
11
|
+
if (segments.some(part => !part || ['__proto__', 'constructor', 'prototype'].includes(part))) {
|
|
12
|
+
throw new Error(`parallel_output_invalid_path: ${step.id} maps to ${target}`);
|
|
13
|
+
}
|
|
14
|
+
paths.push({ stepId: step.id, path: target, segments });
|
|
15
|
+
}
|
|
16
|
+
return paths;
|
|
17
|
+
}
|
|
18
|
+
export function parallelOutputConflicts(steps) {
|
|
19
|
+
const writes = steps.flatMap(parallelWritePaths);
|
|
20
|
+
const conflicts = [];
|
|
21
|
+
for (let i = 0; i < writes.length; i++) {
|
|
22
|
+
for (let j = i + 1; j < writes.length; j++) {
|
|
23
|
+
const a = writes[i];
|
|
24
|
+
const b = writes[j];
|
|
25
|
+
if (a.stepId === b.stepId)
|
|
26
|
+
continue;
|
|
27
|
+
const shared = Math.min(a.segments.length, b.segments.length);
|
|
28
|
+
if (!a.segments.slice(0, shared).every((part, index) => part === b.segments[index]))
|
|
29
|
+
continue;
|
|
30
|
+
conflicts.push({
|
|
31
|
+
pathA: a.path, stepA: a.stepId, pathB: b.path, stepB: b.stepId,
|
|
32
|
+
kind: a.segments.length === b.segments.length ? 'exact' : 'ancestor-descendant',
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return conflicts;
|
|
37
|
+
}
|
|
38
|
+
/** A declared read of a concurrently runnable sibling needs an explicit dependency. */
|
|
39
|
+
export function parallelUndeclaredReads(steps) {
|
|
40
|
+
const reads = [];
|
|
41
|
+
for (const step of steps) {
|
|
42
|
+
const paths = [
|
|
43
|
+
...Object.values(step.inputMapping ?? {}),
|
|
44
|
+
step.condition?.path,
|
|
45
|
+
step.skipCondition?.path,
|
|
46
|
+
].filter((path) => typeof path === 'string');
|
|
47
|
+
for (const sourcePath of paths) {
|
|
48
|
+
for (const sibling of steps) {
|
|
49
|
+
if (sibling.id === step.id)
|
|
50
|
+
continue;
|
|
51
|
+
if (sourcePath === 'results') {
|
|
52
|
+
reads.push({ stepId: step.id, sourcePath, otherStepId: sibling.id });
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
if (!sourcePath.startsWith('results.'))
|
|
56
|
+
continue;
|
|
57
|
+
const readSegments = sourcePath.slice('results.'.length).split('.');
|
|
58
|
+
const readsSiblingWrite = parallelWritePaths(sibling).some(write => {
|
|
59
|
+
const shared = Math.min(readSegments.length, write.segments.length);
|
|
60
|
+
return write.segments.slice(0, shared).every((segment, index) => segment === readSegments[index]);
|
|
61
|
+
});
|
|
62
|
+
if (readsSiblingWrite) {
|
|
63
|
+
reads.push({ stepId: step.id, sourcePath, otherStepId: sibling.id });
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return reads;
|
|
69
|
+
}
|
|
70
|
+
/** Canonical, cycle-detecting representation of structured-cloneable values. */
|
|
71
|
+
function canonical(value, ancestors) {
|
|
72
|
+
if (value === null || typeof value === 'string' || typeof value === 'boolean')
|
|
73
|
+
return value;
|
|
74
|
+
if (typeof value === 'number')
|
|
75
|
+
return ['number', String(value)];
|
|
76
|
+
if (typeof value === 'bigint')
|
|
77
|
+
return ['bigint', String(value)];
|
|
78
|
+
if (value === undefined)
|
|
79
|
+
return ['undefined'];
|
|
80
|
+
if (typeof value !== 'object')
|
|
81
|
+
throw new Error('parallel_output_unhashable');
|
|
82
|
+
if (ancestors.has(value))
|
|
83
|
+
throw new Error('parallel_output_cyclic');
|
|
84
|
+
ancestors.add(value);
|
|
85
|
+
try {
|
|
86
|
+
if (value instanceof Date)
|
|
87
|
+
return ['date', value.toISOString()];
|
|
88
|
+
if (value instanceof ArrayBuffer)
|
|
89
|
+
return ['bytes', Buffer.from(value).toString('base64')];
|
|
90
|
+
if (ArrayBuffer.isView(value)) {
|
|
91
|
+
return ['bytes', value.constructor.name, Buffer.from(value.buffer, value.byteOffset, value.byteLength).toString('base64')];
|
|
92
|
+
}
|
|
93
|
+
if (Array.isArray(value))
|
|
94
|
+
return ['array', value.map(item => canonical(item, ancestors))];
|
|
95
|
+
if (value instanceof Set) {
|
|
96
|
+
const entries = [...value].map(item => canonical(item, ancestors));
|
|
97
|
+
return ['set', entries.sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)))];
|
|
98
|
+
}
|
|
99
|
+
if (value instanceof Map) {
|
|
100
|
+
const entries = [...value].map(([key, item]) => [canonical(key, ancestors), canonical(item, ancestors)]);
|
|
101
|
+
return ['map', entries.sort((a, b) => JSON.stringify(a).localeCompare(JSON.stringify(b)))];
|
|
102
|
+
}
|
|
103
|
+
const record = value;
|
|
104
|
+
return ['object', Object.keys(record).sort().map(key => [key, canonical(record[key], ancestors)])];
|
|
105
|
+
}
|
|
106
|
+
finally {
|
|
107
|
+
ancestors.delete(value);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
export function hashWorkflowValue(value) {
|
|
111
|
+
const payload = JSON.stringify(canonical(value, new Set()));
|
|
112
|
+
return createHash('sha256').update(payload).digest('hex');
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=workflow-composition.js.map
|