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
|
@@ -6,7 +6,8 @@
|
|
|
6
6
|
import { existsSync, readdirSync, renameSync, statSync, unlinkSync, writeFileSync } from 'fs';
|
|
7
7
|
import { basename, dirname, join, resolve } from 'path';
|
|
8
8
|
import { createRvfStore, openRvfStore, openRvfStoreReadonly, isRvfNativeAvailable, } from './rvf-native-adapter.js';
|
|
9
|
-
import { sha256, tableExists, queryAll, domainFilterForColumn,
|
|
9
|
+
import { sha256, tableExists, queryAll, domainFilterForColumn, runImportTransaction, mergeGenericRow, remapPatternReferences, mergeAppendOnlyRow, TABLE_CONFIGS, TABLE_BLOB_COLUMNS, PK_COLUMNS, CONFIDENCE_COLUMNS, TIMESTAMP_COLUMNS, serializeRowBlobs, deserializeRowBlobs, } from './brain-shared.js';
|
|
10
|
+
import { appendBrainImportWitness } from './brain-import-audit.js';
|
|
10
11
|
// --- Export ---
|
|
11
12
|
/**
|
|
12
13
|
* Sidecar suffixes that make up a complete store on disk. `''` is the store
|
|
@@ -355,7 +356,7 @@ export function importBrainFromRvf(db, rvfPath, options) {
|
|
|
355
356
|
throw new Error(`RVF file not found: ${filePath}`);
|
|
356
357
|
}
|
|
357
358
|
// Open read-write so compact() can reclaim space after conflict resolution (4.5)
|
|
358
|
-
const rvf = openRvfStore(filePath);
|
|
359
|
+
const rvf = options.dryRun ? openRvfStoreReadonly(filePath) : openRvfStore(filePath);
|
|
359
360
|
try {
|
|
360
361
|
// --- Verify HNSW index integrity before importing (4.1) ---
|
|
361
362
|
// Fresh RVF files report valid=false with totalEntries=0 and no errors —
|
|
@@ -379,22 +380,6 @@ export function importBrainFromRvf(db, rvfPath, options) {
|
|
|
379
380
|
catch (parseErr) {
|
|
380
381
|
throw new Error(`Failed to parse brain kernel data as JSON: ${parseErr instanceof Error ? parseErr.message : parseErr}`);
|
|
381
382
|
}
|
|
382
|
-
if (options.dryRun) {
|
|
383
|
-
let total = 0;
|
|
384
|
-
if (brainData.tables) {
|
|
385
|
-
for (const rows of Object.values(brainData.tables)) {
|
|
386
|
-
total += (rows?.length ?? 0);
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
else {
|
|
390
|
-
total = (brainData.patterns?.length ?? 0) +
|
|
391
|
-
(brainData.qValues?.length ?? 0) +
|
|
392
|
-
(brainData.dreamInsights?.length ?? 0) +
|
|
393
|
-
(brainData.witnessChain?.length ?? 0);
|
|
394
|
-
}
|
|
395
|
-
return { imported: total, skipped: 0, conflicts: 0, embeddingsRestored: 0 };
|
|
396
|
-
}
|
|
397
|
-
ensureTargetTables(db);
|
|
398
383
|
let imported = 0;
|
|
399
384
|
let skipped = 0;
|
|
400
385
|
let conflicts = 0;
|
|
@@ -414,24 +399,28 @@ export function importBrainFromRvf(db, rvfPath, options) {
|
|
|
414
399
|
}
|
|
415
400
|
}
|
|
416
401
|
// Wrap entire import in a transaction for atomicity (Risk #3 from plan)
|
|
417
|
-
const importAll =
|
|
402
|
+
const importAll = () => {
|
|
403
|
+
const patternIds = new Map();
|
|
404
|
+
const patternWinners = new Map();
|
|
405
|
+
let sourceWitnessRows = 0;
|
|
418
406
|
// Import in TABLE_CONFIGS order (FK-aware)
|
|
419
407
|
for (const config of TABLE_CONFIGS) {
|
|
420
408
|
let rows = tablesMap[config.tableName];
|
|
421
409
|
if (!rows || !Array.isArray(rows))
|
|
422
410
|
continue;
|
|
411
|
+
if (config.tableName === 'witness_chain') {
|
|
412
|
+
// A source chain cannot be grafted into another store's live chain.
|
|
413
|
+
sourceWitnessRows += rows.length;
|
|
414
|
+
skipped += rows.length;
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
423
417
|
// Deserialize BLOBs
|
|
424
418
|
const blobCols = TABLE_BLOB_COLUMNS[config.tableName];
|
|
425
419
|
if (blobCols && blobCols.length > 0) {
|
|
426
420
|
rows = rows.map(r => deserializeRowBlobs(r, blobCols));
|
|
427
|
-
for (const row of rows) {
|
|
428
|
-
for (const col of blobCols) {
|
|
429
|
-
if (row[col] instanceof Buffer)
|
|
430
|
-
embeddingsRestored++;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
421
|
}
|
|
434
|
-
for (const
|
|
422
|
+
for (const originalRow of rows) {
|
|
423
|
+
const row = remapPatternReferences(originalRow, patternIds);
|
|
435
424
|
let result;
|
|
436
425
|
if (config.dedupColumns && config.dedupColumns.length > 0) {
|
|
437
426
|
result = mergeAppendOnlyRow(db, config.tableName, row, config.dedupColumns, config.preserveId);
|
|
@@ -440,17 +429,31 @@ export function importBrainFromRvf(db, rvfPath, options) {
|
|
|
440
429
|
const idCol = PK_COLUMNS[config.tableName] || 'id';
|
|
441
430
|
const tsCol = TIMESTAMP_COLUMNS[config.tableName];
|
|
442
431
|
const confCol = CONFIDENCE_COLUMNS[config.tableName];
|
|
443
|
-
result = mergeGenericRow(db, config.tableName, row, idCol, options.mergeStrategy, tsCol, confCol);
|
|
432
|
+
result = mergeGenericRow(db, config.tableName, row, idCol, options.mergeStrategy, tsCol, confCol, patternIds, patternWinners, originalRow.pattern_id);
|
|
433
|
+
}
|
|
434
|
+
if (result.imported) {
|
|
435
|
+
for (const col of blobCols ?? []) {
|
|
436
|
+
if (row[col] instanceof Buffer)
|
|
437
|
+
embeddingsRestored++;
|
|
438
|
+
}
|
|
444
439
|
}
|
|
445
440
|
imported += result.imported;
|
|
446
441
|
skipped += result.skipped;
|
|
447
442
|
conflicts += result.conflicts;
|
|
448
443
|
}
|
|
449
444
|
}
|
|
450
|
-
|
|
451
|
-
|
|
445
|
+
appendBrainImportWitness(db, {
|
|
446
|
+
sourceChecksum: sha256(kernel.image.toString('utf-8')),
|
|
447
|
+
sourceWitnessRows,
|
|
448
|
+
importedRecords: imported,
|
|
449
|
+
skippedRecords: skipped,
|
|
450
|
+
conflicts,
|
|
451
|
+
});
|
|
452
|
+
imported += 1;
|
|
453
|
+
};
|
|
454
|
+
runImportTransaction(db, options.dryRun ?? false, importAll);
|
|
452
455
|
// Compact after conflict resolution (best-effort)
|
|
453
|
-
if (conflicts > 0) {
|
|
456
|
+
if (!options.dryRun && conflicts > 0) {
|
|
454
457
|
try {
|
|
455
458
|
rvf.compact();
|
|
456
459
|
}
|
|
@@ -131,11 +131,13 @@ export declare function writeJsonl(filePath: string, rows: unknown[]): void;
|
|
|
131
131
|
*/
|
|
132
132
|
export declare function writeJsonlStreaming(filePath: string, rows: Iterable<unknown>, transform?: (row: unknown) => unknown): number;
|
|
133
133
|
export declare function readJsonl<T = unknown>(filePath: string, parser?: (line: string) => T): T[];
|
|
134
|
+
/** Remap relational pattern references without rewriting signed witness payloads. */
|
|
135
|
+
export declare function remapPatternReferences(row: Record<string, unknown>, patternIds: ReadonlyMap<string, string>): Record<string, unknown>;
|
|
134
136
|
/**
|
|
135
137
|
* Generic merge for tables with a TEXT PRIMARY KEY.
|
|
136
138
|
* Uses strategy-based conflict resolution identical to the pattern-specific merges.
|
|
137
139
|
*/
|
|
138
|
-
export declare function mergeGenericRow(db: Database.Database, tableName: string, row: Record<string, unknown>, idColumn: string, strategy: MergeStrategy, timestampColumn?: string, confidenceColumn?: string): MergeResult;
|
|
140
|
+
export declare function mergeGenericRow(db: Database.Database, tableName: string, row: Record<string, unknown>, idColumn: string, strategy: MergeStrategy, timestampColumn?: string, confidenceColumn?: string, patternIds?: Map<string, string>, patternWinners?: Map<string, string | null>, originalPatternId?: unknown): MergeResult;
|
|
139
141
|
/**
|
|
140
142
|
* Merge for append-only tables (AUTOINCREMENT PK).
|
|
141
143
|
* Deduplicates by checking composite columns; inserts if no match found.
|
|
@@ -154,4 +156,6 @@ export declare function updateDreamInsight(db: Database.Database, ins: DreamInsi
|
|
|
154
156
|
export declare function insertWitnessEntry(db: Database.Database, entry: WitnessRow): void;
|
|
155
157
|
/** Ensure all brain-related tables exist in the target database. */
|
|
156
158
|
export declare function ensureTargetTables(db: Database.Database): void;
|
|
159
|
+
/** Execute the real importer; dry runs roll back rows and schema, including nested calls. */
|
|
160
|
+
export declare function runImportTransaction(db: Database.Database, dryRun: boolean, importer: () => void): void;
|
|
157
161
|
//# sourceMappingURL=brain-shared.d.ts.map
|
|
@@ -190,6 +190,16 @@ export function readJsonl(filePath, parser = (line) => JSON.parse(line)) {
|
|
|
190
190
|
return [];
|
|
191
191
|
return content.split('\n').map(parser);
|
|
192
192
|
}
|
|
193
|
+
/** Remap relational pattern references without rewriting signed witness payloads. */
|
|
194
|
+
export function remapPatternReferences(row, patternIds) {
|
|
195
|
+
const mapped = { ...row };
|
|
196
|
+
for (const column of ['pattern_id', 'source_pattern_id', 'target_pattern_id']) {
|
|
197
|
+
const id = mapped[column];
|
|
198
|
+
if (typeof id === 'string' && patternIds.has(id))
|
|
199
|
+
mapped[column] = patternIds.get(id);
|
|
200
|
+
}
|
|
201
|
+
return mapped;
|
|
202
|
+
}
|
|
193
203
|
// --- Generic merge for TEXT PK tables ---
|
|
194
204
|
/** Dynamically insert a row into any table using its column keys. */
|
|
195
205
|
function dynamicInsert(db, tableName, row) {
|
|
@@ -212,18 +222,57 @@ function dynamicUpdate(db, tableName, row, idColumn) {
|
|
|
212
222
|
* Generic merge for tables with a TEXT PRIMARY KEY.
|
|
213
223
|
* Uses strategy-based conflict resolution identical to the pattern-specific merges.
|
|
214
224
|
*/
|
|
215
|
-
export function mergeGenericRow(db, tableName, row, idColumn, strategy, timestampColumn, confidenceColumn) {
|
|
225
|
+
export function mergeGenericRow(db, tableName, row, idColumn, strategy, timestampColumn, confidenceColumn, patternIds, patternWinners, originalPatternId) {
|
|
216
226
|
const validated = validateTableName(tableName);
|
|
227
|
+
const incomingId = String(row.id);
|
|
217
228
|
if (!tableExists(db, validated)) {
|
|
218
229
|
dynamicInsert(db, validated, row);
|
|
219
230
|
return { imported: 1, skipped: 0, conflicts: 0 };
|
|
220
231
|
}
|
|
221
|
-
|
|
232
|
+
let existing = db.prepare(`SELECT * FROM ${validated} WHERE ${idColumn} = ?`)
|
|
222
233
|
.get(row[idColumn]);
|
|
234
|
+
if (!existing && tableName === 'qe_patterns') {
|
|
235
|
+
existing = db.prepare('SELECT * FROM qe_patterns WHERE name = ? AND qe_domain = ? AND pattern_type = ?').get(row.name, row.qe_domain, row.pattern_type);
|
|
236
|
+
}
|
|
237
|
+
if (existing && tableName === 'qe_patterns') {
|
|
238
|
+
// Keep the destination identity: existing children must remain attached,
|
|
239
|
+
// and incoming children are remapped after all patterns have merged.
|
|
240
|
+
if (typeof row.id === 'string' && typeof existing.id === 'string') {
|
|
241
|
+
patternIds?.set(row.id, existing.id);
|
|
242
|
+
}
|
|
243
|
+
row = { ...row, id: existing.id };
|
|
244
|
+
if (!patternWinners?.has(String(existing.id)))
|
|
245
|
+
patternWinners?.set(String(existing.id), null);
|
|
246
|
+
}
|
|
247
|
+
if (tableName === 'qe_pattern_embeddings' && patternWinners?.has(String(row.pattern_id))) {
|
|
248
|
+
if (patternWinners.get(String(row.pattern_id)) !== originalPatternId) {
|
|
249
|
+
return { imported: 0, skipped: 1, conflicts: existing ? 1 : 0 };
|
|
250
|
+
}
|
|
251
|
+
if (existing)
|
|
252
|
+
dynamicUpdate(db, validated, row, idColumn);
|
|
253
|
+
else
|
|
254
|
+
dynamicInsert(db, validated, row);
|
|
255
|
+
return { imported: 1, skipped: 0, conflicts: existing ? 1 : 0 };
|
|
256
|
+
}
|
|
223
257
|
if (!existing) {
|
|
258
|
+
if (tableName === 'qe_patterns')
|
|
259
|
+
patternWinners?.set(String(row.id), incomingId);
|
|
224
260
|
dynamicInsert(db, validated, row);
|
|
225
261
|
return { imported: 1, skipped: 0, conflicts: 0 };
|
|
226
262
|
}
|
|
263
|
+
const replaceExisting = () => {
|
|
264
|
+
if (tableName === 'qe_patterns' && patternWinners) {
|
|
265
|
+
patternWinners.set(String(row.id), incomingId);
|
|
266
|
+
// An embedding describes pattern content, not its confidence or usage.
|
|
267
|
+
// Keep a valid vector for metadata-only updates when no vector is supplied.
|
|
268
|
+
const contentColumns = ['name', 'description', 'pattern_type', 'qe_domain', 'domain', 'template_json', 'context_json'];
|
|
269
|
+
if (contentColumns.some(column => Object.hasOwn(row, column) && (row[column] ?? null) !== (existing[column] ?? null)) &&
|
|
270
|
+
tableExists(db, 'qe_pattern_embeddings')) {
|
|
271
|
+
db.prepare('DELETE FROM qe_pattern_embeddings WHERE pattern_id = ?').run(row.id);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
dynamicUpdate(db, validated, row, idColumn);
|
|
275
|
+
};
|
|
227
276
|
switch (strategy) {
|
|
228
277
|
case 'skip-conflicts':
|
|
229
278
|
return { imported: 0, skipped: 1, conflicts: 1 };
|
|
@@ -232,7 +281,7 @@ export function mergeGenericRow(db, tableName, row, idColumn, strategy, timestam
|
|
|
232
281
|
const existingTime = existing[ts] || '';
|
|
233
282
|
const incomingTime = row[ts] || '';
|
|
234
283
|
if (incomingTime > existingTime) {
|
|
235
|
-
|
|
284
|
+
replaceExisting();
|
|
236
285
|
return { imported: 1, skipped: 0, conflicts: 1 };
|
|
237
286
|
}
|
|
238
287
|
return { imported: 0, skipped: 1, conflicts: 1 };
|
|
@@ -241,7 +290,7 @@ export function mergeGenericRow(db, tableName, row, idColumn, strategy, timestam
|
|
|
241
290
|
const cc = confidenceColumn || 'confidence';
|
|
242
291
|
if (typeof row[cc] === 'number' && typeof existing[cc] === 'number') {
|
|
243
292
|
if (row[cc] > existing[cc]) {
|
|
244
|
-
|
|
293
|
+
replaceExisting();
|
|
245
294
|
return { imported: 1, skipped: 0, conflicts: 1 };
|
|
246
295
|
}
|
|
247
296
|
}
|
|
@@ -349,4 +398,21 @@ export function insertWitnessEntry(db, entry) {
|
|
|
349
398
|
export function ensureTargetTables(db) {
|
|
350
399
|
ensureAllBrainTables(db);
|
|
351
400
|
}
|
|
401
|
+
/** Execute the real importer; dry runs roll back rows and schema, including nested calls. */
|
|
402
|
+
export function runImportTransaction(db, dryRun, importer) {
|
|
403
|
+
const rollback = Symbol('brain import dry run');
|
|
404
|
+
const transaction = db.transaction(() => {
|
|
405
|
+
ensureTargetTables(db);
|
|
406
|
+
importer();
|
|
407
|
+
if (dryRun)
|
|
408
|
+
throw rollback;
|
|
409
|
+
});
|
|
410
|
+
try {
|
|
411
|
+
transaction.immediate();
|
|
412
|
+
}
|
|
413
|
+
catch (error) {
|
|
414
|
+
if (error !== rollback)
|
|
415
|
+
throw error;
|
|
416
|
+
}
|
|
417
|
+
}
|
|
352
418
|
//# sourceMappingURL=brain-shared.js.map
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* intercepting pattern embedding writes/deletes/searches and routing them
|
|
11
11
|
* to one or both backends depending on the configured mode.
|
|
12
12
|
*/
|
|
13
|
-
import { getActiveEmbeddingSpaceIdentity } from '../../learning/real-embeddings.js';
|
|
13
|
+
import { ensureEndpointEmbeddingSpaceIdentity, getActiveEmbeddingSpaceIdentity } from '../../learning/real-embeddings.js';
|
|
14
14
|
import { verifyOrCreateEmbeddingSpaceManifest } from '../../learning/embedding-space.js';
|
|
15
15
|
/**
|
|
16
16
|
* Wraps the real RvfNativeAdapter to conform to the simpler RvfStore interface.
|
|
@@ -97,26 +97,47 @@ export class RvfDualWriter {
|
|
|
97
97
|
this.rvfAvailable = false;
|
|
98
98
|
return;
|
|
99
99
|
}
|
|
100
|
-
//
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
// #754: a later process opens brain.rvf before any embed call has
|
|
101
|
+
// initialized the (lazy) endpoint runtime; resolve its identity first.
|
|
102
|
+
if (!this.activeSpaceId()) {
|
|
103
|
+
await ensureEndpointEmbeddingSpaceIdentity();
|
|
104
104
|
}
|
|
105
|
-
|
|
105
|
+
const { isRvfLockHeldError, removeStaleRvfLock, quarantineUnusableStore } = await import('./rvf-store-integrity.js');
|
|
106
|
+
const tryOpen = () => {
|
|
107
|
+
try {
|
|
108
|
+
return { store: adapter.openRvfStore(this.config.rvfPath), error: null };
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
return { store: null, error };
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
let { store: nativeAdapter, error: openError } = tryOpen();
|
|
115
|
+
if (!nativeAdapter && isRvfLockHeldError(openError)) {
|
|
116
|
+
// A dead CLI process can leave a valid RVF behind a native lock. Only
|
|
117
|
+
// reclaim a lock with a readable dead owner, then retry the open.
|
|
118
|
+
if (!removeStaleRvfLock(this.config.rvfPath))
|
|
119
|
+
throw openError;
|
|
120
|
+
({ store: nativeAdapter, error: openError } = tryOpen());
|
|
121
|
+
if (!nativeAdapter && isRvfLockHeldError(openError))
|
|
122
|
+
throw openError;
|
|
123
|
+
}
|
|
124
|
+
if (!nativeAdapter) {
|
|
106
125
|
try {
|
|
107
126
|
nativeAdapter = adapter.createRvfStore(this.config.rvfPath, this.config.dimensions);
|
|
108
127
|
}
|
|
109
128
|
catch (createErr) {
|
|
110
|
-
//
|
|
111
|
-
//
|
|
112
|
-
//
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
129
|
+
// A peer may have created the file since the first open. Re-open
|
|
130
|
+
// before considering recovery, and use that error (not FsyncFailed)
|
|
131
|
+
// to distinguish a busy healthy store from structural corruption.
|
|
132
|
+
({ store: nativeAdapter, error: openError } = tryOpen());
|
|
133
|
+
if (!nativeAdapter) {
|
|
134
|
+
if (isRvfLockHeldError(openError))
|
|
135
|
+
throw openError;
|
|
136
|
+
const quarantined = quarantineUnusableStore(this.config.rvfPath, createErr instanceof Error ? createErr.message : String(createErr), openError);
|
|
137
|
+
if (!quarantined)
|
|
138
|
+
throw createErr;
|
|
139
|
+
nativeAdapter = adapter.createRvfStore(this.config.rvfPath, this.config.dimensions);
|
|
140
|
+
}
|
|
120
141
|
}
|
|
121
142
|
}
|
|
122
143
|
this.rvfStore = wrapNativeAdapter(nativeAdapter, this.config.dimensions);
|
|
@@ -126,6 +147,11 @@ export class RvfDualWriter {
|
|
|
126
147
|
catch (err) {
|
|
127
148
|
// Native adapter unavailable, or recovery itself failed. Degrade to
|
|
128
149
|
// sqlite-only — but say so, instead of vanishing silently (#563).
|
|
150
|
+
try {
|
|
151
|
+
this.rvfStore?.close();
|
|
152
|
+
}
|
|
153
|
+
catch { /* best-effort cleanup */ }
|
|
154
|
+
this.rvfStore = null;
|
|
129
155
|
this.rvfAvailable = false;
|
|
130
156
|
console.warn(`[RVF] Dual-writer disabled for ${this.config.rvfPath}; falling back to SQLite: ` +
|
|
131
157
|
`${err instanceof Error ? err.message : String(err)}`);
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
* the store magic is `SFVR`; a 104-byte `FLVR` lock is just a live-or-stale
|
|
21
21
|
* lock record.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* A failed open must be inspected before recovery. `LockHeld` plus a failed
|
|
24
|
+
* create says nothing about the store's integrity: create refuses to replace
|
|
25
|
+
* any existing path. Only a structural open failure can justify quarantine.
|
|
26
26
|
*/
|
|
27
27
|
/** The pid recorded in `<rvfPath>.lock`, or null if there is no readable lock. */
|
|
28
28
|
export declare function readLockOwnerPid(rvfPath: string): number | null;
|
|
@@ -35,15 +35,20 @@ export declare function readLockOwnerPid(rvfPath: string): number | null;
|
|
|
35
35
|
* "alive", which fails safe — we leave the store alone.
|
|
36
36
|
*/
|
|
37
37
|
export declare function isLockHeldByLiveProcess(rvfPath: string): boolean;
|
|
38
|
+
/** The native binding's exclusive-lock failure (never evidence of corruption). */
|
|
39
|
+
export declare function isRvfLockHeldError(err: unknown): boolean;
|
|
40
|
+
/** Only known structural open errors permit replacing a derived cache. */
|
|
41
|
+
export declare function isRvfStructuralError(err: unknown): boolean;
|
|
42
|
+
/** Reclaim a lock only when its record names a process known to have exited. */
|
|
43
|
+
export declare function removeStaleRvfLock(rvfPath: string): boolean;
|
|
38
44
|
/**
|
|
39
45
|
* Move an unusable store and its sidecars aside so the next create succeeds.
|
|
40
46
|
* Returns the quarantine base path, or null if nothing was quarantined.
|
|
41
47
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
*
|
|
45
|
-
*
|
|
46
|
-
* evidence if this recurs.
|
|
48
|
+
* Call only after a structural open failure and failed create/re-open. The
|
|
49
|
+
* store is a derived cache, rebuilt from the unified DB; we move rather than
|
|
50
|
+
* delete because the bytes may hold writes that never reached SQLite and are
|
|
51
|
+
* the only evidence if this recurs.
|
|
47
52
|
*/
|
|
48
|
-
export declare function quarantineUnusableStore(rvfPath: string, reason: string): string | null;
|
|
53
|
+
export declare function quarantineUnusableStore(rvfPath: string, reason: string, openError: unknown): string | null;
|
|
49
54
|
//# sourceMappingURL=rvf-store-integrity.d.ts.map
|
|
@@ -20,9 +20,9 @@
|
|
|
20
20
|
* the store magic is `SFVR`; a 104-byte `FLVR` lock is just a live-or-stale
|
|
21
21
|
* lock record.
|
|
22
22
|
*
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
23
|
+
* A failed open must be inspected before recovery. `LockHeld` plus a failed
|
|
24
|
+
* create says nothing about the store's integrity: create refuses to replace
|
|
25
|
+
* any existing path. Only a structural open failure can justify quarantine.
|
|
26
26
|
*/
|
|
27
27
|
import { existsSync, openSync, readSync, closeSync, renameSync, unlinkSync } from 'fs';
|
|
28
28
|
/** Magic of a lock record (the store's own magic is `SFVR`). */
|
|
@@ -90,19 +90,49 @@ export function isLockHeldByLiveProcess(rvfPath) {
|
|
|
90
90
|
// process still has open. Treat every live owner conservatively.
|
|
91
91
|
return isPidAlive(pid);
|
|
92
92
|
}
|
|
93
|
+
/** The native binding's exclusive-lock failure (never evidence of corruption). */
|
|
94
|
+
export function isRvfLockHeldError(err) {
|
|
95
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
96
|
+
return message.includes('LockHeld') || message.includes('0x0300');
|
|
97
|
+
}
|
|
98
|
+
/** Only known structural open errors permit replacing a derived cache. */
|
|
99
|
+
export function isRvfStructuralError(err) {
|
|
100
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
101
|
+
return /ManifestNotFound|InvalidMagic|ChecksumMismatch|CorruptStore/i.test(message);
|
|
102
|
+
}
|
|
103
|
+
/** Reclaim a lock only when its record names a process known to have exited. */
|
|
104
|
+
export function removeStaleRvfLock(rvfPath) {
|
|
105
|
+
const pid = readLockOwnerPid(rvfPath);
|
|
106
|
+
if (pid === null || isPidAlive(pid))
|
|
107
|
+
return false;
|
|
108
|
+
try {
|
|
109
|
+
// A concurrent owner could have replaced the record since the first read.
|
|
110
|
+
if (readLockOwnerPid(rvfPath) !== pid)
|
|
111
|
+
return false;
|
|
112
|
+
unlinkSync(`${rvfPath}.lock`);
|
|
113
|
+
return true;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
return false;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
93
119
|
/**
|
|
94
120
|
* Move an unusable store and its sidecars aside so the next create succeeds.
|
|
95
121
|
* Returns the quarantine base path, or null if nothing was quarantined.
|
|
96
122
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
*
|
|
100
|
-
*
|
|
101
|
-
* evidence if this recurs.
|
|
123
|
+
* Call only after a structural open failure and failed create/re-open. The
|
|
124
|
+
* store is a derived cache, rebuilt from the unified DB; we move rather than
|
|
125
|
+
* delete because the bytes may hold writes that never reached SQLite and are
|
|
126
|
+
* the only evidence if this recurs.
|
|
102
127
|
*/
|
|
103
|
-
export function quarantineUnusableStore(rvfPath, reason) {
|
|
128
|
+
export function quarantineUnusableStore(rvfPath, reason, openError) {
|
|
104
129
|
if (!existsSync(rvfPath))
|
|
105
130
|
return null;
|
|
131
|
+
// Native create reports FsyncFailed for *every* existing path, including a
|
|
132
|
+
// healthy one. A last observed LockHeld, permission, or I/O error must never
|
|
133
|
+
// trigger quarantine even when the owner exits before this check.
|
|
134
|
+
if (!isRvfStructuralError(openError))
|
|
135
|
+
return null;
|
|
106
136
|
// Never pull a store out from under a live peer.
|
|
107
137
|
if (isLockHeldByLiveProcess(rvfPath)) {
|
|
108
138
|
console.warn(`[RVF] ${rvfPath} is unusable but its lock is held by a live process — ` +
|
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
16
16
|
// Issue #563: static import — this module is fs-only, and a require() here
|
|
17
17
|
// would not resolve under the test runner.
|
|
18
|
-
import { quarantineUnusableStore, isLockHeldByLiveProcess, readLockOwnerPid, } from './rvf-store-integrity.js';
|
|
18
|
+
import { quarantineUnusableStore, isLockHeldByLiveProcess, isRvfLockHeldError, removeStaleRvfLock, readLockOwnerPid, } from './rvf-store-integrity.js';
|
|
19
19
|
let sharedAdapter = null;
|
|
20
20
|
let initAttempted = false;
|
|
21
21
|
// ---------------------------------------------------------------------------
|
|
@@ -122,10 +122,6 @@ function openOrCreateRvf(openFn, createFn, rvfPath, dimensions) {
|
|
|
122
122
|
return { adapter: null, err };
|
|
123
123
|
}
|
|
124
124
|
};
|
|
125
|
-
const isLockHeld = (err) => {
|
|
126
|
-
const m = err instanceof Error ? err.message : String(err);
|
|
127
|
-
return m.includes('LockHeld') || m.includes('0x0300');
|
|
128
|
-
};
|
|
129
125
|
// Pass 1: try to open whatever's there.
|
|
130
126
|
let { adapter: opened, err: openErr } = tryOpen();
|
|
131
127
|
// Pass 1.5: stale-lock recovery. The native binding writes a `<rvfPath>.lock`
|
|
@@ -141,7 +137,7 @@ function openOrCreateRvf(openFn, createFn, rvfPath, dimensions) {
|
|
|
141
137
|
// assumption. This includes a lock owned by the current PID: another
|
|
142
138
|
// in-process adapter may still hold the store, so PID equality is not proof
|
|
143
139
|
// that the lock can be removed safely.
|
|
144
|
-
if (!opened &&
|
|
140
|
+
if (!opened && isRvfLockHeldError(openErr)) {
|
|
145
141
|
try {
|
|
146
142
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
147
143
|
const fs = require('fs');
|
|
@@ -150,8 +146,7 @@ function openOrCreateRvf(openFn, createFn, rvfPath, dimensions) {
|
|
|
150
146
|
console.warn(`[RVF] ${rvfPath} is locked by a live process (pid ${readLockOwnerPid(rvfPath)}) — ` +
|
|
151
147
|
'not breaking the lock; degrading to SQLite for this run.');
|
|
152
148
|
}
|
|
153
|
-
else if (
|
|
154
|
-
fs.unlinkSync(lockPath);
|
|
149
|
+
else if (removeStaleRvfLock(rvfPath)) {
|
|
155
150
|
console.warn(`[RVF] Removed stale lock file at ${lockPath} (prior process exited without closing). ` +
|
|
156
151
|
'Retrying open. If you see this repeatedly under live concurrency, file an issue.');
|
|
157
152
|
({ adapter: opened, err: openErr } = tryOpen());
|
|
@@ -185,29 +180,31 @@ function openOrCreateRvf(openFn, createFn, rvfPath, dimensions) {
|
|
|
185
180
|
catch (createErr) {
|
|
186
181
|
// Pass 3: create failed (likely FsyncFailed because a peer process won
|
|
187
182
|
// the race). Try open one more time.
|
|
183
|
+
let reopened;
|
|
188
184
|
try {
|
|
189
|
-
|
|
190
|
-
if (reopened.dimension() !== dimensions) {
|
|
191
|
-
try {
|
|
192
|
-
reopened.close();
|
|
193
|
-
}
|
|
194
|
-
catch { /* best-effort */ }
|
|
195
|
-
throw new Error(`RVF dimension mismatch after race (file=${reopened.dimension()}, requested=${dimensions})`);
|
|
196
|
-
}
|
|
197
|
-
return reopened;
|
|
185
|
+
reopened = openFn(rvfPath);
|
|
198
186
|
}
|
|
199
|
-
catch {
|
|
200
|
-
//
|
|
201
|
-
//
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
const quarantined = quarantineUnusableStore(rvfPath, createErr instanceof Error ? createErr.message : String(createErr));
|
|
187
|
+
catch (reopenErr) {
|
|
188
|
+
// A failed create only proves that a path exists. The final open error
|
|
189
|
+
// must be structural before we move any store aside.
|
|
190
|
+
if (isRvfLockHeldError(reopenErr))
|
|
191
|
+
throw reopenErr;
|
|
192
|
+
const quarantined = quarantineUnusableStore(rvfPath, createErr instanceof Error ? createErr.message : String(createErr), reopenErr);
|
|
205
193
|
if (quarantined) {
|
|
206
194
|
return createFn(rvfPath, dimensions);
|
|
207
195
|
}
|
|
208
196
|
// Fall through with the more informative original error.
|
|
209
197
|
throw createErr instanceof Error ? createErr : new Error(String(createErr));
|
|
210
198
|
}
|
|
199
|
+
const actualDim = reopened.dimension();
|
|
200
|
+
if (actualDim !== dimensions) {
|
|
201
|
+
try {
|
|
202
|
+
reopened.close();
|
|
203
|
+
}
|
|
204
|
+
catch { /* best-effort */ }
|
|
205
|
+
throw new Error(`RVF dimension mismatch after race (file=${actualDim}, requested=${dimensions})`);
|
|
206
|
+
}
|
|
207
|
+
return reopened;
|
|
211
208
|
}
|
|
212
209
|
}
|
|
213
210
|
/**
|
|
@@ -175,5 +175,11 @@ export declare class HybridMemoryBackend implements MemoryBackend {
|
|
|
175
175
|
private ensureInitialized;
|
|
176
176
|
private cleanup;
|
|
177
177
|
}
|
|
178
|
+
/**
|
|
179
|
+
* Create the project memory backend exactly as the QE kernel does
|
|
180
|
+
* (<dataDir>/memory.db, WAL, 'qe-kernel' default namespace). Shared with the
|
|
181
|
+
* CLI's lightweight memory path so both always open the same store.
|
|
182
|
+
*/
|
|
183
|
+
export declare function createKernelMemoryBackend(dataDir: string): HybridMemoryBackend;
|
|
178
184
|
export {};
|
|
179
185
|
//# sourceMappingURL=hybrid-backend.d.ts.map
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
* backward compatibility with existing MemoryBackend interface.
|
|
11
11
|
*/
|
|
12
12
|
import { getUnifiedMemory, DEFAULT_UNIFIED_MEMORY_CONFIG } from './unified-memory.js';
|
|
13
|
+
import * as path from 'path';
|
|
13
14
|
import { MEMORY_CONSTANTS } from './constants.js';
|
|
14
15
|
import { LoggerFactory } from '../logging/index.js';
|
|
15
16
|
const logger = LoggerFactory.create('hybrid-backend');
|
|
@@ -329,4 +330,21 @@ export class HybridMemoryBackend {
|
|
|
329
330
|
}
|
|
330
331
|
}
|
|
331
332
|
}
|
|
333
|
+
/**
|
|
334
|
+
* Create the project memory backend exactly as the QE kernel does
|
|
335
|
+
* (<dataDir>/memory.db, WAL, 'qe-kernel' default namespace). Shared with the
|
|
336
|
+
* CLI's lightweight memory path so both always open the same store.
|
|
337
|
+
*/
|
|
338
|
+
export function createKernelMemoryBackend(dataDir) {
|
|
339
|
+
return new HybridMemoryBackend({
|
|
340
|
+
sqlite: {
|
|
341
|
+
path: path.join(dataDir, 'memory.db'),
|
|
342
|
+
walMode: true,
|
|
343
|
+
poolSize: 3,
|
|
344
|
+
busyTimeout: MEMORY_CONSTANTS.BUSY_TIMEOUT_MS,
|
|
345
|
+
},
|
|
346
|
+
enableFallback: true,
|
|
347
|
+
defaultNamespace: 'qe-kernel',
|
|
348
|
+
});
|
|
349
|
+
}
|
|
332
350
|
//# sourceMappingURL=hybrid-backend.js.map
|
package/dist/kernel/kernel.js
CHANGED
|
@@ -8,10 +8,10 @@ import { InMemoryEventBus } from './event-bus.js';
|
|
|
8
8
|
import { DefaultAgentCoordinator } from './agent-coordinator.js';
|
|
9
9
|
import { DefaultPluginLoader } from './plugin-loader.js';
|
|
10
10
|
import { InMemoryBackend } from './memory-backend.js';
|
|
11
|
-
import {
|
|
11
|
+
import { createKernelMemoryBackend } from './hybrid-backend.js';
|
|
12
12
|
import { SemanticAntiDriftMiddleware, ToolCallSignatureTracker } from './anti-drift-middleware.js';
|
|
13
13
|
import { LOOP_EVENT_TYPES } from './event-bus.js';
|
|
14
|
-
import { AGENT_CONSTANTS
|
|
14
|
+
import { AGENT_CONSTANTS } from './constants.js';
|
|
15
15
|
import { findProjectRoot } from './unified-memory.js';
|
|
16
16
|
import { initializeUnifiedPersistence } from './unified-persistence.js';
|
|
17
17
|
import * as path from 'path';
|
|
@@ -163,16 +163,7 @@ export class QEKernelImpl {
|
|
|
163
163
|
else {
|
|
164
164
|
// Use hybrid backend for persistent storage (default)
|
|
165
165
|
// All data goes to unified memory.db via UnifiedMemoryManager
|
|
166
|
-
this._memory =
|
|
167
|
-
sqlite: {
|
|
168
|
-
path: path.join(dataDir, 'memory.db'),
|
|
169
|
-
walMode: true,
|
|
170
|
-
poolSize: 3,
|
|
171
|
-
busyTimeout: MEMORY_CONSTANTS.BUSY_TIMEOUT_MS,
|
|
172
|
-
},
|
|
173
|
-
enableFallback: true,
|
|
174
|
-
defaultNamespace: 'qe-kernel',
|
|
175
|
-
});
|
|
166
|
+
this._memory = createKernelMemoryBackend(dataDir);
|
|
176
167
|
// Re-create plugins with the real memory backend
|
|
177
168
|
this._plugins = new DefaultPluginLoader(this._eventBus, this._memory, this._config.lazyLoading);
|
|
178
169
|
}
|
|
@@ -206,6 +197,9 @@ export class QEKernelImpl {
|
|
|
206
197
|
const pluginCache = new PluginCache({ cacheDir: pluginCacheDir });
|
|
207
198
|
const pluginLifecycle = new PluginLifecycleManager({ cache: pluginCache });
|
|
208
199
|
const resolution = pluginLifecycle.resolveLoadOrder();
|
|
200
|
+
for (const error of resolution.errors) {
|
|
201
|
+
console.warn(`[QEKernel] External plugin ${error.plugin}: ${error.code}: ${error.message}`);
|
|
202
|
+
}
|
|
209
203
|
for (const resolved of resolution.ordered) {
|
|
210
204
|
const manifest = resolved.manifest;
|
|
211
205
|
const cachedPlugin = pluginCache.get(manifest.name, manifest.version);
|
|
@@ -232,8 +226,9 @@ export class QEKernelImpl {
|
|
|
232
226
|
}
|
|
233
227
|
}
|
|
234
228
|
}
|
|
235
|
-
catch {
|
|
236
|
-
// External plugin loading is best-effort
|
|
229
|
+
catch (error) {
|
|
230
|
+
// External plugin loading is best-effort, but failures must be visible.
|
|
231
|
+
console.warn('[QEKernel] External plugin discovery failed:', error);
|
|
237
232
|
}
|
|
238
233
|
// Load plugins based on configuration
|
|
239
234
|
if (!this._config.lazyLoading) {
|