agentic-qe 3.14.2 → 3.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/v3/qe-coverage-specialist.md +1 -1
- package/.claude/agents/v3/qe-fleet-commander.md +1 -1
- package/.claude/agents/v3/qe-pentest-validator.md +1 -1
- package/.claude/agents/v3/qe-queen-coordinator.md +1 -1
- package/.claude/agents/v3/qe-risk-assessor.md +1 -1
- package/.claude/agents/v3/qe-root-cause-analyzer.md +1 -1
- package/.claude/agents/v3/qe-security-auditor.md +1 -1
- package/.claude/agents/v3/qe-test-architect.md +1 -1
- package/.claude/commands/aqe-costs.md +10 -10
- package/.claude/helpers/advisor-call.cjs +3 -3
- package/.claude/helpers/v3/advisor-call.cjs +3 -3
- package/.claude/skills/.validation/examples/chaos-engineering-output.example.json +1 -1
- package/.claude/skills/.validation/examples/performance-testing-output.example.json +1 -1
- package/.claude/skills/.validation/examples/security-testing-output.example.json +1 -1
- package/.claude/skills/.validation/examples/testability-scoring-output.example.json +1 -1
- package/.claude/skills/.validation/schemas/skill-eval.schema.json +4 -1
- package/.claude/skills/.validation/schemas/skill-frontmatter.schema.json +1 -1
- package/.claude/skills/.validation/schemas/skill-output.template.json +1 -1
- package/.claude/skills/.validation/templates/eval.template.yaml +1 -1
- package/.claude/skills/.validation/templates/security-testing-eval.template.yaml +1 -1
- package/.claude/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
- package/.claude/skills/.validation/test-data/sample-output.json +1 -1
- package/.claude/skills/a11y-ally/SKILL.md +1 -1
- package/.claude/skills/a11y-ally/evals/a11y-ally.yaml +1 -1
- package/.claude/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
- package/.claude/skills/api-testing-patterns/evals/api-testing-patterns.yaml +1 -1
- package/.claude/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
- package/.claude/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +1 -1
- package/.claude/skills/compatibility-testing/evals/compatibility-testing.yaml +1 -1
- package/.claude/skills/compliance-testing/evals/compliance-testing.yaml +1 -1
- package/.claude/skills/contract-testing/evals/contract-testing.yaml +1 -1
- package/.claude/skills/database-testing/evals/database-testing.yaml +1 -1
- package/.claude/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +1 -1
- package/.claude/skills/localization-testing/evals/localization-testing.yaml +1 -1
- package/.claude/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +1 -1
- package/.claude/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
- package/.claude/skills/mutation-testing/evals/mutation-testing.yaml +1 -1
- package/.claude/skills/mutation-testing/test-data/sample-output.json +1 -1
- package/.claude/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +1 -1
- package/.claude/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +1 -1
- package/.claude/skills/n8n-security-testing/evals/n8n-security-testing.yaml +1 -1
- package/.claude/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
- package/.claude/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +1 -1
- package/.claude/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +1 -1
- package/.claude/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
- package/.claude/skills/performance-testing/evals/performance-testing.yaml +1 -1
- package/.claude/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +1 -1
- package/.claude/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +1 -1
- package/.claude/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +1 -1
- package/.claude/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +1 -1
- package/.claude/skills/qcsd-refinement-swarm/evals/qcsd-refinement-swarm.yaml +1 -1
- package/.claude/skills/qe-browser/evals/qe-browser.yaml +1 -1
- package/.claude/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
- package/.claude/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
- package/.claude/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
- package/.claude/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
- package/.claude/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +2 -2
- package/.claude/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
- package/.claude/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
- package/.claude/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
- package/.claude/skills/qe-test-generation/evals/qe-test-generation.yaml +1 -1
- package/.claude/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +1 -1
- package/.claude/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
- package/.claude/skills/regression-testing/evals/regression-testing.yaml +1 -1
- package/.claude/skills/risk-based-testing/evals/risk-based-testing.yaml +1 -1
- package/.claude/skills/security-testing/evals/security-testing.yaml +1 -1
- package/.claude/skills/security-visual-testing/evals/security-visual-testing.yaml +1 -1
- package/.claude/skills/shift-left-testing/evals/shift-left-testing.yaml +1 -1
- package/.claude/skills/shift-right-testing/evals/shift-right-testing.yaml +1 -1
- package/.claude/skills/skills-manifest.json +1 -1
- package/.claude/skills/test-automation-strategy/evals/test-automation-strategy.yaml +1 -1
- package/.claude/skills/test-data-management/evals/test-data-management.yaml +1 -1
- package/.claude/skills/test-design-techniques/evals/test-design-techniques.yaml +1 -1
- package/.claude/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +1 -1
- package/.claude/skills/testability-scoring/evals/testability-scoring.yaml +1 -1
- package/.claude/skills/validation-pipeline/evals/validation-pipeline.yaml +1 -1
- package/.claude/skills/verification-quality/evals/verification-quality.yaml +1 -1
- package/.claude/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +1 -1
- package/.claude/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +1 -1
- package/.opencode/agents/collective-intelligence-coordinator.yaml +1 -1
- package/.opencode/agents/ddd-domain-expert.yaml +1 -1
- package/.opencode/agents/memory-specialist.yaml +1 -1
- package/.opencode/agents/performance-engineer.yaml +1 -1
- package/.opencode/agents/qe-accessibility-auditor.yaml +1 -1
- package/.opencode/agents/qe-api-contract-validator.yaml +1 -1
- package/.opencode/agents/qe-bdd-generator.yaml +1 -1
- package/.opencode/agents/qe-chaos-engineer.yaml +1 -1
- package/.opencode/agents/qe-code-complexity.yaml +1 -1
- package/.opencode/agents/qe-code-intelligence.yaml +1 -1
- package/.opencode/agents/qe-coverage-analyzer.yaml +1 -1
- package/.opencode/agents/qe-defect-predictor.yaml +1 -1
- package/.opencode/agents/qe-dependency-mapper.yaml +1 -1
- package/.opencode/agents/qe-deployment-advisor.yaml +1 -1
- package/.opencode/agents/qe-devils-advocate.yaml +1 -1
- package/.opencode/agents/qe-flaky-hunter.yaml +1 -1
- package/.opencode/agents/qe-fleet-commander.yaml +1 -1
- package/.opencode/agents/qe-gap-detector.yaml +1 -1
- package/.opencode/agents/qe-graphql-tester.yaml +1 -1
- package/.opencode/agents/qe-impact-analyzer.yaml +1 -1
- package/.opencode/agents/qe-integration-architect.yaml +1 -1
- package/.opencode/agents/qe-integration-tester.yaml +1 -1
- package/.opencode/agents/qe-kg-builder.yaml +1 -1
- package/.opencode/agents/qe-learning-coordinator.yaml +1 -1
- package/.opencode/agents/qe-load-tester.yaml +1 -1
- package/.opencode/agents/qe-message-broker-tester.yaml +1 -1
- package/.opencode/agents/qe-metrics-optimizer.yaml +1 -1
- package/.opencode/agents/qe-middleware-validator.yaml +1 -1
- package/.opencode/agents/qe-mutation-tester.yaml +1 -1
- package/.opencode/agents/qe-odata-contract-tester.yaml +1 -1
- package/.opencode/agents/qe-parallel-executor.yaml +1 -1
- package/.opencode/agents/qe-pattern-learner.yaml +1 -1
- package/.opencode/agents/qe-pentest-validator.yaml +1 -1
- package/.opencode/agents/qe-performance-tester.yaml +1 -1
- package/.opencode/agents/qe-product-factors-assessor.yaml +1 -1
- package/.opencode/agents/qe-property-tester.yaml +1 -1
- package/.opencode/agents/qe-quality-criteria-recommender.yaml +1 -1
- package/.opencode/agents/qe-quality-gate.yaml +1 -1
- package/.opencode/agents/qe-queen-coordinator.yaml +1 -1
- package/.opencode/agents/qe-qx-partner.yaml +1 -1
- package/.opencode/agents/qe-regression-analyzer.yaml +1 -1
- package/.opencode/agents/qe-requirements-validator.yaml +1 -1
- package/.opencode/agents/qe-responsive-tester.yaml +1 -1
- package/.opencode/agents/qe-retry-handler.yaml +1 -1
- package/.opencode/agents/qe-risk-assessor.yaml +1 -1
- package/.opencode/agents/qe-root-cause-analyzer.yaml +1 -1
- package/.opencode/agents/qe-sap-idoc-tester.yaml +1 -1
- package/.opencode/agents/qe-sap-rfc-tester.yaml +1 -1
- package/.opencode/agents/qe-security-auditor.yaml +1 -1
- package/.opencode/agents/qe-security-scanner.yaml +1 -1
- package/.opencode/agents/qe-soap-tester.yaml +1 -1
- package/.opencode/agents/qe-sod-analyzer.yaml +1 -1
- package/.opencode/agents/qe-tdd-specialist.yaml +1 -1
- package/.opencode/agents/qe-test-generator.yaml +1 -1
- package/.opencode/agents/qe-test-idea-rewriter.yaml +1 -1
- package/.opencode/agents/qe-transfer-specialist.yaml +1 -1
- package/.opencode/agents/qe-visual-tester.yaml +1 -1
- package/.opencode/agents/security-architect.yaml +1 -1
- package/.opencode/agents/security-auditor.yaml +1 -1
- package/CHANGELOG.md +183 -0
- package/README.md +7 -2
- package/assets/agents/v3/helpers/advisor-call.cjs +3 -3
- package/assets/agents/v3/qe-coverage-specialist.md +1 -1
- package/assets/agents/v3/qe-fleet-commander.md +1 -1
- package/assets/agents/v3/qe-pentest-validator.md +1 -1
- package/assets/agents/v3/qe-queen-coordinator.md +1 -1
- package/assets/agents/v3/qe-risk-assessor.md +1 -1
- package/assets/agents/v3/qe-root-cause-analyzer.md +1 -1
- package/assets/agents/v3/qe-security-auditor.md +1 -1
- package/assets/agents/v3/qe-test-architect.md +1 -1
- package/assets/skills/.validation/examples/chaos-engineering-output.example.json +1 -1
- package/assets/skills/.validation/examples/performance-testing-output.example.json +1 -1
- package/assets/skills/.validation/examples/security-testing-output.example.json +1 -1
- package/assets/skills/.validation/examples/testability-scoring-output.example.json +1 -1
- package/assets/skills/.validation/schemas/skill-eval.schema.json +4 -1
- package/assets/skills/.validation/schemas/skill-frontmatter.schema.json +1 -1
- package/assets/skills/.validation/schemas/skill-output.template.json +1 -1
- package/assets/skills/.validation/templates/eval.template.yaml +1 -1
- package/assets/skills/.validation/templates/security-testing-eval.template.yaml +1 -1
- package/assets/skills/.validation/templates/skill-frontmatter.example.yaml +1 -1
- package/assets/skills/.validation/test-data/sample-output.json +1 -1
- package/assets/skills/a11y-ally/SKILL.md +1 -1
- package/assets/skills/a11y-ally/evals/a11y-ally.yaml +1 -1
- package/assets/skills/accessibility-testing/evals/accessibility-testing.yaml +1 -1
- package/assets/skills/api-testing-patterns/evals/api-testing-patterns.yaml +1 -1
- package/assets/skills/chaos-engineering-resilience/evals/chaos-engineering-resilience.yaml +1 -1
- package/assets/skills/cicd-pipeline-qe-orchestrator/evals/cicd-pipeline-qe-orchestrator.yaml +1 -1
- package/assets/skills/compatibility-testing/evals/compatibility-testing.yaml +1 -1
- package/assets/skills/compliance-testing/evals/compliance-testing.yaml +1 -1
- package/assets/skills/contract-testing/evals/contract-testing.yaml +1 -1
- package/assets/skills/database-testing/evals/database-testing.yaml +1 -1
- package/assets/skills/enterprise-integration-testing/evals/enterprise-integration-testing.yaml +1 -1
- package/assets/skills/localization-testing/evals/localization-testing.yaml +1 -1
- package/assets/skills/middleware-testing-patterns/evals/middleware-testing-patterns.yaml +1 -1
- package/assets/skills/mobile-testing/evals/mobile-testing.yaml +1 -1
- package/assets/skills/mutation-testing/evals/mutation-testing.yaml +1 -1
- package/assets/skills/mutation-testing/test-data/sample-output.json +1 -1
- package/assets/skills/n8n-expression-testing/evals/n8n-expression-testing.yaml +1 -1
- package/assets/skills/n8n-integration-testing-patterns/evals/n8n-integration-testing-patterns.yaml +1 -1
- package/assets/skills/n8n-security-testing/evals/n8n-security-testing.yaml +1 -1
- package/assets/skills/n8n-trigger-testing-strategies/evals/n8n-trigger-testing-strategies.yaml +1 -1
- package/assets/skills/n8n-workflow-testing-fundamentals/evals/n8n-workflow-testing-fundamentals.yaml +1 -1
- package/assets/skills/observability-testing-patterns/evals/observability-testing-patterns.yaml +1 -1
- package/assets/skills/pentest-validation/evals/pentest-validation.yaml +1 -1
- package/assets/skills/performance-testing/evals/performance-testing.yaml +1 -1
- package/assets/skills/qcsd-cicd-swarm/evals/qcsd-cicd-swarm.yaml +1 -1
- package/assets/skills/qcsd-development-swarm/evals/qcsd-development-swarm.yaml +1 -1
- package/assets/skills/qcsd-ideation-swarm/evals/qcsd-ideation-swarm.yaml +1 -1
- package/assets/skills/qcsd-production-swarm/evals/qcsd-production-swarm.yaml +1 -1
- package/assets/skills/qcsd-refinement-swarm/evals/qcsd-refinement-swarm.yaml +1 -1
- package/assets/skills/qe-browser/evals/qe-browser.yaml +1 -1
- package/assets/skills/qe-chaos-resilience/evals/qe-chaos-resilience.yaml +1 -1
- package/assets/skills/qe-code-intelligence/evals/qe-code-intelligence.yaml +1 -1
- package/assets/skills/qe-coverage-analysis/evals/qe-coverage-analysis.yaml +1 -1
- package/assets/skills/qe-defect-intelligence/evals/qe-defect-intelligence.yaml +1 -1
- package/assets/skills/qe-learning-optimization/evals/qe-learning-optimization.yaml +2 -2
- package/assets/skills/qe-quality-assessment/evals/qe-quality-assessment.yaml +1 -1
- package/assets/skills/qe-requirements-validation/evals/qe-requirements-validation.yaml +1 -1
- package/assets/skills/qe-test-execution/evals/qe-test-execution.yaml +1 -1
- package/assets/skills/qe-test-generation/evals/qe-test-generation.yaml +1 -1
- package/assets/skills/qe-visual-accessibility/evals/qe-visual-accessibility.yaml +1 -1
- package/assets/skills/quality-metrics/evals/quality-metrics.yaml +1 -1
- package/assets/skills/regression-testing/evals/regression-testing.yaml +1 -1
- package/assets/skills/risk-based-testing/evals/risk-based-testing.yaml +1 -1
- package/assets/skills/security-testing/evals/security-testing.yaml +1 -1
- package/assets/skills/security-visual-testing/evals/security-visual-testing.yaml +1 -1
- package/assets/skills/shift-left-testing/evals/shift-left-testing.yaml +1 -1
- package/assets/skills/shift-right-testing/evals/shift-right-testing.yaml +1 -1
- package/assets/skills/skills-manifest.json +1 -1
- package/assets/skills/test-automation-strategy/evals/test-automation-strategy.yaml +1 -1
- package/assets/skills/test-data-management/evals/test-data-management.yaml +1 -1
- package/assets/skills/test-design-techniques/evals/test-design-techniques.yaml +1 -1
- package/assets/skills/test-reporting-analytics/evals/test-reporting-analytics.yaml +1 -1
- package/assets/skills/testability-scoring/evals/testability-scoring.yaml +1 -1
- package/assets/skills/validation-pipeline/evals/validation-pipeline.yaml +1 -1
- package/assets/skills/verification-quality/evals/verification-quality.yaml +1 -1
- package/assets/skills/visual-testing-advanced/evals/visual-testing-advanced.yaml +1 -1
- package/assets/skills/wms-testing-patterns/evals/wms-testing-patterns.yaml +1 -1
- package/dist/cli/bundle.js +7 -7
- package/dist/cli/chunks/adapter-TNNNJRDG.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-SD5N32MX.js → agent-booster-wasm-5PC7D2FW.js} +2 -2
- package/dist/cli/chunks/{agent-handler-OZRSJM7F.js → agent-handler-RDNTK4CA.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-NYTRANRN.js → agent-memory-branch-NAAMBWIR.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-5ZRMYJLB.js +2 -0
- package/dist/cli/chunks/{arena-EX3SC2DP.js → arena-HXTWJ5YY.js} +4 -4
- package/dist/cli/chunks/{arena-FOTVSRK4.js → arena-KXFHRWX4.js} +2 -2
- package/dist/cli/chunks/{audit-Q5GHSUQY.js → audit-YSGA7UWT.js} +3 -3
- package/dist/cli/chunks/base-KWZHOPSH.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-S7M5R2HS.js → better-sqlite3-UICJZIDG.js} +2 -2
- package/dist/cli/chunks/brain-handler-ET6YAP4B.js +90 -0
- package/dist/cli/chunks/{branch-enumerator-RWAXTGEU.js → branch-enumerator-SS7UNVIA.js} +2 -2
- package/dist/cli/chunks/{browser-IGDESJGF.js → browser-77GI6KBE.js} +2 -2
- package/dist/cli/chunks/browser-workflow-2FZTKDUL.js +2 -0
- package/dist/cli/chunks/{chunk-U54OOA24.js → chunk-2JW3BCGG.js} +1 -1
- package/dist/cli/chunks/{chunk-LML5VTFK.js → chunk-33YYYWBQ.js} +1 -1
- package/dist/cli/chunks/{chunk-P64DMQ2C.js → chunk-34WO57CW.js} +1 -1
- package/dist/cli/chunks/{chunk-57TNBR2P.js → chunk-3QHGWY7T.js} +2 -2
- package/dist/cli/chunks/chunk-3TW5W5LX.js +2 -0
- package/dist/cli/chunks/{chunk-S4MR6RTE.js → chunk-3UPAMMCB.js} +1 -1
- package/dist/cli/chunks/{chunk-5WJUNRTY.js → chunk-3VOQRIQM.js} +2 -2
- package/dist/cli/chunks/{chunk-4RT7I7PI.js → chunk-3X3DJZJJ.js} +1 -1
- package/dist/cli/chunks/{chunk-RFNEHNJV.js → chunk-4MHXCAG2.js} +1 -1
- package/dist/cli/chunks/{chunk-PMUBG2RU.js → chunk-4OYFXLBK.js} +2 -2
- package/dist/cli/chunks/{chunk-W2FLULF4.js → chunk-55RWDRJD.js} +3 -3
- package/dist/cli/chunks/chunk-5R3QL7WN.js +14 -0
- package/dist/cli/chunks/{chunk-RHJVDCLV.js → chunk-5SJHQ2CO.js} +2 -2
- package/dist/cli/chunks/{chunk-HBTC4L53.js → chunk-5YPYDPBJ.js} +2 -2
- package/dist/cli/chunks/chunk-5Z6XZV7K.js +65 -0
- package/dist/cli/chunks/{chunk-6EHN7Q2Q.js → chunk-64PFWE2F.js} +2 -2
- package/dist/cli/chunks/{chunk-KFXZDQ5J.js → chunk-6CQN24ZK.js} +1 -1
- package/dist/cli/chunks/{chunk-WVY22NHZ.js → chunk-6J62K3SW.js} +2 -2
- package/dist/cli/chunks/{chunk-TLPL3EQY.js → chunk-6KJABXAR.js} +2 -2
- package/dist/cli/chunks/{chunk-PZKZY6PB.js → chunk-6QYNWR7U.js} +2 -2
- package/dist/cli/chunks/{chunk-A7N3YUDJ.js → chunk-6TPKK7LD.js} +2 -2
- package/dist/cli/chunks/{chunk-RYJHREYS.js → chunk-6UWGMOND.js} +2 -2
- package/dist/cli/chunks/{chunk-XPLSLHRB.js → chunk-6VRA2QGL.js} +1 -1
- package/dist/cli/chunks/{chunk-Q3JHS3UD.js → chunk-7D777LTF.js} +2 -2
- package/dist/cli/chunks/chunk-7ZIOFPL3.js +2 -0
- package/dist/cli/chunks/chunk-A4FYONNU.js +2 -0
- package/dist/cli/chunks/{chunk-7AFBNU6K.js → chunk-AIHDEEJO.js} +2 -2
- package/dist/cli/chunks/{chunk-L2F7FVIU.js → chunk-AUXFKCQL.js} +2 -2
- package/dist/cli/chunks/{chunk-67A6PEZM.js → chunk-AWWNB2T7.js} +2 -2
- package/dist/cli/chunks/{chunk-DVHWLAEO.js → chunk-BDESSCVR.js} +3 -3
- package/dist/cli/chunks/{chunk-JQ2ZD3WO.js → chunk-BFP7KO7P.js} +2 -2
- package/dist/cli/chunks/{chunk-N5ZRUOMR.js → chunk-BGE6FOLM.js} +2 -2
- package/dist/cli/chunks/{chunk-BWRHOIYC.js → chunk-BOARZKU3.js} +2 -2
- package/dist/cli/chunks/{chunk-CTCQOYBS.js → chunk-BOZZYWCR.js} +1 -1
- package/dist/cli/chunks/{chunk-NHHWLJQF.js → chunk-C2WU3533.js} +1 -1
- package/dist/cli/chunks/{chunk-5EHLGOWW.js → chunk-CDHQFHRP.js} +2 -2
- package/dist/cli/chunks/chunk-CDKG6EI7.js +16 -0
- package/dist/cli/chunks/{chunk-RGH3WGWD.js → chunk-CIKSHTEQ.js} +3 -3
- package/dist/cli/chunks/{chunk-K574FLVB.js → chunk-CIZ5JPDC.js} +2 -2
- package/dist/cli/chunks/{chunk-LWUJQGCS.js → chunk-CLTMDCSE.js} +2 -2
- package/dist/cli/chunks/{chunk-GHQ5PUOV.js → chunk-CNG6GQEZ.js} +2 -2
- package/dist/cli/chunks/{chunk-3C2K4YMS.js → chunk-CSU5NYOX.js} +3 -3
- package/dist/cli/chunks/chunk-CU46J64M.js +4 -0
- package/dist/cli/chunks/{chunk-EH5OCHAJ.js → chunk-CXQPR5MY.js} +1 -1
- package/dist/cli/chunks/chunk-DA5K5754.js +96 -0
- package/dist/cli/chunks/{chunk-FVGTINVR.js → chunk-DAEFDCJ4.js} +81 -65
- package/dist/cli/chunks/{chunk-MH73D5TN.js → chunk-DEYLEDJN.js} +2 -2
- package/dist/cli/chunks/{chunk-7FWP7CZY.js → chunk-DFZCKIGY.js} +3 -3
- package/dist/cli/chunks/{chunk-QXTW7XCS.js → chunk-DHJPWQBR.js} +2 -2
- package/dist/cli/chunks/{chunk-NAZVPZJS.js → chunk-DOTK76IJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RCI64RIJ.js → chunk-DPFRKBOG.js} +2 -2
- package/dist/cli/chunks/{chunk-WMW47QMR.js → chunk-EDJ3O7RH.js} +2 -2
- package/dist/cli/chunks/{chunk-4K27ESCA.js → chunk-EKQ673SA.js} +1 -1
- package/dist/cli/chunks/chunk-F3SBRQC6.js +2 -0
- package/dist/cli/chunks/{chunk-4N44UJGI.js → chunk-FGYMFUE2.js} +2 -2
- package/dist/cli/chunks/chunk-FLYOJOKN.js +2 -0
- package/dist/cli/chunks/{chunk-W4OQYLYO.js → chunk-FRH6VAUS.js} +1 -1
- package/dist/cli/chunks/{chunk-VOYJJ3KA.js → chunk-FWGOHAAB.js} +2 -2
- package/dist/cli/chunks/{chunk-D4RCV4LY.js → chunk-G6T45OIC.js} +2 -2
- package/dist/cli/chunks/{chunk-2EHFEMRU.js → chunk-GPLQ6DOK.js} +2 -2
- package/dist/cli/chunks/{chunk-RVCWSAXI.js → chunk-HDSAM2RE.js} +2 -2
- package/dist/cli/chunks/chunk-HIVA55CJ.js +2 -0
- package/dist/cli/chunks/{chunk-6F4WHN7D.js → chunk-HIYXCDEP.js} +1 -1
- package/dist/cli/chunks/{chunk-NRR23SJV.js → chunk-HUWNIPZ5.js} +1 -1
- package/dist/cli/chunks/{chunk-4M6A3PVJ.js → chunk-HV2J7KKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-CJHVOBJY.js → chunk-IFCLB7FJ.js} +1 -1
- package/dist/cli/chunks/{chunk-Q335R4MR.js → chunk-IPR4QP3H.js} +2 -2
- package/dist/cli/chunks/{chunk-HZMLNM2T.js → chunk-ISDMD6EU.js} +178 -175
- package/dist/cli/chunks/chunk-J6GNQS62.js +5 -0
- package/dist/cli/chunks/{chunk-3DFFFXXO.js → chunk-JBNEE5UH.js} +2 -2
- package/dist/cli/chunks/chunk-JZ3ORVZ3.js +54 -0
- package/dist/cli/chunks/{chunk-T4C56HBW.js → chunk-KCZR45PA.js} +2 -2
- package/dist/cli/chunks/chunk-KGT36Z42.js +14 -0
- package/dist/cli/chunks/{chunk-JIUF6NV6.js → chunk-KHFNNVJA.js} +2 -2
- package/dist/cli/chunks/{chunk-7SK6IMGZ.js → chunk-KPA7MZ6C.js} +2 -2
- package/dist/cli/chunks/{chunk-G2CLZVYI.js → chunk-KSKEF7LZ.js} +3 -3
- package/dist/cli/chunks/{chunk-6LMLN5R2.js → chunk-M2JBBZQB.js} +2 -2
- package/dist/cli/chunks/{chunk-UHTAI4ZB.js → chunk-M4WJKGVK.js} +1 -1
- package/dist/cli/chunks/{chunk-KZOBLLXW.js → chunk-M5QUBZY6.js} +2 -2
- package/dist/cli/chunks/{chunk-42WUDDUU.js → chunk-MCUJEZT6.js} +2 -2
- package/dist/cli/chunks/{chunk-ZFGND4QK.js → chunk-MDWCE7YW.js} +1 -1
- package/dist/cli/chunks/{chunk-TYVQNYXX.js → chunk-MEGDYJPV.js} +7 -7
- package/dist/cli/chunks/chunk-MIQTXNBG.js +4 -0
- package/dist/cli/chunks/{chunk-PFXX5Q32.js → chunk-MNW6QGNJ.js} +2 -2
- package/dist/cli/chunks/{chunk-IVGVOGIZ.js → chunk-MOBNBMFW.js} +1 -1
- package/dist/cli/chunks/{chunk-NWFIJNEB.js → chunk-MTZH7AHC.js} +1 -1
- package/dist/cli/chunks/chunk-MVNP7GIR.js +2 -0
- package/dist/cli/chunks/chunk-MVPCNSPY.js +2 -0
- package/dist/cli/chunks/chunk-NA7B2QYB.js +2 -0
- package/dist/cli/chunks/{chunk-E3Q7WNJD.js → chunk-NDPFGIMJ.js} +3 -3
- package/dist/cli/chunks/{chunk-GHUPID5E.js → chunk-NJBGXDQ7.js} +1 -1
- package/dist/cli/chunks/chunk-OBAP2TXZ.js +2 -0
- package/dist/cli/chunks/{chunk-OBCKP3G4.js → chunk-OCWWP5PL.js} +4 -4
- package/dist/cli/chunks/{chunk-CJCT452S.js → chunk-ODKLFVYC.js} +2 -2
- package/dist/cli/chunks/{chunk-YN6W2XIT.js → chunk-ONII3572.js} +4 -4
- package/dist/cli/chunks/{chunk-QW4LN5NK.js → chunk-OSLYSG3B.js} +2 -2
- package/dist/cli/chunks/{chunk-HZ6NEJMO.js → chunk-OULHKEVH.js} +2 -2
- package/dist/cli/chunks/{chunk-CG2MUD7U.js → chunk-PAWXJ73E.js} +1 -1
- package/dist/cli/chunks/chunk-PEPFCPES.js +2 -0
- package/dist/cli/chunks/{chunk-UIGEUEBT.js → chunk-PFR4G3DJ.js} +2 -2
- package/dist/cli/chunks/chunk-PO3IXGMQ.js +2 -0
- package/dist/cli/chunks/{chunk-6SZKLWZT.js → chunk-PZJOPURC.js} +5 -5
- package/dist/cli/chunks/{chunk-ARMZYHYL.js → chunk-Q5DO24IJ.js} +2 -2
- package/dist/cli/chunks/chunk-QGIU2WRL.js +2 -0
- package/dist/cli/chunks/{chunk-N3RN4QTC.js → chunk-R4VL6E65.js} +2 -2
- package/dist/cli/chunks/{chunk-MWQTACNA.js → chunk-R5NE6B2M.js} +2 -2
- package/dist/cli/chunks/{chunk-T46LOLW3.js → chunk-RJCYCLZV.js} +2 -2
- package/dist/cli/chunks/{chunk-CH2TQCV5.js → chunk-SGYJ4NFZ.js} +1 -1
- package/dist/cli/chunks/{chunk-NG2UVPTW.js → chunk-SRKETSFF.js} +1 -1
- package/dist/cli/chunks/{chunk-QFUX7ELG.js → chunk-STJCATGN.js} +2 -2
- package/dist/cli/chunks/{chunk-CIESXO73.js → chunk-STM3UDNO.js} +1 -1
- package/dist/cli/chunks/{chunk-C7AXRI7E.js → chunk-T6BVLVI5.js} +1 -1
- package/dist/cli/chunks/{chunk-HSJ5FQCF.js → chunk-TDZ53WO2.js} +2 -2
- package/dist/cli/chunks/{chunk-YF5OP6CR.js → chunk-TPGED2IF.js} +2 -2
- package/dist/cli/chunks/{chunk-2TG24LYQ.js → chunk-TSRSV3LD.js} +1 -1
- package/dist/cli/chunks/{chunk-6VKJAMZY.js → chunk-TT23RRB7.js} +1 -1
- package/dist/cli/chunks/{chunk-WXMSRBQF.js → chunk-TWAWHOP7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCDXJ27H.js → chunk-U5K45TFH.js} +1 -1
- package/dist/cli/chunks/{chunk-3WV4H33V.js → chunk-UDHKLT4C.js} +1 -1
- package/dist/cli/chunks/{chunk-VNAKBHJI.js → chunk-UEM7ZF5K.js} +2 -2
- package/dist/cli/chunks/{chunk-4ZUZDFAA.js → chunk-UGVHCMUN.js} +6 -6
- package/dist/cli/chunks/{chunk-NNOMDM4N.js → chunk-V3QLFNA2.js} +2 -2
- package/dist/cli/chunks/{chunk-S7N4BKI3.js → chunk-VD6QRULW.js} +2 -2
- package/dist/cli/chunks/{chunk-WBH4C4BG.js → chunk-VIHTL3U2.js} +2 -2
- package/dist/cli/chunks/chunk-W7BWUTVV.js +2 -0
- package/dist/cli/chunks/{chunk-IWFL6EFI.js → chunk-WLG5AJ4N.js} +2 -2
- package/dist/cli/chunks/{chunk-KEEBUVGV.js → chunk-XC7DYDSY.js} +8 -8
- package/dist/cli/chunks/{chunk-F2KRT2II.js → chunk-XJ7QNVI5.js} +3 -3
- package/dist/cli/chunks/chunk-XRT2WRMS.js +2 -0
- package/dist/cli/chunks/{chunk-ADK7DF3G.js → chunk-XRYF6JV7.js} +2 -2
- package/dist/cli/chunks/{chunk-PWEIDHT7.js → chunk-XWMZ6D6N.js} +2 -2
- package/dist/cli/chunks/{chunk-ICKLBATY.js → chunk-Y3MW3YBC.js} +2 -2
- package/dist/cli/chunks/chunk-YNXS6CGV.js +2 -0
- package/dist/cli/chunks/{chunk-PVHO6KLB.js → chunk-Z3RHREWF.js} +1 -1
- package/dist/cli/chunks/{chunk-EAJK25IS.js → chunk-ZBAKA4YB.js} +1 -1
- package/dist/cli/chunks/chunk-ZBJ4XOOV.js +180 -0
- package/dist/cli/chunks/chunk-ZBQY5GLF.js +11 -0
- package/dist/cli/chunks/{chunk-R5RNOLHI.js → chunk-ZJ26AQA5.js} +1 -1
- package/dist/cli/chunks/{chunk-KPFG4OIM.js → chunk-ZNEMGX5O.js} +1 -1
- package/dist/cli/chunks/{chunk-2H5YJ5ZK.js → chunk-ZNPKDCZR.js} +2 -2
- package/dist/cli/chunks/{chunk-DW6ZMNMR.js → chunk-ZZDIMOOV.js} +2 -2
- package/dist/cli/chunks/ci-464KPQNP.js +81 -0
- package/dist/cli/chunks/ci-output-I7FX2RSO.js +2 -0
- package/dist/cli/chunks/{circuit-breaker-4WST3QSA.js → circuit-breaker-3FW237WW.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-KB4TKMYI.js → claude-flow-setup-6JKMBPGU.js} +2 -2
- package/dist/cli/chunks/client-7E4LM2WW.js +2 -0
- package/dist/cli/chunks/{cline-installer-W2ZHQ6WM.js → cline-installer-UWFHT6VY.js} +2 -2
- package/dist/cli/chunks/{code-TF2AVR5D.js → code-KQSUT3FS.js} +29 -29
- package/dist/cli/chunks/{code-index-extractor-RMDRUVQJ.js → code-index-extractor-PABBNUSC.js} +2 -2
- package/dist/cli/chunks/{codex-installer-VSTRHJHV.js → codex-installer-CQ24DTP5.js} +2 -2
- package/dist/cli/chunks/{completions-3Q37QVFR.js → completions-7RWHAUAR.js} +2 -2
- package/dist/cli/chunks/complexity-analyzer-XPOAF33E.js +2 -0
- package/dist/cli/chunks/{continuedev-installer-VTEXM455.js → continuedev-installer-V4F2FIZP.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-AGY7DQUS.js → copilot-installer-JMICURQB.js} +2 -2
- package/dist/cli/chunks/core-handlers-IFG3757P.js +2 -0
- package/dist/cli/chunks/cost-tracker-5OFHEYFJ.js +2 -0
- package/dist/cli/chunks/{coverage-TT64IOS4.js → coverage-QKN57JDS.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-EK7W4PGP.js +2 -0
- package/dist/cli/chunks/{cursor-installer-OVOJIOHN.js → cursor-installer-GBJ7YXSM.js} +2 -2
- package/dist/cli/chunks/{daemon-DMFZMXKA.js → daemon-GKP7CMEK.js} +3 -3
- package/dist/cli/chunks/{daemon-XCULEHWY.js → daemon-IAVSO6HK.js} +4 -4
- package/dist/cli/chunks/{dag-attention-scheduler-WW2RX4B5.js → dag-attention-scheduler-S225TCI7.js} +2 -2
- package/dist/cli/chunks/{detect-QNWIM232.js → detect-IUYH422U.js} +2 -2
- package/dist/cli/chunks/{dist-node-6GQIY3CG.js → dist-node-2YRE6A7C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6RJPDELX.js → domain-handler-PL2TZC6H.js} +2 -2
- package/dist/cli/chunks/domain-plugins-HCGLXKIT.js +2 -0
- package/dist/cli/chunks/{domain-transfer-WK524LBS.js → domain-transfer-KQJRUPXA.js} +2 -2
- package/dist/cli/chunks/dream-NFSCSLY7.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-SO6GWJW7.js → embed-and-insert-pattern-ZPAG7235.js} +2 -2
- package/dist/cli/chunks/eval-WCK7KNFN.js +17 -0
- package/dist/cli/chunks/{experience-capture-middleware-BCCJ35OX.js → experience-capture-middleware-2MSQWSAR.js} +3 -3
- package/dist/cli/chunks/{fast-paths-CATDDBEU.js → fast-paths-VYOSIBKF.js} +2 -2
- package/dist/cli/chunks/{feature-flags-BUXNAORY.js → feature-flags-UJRHFBRX.js} +2 -2
- package/dist/cli/chunks/{feature-flags-KNNWWP5G.js → feature-flags-WCFUKHNQ.js} +2 -2
- package/dist/cli/chunks/{file-discovery-S4HF3O7D.js → file-discovery-JDGL4ZWS.js} +2 -2
- package/dist/cli/chunks/fleet-ROXVMZ2F.js +43 -0
- package/dist/cli/chunks/{gnn-wrapper-G7ABZUG7.js → gnn-wrapper-NIO4ZCO3.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-UFMELIWT.js → heartbeat-handler-PI42WD3C.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-ZATCDJDK.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-WXQABRCA.js +2 -0
- package/dist/cli/chunks/hnsw-index-TPSWLEA5.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-YIILSRXI.js → hnsw-legacy-bridge-YLC7SPK2.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-TSVRMXDH.js → hnswlib-node-LG6OS3B7.js} +2 -2
- package/dist/cli/chunks/{hooks-OHQPNK74.js → hooks-WVALP5GX.js} +10 -10
- package/dist/cli/chunks/{hypergraph-engine-LY7PJDSL.js → hypergraph-engine-GJEMW3EG.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-YGDYZO6H.js → hypergraph-handler-BLF6LXEV.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-HNIU45P5.js +2 -0
- package/dist/cli/chunks/{init-handler-MTK65LI3.js → init-handler-K25RWRYY.js} +6 -6
- package/dist/cli/chunks/init-wizard-JUIPBMHG.js +2 -0
- package/dist/cli/chunks/kernel-5BOZQ754.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-3IICU4RS.js → kilocode-installer-BXN6WZ7G.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-MXOVQYQA.js → kiro-installer-PM362DLN.js} +12 -12
- package/dist/cli/chunks/knowledge-graph-EWDAENWM.js +2 -0
- package/dist/cli/chunks/learning-CPERDDRG.js +122 -0
- package/dist/cli/chunks/llm-router-GOAV5FPI.js +37 -0
- package/dist/cli/chunks/llm-router-service-3YT7JGBS.js +2 -0
- package/dist/cli/chunks/{load-F4PVAMXQ.js → load-2BG6SHAK.js} +2 -2
- package/dist/cli/chunks/load-test-BP2CPLIV.js +2 -0
- package/dist/cli/chunks/{mcp-DUYJUEME.js → mcp-5TTB37DC.js} +2 -2
- package/dist/cli/chunks/{memory-XTTYORAS.js → memory-4NHBYT6S.js} +5 -5
- package/dist/cli/chunks/memory-backend-4PYQBPRM.js +2 -0
- package/dist/cli/chunks/memory-handlers-2B27NITS.js +2 -0
- package/dist/cli/chunks/multi-model-executor-KCWSGCDT.js +14 -0
- package/dist/cli/chunks/{opencode-installer-33ULBU2F.js → opencode-installer-ATZLLK74.js} +2 -2
- package/dist/cli/chunks/{orchestrator-34ZJEKTJ.js → orchestrator-RKB7XJRG.js} +19 -19
- package/dist/cli/chunks/pattern-null-store-OYOQOV2O.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-GZ2M3F2E.js → pattern-usage-recorder-7VE4XDAI.js} +2 -2
- package/dist/cli/chunks/pipeline-LQZSNDD2.js +19 -0
- package/dist/cli/chunks/{platform-VKJFJIAW.js → platform-OD5H5U6G.js} +2 -2
- package/dist/cli/chunks/{plugin-5C5UBQUQ.js → plugin-EJ6K2MGU.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-KO2PQI3D.js → prime-radiant-advanced-wasm-OIHTKJMN.js} +2 -2
- package/dist/cli/chunks/protocol-executor-3ATJTXWG.js +2 -0
- package/dist/cli/chunks/{protocol-handler-ZF74NIKA.js → protocol-handler-NRBROAU7.js} +2 -2
- package/dist/cli/chunks/{prove-MO5TQQU4.js → prove-EJOGEGD3.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-LLMYZT4X.js +2 -0
- package/dist/cli/chunks/{quality-EYIN6AER.js → quality-E55UC73D.js} +2 -2
- package/dist/cli/chunks/{quality-gate-V6OQM57O.js → quality-gate-OIQATNT3.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-RN7L6KG5.js +2 -0
- package/dist/cli/chunks/{real-embeddings-AR7TZX7U.js → real-embeddings-FPFFNOSZ.js} +2 -2
- package/dist/cli/chunks/ref-validation-OPO6J7OL.js +2 -0
- package/dist/cli/chunks/{roocode-installer-46E626VZ.js → roocode-installer-ODY5KRWU.js} +2 -2
- package/dist/cli/chunks/router-MDHITQ2V.js +2 -0
- package/dist/cli/chunks/routing-feedback-5XLNJ3Y3.js +2 -0
- package/dist/cli/chunks/{routing-handler-ZNRVW6QW.js → routing-handler-KQM6VWLC.js} +4 -4
- package/dist/cli/chunks/{ruvector-commands-4L2CQMWS.js → ruvector-commands-U2GVV6PF.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-JBW4O3II.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-BPPQL4XJ.js +2 -0
- package/dist/cli/chunks/{rvf-migration-coordinator-H4RVGBIA.js → rvf-migration-coordinator-V2GHCJKN.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-S4562CG5.js +2 -0
- package/dist/cli/chunks/rvf-store-integrity-KMIHD3LP.js +2 -0
- package/dist/cli/chunks/safe-db-FIRHSXVF.js +2 -0
- package/dist/cli/chunks/schedule-RVXFB4HK.js +2 -0
- package/dist/cli/chunks/scheduler-IKKAMAOO.js +2 -0
- package/dist/cli/chunks/security-P5NM353C.js +13 -0
- package/dist/cli/chunks/{shared-rvf-adapter-M6NNIZ5W.js → shared-rvf-adapter-LVIUOO4S.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-LHMFCYVE.js → shared-rvf-dual-writer-2CSG7C4W.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-SQ3HCUQ7.js +2 -0
- package/dist/cli/chunks/{status-handler-GMIOXQIE.js → status-handler-6TU6O37R.js} +2 -2
- package/dist/cli/chunks/{structural-health-YZXHVHM6.js → structural-health-KBIJSTXJ.js} +2 -2
- package/dist/cli/chunks/{sync-GMPCPV5L.js → sync-LNHI5SB7.js} +2 -2
- package/dist/cli/chunks/{sync-N56UQGCS.js → sync-UHOX6RJW.js} +2 -2
- package/dist/cli/chunks/task-handler-AVDHMLGI.js +49 -0
- package/dist/cli/chunks/task-handlers-KYK4VTRA.js +9 -0
- package/dist/cli/chunks/{test-GQNCKRSP.js → test-DHAAI3DU.js} +11 -11
- package/dist/cli/chunks/test-scheduling-XDBZ3QC2.js +15 -0
- package/dist/cli/chunks/{token-bootstrap-76SRNXGG.js → token-bootstrap-GUTTLPZX.js} +2 -2
- package/dist/cli/chunks/{token-usage-O7CZDP5Q.js → token-usage-Q2YG5YQN.js} +2 -2
- package/dist/cli/chunks/{transformers-LTU4LSSC.js → transformers-F5UQTQCY.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-NQSQCMBM.js → tree-sitter-wasm-parser-DEGOHS6F.js} +2 -2
- package/dist/cli/chunks/types-JQ7EQO5Q.js +2 -0
- package/dist/cli/chunks/unified-memory-CXHLHB5I.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-I7WAE54M.js +2 -0
- package/dist/cli/chunks/unified-persistence-6CPF65WI.js +2 -0
- package/dist/cli/chunks/{upgrade-OQWRBZ3R.js → upgrade-TJRVGHGD.js} +2 -2
- package/dist/cli/chunks/{validate-TH5SRP3E.js → validate-BWPCVHBN.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-UITL2JUS.js → validate-swarm-QVVKCQLP.js} +2 -2
- package/dist/cli/chunks/{vibium-O6PRAG4J.js → vibium-ZFATIWHO.js} +2 -2
- package/dist/cli/chunks/visual-security-GNPHME5H.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-XBFBY4OF.js → web-tree-sitter-KPLY7ONR.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-DVT5NRNY.js → windsurf-installer-H7XM7ISA.js} +2 -2
- package/dist/cli/chunks/{witness-chain-VRSH2F36.js → witness-chain-RRN6NDCH.js} +2 -2
- package/dist/cli/chunks/witness-chain-VT4UHHBR.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-GFHRDKQ4.js → witness-key-manager-DFRL42GE.js} +2 -2
- package/dist/cli/chunks/workflow-2ZQO6WYI.js +51 -0
- package/dist/cli/chunks/workflow-orchestrator-DB3HIECD.js +2 -0
- package/dist/cli/chunks/{wrappers-5LLLT7GM.js → wrappers-SUS6XEJD.js} +2 -2
- package/dist/cli/commands/ci.js +54 -28
- package/dist/cli/commands/code.js +6 -0
- package/dist/cli/commands/eval.js +3 -2
- package/dist/cli/commands/fleet.js +35 -16
- package/dist/cli/commands/learning-snapshot.d.ts +38 -0
- package/dist/cli/commands/learning-snapshot.js +171 -0
- package/dist/cli/commands/learning.js +16 -64
- package/dist/cli/commands/llm-router.js +13 -12
- package/dist/cli/commands/pipeline.js +9 -0
- package/dist/cli/commands/security.js +167 -100
- package/dist/cli/commands/test.js +1 -0
- package/dist/cli/commands/workflow.js +9 -1
- package/dist/cli/handlers/task-handler.js +19 -9
- package/dist/cli/helpers/domain-plugins.d.ts +5 -0
- package/dist/cli/helpers/domain-plugins.js +11 -0
- package/dist/cli/index.js +17 -8
- package/dist/cli/utils/ci-config.d.ts +3 -0
- package/dist/cli/utils/ci-output.d.ts +17 -0
- package/dist/cli/utils/ci-output.js +34 -2
- package/dist/context/sources/git-source.d.ts +2 -0
- package/dist/context/sources/git-source.js +9 -2
- package/dist/coordination/cancelled-task-settlement.d.ts +11 -0
- package/dist/coordination/cancelled-task-settlement.js +15 -0
- package/dist/coordination/consensus/providers/claude-provider.d.ts +2 -2
- package/dist/coordination/consensus/providers/claude-provider.js +18 -25
- package/dist/coordination/consensus/providers/gemini-provider.d.ts +14 -4
- package/dist/coordination/consensus/providers/gemini-provider.js +39 -36
- package/dist/coordination/consensus/providers/ollama-provider.d.ts +8 -7
- package/dist/coordination/consensus/providers/ollama-provider.js +16 -18
- package/dist/coordination/consensus/providers/openai-provider.d.ts +14 -4
- package/dist/coordination/consensus/providers/openai-provider.js +36 -34
- package/dist/coordination/consensus/providers/openrouter-provider.d.ts +5 -5
- package/dist/coordination/consensus/providers/openrouter-provider.js +64 -37
- package/dist/coordination/handlers/handler-types.d.ts +3 -0
- package/dist/coordination/handlers/quality-handlers.js +10 -0
- package/dist/coordination/handlers/security-handlers.js +168 -72
- package/dist/coordination/handlers/test-execution-handlers.js +39 -43
- package/dist/coordination/interfaces.d.ts +2 -2
- package/dist/coordination/protocol-executor.js +68 -9
- package/dist/coordination/protocols/security-audit.d.ts +3 -0
- package/dist/coordination/protocols/security-audit.js +61 -39
- package/dist/coordination/queen-coordinator.js +10 -4
- package/dist/coordination/queen-event-handlers.js +17 -0
- package/dist/coordination/queen-task-management.js +25 -0
- package/dist/coordination/queen-types.d.ts +2 -0
- package/dist/coordination/result-saver.js +36 -5
- package/dist/coordination/task-executor.d.ts +3 -1
- package/dist/coordination/task-executor.js +8 -8
- package/dist/coordination/workflow-composition.d.ts +19 -0
- package/dist/coordination/workflow-composition.js +114 -0
- package/dist/coordination/workflow-orchestrator.d.ts +3 -2
- package/dist/coordination/workflow-orchestrator.js +219 -85
- package/dist/coordination/workflow-types.d.ts +30 -1
- package/dist/coordination/yaml-pipeline-loader.js +9 -5
- package/dist/domains/chaos-resilience/services/chaos-engineer.js +2 -7
- package/dist/domains/code-intelligence/services/knowledge-graph.js +2 -7
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +9 -40
- package/dist/domains/constants.d.ts +1 -6
- package/dist/domains/constants.js +2 -6
- package/dist/domains/contract-testing/services/contract-validator.js +2 -7
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +2 -12
- package/dist/domains/coverage-analysis/services/gap-detector.js +2 -7
- package/dist/domains/defect-intelligence/services/defect-predictor.js +2 -12
- package/dist/domains/defect-intelligence/services/root-cause-analyzer.js +2 -7
- package/dist/domains/learning-optimization/services/learning-coordinator.js +2 -7
- package/dist/domains/quality-assessment/services/deployment-advisor.js +2 -7
- package/dist/domains/quality-assessment/services/quality-analyzer.js +2 -7
- package/dist/domains/requirements-validation/services/requirements-validator.js +2 -7
- package/dist/domains/security-compliance/interfaces.d.ts +5 -0
- package/dist/domains/security-compliance/interfaces.js +0 -6
- package/dist/domains/security-compliance/scan-discovery.d.ts +12 -0
- package/dist/domains/security-compliance/scan-discovery.js +105 -0
- package/dist/domains/security-compliance/scan-evidence.d.ts +57 -0
- package/dist/domains/security-compliance/scan-evidence.js +2 -0
- package/dist/domains/security-compliance/services/scanners/sast-scanner.d.ts +3 -2
- package/dist/domains/security-compliance/services/scanners/sast-scanner.js +112 -72
- package/dist/domains/security-compliance/services/semgrep-integration.d.ts +9 -2
- package/dist/domains/security-compliance/services/semgrep-integration.js +68 -20
- package/dist/domains/test-execution/services/flaky-detector.js +46 -5
- package/dist/domains/test-execution/services/retry-handler.js +38 -20
- package/dist/domains/test-execution/services/test-executor.js +84 -29
- package/dist/domains/test-generation/services/test-generator.js +2 -7
- package/dist/domains/visual-accessibility/services/visual-tester.js +2 -7
- package/dist/init/init-wizard-hooks.js +2 -2
- package/dist/init/init-wizard-steps.js +1 -1
- package/dist/init/kiro-installer.js +9 -8
- package/dist/init/opencode-installer.js +1 -1
- package/dist/init/phases/07-hooks.js +4 -2
- package/dist/init/phases/12-verification.js +1 -1
- package/dist/init/settings-merge.d.ts +10 -3
- package/dist/init/settings-merge.js +40 -9
- package/dist/integrations/agentic-flow/model-router/types.js +6 -8
- package/dist/integrations/agentic-flow/reasoning-bank/index.js +3 -20
- package/dist/integrations/coherence/engines/cohomology-adapter.js +100 -30
- package/dist/integrations/ruvector/brain-exporter.js +9 -15
- package/dist/integrations/ruvector/brain-rvf-exporter.js +17 -30
- package/dist/integrations/ruvector/brain-shared.d.ts +5 -1
- package/dist/integrations/ruvector/brain-shared.js +70 -4
- package/dist/integrations/ruvector/rvf-dual-writer.js +36 -15
- package/dist/integrations/ruvector/rvf-store-integrity.d.ts +14 -9
- package/dist/integrations/ruvector/rvf-store-integrity.js +39 -9
- package/dist/integrations/ruvector/shared-rvf-adapter.js +20 -23
- package/dist/kernel/memory-factory.js +14 -4
- package/dist/kernel/project-root.js +10 -8
- package/dist/kernel/unified-memory.js +1 -1
- package/dist/learning/local-judge-client.d.ts +6 -5
- package/dist/learning/local-judge-client.js +7 -6
- package/dist/learning/pattern-store.js +29 -11
- package/dist/mcp/bundle.js +548 -527
- package/dist/mcp/handlers/domain-handler-configs.d.ts +22 -1
- package/dist/mcp/handlers/domain-handler-configs.js +50 -19
- package/dist/mcp/handlers/domain-handlers.d.ts +7 -5
- package/dist/mcp/handlers/domain-handlers.js +7 -5
- package/dist/mcp/handlers/index.d.ts +1 -1
- package/dist/mcp/handlers/index.js +1 -1
- package/dist/mcp/handlers/pipeline-handlers.d.ts +31 -1
- package/dist/mcp/handlers/pipeline-handlers.js +63 -0
- package/dist/mcp/handlers/task-handlers.d.ts +1 -0
- package/dist/mcp/handlers/task-handlers.js +12 -4
- package/dist/mcp/protocol-server.d.ts +2 -0
- package/dist/mcp/protocol-server.js +112 -53
- package/dist/mcp/security/sampling-server.js +2 -1
- package/dist/mcp/tool-annotations.js +1 -1
- package/dist/mcp/tools/test-execution/schedule.js +7 -0
- package/dist/mcp/types.d.ts +10 -1
- package/dist/optimization/session-cache.d.ts +5 -0
- package/dist/optimization/session-cache.js +23 -0
- package/dist/routing/advisor/multi-model-executor.d.ts +4 -1
- package/dist/routing/advisor/multi-model-executor.js +8 -1
- package/dist/routing/free-tier/ladder.d.ts +2 -1
- package/dist/routing/free-tier/ladder.js +3 -2
- package/dist/routing/security/cyber-pin.d.ts +35 -11
- package/dist/routing/security/cyber-pin.js +76 -14
- package/dist/routing/value-score.js +1 -1
- package/dist/shared/git/index.d.ts +1 -0
- package/dist/shared/git/index.js +1 -0
- package/dist/shared/git/ref-validation.d.ts +20 -0
- package/dist/shared/git/ref-validation.js +43 -0
- package/dist/shared/llm/anthropic-params.d.ts +40 -0
- package/dist/shared/llm/anthropic-params.js +51 -0
- package/dist/shared/llm/cost-tracker.d.ts +15 -2
- package/dist/shared/llm/cost-tracker.js +62 -10
- package/dist/shared/llm/index.d.ts +2 -2
- package/dist/shared/llm/index.js +2 -2
- package/dist/shared/llm/interfaces.d.ts +1 -1
- package/dist/shared/llm/metrics/cost-metrics.js +5 -4
- package/dist/shared/llm/model-mapping.js +131 -0
- package/dist/shared/llm/model-registry.d.ts +37 -11
- package/dist/shared/llm/model-registry.js +393 -18
- package/dist/shared/llm/openai-params.d.ts +35 -0
- package/dist/shared/llm/openai-params.js +54 -0
- package/dist/shared/llm/provider-manager.js +4 -3
- package/dist/shared/llm/providers/azure-openai.d.ts +11 -0
- package/dist/shared/llm/providers/azure-openai.js +26 -15
- package/dist/shared/llm/providers/bedrock.js +11 -19
- package/dist/shared/llm/providers/claude.js +6 -29
- package/dist/shared/llm/providers/codex.js +4 -3
- package/dist/shared/llm/providers/gemini.d.ts +3 -2
- package/dist/shared/llm/providers/gemini.js +19 -10
- package/dist/shared/llm/providers/ollama.d.ts +2 -0
- package/dist/shared/llm/providers/ollama.js +30 -20
- package/dist/shared/llm/providers/openai.js +10 -17
- package/dist/shared/llm/providers/openrouter.d.ts +1 -1
- package/dist/shared/llm/providers/openrouter.js +57 -21
- package/dist/shared/llm/router/agent-router-config.js +33 -32
- package/dist/shared/llm/router/hybrid-router.d.ts +4 -0
- package/dist/shared/llm/router/hybrid-router.js +95 -35
- package/dist/shared/llm/router/routing-rules.js +9 -8
- package/dist/shared/llm/router/types.d.ts +9 -2
- package/dist/shared/llm/router/types.js +81 -13
- package/dist/shared/llm/translation/message-formatter.js +4 -23
- package/dist/shared/test-runner-verdict.d.ts +29 -0
- package/dist/shared/test-runner-verdict.js +43 -0
- package/dist/shared/vitest-json-report.d.ts +45 -0
- package/dist/shared/vitest-json-report.js +80 -0
- package/dist/test-scheduling/executors/vitest-executor.d.ts +7 -2
- package/dist/test-scheduling/executors/vitest-executor.js +174 -52
- package/dist/test-scheduling/git-aware/test-selector.js +3 -0
- package/dist/test-scheduling/phase-scheduler.d.ts +1 -0
- package/dist/test-scheduling/phase-scheduler.js +23 -1
- package/dist/validation/frontier-judge.d.ts +7 -4
- package/dist/validation/frontier-judge.js +11 -6
- package/package.json +6 -6
- package/dist/cli/chunks/adapter-OJF6LAJV.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-FGT474XB.js +0 -2
- package/dist/cli/chunks/base-HH765JFV.js +0 -2
- package/dist/cli/chunks/brain-handler-5FSA46R5.js +0 -90
- package/dist/cli/chunks/browser-workflow-NPM4FUPI.js +0 -2
- package/dist/cli/chunks/chunk-2LKAMMMI.js +0 -2
- package/dist/cli/chunks/chunk-4AKGBUYD.js +0 -4
- package/dist/cli/chunks/chunk-4MH22236.js +0 -2
- package/dist/cli/chunks/chunk-4PH7O5ZH.js +0 -2
- package/dist/cli/chunks/chunk-4UCMTYFQ.js +0 -65
- package/dist/cli/chunks/chunk-DRO5NJZA.js +0 -11
- package/dist/cli/chunks/chunk-FPHPP5TQ.js +0 -2
- package/dist/cli/chunks/chunk-FREF6Y4L.js +0 -14
- package/dist/cli/chunks/chunk-G6AV2HGY.js +0 -54
- package/dist/cli/chunks/chunk-GJAWEUIN.js +0 -16
- package/dist/cli/chunks/chunk-IUNMW454.js +0 -2
- package/dist/cli/chunks/chunk-JDXLCNKV.js +0 -2
- package/dist/cli/chunks/chunk-OC2CKU7I.js +0 -2
- package/dist/cli/chunks/chunk-OX6T26CD.js +0 -180
- package/dist/cli/chunks/chunk-PHHXHG2W.js +0 -2
- package/dist/cli/chunks/chunk-SEHCX4NH.js +0 -2
- package/dist/cli/chunks/chunk-TENYL5TI.js +0 -14
- package/dist/cli/chunks/chunk-U2AY57XZ.js +0 -5
- package/dist/cli/chunks/chunk-UYTWDS2R.js +0 -2
- package/dist/cli/chunks/chunk-VSYBMNIR.js +0 -2
- package/dist/cli/chunks/chunk-WBMRADQP.js +0 -81
- package/dist/cli/chunks/chunk-ZWRQ5VAU.js +0 -2
- package/dist/cli/chunks/chunk-ZYLSOBOR.js +0 -2
- package/dist/cli/chunks/ci-NTRH7PAW.js +0 -81
- package/dist/cli/chunks/ci-output-F57RSD35.js +0 -2
- package/dist/cli/chunks/client-GPZEC54E.js +0 -2
- package/dist/cli/chunks/complexity-analyzer-3FNFLACD.js +0 -2
- package/dist/cli/chunks/core-handlers-YMGHYIBR.js +0 -2
- package/dist/cli/chunks/cost-tracker-LTZAQBX7.js +0 -2
- package/dist/cli/chunks/cross-domain-router-ECBNTGYJ.js +0 -2
- package/dist/cli/chunks/dream-EHGKCFWH.js +0 -2
- package/dist/cli/chunks/eval-GL544IPO.js +0 -17
- package/dist/cli/chunks/fleet-DQVQQONW.js +0 -43
- package/dist/cli/chunks/heartbeat-scheduler-UFEL2CBW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-BLSD45CX.js +0 -2
- package/dist/cli/chunks/hnsw-index-A3RZODEN.js +0 -2
- package/dist/cli/chunks/impact-analyzer-OXHD3FOH.js +0 -2
- package/dist/cli/chunks/init-wizard-PKZL7QBU.js +0 -2
- package/dist/cli/chunks/kernel-XWPM72UJ.js +0 -2
- package/dist/cli/chunks/knowledge-graph-FRKR5XWI.js +0 -2
- package/dist/cli/chunks/learning-EV5LSOOM.js +0 -122
- package/dist/cli/chunks/llm-router-7LYDJUOT.js +0 -37
- package/dist/cli/chunks/llm-router-service-R7A5HHDM.js +0 -2
- package/dist/cli/chunks/load-test-5IKDWSYL.js +0 -2
- package/dist/cli/chunks/memory-backend-7VW5QCMO.js +0 -2
- package/dist/cli/chunks/memory-handlers-VZH3R2TQ.js +0 -2
- package/dist/cli/chunks/multi-model-executor-R6XCTMCF.js +0 -14
- package/dist/cli/chunks/pattern-null-store-BU6LCB2W.js +0 -2
- package/dist/cli/chunks/pipeline-SR5OTY45.js +0 -19
- package/dist/cli/chunks/protocol-executor-BSP5LWJN.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-J2RC7P25.js +0 -2
- package/dist/cli/chunks/queen-coordinator-XI5AJV2V.js +0 -2
- package/dist/cli/chunks/router-VXQYYA3D.js +0 -2
- package/dist/cli/chunks/routing-feedback-HZQTASFF.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-BDTLLJER.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-IB343MDN.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-Y7SN7LHU.js +0 -2
- package/dist/cli/chunks/rvf-store-integrity-OJGWWPLL.js +0 -2
- package/dist/cli/chunks/safe-db-2VTKKBJU.js +0 -2
- package/dist/cli/chunks/schedule-QJ4CFGJY.js +0 -2
- package/dist/cli/chunks/scheduler-2NHDQPC3.js +0 -2
- package/dist/cli/chunks/security-JF3BVNRO.js +0 -14
- package/dist/cli/chunks/sqlite-persistence-NVVAPZN3.js +0 -2
- package/dist/cli/chunks/task-handler-VTNRGAXP.js +0 -49
- package/dist/cli/chunks/task-handlers-FYSDH55N.js +0 -9
- package/dist/cli/chunks/test-scheduling-GPRXSIRP.js +0 -15
- package/dist/cli/chunks/types-OP6IWE6N.js +0 -2
- package/dist/cli/chunks/unified-memory-DSTIEDSH.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-KBV3P4OS.js +0 -2
- package/dist/cli/chunks/unified-persistence-XKCOUBKY.js +0 -2
- package/dist/cli/chunks/visual-security-TTWSPZTZ.js +0 -2
- package/dist/cli/chunks/witness-chain-2KY73HPN.js +0 -2
- package/dist/cli/chunks/workflow-HAZ6YKOG.js +0 -51
- package/dist/cli/chunks/workflow-orchestrator-UK56AVOT.js +0 -2
|
@@ -8,6 +8,8 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
8
8
|
import * as fs from 'fs/promises';
|
|
9
9
|
import { ok, err } from '../../shared/types/index.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
|
+
import { getTestRunnerExecutionError, TestRunnerExecutionError } from '../../shared/test-runner-verdict.js';
|
|
12
|
+
import { createVitestJsonReport } from '../../shared/vitest-json-report.js';
|
|
11
13
|
function escapeRegExp(s) {
|
|
12
14
|
return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
13
15
|
}
|
|
@@ -160,73 +162,67 @@ export function registerTestExecutionHandlers(ctx) {
|
|
|
160
162
|
return err(toError(error));
|
|
161
163
|
}
|
|
162
164
|
});
|
|
165
|
+
// execute-tests accepts a nonempty list of concrete paths; callers expand globs.
|
|
163
166
|
// Register test execution handler - runs real tests via child process
|
|
164
167
|
ctx.registerHandler('execute-tests', async (task) => {
|
|
165
168
|
const payload = task.payload;
|
|
166
169
|
try {
|
|
167
170
|
const testFiles = payload.testFiles || [];
|
|
168
171
|
if (testFiles.length === 0) {
|
|
169
|
-
return
|
|
170
|
-
total: 0, passed: 0, failed: 0, skipped: 0,
|
|
171
|
-
duration: 0, coverage: 0, failedTests: [],
|
|
172
|
-
warning: 'No test files specified. Provide testFiles array with paths to test files.',
|
|
173
|
-
});
|
|
172
|
+
return err(new TestRunnerExecutionError('No test files specified. Provide testFiles array with paths to test files.'));
|
|
174
173
|
}
|
|
175
|
-
//
|
|
176
|
-
const
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
const safePathPattern = /^[a-zA-Z0-9_.\/\-@]+$/;
|
|
180
|
-
const safeFiles = testFiles.filter(f => safePathPattern.test(f));
|
|
181
|
-
if (safeFiles.length !== testFiles.length) {
|
|
182
|
-
return ok({
|
|
183
|
-
total: 0, passed: 0, failed: 0, skipped: 0,
|
|
184
|
-
duration: 0, coverage: 0, failedTests: [],
|
|
185
|
-
warning: 'Some test file paths contain invalid characters and were rejected.',
|
|
186
|
-
});
|
|
174
|
+
// Validate test file paths before invoking a runner.
|
|
175
|
+
const safePathPattern = /^[a-zA-Z0-9_./@-]+$/;
|
|
176
|
+
if (testFiles.some(file => !safePathPattern.test(file))) {
|
|
177
|
+
return err(new TestRunnerExecutionError('Some test file paths contain invalid characters and were rejected. Provide concrete paths; expand glob patterns before calling.'));
|
|
187
178
|
}
|
|
179
|
+
const { spawnSync } = await import('child_process');
|
|
180
|
+
const options = { cwd: process.cwd(), timeout: 120000, encoding: 'utf-8' };
|
|
181
|
+
let runner = 'vitest';
|
|
182
|
+
// Vitest 5 writes the JSON report to a file rather than stdout; an explicit
|
|
183
|
+
// --outputFile gives Vitest 4 and 5 the same contract.
|
|
184
|
+
const report = createVitestJsonReport();
|
|
185
|
+
let execution;
|
|
186
|
+
let output;
|
|
188
187
|
try {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
if (!output.includes('{') && vitestResult.status !== 0) {
|
|
197
|
-
const jestResult = spawnSync('npx', ['jest', ...safeFiles, '--json'], {
|
|
198
|
-
cwd, timeout: 120000, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'],
|
|
199
|
-
});
|
|
200
|
-
output = jestResult.stdout || '';
|
|
201
|
-
}
|
|
188
|
+
execution = spawnSync('npx', ['vitest', 'run', ...testFiles, '--reporter=json', ...report.args], options);
|
|
189
|
+
output = execution.error || execution.signal
|
|
190
|
+
? ''
|
|
191
|
+
: report.read(execution.stdout || '') ?? '';
|
|
192
|
+
}
|
|
193
|
+
finally {
|
|
194
|
+
report.cleanup();
|
|
202
195
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
196
|
+
// Preserve the existing Jest fallback when Vitest cannot produce a report.
|
|
197
|
+
if (!output.includes('{') && execution.status !== 0 && !execution.error && !execution.signal) {
|
|
198
|
+
runner = 'jest';
|
|
199
|
+
execution = spawnSync('npx', ['jest', ...testFiles, '--json'], options);
|
|
200
|
+
output = execution.stdout || '';
|
|
201
|
+
}
|
|
202
|
+
const diagnostics = [execution.error?.message, execution.signal && `Terminated by ${execution.signal}`, execution.stderr, output].filter(Boolean).join('\n');
|
|
203
|
+
if (execution.error) {
|
|
204
|
+
return err(new TestRunnerExecutionError(`${runner} could not complete: ${diagnostics.slice(0, 4000)}`));
|
|
206
205
|
}
|
|
207
|
-
// Try to parse JSON output from test runner
|
|
208
206
|
try {
|
|
209
207
|
const jsonStart = output.indexOf('{');
|
|
210
208
|
if (jsonStart >= 0) {
|
|
211
209
|
const json = JSON.parse(output.slice(jsonStart));
|
|
212
|
-
// vitest format
|
|
213
210
|
if (json.testResults) {
|
|
214
211
|
const total = json.numTotalTests || 0;
|
|
215
212
|
const passed = json.numPassedTests || 0;
|
|
216
213
|
const failed = json.numFailedTests || 0;
|
|
217
|
-
|
|
214
|
+
const skipped = total - passed - failed;
|
|
215
|
+
const executionError = getTestRunnerExecutionError(runner, testFiles.join(', '), execution.status, { passed, failed, skipped }, diagnostics, json);
|
|
216
|
+
if (executionError)
|
|
217
|
+
return err(executionError);
|
|
218
|
+
return ok({ total, passed, failed, skipped, duration: 0, coverage: 0, failedTests: [] });
|
|
218
219
|
}
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
222
|
catch {
|
|
222
|
-
//
|
|
223
|
+
// A malformed report cannot establish that the requested tests completed.
|
|
223
224
|
}
|
|
224
|
-
return
|
|
225
|
-
total: testFiles.length, passed: 0, failed: 0, skipped: 0,
|
|
226
|
-
duration: 0, coverage: 0, failedTests: [],
|
|
227
|
-
warning: 'Could not parse test runner output. Check that vitest or jest is installed.',
|
|
228
|
-
rawOutput: output.slice(0, 500),
|
|
229
|
-
});
|
|
225
|
+
return err(new TestRunnerExecutionError(`Could not parse ${runner} results (exit code ${execution.status ?? 'unknown'}):\n${diagnostics.slice(0, 4000)}`));
|
|
230
226
|
}
|
|
231
227
|
catch (error) {
|
|
232
228
|
return err(toError(error));
|
|
@@ -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
|
|
@@ -61,6 +61,8 @@ export interface SecurityAuditResult {
|
|
|
61
61
|
readonly overallRiskScore: RiskScore;
|
|
62
62
|
readonly recommendations: string[];
|
|
63
63
|
readonly deploymentDecision: DeploymentDecision;
|
|
64
|
+
/** Requested checks without complete execution evidence; findings remain usable. */
|
|
65
|
+
readonly incompleteChecks?: readonly string[];
|
|
64
66
|
}
|
|
65
67
|
/**
|
|
66
68
|
* Triaged vulnerability findings
|
|
@@ -219,6 +221,7 @@ export declare class SecurityAuditProtocol {
|
|
|
219
221
|
private cleanupAgents;
|
|
220
222
|
private getAuditOptionsForTrigger;
|
|
221
223
|
private updatePhase;
|
|
224
|
+
private recordIncompleteCheck;
|
|
222
225
|
private createEmptyTriagedFindings;
|
|
223
226
|
private calculateSummary;
|
|
224
227
|
private calculateRiskValue;
|
|
@@ -111,16 +111,25 @@ export class SecurityAuditProtocol {
|
|
|
111
111
|
triagedFindings: this.createEmptyTriagedFindings(),
|
|
112
112
|
overallRiskScore: RiskScore.create(0),
|
|
113
113
|
recommendations: [],
|
|
114
|
-
|
|
114
|
+
incompleteChecks: [],
|
|
115
|
+
deploymentDecision: { allowed: false, reason: 'Audit not completed', blockingIssues: [], warnings: [] },
|
|
115
116
|
};
|
|
116
117
|
// Adjust scope based on trigger
|
|
117
118
|
const auditOptions = this.getAuditOptionsForTrigger(trigger);
|
|
118
119
|
// Phase 1: Vulnerability Scan (SAST)
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
120
|
+
if (auditOptions.includeSAST) {
|
|
121
|
+
this.updatePhase('vulnerability-scan');
|
|
122
|
+
const sastResult = await this.scanVulnerabilities(auditOptions);
|
|
123
|
+
if (sastResult.success) {
|
|
124
|
+
this.currentAudit = { ...this.currentAudit, sastResult: sastResult.value };
|
|
125
|
+
await this.publishVulnerabilities(sastResult.value.vulnerabilities);
|
|
126
|
+
if (sastResult.value.evidence?.completeness !== 'complete') {
|
|
127
|
+
this.recordIncompleteCheck('SAST coverage is incomplete or unverified');
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
this.recordIncompleteCheck('SAST scan did not complete');
|
|
132
|
+
}
|
|
124
133
|
}
|
|
125
134
|
// Phase 2: Dependency Scan
|
|
126
135
|
this.updatePhase('dependency-scan');
|
|
@@ -129,32 +138,51 @@ export class SecurityAuditProtocol {
|
|
|
129
138
|
this.currentAudit = { ...this.currentAudit, dependencyResult: depResult.value };
|
|
130
139
|
await this.publishDependencyVulnerabilities(depResult.value.vulnerabilities);
|
|
131
140
|
}
|
|
141
|
+
else {
|
|
142
|
+
this.recordIncompleteCheck('Dependency scan did not complete');
|
|
143
|
+
}
|
|
132
144
|
// Phase 3: Secret Scan (if enabled)
|
|
133
|
-
if (
|
|
145
|
+
if (auditOptions.includeSecrets) {
|
|
134
146
|
this.updatePhase('secret-scan');
|
|
135
147
|
const secretResult = await this.auditSecrets();
|
|
136
148
|
if (secretResult.success) {
|
|
137
149
|
this.currentAudit = { ...this.currentAudit, secretResult: secretResult.value };
|
|
138
150
|
await this.publishSecretExposures(secretResult.value.secretsFound);
|
|
139
151
|
}
|
|
152
|
+
else {
|
|
153
|
+
this.recordIncompleteCheck('Secret scan is unavailable');
|
|
154
|
+
}
|
|
140
155
|
}
|
|
141
156
|
// Phase 4: DAST Scan (if enabled and URL provided)
|
|
142
|
-
if (
|
|
157
|
+
if (auditOptions.includeDAST && this.config.targetUrl) {
|
|
143
158
|
const dastResult = await this.runDASTScan(this.config.targetUrl);
|
|
144
159
|
if (dastResult.success) {
|
|
145
160
|
this.currentAudit = { ...this.currentAudit, dastResult: dastResult.value };
|
|
161
|
+
this.recordIncompleteCheck('DAST coverage is unverified: the scanner returned no execution receipt');
|
|
146
162
|
await this.publishVulnerabilities(dastResult.value.vulnerabilities);
|
|
147
163
|
}
|
|
164
|
+
else {
|
|
165
|
+
this.recordIncompleteCheck('DAST scan did not complete');
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else if (auditOptions.includeDAST) {
|
|
169
|
+
this.recordIncompleteCheck('DAST requested without a target URL');
|
|
148
170
|
}
|
|
149
171
|
// Phase 5: Compliance Validation
|
|
150
|
-
this.
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
172
|
+
if (this.config.complianceStandards.length > 0) {
|
|
173
|
+
this.updatePhase('compliance-validation');
|
|
174
|
+
const complianceResult = await this.validateCompliance();
|
|
175
|
+
if (complianceResult.success) {
|
|
176
|
+
this.currentAudit = {
|
|
177
|
+
...this.currentAudit,
|
|
178
|
+
complianceReports: complianceResult.value,
|
|
179
|
+
};
|
|
180
|
+
await this.publishComplianceResults(complianceResult.value);
|
|
181
|
+
this.recordIncompleteCheck('Protocol compliance checks have no verified execution receipt');
|
|
182
|
+
}
|
|
183
|
+
else {
|
|
184
|
+
this.recordIncompleteCheck('Compliance validation did not complete');
|
|
185
|
+
}
|
|
158
186
|
}
|
|
159
187
|
// Phase 6: Triage Findings
|
|
160
188
|
this.updatePhase('triage');
|
|
@@ -296,26 +324,9 @@ export class SecurityAuditProtocol {
|
|
|
296
324
|
* Audit for exposed secrets/credentials
|
|
297
325
|
*/
|
|
298
326
|
async auditSecrets() {
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
return err(agentId.error);
|
|
303
|
-
}
|
|
304
|
-
const secretsFound = [];
|
|
305
|
-
// In production, this would scan actual files with patterns like:
|
|
306
|
-
// - API keys: /(?:api[_-]?key|apikey)/gi
|
|
307
|
-
// - Passwords: /(?:password|passwd|pwd)/gi
|
|
308
|
-
// - Tokens: /(?:secret|token|bearer)/gi
|
|
309
|
-
// - Private keys: /-----BEGIN\s+(?:RSA\s+)?PRIVATE\s+KEY-----/gi
|
|
310
|
-
// For now, report no secrets found (clean scan)
|
|
311
|
-
return ok({
|
|
312
|
-
secretsFound,
|
|
313
|
-
filesScanned: this.config.scanPaths.length * 10, // Estimate
|
|
314
|
-
});
|
|
315
|
-
}
|
|
316
|
-
catch (error) {
|
|
317
|
-
return err(toError(error));
|
|
318
|
-
}
|
|
327
|
+
// Agent allocation is not scan execution. Until this protocol has a real
|
|
328
|
+
// secret-scanner adapter, retain an explicit unavailable result.
|
|
329
|
+
return err(new Error('Secret scanning is unavailable in SecurityAuditProtocol: no scanner is implemented.'));
|
|
319
330
|
}
|
|
320
331
|
/**
|
|
321
332
|
* Run DAST scan against target URL
|
|
@@ -383,7 +394,7 @@ export class SecurityAuditProtocol {
|
|
|
383
394
|
return {
|
|
384
395
|
riskScore: RiskScore.create(0),
|
|
385
396
|
recommendations: [],
|
|
386
|
-
deploymentDecision: { allowed:
|
|
397
|
+
deploymentDecision: { allowed: false, reason: 'No audit data', blockingIssues: ['No audit evidence'], warnings: [] },
|
|
387
398
|
};
|
|
388
399
|
}
|
|
389
400
|
// Calculate risk score
|
|
@@ -641,6 +652,14 @@ export class SecurityAuditProtocol {
|
|
|
641
652
|
this.currentAudit = { ...this.currentAudit, phase };
|
|
642
653
|
}
|
|
643
654
|
}
|
|
655
|
+
recordIncompleteCheck(reason) {
|
|
656
|
+
if (this.currentAudit) {
|
|
657
|
+
this.currentAudit = {
|
|
658
|
+
...this.currentAudit,
|
|
659
|
+
incompleteChecks: [...(this.currentAudit.incompleteChecks ?? []), reason],
|
|
660
|
+
};
|
|
661
|
+
}
|
|
662
|
+
}
|
|
644
663
|
createEmptyTriagedFindings() {
|
|
645
664
|
return {
|
|
646
665
|
critical: [],
|
|
@@ -717,6 +736,9 @@ export class SecurityAuditProtocol {
|
|
|
717
736
|
const recommendations = [];
|
|
718
737
|
if (!this.currentAudit)
|
|
719
738
|
return recommendations;
|
|
739
|
+
for (const check of this.currentAudit.incompleteChecks ?? []) {
|
|
740
|
+
recommendations.push(`Complete the required security check before approving deployment: ${check}`);
|
|
741
|
+
}
|
|
720
742
|
const { triagedFindings, complianceReports } = this.currentAudit;
|
|
721
743
|
// Critical findings
|
|
722
744
|
if (triagedFindings.critical.length > 0) {
|
|
@@ -747,10 +769,10 @@ export class SecurityAuditProtocol {
|
|
|
747
769
|
return recommendations;
|
|
748
770
|
}
|
|
749
771
|
determineDeploymentDecision(_riskScore) {
|
|
750
|
-
const blockingIssues = [];
|
|
772
|
+
const blockingIssues = [...(this.currentAudit?.incompleteChecks ?? [])];
|
|
751
773
|
const warnings = [];
|
|
752
774
|
if (!this.currentAudit) {
|
|
753
|
-
return { allowed:
|
|
775
|
+
return { allowed: false, reason: 'No audit data', blockingIssues: ['No audit evidence'], warnings };
|
|
754
776
|
}
|
|
755
777
|
const { triagedFindings, complianceReports } = this.currentAudit;
|
|
756
778
|
// Check critical vulnerabilities
|
|
@@ -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;
|