agentic-qe 3.14.3 → 3.14.5
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 +204 -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/audit/witness-chain.d.ts +1 -1
- package/dist/audit/witness-chain.js +29 -22
- package/dist/cli/bundle.js +13 -10
- package/dist/cli/chunks/adapter-IYC62SXA.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-TQOMLWWX.js → agent-booster-wasm-EDNKP3SP.js} +2 -2
- package/dist/cli/chunks/{agent-handler-Q3SEMMI2.js → agent-handler-V6CZ7Q6S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-SJXAQSZI.js → agent-memory-branch-ZMD6ULC3.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-LLOU2IXD.js +2 -0
- package/dist/cli/chunks/{arena-7RC7TBGW.js → arena-4UPAEHFT.js} +4 -4
- package/dist/cli/chunks/{arena-UPB7TKUY.js → arena-QLSBESC7.js} +2 -2
- package/dist/cli/chunks/{audit-IXN5R4WB.js → audit-CVZQMF55.js} +3 -3
- package/dist/cli/chunks/base-P3Z4IKCT.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-RP4DEGK3.js → better-sqlite3-4DSBPDRH.js} +2 -2
- package/dist/cli/chunks/brain-handler-GBY4EZ4P.js +94 -0
- package/dist/cli/chunks/{branch-enumerator-VPRWDGFJ.js → branch-enumerator-XYBVXCNO.js} +2 -2
- package/dist/cli/chunks/{browser-B6E7JPPJ.js → browser-32F6MREU.js} +2 -2
- package/dist/cli/chunks/browser-workflow-YYHQQ25X.js +2 -0
- package/dist/cli/chunks/{chunk-HOQQCY2K.js → chunk-2JGEZHWY.js} +2 -2
- package/dist/cli/chunks/{chunk-NN76NTOX.js → chunk-2KJQ2UQE.js} +1 -1
- package/dist/cli/chunks/{chunk-D4Z2N74A.js → chunk-2OMLTYQK.js} +1 -1
- package/dist/cli/chunks/chunk-37TUN44F.js +4 -0
- package/dist/cli/chunks/{chunk-LVLBIKJD.js → chunk-3DDXWYMO.js} +1 -1
- package/dist/cli/chunks/{chunk-UHQY3GK7.js → chunk-3EZ5DR2R.js} +3 -3
- package/dist/cli/chunks/{chunk-3P6NCFI2.js → chunk-3KDL6QDK.js} +2 -2
- package/dist/cli/chunks/{chunk-SG47AXJG.js → chunk-3VIXOHMS.js} +1 -1
- package/dist/cli/chunks/{chunk-7FYMDKQH.js → chunk-3YUB5HER.js} +165 -167
- package/dist/cli/chunks/chunk-4FWTLJEP.js +16 -0
- package/dist/cli/chunks/{chunk-PI74GOE4.js → chunk-52L77RMG.js} +2 -2
- package/dist/cli/chunks/{chunk-LS3EUMBP.js → chunk-5D36YHS3.js} +5 -5
- package/dist/cli/chunks/{chunk-EY4OQHU3.js → chunk-5WOSWNDN.js} +1 -1
- package/dist/cli/chunks/{chunk-F67AV5P2.js → chunk-67YV75XP.js} +2 -2
- package/dist/cli/chunks/{chunk-IP7NSFQQ.js → chunk-6A44AOGN.js} +2 -2
- package/dist/cli/chunks/{chunk-3ABRGG3C.js → chunk-6CR4VQBQ.js} +2 -2
- package/dist/cli/chunks/chunk-6ITZZIQX.js +2 -0
- package/dist/cli/chunks/{chunk-7BUERZYL.js → chunk-6LKDHEBY.js} +2 -2
- package/dist/cli/chunks/{chunk-FKG5OQFT.js → chunk-6TU7FEMD.js} +1 -1
- package/dist/cli/chunks/{chunk-KF63AYXD.js → chunk-6VAZAHQG.js} +2 -2
- package/dist/cli/chunks/{chunk-XXCYQXK3.js → chunk-73EI4C2E.js} +2 -2
- package/dist/cli/chunks/chunk-75QJ5HWE.js +14 -0
- package/dist/cli/chunks/{chunk-72UJXEKQ.js → chunk-7CD7PBHY.js} +2 -2
- package/dist/cli/chunks/chunk-7DETTOPZ.js +14 -0
- package/dist/cli/chunks/{chunk-7JQHPANT.js → chunk-7JZJJA7U.js} +3 -3
- package/dist/cli/chunks/{chunk-5Y5TC6BY.js → chunk-7VFY7TUR.js} +2 -2
- package/dist/cli/chunks/chunk-7X7JYWT4.js +27 -0
- package/dist/cli/chunks/chunk-AF4XKLXO.js +2 -0
- package/dist/cli/chunks/{chunk-7SLAZAVU.js → chunk-AFEDJ3RU.js} +2 -2
- package/dist/cli/chunks/{chunk-ZUG5MOUB.js → chunk-AMMQOV35.js} +2 -2
- package/dist/cli/chunks/{chunk-ZN3J6TZD.js → chunk-BHFR2EXL.js} +1 -1
- package/dist/cli/chunks/{chunk-HXE5NBJG.js → chunk-BJPL6THQ.js} +1 -1
- package/dist/cli/chunks/{chunk-37BASGWC.js → chunk-BXVAVFGU.js} +2 -2
- package/dist/cli/chunks/{chunk-VWNHKYK7.js → chunk-BYG36QC5.js} +2 -2
- package/dist/cli/chunks/chunk-C3HQL6S4.js +2 -0
- package/dist/cli/chunks/{chunk-OY7MLMEX.js → chunk-C3Z4VVHP.js} +5 -5
- package/dist/cli/chunks/{chunk-CB5JPRIZ.js → chunk-CPC7FN52.js} +2 -2
- package/dist/cli/chunks/{chunk-OVDKWCD7.js → chunk-CVMNJSCB.js} +2 -2
- package/dist/cli/chunks/{chunk-N4H2QOT5.js → chunk-CYE2TJFV.js} +2 -2
- package/dist/cli/chunks/{chunk-YCBDE2N7.js → chunk-CZO4BJG5.js} +2 -2
- package/dist/cli/chunks/{chunk-YEXPFHV6.js → chunk-D6OUCB2H.js} +2 -2
- package/dist/cli/chunks/{chunk-JRYZKBY2.js → chunk-DDCIYOGT.js} +2 -2
- package/dist/cli/chunks/{chunk-XX7HUSX2.js → chunk-DKUBQQFG.js} +2 -2
- package/dist/cli/chunks/{chunk-SGXSB7YO.js → chunk-DLF5BOJD.js} +1 -1
- package/dist/cli/chunks/{chunk-5BLFXQEB.js → chunk-DO6EI5KB.js} +1 -1
- package/dist/cli/chunks/{chunk-33VPWGCM.js → chunk-DPBRWP4J.js} +3 -3
- package/dist/cli/chunks/{chunk-H6XBM2LY.js → chunk-E3W6XQ57.js} +2 -2
- package/dist/cli/chunks/{chunk-KPMGTVB4.js → chunk-E4AZXCT5.js} +1 -1
- package/dist/cli/chunks/chunk-E4EYPYR3.js +2 -0
- package/dist/cli/chunks/{chunk-TFHQE6NK.js → chunk-EFV4ADMO.js} +4 -4
- package/dist/cli/chunks/{chunk-VIDBBB6F.js → chunk-ELBZON4V.js} +2 -2
- package/dist/cli/chunks/chunk-EOR2UT72.js +2 -0
- package/dist/cli/chunks/{chunk-H5ZRV5K5.js → chunk-F34OAHOM.js} +2 -2
- package/dist/cli/chunks/{chunk-UMENRGHK.js → chunk-FUNGTIF2.js} +2 -2
- package/dist/cli/chunks/{chunk-DBA3N742.js → chunk-G3L5L6YQ.js} +1 -1
- package/dist/cli/chunks/{chunk-ELU4IC3I.js → chunk-G3W6BMVJ.js} +1 -1
- package/dist/cli/chunks/{chunk-RTJ2M6V6.js → chunk-GTKCGPJZ.js} +3 -3
- package/dist/cli/chunks/chunk-HBCGYMQU.js +2 -0
- package/dist/cli/chunks/{chunk-YL7T3VV7.js → chunk-HSVKZ5KI.js} +4 -4
- package/dist/cli/chunks/{chunk-MXMFGSWR.js → chunk-HVU64GP5.js} +2 -2
- package/dist/cli/chunks/chunk-HVXJC3OC.js +2 -0
- package/dist/cli/chunks/chunk-HYEJJJY3.js +4 -0
- package/dist/cli/chunks/{chunk-CR3QGHVN.js → chunk-I2NENQ44.js} +2 -2
- package/dist/cli/chunks/{chunk-GNTVFN7D.js → chunk-I6X3EGJI.js} +1 -1
- package/dist/cli/chunks/{chunk-2GNRW3OD.js → chunk-IGBEJ4UJ.js} +2 -2
- package/dist/cli/chunks/{chunk-UYJHYMEQ.js → chunk-IIAR5S7Q.js} +2 -2
- package/dist/cli/chunks/{chunk-YAKS3CAB.js → chunk-IJHCIXJC.js} +2 -2
- package/dist/cli/chunks/{chunk-YDNSLLBS.js → chunk-IUDWEOLX.js} +2 -2
- package/dist/cli/chunks/chunk-IUHB5GVS.js +3 -0
- package/dist/cli/chunks/{chunk-4UDZLD42.js → chunk-IYTLXUBO.js} +2 -2
- package/dist/cli/chunks/chunk-J27F4NSB.js +2 -0
- package/dist/cli/chunks/{chunk-HRUU7E3D.js → chunk-J5UNP6W3.js} +2 -2
- package/dist/cli/chunks/{chunk-E3FBW6G2.js → chunk-JES6R5KP.js} +1 -1
- package/dist/cli/chunks/chunk-JROVR6YS.js +11 -0
- package/dist/cli/chunks/chunk-JSZ663MU.js +2 -0
- package/dist/cli/chunks/{chunk-FUE6LL72.js → chunk-JVQBWYHW.js} +2 -2
- package/dist/cli/chunks/{chunk-G6ZHTF42.js → chunk-K27SU3RE.js} +2 -2
- package/dist/cli/chunks/chunk-K7NJHFLZ.js +54 -0
- package/dist/cli/chunks/{chunk-MDZ6RRLX.js → chunk-KEY43ANX.js} +2 -2
- package/dist/cli/chunks/chunk-KIP6WZGV.js +13 -0
- package/dist/cli/chunks/{chunk-SQ3PPISY.js → chunk-KKHYJF5U.js} +1 -1
- package/dist/cli/chunks/{chunk-TJEIOE7F.js → chunk-KLTP5IDB.js} +1 -1
- package/dist/cli/chunks/{chunk-IKIITGU5.js → chunk-KO4FNAUR.js} +4 -4
- package/dist/cli/chunks/{chunk-DX3C5HPN.js → chunk-KYA5LARK.js} +1 -1
- package/dist/cli/chunks/{chunk-ZHXWGNYM.js → chunk-LSUILON7.js} +1 -1
- package/dist/cli/chunks/chunk-LULD4JV2.js +15 -0
- package/dist/cli/chunks/{chunk-MWWAMDHI.js → chunk-M23ZOZVY.js} +1 -1
- package/dist/cli/chunks/{chunk-RKJZWWB7.js → chunk-M5AEL7IS.js} +2 -2
- package/dist/cli/chunks/chunk-MI5Q55DG.js +65 -0
- package/dist/cli/chunks/chunk-N7H767TP.js +4 -0
- package/dist/cli/chunks/{chunk-5F6DWHQG.js → chunk-NQI7FWCS.js} +2 -2
- package/dist/cli/chunks/{chunk-LLVGTEHU.js → chunk-NRE4NAVA.js} +1 -1
- package/dist/cli/chunks/{chunk-XA7CG3LH.js → chunk-NU7UTXMP.js} +2 -2
- package/dist/cli/chunks/chunk-NVYBM3R4.js +2 -0
- package/dist/cli/chunks/chunk-O3JTQ7N4.js +2 -0
- package/dist/cli/chunks/{chunk-TISSZFHO.js → chunk-OEIQTWQP.js} +1 -1
- package/dist/cli/chunks/{chunk-2IGT5WNQ.js → chunk-PSPKSUF6.js} +1 -1
- package/dist/cli/chunks/{chunk-B7SWW5A6.js → chunk-QIRL6B3C.js} +2 -2
- package/dist/cli/chunks/{chunk-JBB7E26R.js → chunk-QRCIZFNK.js} +2 -2
- package/dist/cli/chunks/{chunk-4JBFJTHJ.js → chunk-QWUXCG2L.js} +1 -1
- package/dist/cli/chunks/{chunk-B5XFDFBT.js → chunk-QYOGD2VW.js} +1 -1
- package/dist/cli/chunks/chunk-QZMUXJHZ.js +2 -0
- package/dist/cli/chunks/chunk-R6IU3EWP.js +2 -0
- package/dist/cli/chunks/{chunk-G5C2XVZC.js → chunk-R74ZKREV.js} +1 -1
- package/dist/cli/chunks/chunk-RD2VGOUH.js +2 -0
- package/dist/cli/chunks/{chunk-OV5EZO3U.js → chunk-RD6TEZ64.js} +2 -2
- package/dist/cli/chunks/{chunk-4C6UJIHB.js → chunk-RGGK6VZ7.js} +1 -1
- package/dist/cli/chunks/{chunk-4XPPMADQ.js → chunk-RIZVC4XY.js} +6 -6
- package/dist/cli/chunks/{chunk-4RP5VUBI.js → chunk-RKOUXVZZ.js} +2 -2
- package/dist/cli/chunks/{chunk-IFFZR6GY.js → chunk-RP2ZKPYV.js} +1 -1
- package/dist/cli/chunks/{chunk-BN7DKW5D.js → chunk-SQF6HRXR.js} +1 -1
- package/dist/cli/chunks/chunk-SQKW3B6B.js +2 -0
- package/dist/cli/chunks/{chunk-LKN7JQTW.js → chunk-SX4JLSLV.js} +2 -2
- package/dist/cli/chunks/{chunk-YGB6R5DW.js → chunk-TUSSPKRM.js} +1 -1
- package/dist/cli/chunks/{chunk-LHGNNZ76.js → chunk-TY5WC3FT.js} +3 -3
- package/dist/cli/chunks/{chunk-B2ZONZPZ.js → chunk-UDHVCKGA.js} +2 -2
- package/dist/cli/chunks/{chunk-IU4EBTA2.js → chunk-UJWAWIRV.js} +4 -4
- package/dist/cli/chunks/{chunk-LTBCAFTZ.js → chunk-UKGXWW64.js} +3 -3
- package/dist/cli/chunks/{chunk-JV4FZUE7.js → chunk-UMGFMKDW.js} +2 -2
- package/dist/cli/chunks/{chunk-STRDSVH3.js → chunk-URVHZPWY.js} +2 -2
- package/dist/cli/chunks/{chunk-PZTVH2AS.js → chunk-UTBYJ4RF.js} +2 -2
- package/dist/cli/chunks/{chunk-ZK5JKHP4.js → chunk-VD5IO5EO.js} +1 -1
- package/dist/cli/chunks/chunk-VTOVWHEM.js +2 -0
- package/dist/cli/chunks/{chunk-OYMLHX2B.js → chunk-W2XCZU62.js} +1 -1
- package/dist/cli/chunks/{chunk-T35GZXTU.js → chunk-WJHWH5D2.js} +2 -2
- package/dist/cli/chunks/{chunk-NBWQBQO5.js → chunk-WJTSY5MC.js} +1 -1
- package/dist/cli/chunks/{chunk-NTSXHZTC.js → chunk-WK7B4B6Y.js} +4 -4
- package/dist/cli/chunks/{chunk-2WT7AKKK.js → chunk-WLXK2KNU.js} +2 -2
- package/dist/cli/chunks/chunk-WOIGKU2N.js +180 -0
- package/dist/cli/chunks/{chunk-WYMGK5DX.js → chunk-WX6RRIGW.js} +2 -2
- package/dist/cli/chunks/{chunk-C46DMCWF.js → chunk-XEZIIQYJ.js} +2 -2
- package/dist/cli/chunks/{chunk-TTMHIOQ3.js → chunk-XFPPERA2.js} +2 -2
- package/dist/cli/chunks/{chunk-OVPJQWHW.js → chunk-XLAUGSW7.js} +2 -2
- package/dist/cli/chunks/{chunk-V4AOVDCJ.js → chunk-XQSIRBKT.js} +8 -8
- package/dist/cli/chunks/{chunk-4Q35TI6Z.js → chunk-XUR2M2WB.js} +2 -2
- package/dist/cli/chunks/{chunk-5IAB5NRZ.js → chunk-XZSMZHM2.js} +2 -2
- package/dist/cli/chunks/{chunk-AB4U6ZNI.js → chunk-Y5L3ES4L.js} +2 -2
- package/dist/cli/chunks/chunk-YDFL445W.js +2 -0
- package/dist/cli/chunks/{chunk-7G6UX2QN.js → chunk-YQGPQBCX.js} +2 -2
- package/dist/cli/chunks/{chunk-5FOZO7KM.js → chunk-YXP6BKGS.js} +46 -46
- package/dist/cli/chunks/chunk-ZBABIZ2D.js +2 -0
- package/dist/cli/chunks/{chunk-IQEJGZV6.js → chunk-ZCWERUYB.js} +4 -4
- package/dist/cli/chunks/ci-RACDAJMR.js +81 -0
- package/dist/cli/chunks/{ci-output-LK3MBXLZ.js → ci-output-EHRSZBKG.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-7AIXACR7.js → circuit-breaker-GBV7M5XG.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-UA7EO6VN.js → claude-flow-setup-5LVJOFKP.js} +2 -2
- package/dist/cli/chunks/client-HUVFA5PF.js +2 -0
- package/dist/cli/chunks/{cline-installer-YDDCKKEV.js → cline-installer-W4NMXJSG.js} +2 -2
- package/dist/cli/chunks/{code-URB7UAKW.js → code-JWXJMYXB.js} +29 -29
- package/dist/cli/chunks/{code-index-extractor-BL6HWH4Q.js → code-index-extractor-RVI2IFTM.js} +2 -2
- package/dist/cli/chunks/codex-installer-3BORJINH.js +14 -0
- package/dist/cli/chunks/{completions-RCKBSSSS.js → completions-A55NCTAO.js} +2 -2
- package/dist/cli/chunks/complexity-analyzer-JCXHGGLY.js +2 -0
- package/dist/cli/chunks/{continuedev-installer-VOTCEBFH.js → continuedev-installer-PUVFMGYW.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-NVTGLZX3.js → copilot-installer-4DCMYWHB.js} +2 -2
- package/dist/cli/chunks/core-handlers-UEXO3VAA.js +2 -0
- package/dist/cli/chunks/cost-tracker-5TV2GGKY.js +2 -0
- package/dist/cli/chunks/{coverage-ZTPJWXWE.js → coverage-NNWM7TX3.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-ODU5IZD6.js +2 -0
- package/dist/cli/chunks/{cursor-installer-CMGJQMHX.js → cursor-installer-4NCHGJGK.js} +2 -2
- package/dist/cli/chunks/{daemon-Y2I3YVIU.js → daemon-QIKCXKWO.js} +4 -4
- package/dist/cli/chunks/{daemon-V456IWR3.js → daemon-T4JO4IXP.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-ZCBBOD3D.js → dag-attention-scheduler-RPAAIDAD.js} +2 -2
- package/dist/cli/chunks/{detect-2GHEA4A3.js → detect-SBEEVDSN.js} +2 -2
- package/dist/cli/chunks/{dist-node-44AGYJCH.js → dist-node-ZHI6NCSU.js} +2 -2
- package/dist/cli/chunks/{domain-handler-IDLIEP6X.js → domain-handler-LBC3GJ7Z.js} +2 -2
- package/dist/cli/chunks/domain-plugins-H6IZ5USZ.js +2 -0
- package/dist/cli/chunks/{domain-transfer-KLEXGIRF.js → domain-transfer-JZA5TMW3.js} +2 -2
- package/dist/cli/chunks/dream-HE3OX42F.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-AHTR7CRU.js +3 -0
- package/dist/cli/chunks/eval-DZU2KISM.js +17 -0
- package/dist/cli/chunks/{experience-capture-middleware-CJJJN7CF.js → experience-capture-middleware-5IQCWKSL.js} +4 -4
- package/dist/cli/chunks/{fast-paths-LGLLKX6P.js → fast-paths-2KLDUWCY.js} +2 -2
- package/dist/cli/chunks/{feature-flags-33D3I4DD.js → feature-flags-7AC3XDZA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-QL4NCEGW.js → feature-flags-N6UAEZY4.js} +2 -2
- package/dist/cli/chunks/{file-discovery-GKCYJPFZ.js → file-discovery-5SDIW4V2.js} +2 -2
- package/dist/cli/chunks/fleet-ZIQCAZ2Y.js +43 -0
- package/dist/cli/chunks/{gnn-wrapper-ELSGT67Z.js → gnn-wrapper-DUMBZJEV.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-ZUI3DOOP.js → heartbeat-handler-6HVM6ZMR.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-QUIFGGLX.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-42KB37KP.js +2 -0
- package/dist/cli/chunks/hnsw-index-T2PGO77J.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-EZMM5JWL.js → hnsw-legacy-bridge-5DRL5FLX.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-G4CE3EOS.js → hnswlib-node-GW67GTCL.js} +2 -2
- package/dist/cli/chunks/{hooks-LCVXXA55.js → hooks-QHH6FVO4.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-FRNWYRKH.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6Z7RQ3HI.js → hypergraph-engine-7XDCCVG2.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-PLI2GYPK.js → hypergraph-handler-QHF7NOU5.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-A5QYOYBR.js +2 -0
- package/dist/cli/chunks/{init-handler-7VH3QJ5Y.js → init-handler-5UIVOM7K.js} +6 -6
- package/dist/cli/chunks/init-wizard-XBU674YH.js +2 -0
- package/dist/cli/chunks/kernel-DV5MTNZD.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-U3MW62DE.js → kilocode-installer-TGGV6K5Q.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-PPEAC44T.js → kiro-installer-4XYBHZWW.js} +12 -12
- package/dist/cli/chunks/knowledge-graph-4ACGVJQK.js +2 -0
- package/dist/cli/chunks/learning-STE5W6BS.js +122 -0
- package/dist/cli/chunks/llm-router-NKF7J3RI.js +37 -0
- package/dist/cli/chunks/llm-router-service-PSMASERT.js +2 -0
- package/dist/cli/chunks/{load-VO7ABNHV.js → load-B2T77UJQ.js} +2 -2
- package/dist/cli/chunks/load-test-MRUO2VPF.js +2 -0
- package/dist/cli/chunks/mcp-JGSFCEMH.js +2 -0
- package/dist/cli/chunks/{memory-FZTT7ADM.js → memory-WRFZKG56.js} +6 -6
- package/dist/cli/chunks/memory-backend-2MPGI6JW.js +2 -0
- package/dist/cli/chunks/memory-handlers-XT4HMITB.js +2 -0
- package/dist/cli/chunks/multi-model-executor-26Q5BSVG.js +14 -0
- package/dist/cli/chunks/{opencode-installer-GQ7J5SBG.js → opencode-installer-J36EMQU7.js} +2 -2
- package/dist/cli/chunks/{orchestrator-66JK2OS5.js → orchestrator-D5IFV65I.js} +20 -20
- package/dist/cli/chunks/pattern-null-store-TGWUL237.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-O6XHM2G5.js → pattern-usage-recorder-BVMTWI3E.js} +2 -2
- package/dist/cli/chunks/pipeline-OWAHDUAQ.js +19 -0
- package/dist/cli/chunks/platform-ANGBFWBV.js +2 -0
- package/dist/cli/chunks/{plugin-7OFLNGOS.js → plugin-OO7ON2YW.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-OSRDK2FW.js → prime-radiant-advanced-wasm-HFG3BXWU.js} +2 -2
- package/dist/cli/chunks/project-root-LNOYVTYY.js +2 -0
- package/dist/cli/chunks/protocol-executor-GEVH5KD6.js +2 -0
- package/dist/cli/chunks/{protocol-handler-WLYTX6FS.js → protocol-handler-CE3Q6LY4.js} +2 -2
- package/dist/cli/chunks/{prove-QVNE4V3J.js → prove-7XPN53PY.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-DJ2JL6QB.js +2 -0
- package/dist/cli/chunks/{quality-DNE2RKE5.js → quality-TT23JRFX.js} +2 -2
- package/dist/cli/chunks/{quality-gate-2K35GCSI.js → quality-gate-PPPRP255.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-F7E3AS26.js +2 -0
- package/dist/cli/chunks/real-embeddings-EYNZIFJE.js +2 -0
- package/dist/cli/chunks/ref-validation-QQR64ZXD.js +2 -0
- package/dist/cli/chunks/{roocode-installer-NCEZPF5L.js → roocode-installer-UIGS7ZJD.js} +2 -2
- package/dist/cli/chunks/router-OZH3QSAU.js +2 -0
- package/dist/cli/chunks/routing-feedback-J2E3ADZB.js +2 -0
- package/dist/cli/chunks/{routing-handler-4MXXZRYP.js → routing-handler-6AENUIRG.js} +4 -4
- package/dist/cli/chunks/{ruvector-commands-WDFMMCMK.js → ruvector-commands-5AWMEV34.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-HK525Y5Y.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-Q7FB3BKR.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-NWRJ7C22.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-5ZRCGUI6.js +2 -0
- package/dist/cli/chunks/rvf-store-integrity-ISKRP563.js +2 -0
- package/dist/cli/chunks/safe-db-3OYEPVEH.js +2 -0
- package/dist/cli/chunks/schedule-AG4C2EIQ.js +2 -0
- package/dist/cli/chunks/scheduler-SQS2CZFZ.js +2 -0
- package/dist/cli/chunks/{security-CJJ3WJSB.js → security-325A7FMB.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-6RGCTLHD.js → shared-rvf-adapter-NFL6QSZ6.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-KIA6Q6MT.js → shared-rvf-dual-writer-THFDYS2Z.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-MAKDFSHC.js +2 -0
- package/dist/cli/chunks/standalone-memory-UD4MJ6GZ.js +2 -0
- package/dist/cli/chunks/{status-handler-BADQV2KA.js → status-handler-CPFTN4XL.js} +2 -2
- package/dist/cli/chunks/{structural-health-VMYEYRZG.js → structural-health-2MG2IVBL.js} +2 -2
- package/dist/cli/chunks/{sync-PXLROLHB.js → sync-EE4VVKOW.js} +2 -2
- package/dist/cli/chunks/{sync-ULY7T5II.js → sync-MBTW5XBF.js} +2 -2
- package/dist/cli/chunks/task-handler-7H5OYJG4.js +54 -0
- package/dist/cli/chunks/task-handlers-NH4GJHCJ.js +9 -0
- package/dist/cli/chunks/{test-WCLURQUT.js → test-MPHGT4T6.js} +4 -4
- package/dist/cli/chunks/test-scheduling-CHQ4ZLLJ.js +15 -0
- package/dist/cli/chunks/token-bootstrap-SSDCYEKK.js +2 -0
- package/dist/cli/chunks/{token-usage-DRVG6PKO.js → token-usage-EBXUJNRB.js} +2 -2
- package/dist/cli/chunks/{transformers-IMDDAMYQ.js → transformers-ZEKS2OJZ.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-WBZIHVFA.js → tree-sitter-wasm-parser-J6ZMAK37.js} +2 -2
- package/dist/cli/chunks/types-KYAA5VLV.js +2 -0
- package/dist/cli/chunks/unified-memory-DDWMC435.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-4JA7SGBK.js +2 -0
- package/dist/cli/chunks/unified-persistence-F6OSNTXY.js +2 -0
- package/dist/cli/chunks/{upgrade-6ALSDWDD.js → upgrade-UJBJ5AYM.js} +2 -2
- package/dist/cli/chunks/{validate-XF4ZG3LC.js → validate-RUV6YMWS.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-P5TAFRDA.js → validate-swarm-IVEVMGVM.js} +2 -2
- package/dist/cli/chunks/{vibium-2XDXKNKZ.js → vibium-HOGMFJ2Z.js} +2 -2
- package/dist/cli/chunks/visual-security-25SMBIYT.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-4JVRQPX5.js → web-tree-sitter-AVWA6HKE.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-WYJXVDO5.js → windsurf-installer-DAH7HI2W.js} +2 -2
- package/dist/cli/chunks/{witness-chain-RPZ2SE2V.js → witness-chain-PJOQPFUX.js} +2 -2
- package/dist/cli/chunks/witness-chain-ZW6KKUZU.js +2 -0
- package/dist/cli/chunks/{witness-key-manager-LXG2VBQQ.js → witness-key-manager-JSTBMG43.js} +2 -2
- package/dist/cli/chunks/workflow-TWOIA6LZ.js +51 -0
- package/dist/cli/chunks/workflow-orchestrator-UKSIDM7Q.js +2 -0
- package/dist/cli/chunks/{wrappers-DIJNNFU6.js → wrappers-UR7BLXKV.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/mcp.js +6 -0
- package/dist/cli/commands/memory.d.ts +1 -1
- package/dist/cli/commands/memory.js +8 -8
- package/dist/cli/commands/pipeline.js +9 -0
- package/dist/cli/commands/platform.js +15 -2
- package/dist/cli/commands/upgrade.d.ts +3 -3
- package/dist/cli/commands/upgrade.js +3 -3
- package/dist/cli/commands/workflow.js +9 -1
- package/dist/cli/handlers/init-handler.d.ts +10 -0
- package/dist/cli/handlers/task-handler.js +43 -12
- package/dist/cli/helpers/domain-plugins.d.ts +5 -0
- package/dist/cli/helpers/domain-plugins.js +11 -0
- package/dist/cli/helpers/standalone-memory.d.ts +12 -0
- package/dist/cli/helpers/standalone-memory.js +46 -0
- package/dist/cli/index.js +54 -49
- package/dist/cli/log-gate.d.ts +66 -0
- package/dist/cli/log-gate.js +170 -0
- 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/codex-installer.js +18 -6
- 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/orchestrator.js +1 -0
- package/dist/init/phases/07-hooks.js +4 -2
- package/dist/init/phases/09-assets.d.ts +10 -0
- package/dist/init/phases/09-assets.js +3 -0
- 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/init/token-bootstrap.d.ts +1 -1
- package/dist/init/token-bootstrap.js +12 -2
- package/dist/init/types.d.ts +10 -0
- package/dist/integrations/agentic-flow/model-router/types.js +6 -8
- package/dist/integrations/ruvector/brain-exporter.js +26 -15
- package/dist/integrations/ruvector/brain-import-audit.d.ts +20 -0
- package/dist/integrations/ruvector/brain-import-audit.js +22 -0
- package/dist/integrations/ruvector/brain-rvf-exporter.js +33 -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 +42 -16
- 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/hybrid-backend.d.ts +6 -0
- package/dist/kernel/hybrid-backend.js +18 -0
- package/dist/kernel/kernel.js +9 -14
- package/dist/kernel/memory-factory.js +14 -4
- package/dist/kernel/project-root.d.ts +1 -1
- package/dist/kernel/project-root.js +33 -10
- package/dist/kernel/unified-memory.js +1 -1
- package/dist/learning/embedder-identity-store.js +4 -3
- 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 +34 -12
- package/dist/learning/real-embeddings.d.ts +8 -0
- package/dist/learning/real-embeddings.js +16 -0
- package/dist/learning/rvf-pattern-store.js +10 -3
- package/dist/mcp/bundle.js +480 -480
- package/dist/mcp/entry.js +2 -0
- package/dist/mcp/handlers/index.d.ts +1 -1
- package/dist/mcp/handlers/index.js +1 -1
- package/dist/mcp/handlers/memory-handlers.d.ts +6 -1
- package/dist/mcp/handlers/memory-handlers.js +44 -22
- 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 +26 -5
- package/dist/mcp/protocol-server.d.ts +2 -0
- package/dist/mcp/protocol-server.js +105 -49
- package/dist/mcp/security/sampling-server.js +2 -1
- package/dist/mcp/services/session-store.js +5 -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/plugins/cache.d.ts +2 -0
- package/dist/plugins/cache.js +15 -2
- package/dist/plugins/lifecycle.js +15 -2
- package/dist/plugins/manifest.js +7 -5
- package/dist/plugins/resolver.d.ts +13 -22
- package/dist/plugins/resolver.js +169 -61
- package/dist/plugins/version-policy.d.ts +13 -0
- package/dist/plugins/version-policy.js +18 -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/types/index.d.ts +6 -0
- package/dist/shared/types/index.js +8 -0
- 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 +2 -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-26GM5CWD.js +0 -13
- 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-74PK3NEW.js +0 -15
- 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-G6DCESPU.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-SHGKY3QB.js +0 -2
- package/dist/cli/chunks/chunk-SJPZSCZP.js +0 -27
- package/dist/cli/chunks/chunk-T62DH4GG.js +0 -11
- package/dist/cli/chunks/chunk-TGLAWI62.js +0 -4
- package/dist/cli/chunks/chunk-UMNYF5EZ.js +0 -2
- package/dist/cli/chunks/chunk-UTVRQEZM.js +0 -54
- package/dist/cli/chunks/chunk-Y2DVFVGI.js +0 -2
- 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/codex-installer-2AVEO4EA.js +0 -14
- 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/embed-and-insert-pattern-DUW6K35A.js +0 -3
- 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/mcp-THXEINCL.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/platform-Q7UH7FZQ.js +0 -2
- 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/real-embeddings-SF42ML7G.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-migration-coordinator-JT7ZCJY7.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/token-bootstrap-GTI24JAL.js +0 -2
- 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
|
@@ -13,6 +13,7 @@ import { createEvent } from '../shared/events/domain-events.js';
|
|
|
13
13
|
import { toError, toErrorMessage } from '../shared/error-utils.js';
|
|
14
14
|
export { WorkflowEvents, DEFAULT_WORKFLOW_CONFIG, } from './workflow-types.js';
|
|
15
15
|
import { WorkflowEvents, DEFAULT_WORKFLOW_CONFIG } from './workflow-types.js';
|
|
16
|
+
import { hashWorkflowValue, parallelOutputConflicts, parallelUndeclaredReads, parallelWritePaths, } from './workflow-composition.js';
|
|
16
17
|
// Import deterministic actions
|
|
17
18
|
import { findDeterministicAction } from './deterministic-actions.js';
|
|
18
19
|
// Import built-in workflows
|
|
@@ -105,13 +106,13 @@ export class WorkflowOrchestrator {
|
|
|
105
106
|
executionId, workflowId, workflowName: workflow.name,
|
|
106
107
|
status: 'running', startedAt, progress: 0,
|
|
107
108
|
currentSteps: [], completedSteps: [], failedSteps: [], skippedSteps: [],
|
|
108
|
-
context, stepResults: new Map(),
|
|
109
|
+
context, stepResults: new Map(), parallelCompositionReceipts: [],
|
|
109
110
|
};
|
|
110
111
|
this.executions.set(executionId, execution);
|
|
111
112
|
await this.publishWorkflowStarted(execution, workflow);
|
|
112
113
|
this.runWorkflow(workflow, execution).catch(async (error) => {
|
|
113
114
|
execution.status = 'failed';
|
|
114
|
-
execution.error =
|
|
115
|
+
execution.error = toErrorMessage(error);
|
|
115
116
|
execution.completedAt = new Date();
|
|
116
117
|
execution.duration = execution.completedAt.getTime() - startedAt.getTime();
|
|
117
118
|
await this.publishWorkflowFailed(execution, 'unknown', String(error));
|
|
@@ -131,13 +132,7 @@ export class WorkflowOrchestrator {
|
|
|
131
132
|
execution.status = 'cancelled';
|
|
132
133
|
execution.completedAt = new Date();
|
|
133
134
|
execution.duration = execution.completedAt.getTime() - execution.startedAt.getTime();
|
|
134
|
-
|
|
135
|
-
for (const [key, gate] of this.approvalGates.entries()) {
|
|
136
|
-
if (key.startsWith(`${executionId}:`)) {
|
|
137
|
-
gate.resolve({ approved: false, reason: 'Workflow cancelled' });
|
|
138
|
-
this.approvalGates.delete(key);
|
|
139
|
-
}
|
|
140
|
-
}
|
|
135
|
+
this.closeApprovalGates(executionId, 'Workflow cancelled');
|
|
141
136
|
await this.publishEvent(WorkflowEvents.WorkflowCancelled, {
|
|
142
137
|
executionId, workflowId: execution.workflowId, workflowName: execution.workflowName,
|
|
143
138
|
}, execution.context.metadata.correlationId);
|
|
@@ -164,7 +159,7 @@ export class WorkflowOrchestrator {
|
|
|
164
159
|
execution.status = 'running';
|
|
165
160
|
this.runWorkflow(workflow, execution).catch(async (error) => {
|
|
166
161
|
execution.status = 'failed';
|
|
167
|
-
execution.error =
|
|
162
|
+
execution.error = toErrorMessage(error);
|
|
168
163
|
});
|
|
169
164
|
return ok(undefined);
|
|
170
165
|
}
|
|
@@ -296,8 +291,9 @@ export class WorkflowOrchestrator {
|
|
|
296
291
|
// ============================================================================
|
|
297
292
|
async runWorkflow(workflow, execution) {
|
|
298
293
|
const timeout = workflow.timeout || this.config.defaultWorkflowTimeout;
|
|
294
|
+
let workflowTimer;
|
|
299
295
|
const timeoutPromise = new Promise((_, reject) => {
|
|
300
|
-
setTimeout(() => reject(new Error(`Workflow timeout after ${timeout}ms`)), timeout);
|
|
296
|
+
workflowTimer = setTimeout(() => reject(new Error(`Workflow timeout after ${timeout}ms`)), timeout);
|
|
301
297
|
});
|
|
302
298
|
try {
|
|
303
299
|
await Promise.race([this.executeSteps(workflow, execution), timeoutPromise]);
|
|
@@ -312,13 +308,19 @@ export class WorkflowOrchestrator {
|
|
|
312
308
|
catch (error) {
|
|
313
309
|
if (execution.status === 'running') {
|
|
314
310
|
execution.status = 'failed';
|
|
315
|
-
execution.error =
|
|
311
|
+
execution.error = toErrorMessage(error);
|
|
312
|
+
this.closeApprovalGates(execution.executionId, 'Workflow failed');
|
|
316
313
|
execution.completedAt = new Date();
|
|
317
314
|
execution.duration = execution.completedAt.getTime() - execution.startedAt.getTime();
|
|
318
315
|
const failedStep = execution.currentSteps[0] || 'unknown';
|
|
319
|
-
|
|
316
|
+
execution.currentSteps = [];
|
|
317
|
+
await this.publishWorkflowFailed(execution, failedStep, toErrorMessage(error));
|
|
320
318
|
}
|
|
321
319
|
}
|
|
320
|
+
finally {
|
|
321
|
+
if (workflowTimer)
|
|
322
|
+
clearTimeout(workflowTimer);
|
|
323
|
+
}
|
|
322
324
|
if (this.config.persistExecutions)
|
|
323
325
|
await this.persistExecution(execution);
|
|
324
326
|
}
|
|
@@ -337,45 +339,131 @@ export class WorkflowOrchestrator {
|
|
|
337
339
|
break;
|
|
338
340
|
const parallelSteps = readySteps.filter((s) => !s.dependsOn?.length);
|
|
339
341
|
const sequentialSteps = readySteps.filter((s) => s.dependsOn?.length);
|
|
340
|
-
|
|
342
|
+
// A lone root has no concurrent siblings and needs no clone/barrier.
|
|
343
|
+
if (parallelSteps.length === 1)
|
|
344
|
+
sequentialSteps.unshift(parallelSteps[0]);
|
|
345
|
+
if (parallelSteps.length > 1) {
|
|
341
346
|
execution.currentSteps = parallelSteps.map((s) => s.id);
|
|
342
|
-
const
|
|
347
|
+
const receipt = {
|
|
348
|
+
version: 1, workflowId: workflow.id,
|
|
349
|
+
workflowRevision: `${workflow.version}:${hashWorkflowValue(workflow)}`,
|
|
350
|
+
executionId: execution.executionId,
|
|
351
|
+
groupId: parallelSteps.map(step => step.id).join('|'),
|
|
352
|
+
steps: [], conflicts: [], strategy: 'rejected', disposition: 'invalid',
|
|
353
|
+
};
|
|
354
|
+
execution.parallelCompositionReceipts ??= [];
|
|
355
|
+
execution.parallelCompositionReceipts.push(receipt);
|
|
356
|
+
try {
|
|
357
|
+
receipt.steps = parallelSteps.map(step => ({
|
|
358
|
+
stepId: step.id, disposition: 'not_started',
|
|
359
|
+
writes: parallelWritePaths(step).map(write => write.path),
|
|
360
|
+
}));
|
|
361
|
+
receipt.conflicts = parallelOutputConflicts(parallelSteps);
|
|
362
|
+
}
|
|
363
|
+
catch (error) {
|
|
364
|
+
throw new Error(`parallel_output_invalid_path: ${toErrorMessage(error)}`);
|
|
365
|
+
}
|
|
366
|
+
if (receipt.conflicts.length > 0) {
|
|
367
|
+
receipt.disposition = 'conflict';
|
|
368
|
+
throw new Error(`parallel_output_conflict: ${receipt.conflicts.map(c => `${c.stepA}.${c.pathA} ↔ ${c.stepB}.${c.pathB}`).join(', ')}`);
|
|
369
|
+
}
|
|
370
|
+
const undeclaredReads = parallelUndeclaredReads(parallelSteps);
|
|
371
|
+
if (undeclaredReads.length > 0) {
|
|
372
|
+
throw new Error(`parallel_dependency_error: ${undeclaredReads.map(read => `${read.stepId} reads ${read.sourcePath} from concurrent step ${read.otherStepId}`).join(', ')}`);
|
|
373
|
+
}
|
|
374
|
+
// Every action observes the same pre-group state. Its own mutations to
|
|
375
|
+
// the supplied context cannot leak into a sibling's input or the
|
|
376
|
+
// shared workflow context.
|
|
377
|
+
let groupContext;
|
|
378
|
+
let contexts;
|
|
379
|
+
let baseResultsHash;
|
|
380
|
+
try {
|
|
381
|
+
groupContext = structuredClone(execution.context);
|
|
382
|
+
baseResultsHash = hashWorkflowValue(groupContext.results);
|
|
383
|
+
contexts = parallelSteps.map(() => structuredClone(groupContext));
|
|
384
|
+
}
|
|
385
|
+
catch (error) {
|
|
386
|
+
throw new Error(`parallel_context_uncloneable: ${toErrorMessage(error)}`);
|
|
387
|
+
}
|
|
388
|
+
const results = await Promise.allSettled(parallelSteps.map((step, index) => this.executeStep(step, execution, workflow, contexts[index], true)));
|
|
389
|
+
let hardFailure;
|
|
343
390
|
for (let i = 0; i < parallelSteps.length; i++) {
|
|
344
391
|
const step = parallelSteps[i];
|
|
345
392
|
const result = results[i];
|
|
346
393
|
if (result.status === 'fulfilled') {
|
|
347
394
|
const stepResult = result.value;
|
|
395
|
+
execution.stepResults.set(step.id, stepResult);
|
|
348
396
|
if (stepResult.status === 'completed') {
|
|
349
397
|
completedSteps.add(step.id);
|
|
350
398
|
execution.completedSteps.push(step.id);
|
|
399
|
+
receipt.steps[i].disposition = 'succeeded';
|
|
400
|
+
try {
|
|
401
|
+
receipt.steps[i].outputHash = hashWorkflowValue(stepResult.output);
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
throw new Error(`parallel_output_unhashable: ${toErrorMessage(error)}`);
|
|
405
|
+
}
|
|
351
406
|
}
|
|
352
407
|
else if (stepResult.status === 'skipped') {
|
|
353
408
|
skippedSteps.add(step.id);
|
|
354
409
|
execution.skippedSteps.push(step.id);
|
|
410
|
+
receipt.steps[i].disposition = 'skipped';
|
|
355
411
|
}
|
|
356
412
|
else if (stepResult.status === 'failed') {
|
|
357
413
|
failedSteps.add(step.id);
|
|
358
414
|
execution.failedSteps.push(step.id);
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
return;
|
|
363
|
-
}
|
|
415
|
+
receipt.steps[i].disposition = 'failed';
|
|
416
|
+
if (!step.continueOnFailure)
|
|
417
|
+
hardFailure ??= stepResult.error ?? 'Unknown error';
|
|
364
418
|
}
|
|
365
419
|
}
|
|
366
420
|
else {
|
|
367
421
|
failedSteps.add(step.id);
|
|
368
422
|
execution.failedSteps.push(step.id);
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
423
|
+
receipt.steps[i].disposition = 'failed';
|
|
424
|
+
if (!step.continueOnFailure)
|
|
425
|
+
hardFailure ??= toErrorMessage(result.reason);
|
|
374
426
|
}
|
|
375
427
|
const pendingIndex = pendingSteps.indexOf(step);
|
|
376
428
|
if (pendingIndex !== -1)
|
|
377
429
|
pendingSteps.splice(pendingIndex, 1);
|
|
378
430
|
}
|
|
431
|
+
if (execution.status !== 'running' || hardFailure !== undefined) {
|
|
432
|
+
receipt.disposition = 'partial';
|
|
433
|
+
if (hardFailure !== undefined)
|
|
434
|
+
throw new Error(hardFailure);
|
|
435
|
+
if (execution.status !== 'running')
|
|
436
|
+
return;
|
|
437
|
+
}
|
|
438
|
+
else {
|
|
439
|
+
try {
|
|
440
|
+
const stagedContext = {
|
|
441
|
+
...groupContext, results: structuredClone(groupContext.results),
|
|
442
|
+
};
|
|
443
|
+
for (let i = 0; i < parallelSteps.length; i++) {
|
|
444
|
+
const result = results[i];
|
|
445
|
+
if (result.status === 'fulfilled' && result.value.status === 'completed') {
|
|
446
|
+
this.mapStepOutput(parallelSteps[i], result.value.output, stagedContext);
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
const combinedStateHash = hashWorkflowValue(stagedContext.results);
|
|
450
|
+
if (execution.status !== 'running') {
|
|
451
|
+
receipt.disposition = 'partial';
|
|
452
|
+
return;
|
|
453
|
+
}
|
|
454
|
+
if (hashWorkflowValue(execution.context.results) !== baseResultsHash) {
|
|
455
|
+
throw new Error('parallel_context_changed: shared results changed before composition');
|
|
456
|
+
}
|
|
457
|
+
execution.context.results = stagedContext.results;
|
|
458
|
+
receipt.combinedStateHash = combinedStateHash;
|
|
459
|
+
receipt.strategy = 'disjoint';
|
|
460
|
+
receipt.disposition = 'composed';
|
|
461
|
+
}
|
|
462
|
+
catch (error) {
|
|
463
|
+
receipt.disposition = 'invalid';
|
|
464
|
+
throw new Error(`parallel_output_invalid: ${toErrorMessage(error)}`);
|
|
465
|
+
}
|
|
466
|
+
}
|
|
379
467
|
}
|
|
380
468
|
for (const step of sequentialSteps) {
|
|
381
469
|
if (execution.status !== 'running')
|
|
@@ -409,29 +497,47 @@ export class WorkflowOrchestrator {
|
|
|
409
497
|
}
|
|
410
498
|
execution.currentSteps = [];
|
|
411
499
|
}
|
|
412
|
-
async executeStep(step, execution, _workflow) {
|
|
500
|
+
async executeStep(step, execution, _workflow, context = execution.context, deferOutput = false) {
|
|
413
501
|
const startedAt = new Date();
|
|
414
502
|
const result = { stepId: step.id, status: 'pending', startedAt };
|
|
415
503
|
try {
|
|
416
|
-
if (step.skipCondition && this.evaluateCondition(step.skipCondition,
|
|
504
|
+
if (step.skipCondition && this.evaluateCondition(step.skipCondition, context)) {
|
|
417
505
|
result.status = 'skipped';
|
|
418
506
|
result.completedAt = new Date();
|
|
419
507
|
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
420
|
-
|
|
508
|
+
if (!deferOutput)
|
|
509
|
+
execution.stepResults.set(step.id, result);
|
|
421
510
|
await this.publishStepSkipped(execution, step);
|
|
422
511
|
return result;
|
|
423
512
|
}
|
|
424
|
-
if (step.condition && !this.evaluateCondition(step.condition,
|
|
513
|
+
if (step.condition && !this.evaluateCondition(step.condition, context)) {
|
|
425
514
|
result.status = 'skipped';
|
|
426
515
|
result.completedAt = new Date();
|
|
427
516
|
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
428
|
-
|
|
517
|
+
if (!deferOutput)
|
|
518
|
+
execution.stepResults.set(step.id, result);
|
|
429
519
|
await this.publishStepSkipped(execution, step);
|
|
430
520
|
return result;
|
|
431
521
|
}
|
|
432
522
|
result.status = 'running';
|
|
433
523
|
await this.publishStepStarted(execution, step);
|
|
434
|
-
const input = this.buildStepInput(step,
|
|
524
|
+
const input = this.buildStepInput(step, context);
|
|
525
|
+
// Approval must precede the action and any output mapping. Otherwise a
|
|
526
|
+
// rejected or expired gate cannot prevent the side effect it protects.
|
|
527
|
+
if (step.approval) {
|
|
528
|
+
result.status = 'awaiting_approval';
|
|
529
|
+
execution.stepResults.set(step.id, result);
|
|
530
|
+
const approvalResult = await this.waitForApproval(step, execution);
|
|
531
|
+
if (!approvalResult.approved || execution.status !== 'running') {
|
|
532
|
+
result.status = 'failed';
|
|
533
|
+
result.error = approvalResult.reason || 'Step rejected at approval gate';
|
|
534
|
+
result.completedAt = new Date();
|
|
535
|
+
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
536
|
+
await this.publishStepFailed(execution, step, result.error);
|
|
537
|
+
return result;
|
|
538
|
+
}
|
|
539
|
+
result.status = 'running';
|
|
540
|
+
}
|
|
435
541
|
let lastError;
|
|
436
542
|
const maxAttempts = step.retry?.maxAttempts || 1;
|
|
437
543
|
let backoffMs = step.retry?.backoffMs || 1000;
|
|
@@ -440,32 +546,31 @@ export class WorkflowOrchestrator {
|
|
|
440
546
|
result.retryCount = attempt - 1;
|
|
441
547
|
try {
|
|
442
548
|
const stepTimeout = step.timeout || this.config.defaultStepTimeout;
|
|
443
|
-
const output = await this.executeStepAction(step, input,
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
result.completedAt = new Date();
|
|
453
|
-
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
454
|
-
execution.stepResults.set(step.id, result);
|
|
455
|
-
await this.publishStepFailed(execution, step, result.error);
|
|
456
|
-
return result;
|
|
457
|
-
}
|
|
549
|
+
const output = await this.executeStepAction(step, input, context, stepTimeout);
|
|
550
|
+
if (!deferOutput)
|
|
551
|
+
this.mapStepOutput(step, output, context);
|
|
552
|
+
let capturedOutput;
|
|
553
|
+
try {
|
|
554
|
+
capturedOutput = deferOutput ? structuredClone(output) : output;
|
|
555
|
+
}
|
|
556
|
+
catch (error) {
|
|
557
|
+
throw new Error(`parallel_output_uncloneable: ${toErrorMessage(error)}`);
|
|
458
558
|
}
|
|
459
559
|
result.status = 'completed';
|
|
460
|
-
result.output =
|
|
560
|
+
result.output = capturedOutput;
|
|
461
561
|
result.completedAt = new Date();
|
|
462
562
|
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
463
|
-
|
|
563
|
+
if (!deferOutput)
|
|
564
|
+
execution.stepResults.set(step.id, result);
|
|
464
565
|
await this.publishStepCompleted(execution, step, result);
|
|
465
566
|
return result;
|
|
466
567
|
}
|
|
467
568
|
catch (error) {
|
|
468
569
|
lastError = toError(error);
|
|
570
|
+
// Retrying an already-successful external action because its output
|
|
571
|
+
// could not be snapshotted could duplicate effects.
|
|
572
|
+
if (lastError.message.startsWith('parallel_output_uncloneable:'))
|
|
573
|
+
break;
|
|
469
574
|
if (attempt < maxAttempts) {
|
|
470
575
|
await this.delay(backoffMs);
|
|
471
576
|
backoffMs *= backoffMultiplier;
|
|
@@ -476,9 +581,10 @@ export class WorkflowOrchestrator {
|
|
|
476
581
|
result.error = lastError?.message || 'Unknown error';
|
|
477
582
|
result.completedAt = new Date();
|
|
478
583
|
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
479
|
-
|
|
584
|
+
if (!deferOutput)
|
|
585
|
+
execution.stepResults.set(step.id, result);
|
|
480
586
|
if (step.rollback)
|
|
481
|
-
await this.executeRollback(step.rollback,
|
|
587
|
+
await this.executeRollback(step.rollback, context);
|
|
482
588
|
await this.publishStepFailed(execution, step, result.error);
|
|
483
589
|
return result;
|
|
484
590
|
}
|
|
@@ -487,7 +593,8 @@ export class WorkflowOrchestrator {
|
|
|
487
593
|
result.error = toErrorMessage(error);
|
|
488
594
|
result.completedAt = new Date();
|
|
489
595
|
result.duration = result.completedAt.getTime() - startedAt.getTime();
|
|
490
|
-
|
|
596
|
+
if (!deferOutput)
|
|
597
|
+
execution.stepResults.set(step.id, result);
|
|
491
598
|
await this.publishStepFailed(execution, step, result.error);
|
|
492
599
|
return result;
|
|
493
600
|
}
|
|
@@ -545,7 +652,9 @@ export class WorkflowOrchestrator {
|
|
|
545
652
|
return input;
|
|
546
653
|
}
|
|
547
654
|
mapStepOutput(step, output, context) {
|
|
548
|
-
context.results
|
|
655
|
+
Object.defineProperty(context.results, step.id, {
|
|
656
|
+
value: output, writable: true, enumerable: true, configurable: true,
|
|
657
|
+
});
|
|
549
658
|
if (step.outputMapping && typeof output === 'object' && output !== null) {
|
|
550
659
|
for (const [sourcePath, targetPath] of Object.entries(step.outputMapping)) {
|
|
551
660
|
const value = this.getValueByPath(output, sourcePath);
|
|
@@ -681,6 +790,16 @@ export class WorkflowOrchestrator {
|
|
|
681
790
|
return err(new Error(`Invalid domain for step ${step.id}: ${step.domain}`));
|
|
682
791
|
if (!step.action)
|
|
683
792
|
return err(new Error(`Step ${step.id} must have an action`));
|
|
793
|
+
if (step.approval && typeof step.approval === 'object') {
|
|
794
|
+
const { expiresAfter, autoApproveAfter } = step.approval;
|
|
795
|
+
if (expiresAfter !== undefined && autoApproveAfter !== undefined) {
|
|
796
|
+
return err(new Error(`Step ${step.id} sets both approval expiry fields`));
|
|
797
|
+
}
|
|
798
|
+
const expiry = expiresAfter ?? autoApproveAfter;
|
|
799
|
+
if (expiry !== undefined && (!Number.isSafeInteger(expiry) || expiry < 0 || expiry > 2_147_483_647)) {
|
|
800
|
+
return err(new Error(`Step ${step.id} has an invalid approval expiry`));
|
|
801
|
+
}
|
|
802
|
+
}
|
|
684
803
|
if (step.dependsOn) {
|
|
685
804
|
for (const dep of step.dependsOn) {
|
|
686
805
|
if (!definition.steps.some((s) => s.id === dep)) {
|
|
@@ -816,49 +935,64 @@ export class WorkflowOrchestrator {
|
|
|
816
935
|
// ============================================================================
|
|
817
936
|
// Private Methods - Approval Gates
|
|
818
937
|
// ============================================================================
|
|
938
|
+
closeApprovalGates(executionId, reason) {
|
|
939
|
+
for (const [key, gate] of this.approvalGates.entries()) {
|
|
940
|
+
if (key.startsWith(`${executionId}:`)) {
|
|
941
|
+
gate.resolve({ approved: false, reason });
|
|
942
|
+
}
|
|
943
|
+
}
|
|
944
|
+
}
|
|
819
945
|
/**
|
|
820
|
-
* Wait for external approval
|
|
946
|
+
* Wait for external approval. An unanswered gate expires without approval.
|
|
821
947
|
* Returns an object with approved status and optional rejection reason.
|
|
822
948
|
*/
|
|
823
949
|
async waitForApproval(step, execution) {
|
|
950
|
+
// Cancellation may arrive while publishing StepStarted, before this gate
|
|
951
|
+
// exists. Do not register an indefinite approval for a terminal workflow.
|
|
952
|
+
if (execution.status !== 'running') {
|
|
953
|
+
return { approved: false, reason: `Workflow is ${execution.status}` };
|
|
954
|
+
}
|
|
824
955
|
const approvalConfig = typeof step.approval === 'object' ? step.approval : {};
|
|
825
|
-
const
|
|
956
|
+
const expiresAfter = approvalConfig.expiresAfter ?? approvalConfig.autoApproveAfter ?? 300000;
|
|
826
957
|
const message = approvalConfig.message ?? `Awaiting approval for step: ${step.name}`;
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
stepResult.status = 'awaiting_approval';
|
|
831
|
-
// Emit StepAwaitingApproval event
|
|
832
|
-
await this.publishEvent(WorkflowEvents.StepAwaitingApproval, {
|
|
833
|
-
executionId: execution.executionId,
|
|
834
|
-
workflowId: execution.workflowId,
|
|
835
|
-
stepId: step.id,
|
|
836
|
-
stepName: step.name,
|
|
837
|
-
domain: step.domain,
|
|
838
|
-
message,
|
|
839
|
-
autoApproveAfter: autoApproveAfter > 0 ? autoApproveAfter : undefined,
|
|
840
|
-
}, execution.context.metadata.correlationId);
|
|
958
|
+
if (!Number.isSafeInteger(expiresAfter) || expiresAfter < 0 || expiresAfter > 2_147_483_647) {
|
|
959
|
+
return { approved: false, reason: 'Invalid approval expiry' };
|
|
960
|
+
}
|
|
841
961
|
const key = `${execution.executionId}:${step.id}`;
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
962
|
+
let timer;
|
|
963
|
+
const approval = new Promise((resolve) => {
|
|
964
|
+
// Register before publishing: a synchronous event consumer can approve.
|
|
965
|
+
const gate = { resolve: (result) => {
|
|
966
|
+
if (this.approvalGates.get(key) !== gate)
|
|
967
|
+
return;
|
|
968
|
+
this.approvalGates.delete(key);
|
|
969
|
+
if (timer)
|
|
970
|
+
clearTimeout(timer);
|
|
971
|
+
resolve(result);
|
|
972
|
+
} };
|
|
845
973
|
this.approvalGates.set(key, gate);
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
this.approvalGates.delete(key);
|
|
851
|
-
resolve({ approved: true }); // auto-approve on timeout
|
|
852
|
-
}
|
|
853
|
-
}, autoApproveAfter);
|
|
854
|
-
// Wrap resolve to also clear the timer
|
|
855
|
-
const originalResolve = gate.resolve;
|
|
856
|
-
gate.resolve = (result) => {
|
|
857
|
-
clearTimeout(timer);
|
|
858
|
-
originalResolve(result);
|
|
859
|
-
};
|
|
974
|
+
if (expiresAfter > 0) {
|
|
975
|
+
timer = setTimeout(() => {
|
|
976
|
+
gate.resolve({ approved: false, reason: 'Approval expired' });
|
|
977
|
+
}, expiresAfter);
|
|
860
978
|
}
|
|
861
979
|
});
|
|
980
|
+
try {
|
|
981
|
+
await this.publishEvent(WorkflowEvents.StepAwaitingApproval, {
|
|
982
|
+
executionId: execution.executionId,
|
|
983
|
+
workflowId: execution.workflowId,
|
|
984
|
+
stepId: step.id,
|
|
985
|
+
stepName: step.name,
|
|
986
|
+
domain: step.domain,
|
|
987
|
+
message,
|
|
988
|
+
expiresAfter: expiresAfter > 0 ? expiresAfter : undefined,
|
|
989
|
+
}, execution.context.metadata.correlationId);
|
|
990
|
+
}
|
|
991
|
+
catch (error) {
|
|
992
|
+
this.approvalGates.get(key)?.resolve({ approved: false, reason: 'Approval event failed' });
|
|
993
|
+
throw error;
|
|
994
|
+
}
|
|
995
|
+
return approval;
|
|
862
996
|
}
|
|
863
997
|
// ============================================================================
|
|
864
998
|
// Private Methods - Utilities
|
|
@@ -72,7 +72,9 @@ export interface WorkflowStepDefinition {
|
|
|
72
72
|
continueOnFailure?: boolean;
|
|
73
73
|
/** Approval gate configuration */
|
|
74
74
|
approval?: boolean | {
|
|
75
|
-
/**
|
|
75
|
+
/** Expire an unanswered approval after this many ms (0 = wait indefinitely; default 5 min) */
|
|
76
|
+
expiresAfter?: number;
|
|
77
|
+
/** @deprecated Legacy alias for expiresAfter; never grants approval on timeout */
|
|
76
78
|
autoApproveAfter?: number;
|
|
77
79
|
/** Approval prompt message */
|
|
78
80
|
message?: string;
|
|
@@ -144,6 +146,30 @@ export interface WorkflowContext {
|
|
|
144
146
|
triggeredBy?: string;
|
|
145
147
|
};
|
|
146
148
|
}
|
|
149
|
+
/** Evidence for one parallel group, without retaining raw step output. */
|
|
150
|
+
export interface ParallelCompositionReceipt {
|
|
151
|
+
version: 1;
|
|
152
|
+
workflowId: string;
|
|
153
|
+
workflowRevision: string;
|
|
154
|
+
executionId: string;
|
|
155
|
+
groupId: string;
|
|
156
|
+
steps: Array<{
|
|
157
|
+
stepId: string;
|
|
158
|
+
disposition: 'succeeded' | 'failed' | 'skipped' | 'cancelled' | 'not_started';
|
|
159
|
+
outputHash?: string;
|
|
160
|
+
writes: string[];
|
|
161
|
+
}>;
|
|
162
|
+
conflicts: Array<{
|
|
163
|
+
pathA: string;
|
|
164
|
+
stepA: string;
|
|
165
|
+
pathB: string;
|
|
166
|
+
stepB: string;
|
|
167
|
+
kind: 'exact' | 'ancestor-descendant';
|
|
168
|
+
}>;
|
|
169
|
+
strategy: 'disjoint' | 'rejected';
|
|
170
|
+
combinedStateHash?: string;
|
|
171
|
+
disposition: 'composed' | 'conflict' | 'partial' | 'invalid';
|
|
172
|
+
}
|
|
147
173
|
/**
|
|
148
174
|
* Workflow execution status
|
|
149
175
|
*/
|
|
@@ -162,6 +188,7 @@ export interface WorkflowExecutionStatus {
|
|
|
162
188
|
skippedSteps: string[];
|
|
163
189
|
context: WorkflowContext;
|
|
164
190
|
stepResults: Map<string, StepExecutionResult>;
|
|
191
|
+
parallelCompositionReceipts?: ParallelCompositionReceipt[];
|
|
165
192
|
error?: string;
|
|
166
193
|
}
|
|
167
194
|
/**
|
|
@@ -219,6 +246,8 @@ export interface StepEventPayload {
|
|
|
219
246
|
}
|
|
220
247
|
export interface StepAwaitingApprovalPayload extends StepEventPayload {
|
|
221
248
|
message?: string;
|
|
249
|
+
expiresAfter?: number;
|
|
250
|
+
/** @deprecated No longer emitted; read expiresAfter instead */
|
|
222
251
|
autoApproveAfter?: number;
|
|
223
252
|
}
|
|
224
253
|
export interface IWorkflowOrchestrator {
|
|
@@ -339,17 +339,21 @@ export class YamlPipelineLoader {
|
|
|
339
339
|
if (typeof raw === 'boolean') {
|
|
340
340
|
return ok(raw);
|
|
341
341
|
}
|
|
342
|
-
// Object form: approval: {
|
|
342
|
+
// Object form: approval: { expiresAfter, message }
|
|
343
343
|
if (!raw || typeof raw !== 'object' || Array.isArray(raw)) {
|
|
344
344
|
return err(new Error(`Step '${stepId}': 'approval' must be a boolean or object`));
|
|
345
345
|
}
|
|
346
346
|
const a = raw;
|
|
347
347
|
const result = {};
|
|
348
|
-
if (a.autoApproveAfter !== undefined) {
|
|
349
|
-
|
|
350
|
-
|
|
348
|
+
if (a.expiresAfter !== undefined && a.autoApproveAfter !== undefined) {
|
|
349
|
+
return err(new Error(`Step '${stepId}': set only one approval expiry field`));
|
|
350
|
+
}
|
|
351
|
+
const expiry = a.expiresAfter ?? a.autoApproveAfter;
|
|
352
|
+
if (expiry !== undefined) {
|
|
353
|
+
if (typeof expiry !== 'number' || !Number.isSafeInteger(expiry) || expiry < 0 || expiry > 2_147_483_647) {
|
|
354
|
+
return err(new Error(`Step '${stepId}': approval expiry must be an integer from 0 to 2147483647 milliseconds`));
|
|
351
355
|
}
|
|
352
|
-
result.
|
|
356
|
+
result.expiresAfter = expiry;
|
|
353
357
|
}
|
|
354
358
|
if (a.message !== undefined) {
|
|
355
359
|
if (typeof a.message !== 'string') {
|
|
@@ -12,6 +12,7 @@ import { validateCommand } from '../../../shared/security/command-validator.js';
|
|
|
12
12
|
import { toErrorMessage, toError } from '../../../shared/error-utils.js';
|
|
13
13
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
14
14
|
import { secureRandom } from '../../../shared/utils/crypto-random.js';
|
|
15
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
15
16
|
const DEFAULT_CONFIG = {
|
|
16
17
|
defaultTimeout: 60000, // 60 seconds
|
|
17
18
|
maxConcurrentFaults: 3,
|
|
@@ -289,13 +290,7 @@ export class ChaosEngineerService {
|
|
|
289
290
|
* ADR-051: Get model name for tier
|
|
290
291
|
*/
|
|
291
292
|
getModelForTier(tier) {
|
|
292
|
-
|
|
293
|
-
1: 'claude-haiku-4-5',
|
|
294
|
-
2: 'claude-sonnet-4-6',
|
|
295
|
-
3: 'claude-sonnet-4-6',
|
|
296
|
-
4: 'claude-opus-4-7',
|
|
297
|
-
};
|
|
298
|
-
return models[tier] || models[2];
|
|
293
|
+
return getClaudeModelForTier(tier);
|
|
299
294
|
}
|
|
300
295
|
/**
|
|
301
296
|
* ADR-051: LLM-powered experiment hypothesis analysis
|
|
@@ -12,6 +12,7 @@ import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
|
12
12
|
import { existsSync, statSync } from 'fs';
|
|
13
13
|
import { dirname, resolve as resolvePath, join as joinPath } from 'path';
|
|
14
14
|
import { extractTsJs } from '../../../shared/parsers/treesitter-ts-extractor.js';
|
|
15
|
+
import { getClaudeModelForTier } from '../../../shared/llm/model-registry.js';
|
|
15
16
|
const DEFAULT_CONFIG = {
|
|
16
17
|
maxNodes: 100000,
|
|
17
18
|
maxEdgesPerNode: 500,
|
|
@@ -333,13 +334,7 @@ export class KnowledgeGraphService {
|
|
|
333
334
|
* @param tier - Model tier (1=Haiku, 2=Sonnet, 3=Sonnet, 4=Opus)
|
|
334
335
|
*/
|
|
335
336
|
getModelForTier(tier) {
|
|
336
|
-
|
|
337
|
-
case 1: return 'claude-haiku-4-5-20251001';
|
|
338
|
-
case 2: return 'claude-sonnet-4-6';
|
|
339
|
-
case 3: return 'claude-sonnet-4-6';
|
|
340
|
-
case 4: return 'claude-opus-4-7';
|
|
341
|
-
default: return 'claude-sonnet-4-6';
|
|
342
|
-
}
|
|
337
|
+
return getClaudeModelForTier(tier);
|
|
343
338
|
}
|
|
344
339
|
/**
|
|
345
340
|
* Extract semantic relationships from code using LLM
|