agentic-qe 3.10.8 → 3.11.0
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-learning-coordinator.md +1 -1
- package/.claude/skills/README.md +2 -2
- package/.claude/skills/agentic-quality-engineering/SKILL.md +6 -5
- package/.claude/skills/agentic-quality-engineering/schemas/output.json +7 -3
- package/.claude/skills/holistic-testing-pact/SKILL.md +50 -17
- package/.claude/skills/skills-manifest.json +6 -6
- package/.opencode/skills/qe-agentic-quality-engineering.yaml +5 -5
- package/.opencode/skills/qe-holistic-testing-pact.yaml +11 -11
- package/CHANGELOG.md +88 -1
- package/README.md +17 -0
- package/assets/agents/v3/qe-learning-coordinator.md +1 -1
- package/assets/skills/README.md +2 -2
- package/assets/skills/agentic-quality-engineering/SKILL.md +6 -5
- package/assets/skills/agentic-quality-engineering/schemas/output.json +7 -3
- package/assets/skills/holistic-testing-pact/SKILL.md +50 -17
- package/assets/skills/skills-manifest.json +6 -6
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-WLFT5VMV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-4JSL6LF6.js → agent-booster-wasm-5CSKQB4O.js} +2 -2
- package/dist/cli/chunks/{agent-handler-6YOFH7KL.js → agent-handler-EBV3OKTE.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-O3IBK4BY.js → agent-memory-branch-RZ53YM2U.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-JBH4GZUM.js +2 -0
- package/dist/cli/chunks/{arena-BLCAZNAY.js → arena-QWYTIQ6I.js} +2 -2
- package/dist/cli/chunks/{arena-KLGRZTTU.js → arena-UCP74DRO.js} +4 -4
- package/dist/cli/chunks/{audit-FKKLR22S.js → audit-M4FNIX47.js} +2 -2
- package/dist/cli/chunks/base-A7JGM473.js +2 -0
- package/dist/cli/chunks/{hnswlib-node-PNPV64M3.js → better-sqlite3-RIBLRHJL.js} +2 -2
- package/dist/cli/chunks/{brain-handler-YTGYC2QW.js → brain-handler-OY6Q2GY5.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-KIIBEJ5S.js → branch-enumerator-TQWN4NIX.js} +2 -2
- package/dist/cli/chunks/{browser-7YZLTV2C.js → browser-2EH3RXJ2.js} +2 -2
- package/dist/cli/chunks/browser-workflow-TIDJWULK.js +2 -0
- package/dist/cli/chunks/{chunk-4IGSL7CX.js → chunk-2BBKA5J4.js} +1 -1
- package/dist/cli/chunks/{chunk-LZVKR7HV.js → chunk-2QU6C3OS.js} +2 -2
- package/dist/cli/chunks/{chunk-B3B5QZYN.js → chunk-2TUVBEWK.js} +2 -2
- package/dist/cli/chunks/{chunk-W72CUJRB.js → chunk-2WVLFT2I.js} +1 -1
- package/dist/cli/chunks/{chunk-JZYXYHEE.js → chunk-2ZC7S4UG.js} +2 -2
- package/dist/cli/chunks/{chunk-PG7KISET.js → chunk-3GWSHRDA.js} +2 -2
- package/dist/cli/chunks/{chunk-VKLPSPPI.js → chunk-3J6LYF6I.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSMHQENA.js → chunk-3LP5GPGU.js} +1 -1
- package/dist/cli/chunks/{chunk-MWAEUJDC.js → chunk-453UDYD2.js} +229 -225
- package/dist/cli/chunks/{chunk-DI7REPYC.js → chunk-4OTA6KYJ.js} +2 -2
- package/dist/cli/chunks/{chunk-SDVL5TZK.js → chunk-5ASPEVVF.js} +1 -1
- package/dist/cli/chunks/{chunk-LCDMB5SP.js → chunk-5DG6H553.js} +1 -1
- package/dist/cli/chunks/{chunk-JFTRHS5V.js → chunk-5OJXVVTI.js} +2 -2
- package/dist/cli/chunks/{chunk-6B3COND2.js → chunk-6VQKNPGY.js} +2 -2
- package/dist/cli/chunks/{chunk-NKKDO5W4.js → chunk-72QNONO6.js} +2 -2
- package/dist/cli/chunks/{chunk-OZDRAKFF.js → chunk-73EWPVBJ.js} +2 -2
- package/dist/cli/chunks/{chunk-CP4CSI5R.js → chunk-7BD7DZCB.js} +2 -2
- package/dist/cli/chunks/{chunk-DNC27OP7.js → chunk-7E5NYLJT.js} +2 -2
- package/dist/cli/chunks/{chunk-CDNXXNQM.js → chunk-7MBF3S25.js} +1 -1
- package/dist/cli/chunks/{chunk-IFQPGBKQ.js → chunk-7PTA7AVW.js} +1 -1
- package/dist/cli/chunks/{chunk-QNNH5TDV.js → chunk-7Q6CMSMD.js} +3 -3
- package/dist/cli/chunks/{chunk-SDGRU6SG.js → chunk-ACV2WVMX.js} +1 -1
- package/dist/cli/chunks/{chunk-XRJH5KXF.js → chunk-AURDGQNB.js} +2 -2
- package/dist/cli/chunks/{chunk-LIOK7WBX.js → chunk-AVKGDS6F.js} +2 -2
- package/dist/cli/chunks/{chunk-DPSLJ6IW.js → chunk-AYOTODUV.js} +1 -1
- package/dist/cli/chunks/{chunk-OK6CSJOX.js → chunk-B4QA3YN6.js} +1 -1
- package/dist/cli/chunks/{chunk-MTWBYHMS.js → chunk-BA4WZIAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-RNJRKFMX.js → chunk-BEOGI5FC.js} +2 -2
- package/dist/cli/chunks/{chunk-XYXRO7VP.js → chunk-C33BMWYZ.js} +2 -2
- package/dist/cli/chunks/chunk-C4OYHUJV.js +2 -0
- package/dist/cli/chunks/{chunk-ON6C2OYG.js → chunk-CERSTEAJ.js} +2 -2
- package/dist/cli/chunks/{chunk-YATW2RWQ.js → chunk-D3S4SRSA.js} +2 -2
- package/dist/cli/chunks/{chunk-CCUUTTTJ.js → chunk-DCJIXDO6.js} +2 -2
- package/dist/cli/chunks/chunk-DDQWW22L.js +6 -0
- package/dist/cli/chunks/{chunk-FWQZZ22V.js → chunk-DV7662EZ.js} +1 -1
- package/dist/cli/chunks/{chunk-HVE3EH36.js → chunk-ETGEGMYS.js} +3 -3
- package/dist/cli/chunks/{chunk-CO6UY7ZU.js → chunk-ETZ62NFD.js} +1 -1
- package/dist/cli/chunks/{chunk-G73PIM7X.js → chunk-F62ZQZQQ.js} +2 -2
- package/dist/cli/chunks/{chunk-AGQIJWAD.js → chunk-F6Y7DTHR.js} +2 -2
- package/dist/cli/chunks/{chunk-LT4OZHMK.js → chunk-FGOVDO3R.js} +2 -2
- package/dist/cli/chunks/{chunk-YUK4KU2B.js → chunk-FMKALHT3.js} +2 -2
- package/dist/cli/chunks/{chunk-X3NEQ3SL.js → chunk-FMULOSBL.js} +1 -1
- package/dist/cli/chunks/{chunk-3AG2MM7U.js → chunk-FTOICJQG.js} +2 -2
- package/dist/cli/chunks/{chunk-YQYTQRTR.js → chunk-G25YZ7Z6.js} +2 -2
- package/dist/cli/chunks/{chunk-QHLENBGB.js → chunk-G5VE3HQW.js} +2 -2
- package/dist/cli/chunks/{chunk-XLQX77KP.js → chunk-GBFAQ4DW.js} +1 -1
- package/dist/cli/chunks/{chunk-Z57UERQZ.js → chunk-GGSXHGWD.js} +2 -2
- package/dist/cli/chunks/{chunk-TXLLF7XR.js → chunk-HHSEIPSQ.js} +1 -1
- package/dist/cli/chunks/{chunk-4G2GTX2V.js → chunk-HJFQVKPI.js} +1 -1
- package/dist/cli/chunks/{chunk-WKLI5Z3L.js → chunk-HMSPPGUF.js} +2 -2
- package/dist/cli/chunks/{chunk-2KP5TJS2.js → chunk-HNSZDIQU.js} +2 -2
- package/dist/cli/chunks/{chunk-77BVW2CT.js → chunk-I2HQLBWG.js} +2 -2
- package/dist/cli/chunks/{chunk-G2J7WGOG.js → chunk-IFTEM672.js} +2 -2
- package/dist/cli/chunks/{chunk-Q7B7T4YK.js → chunk-IHNBZ5XG.js} +2 -2
- package/dist/cli/chunks/{chunk-5GPOSKGP.js → chunk-IKNDGXZZ.js} +2 -2
- package/dist/cli/chunks/{chunk-ALFF4AAM.js → chunk-IOQYSR5S.js} +2 -2
- package/dist/cli/chunks/{chunk-7LHN6WBX.js → chunk-IQSPL2H4.js} +2 -2
- package/dist/cli/chunks/{chunk-E5GUTKET.js → chunk-ISVBO4XO.js} +2 -2
- package/dist/cli/chunks/{chunk-KTBBSOZG.js → chunk-ITRUZ3WE.js} +2 -2
- package/dist/cli/chunks/{chunk-OIU6PKLF.js → chunk-J425SQFE.js} +2 -2
- package/dist/cli/chunks/{chunk-NFZY6ZVY.js → chunk-JN3IQB4L.js} +1 -1
- package/dist/cli/chunks/{chunk-6B32USSC.js → chunk-JNX7IRSI.js} +2 -2
- package/dist/cli/chunks/{chunk-PRYSWF6F.js → chunk-JQM64WJ2.js} +1 -1
- package/dist/cli/chunks/{chunk-4B676LUC.js → chunk-JQSA6EMI.js} +2 -2
- package/dist/cli/chunks/{chunk-NL4EKO2J.js → chunk-JZFA2PWY.js} +2 -2
- package/dist/cli/chunks/{chunk-54PBHRRW.js → chunk-KBVXKFDI.js} +4 -4
- package/dist/cli/chunks/{chunk-Z4WAJ647.js → chunk-KOOY72E3.js} +2 -2
- package/dist/cli/chunks/{chunk-M5PBVK3V.js → chunk-KZE5UR4T.js} +3 -3
- package/dist/cli/chunks/{chunk-2RDWYJJY.js → chunk-L7GQKJLV.js} +2 -2
- package/dist/cli/chunks/{chunk-GXKCRIHK.js → chunk-LCDRRAES.js} +2 -2
- package/dist/cli/chunks/{chunk-VL4MSE3J.js → chunk-LFT7WYHW.js} +2 -2
- package/dist/cli/chunks/{chunk-LBR5FXPD.js → chunk-LTH6XARD.js} +5 -5
- package/dist/cli/chunks/{chunk-KWKGROPS.js → chunk-LYV7WJWA.js} +1 -1
- package/dist/cli/chunks/{chunk-HVFHPDXV.js → chunk-MDYI4IIW.js} +1 -1
- package/dist/cli/chunks/{chunk-KTEWRRDZ.js → chunk-MKLLB4PM.js} +4 -4
- package/dist/cli/chunks/{chunk-34LWJDCM.js → chunk-MTSMFEWK.js} +2 -2
- package/dist/cli/chunks/{chunk-CHPL7TA4.js → chunk-N3R3JGUY.js} +1 -1
- package/dist/cli/chunks/{chunk-HWJEHXPQ.js → chunk-N52ZBTPM.js} +2 -2
- package/dist/cli/chunks/{chunk-X4CHPEOQ.js → chunk-N7MKF4F4.js} +1 -1
- package/dist/cli/chunks/{chunk-H35FNLQJ.js → chunk-NBTKI2TX.js} +2 -2
- package/dist/cli/chunks/{chunk-FPEFIJQ6.js → chunk-NI7O3GKZ.js} +3 -3
- package/dist/cli/chunks/{chunk-2UL4UK6V.js → chunk-NQD4CMXC.js} +2 -2
- package/dist/cli/chunks/{chunk-DNEYBK7X.js → chunk-O6FN53HB.js} +1 -1
- package/dist/cli/chunks/{chunk-XPAH7SEX.js → chunk-OZQIDDXB.js} +2 -2
- package/dist/cli/chunks/{chunk-474ZUVGP.js → chunk-P3NV6KN3.js} +1 -1
- package/dist/cli/chunks/{chunk-JITZAJJN.js → chunk-PC3VIR2A.js} +3 -3
- package/dist/cli/chunks/{chunk-WYAHOUK2.js → chunk-PJ4HSXH3.js} +1 -1
- package/dist/cli/chunks/{chunk-Z7FWPSOK.js → chunk-PUTRXS5I.js} +2 -2
- package/dist/cli/chunks/{chunk-GDHJZPNC.js → chunk-PVBJUANU.js} +2 -2
- package/dist/cli/chunks/{chunk-PTPGYUT2.js → chunk-QCJ7YOVN.js} +2 -2
- package/dist/cli/chunks/{chunk-T2Z3M6HA.js → chunk-QGBXENIP.js} +1 -1
- package/dist/cli/chunks/{chunk-OLOKPY5O.js → chunk-QYXTESM3.js} +2 -2
- package/dist/cli/chunks/{chunk-OV3ESWN4.js → chunk-QZQGYSDG.js} +2 -2
- package/dist/cli/chunks/{chunk-HEC2UWY3.js → chunk-R3YO3Z7I.js} +4 -4
- package/dist/cli/chunks/{chunk-JQBD4JO2.js → chunk-R7FHQQAV.js} +2 -2
- package/dist/cli/chunks/{chunk-MSWBVPVQ.js → chunk-RKDNLPZM.js} +2 -2
- package/dist/cli/chunks/{chunk-BALWMVCX.js → chunk-RPYYS6BX.js} +2 -2
- package/dist/cli/chunks/{chunk-R2LWUBET.js → chunk-RVQW6CBF.js} +2 -2
- package/dist/cli/chunks/{chunk-VM5C4DIV.js → chunk-SHW43QQV.js} +2 -2
- package/dist/cli/chunks/{chunk-S6PGWJDK.js → chunk-SKL225P5.js} +2 -2
- package/dist/cli/chunks/{chunk-Y4XTPEAC.js → chunk-SLWJNHCR.js} +2 -2
- package/dist/cli/chunks/{chunk-XNFYQRJ2.js → chunk-SQPDGRYR.js} +1 -1
- package/dist/cli/chunks/{chunk-NOP5ZJ7E.js → chunk-T6KT63NC.js} +2 -2
- package/dist/cli/chunks/{chunk-C6TUX7YJ.js → chunk-TGLEREP5.js} +2 -2
- package/dist/cli/chunks/{chunk-O75ODKCX.js → chunk-TYS77XHV.js} +2 -2
- package/dist/cli/chunks/{chunk-Q32LITZL.js → chunk-UEH6C5JA.js} +1 -1
- package/dist/cli/chunks/{chunk-6R6RC6YJ.js → chunk-UFMW25MS.js} +2 -2
- package/dist/cli/chunks/{chunk-BMSMDD72.js → chunk-V6WJVFRN.js} +2 -2
- package/dist/cli/chunks/{chunk-GHIHW3IE.js → chunk-VGYUVMSN.js} +2 -2
- package/dist/cli/chunks/{chunk-33CLP2NE.js → chunk-VHON5NDM.js} +3 -3
- package/dist/cli/chunks/{chunk-D7IH2A3C.js → chunk-VVJXQ4FR.js} +2 -2
- package/dist/cli/chunks/{chunk-K5Y64X2U.js → chunk-WBQEOACC.js} +2 -2
- package/dist/cli/chunks/{chunk-NWIKNQLJ.js → chunk-WP6XUSVW.js} +1 -1
- package/dist/cli/chunks/{chunk-FXPAGKVS.js → chunk-X2L4POJE.js} +1 -1
- package/dist/cli/chunks/{chunk-H73AA2JI.js → chunk-X2TUDGFL.js} +18 -18
- package/dist/cli/chunks/{chunk-WDZT344G.js → chunk-XKRG2U3V.js} +15 -13
- package/dist/cli/chunks/{chunk-D7ZVIL3C.js → chunk-XMZ2DHUL.js} +1 -1
- package/dist/cli/chunks/{chunk-LJEO5R32.js → chunk-XSG4XKGO.js} +2 -2
- package/dist/cli/chunks/{chunk-UU422SST.js → chunk-XVQUVCFR.js} +2 -2
- package/dist/cli/chunks/{chunk-SSRMFU4P.js → chunk-XW5OXBVV.js} +2 -2
- package/dist/cli/chunks/{chunk-DDMKCHYT.js → chunk-Y7TBCHW4.js} +2 -2
- package/dist/cli/chunks/{chunk-XKIVOADM.js → chunk-Y7UJC5OL.js} +3 -3
- package/dist/cli/chunks/{chunk-HE3KLHNO.js → chunk-YQIMO7VJ.js} +2 -2
- package/dist/cli/chunks/{chunk-RXWPYY6H.js → chunk-YR44KQUK.js} +1 -1
- package/dist/cli/chunks/{chunk-QHGHWATK.js → chunk-YRP73HO4.js} +1 -1
- package/dist/cli/chunks/{chunk-5KUINS3D.js → chunk-YSTWLDVD.js} +3 -3
- package/dist/cli/chunks/{chunk-YMJ5AVVU.js → chunk-Z45QDDZQ.js} +1 -1
- package/dist/cli/chunks/{chunk-2F4VRCT6.js → chunk-ZEUUVLS2.js} +1 -1
- package/dist/cli/chunks/{chunk-7NKVEEXD.js → chunk-ZFP3O5FM.js} +1 -1
- package/dist/cli/chunks/{chunk-4AG2TQEF.js → chunk-ZK56THZT.js} +3 -3
- package/dist/cli/chunks/{chunk-4OHLPG6B.js → chunk-ZT4NPTML.js} +2 -2
- package/dist/cli/chunks/{ci-2G4BBIQD.js → ci-4JK2NFCD.js} +2 -2
- package/dist/cli/chunks/{ci-output-SI3ME52L.js → ci-output-LCGTJQWC.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-KTICF3EC.js → circuit-breaker-EJF7D3L4.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-F44PULFU.js → claude-flow-setup-3RUC6OB4.js} +2 -2
- package/dist/cli/chunks/client-ZLJ3JMBC.js +2 -0
- package/dist/cli/chunks/cline-installer-6LY5C5QH.js +4 -0
- package/dist/cli/chunks/{code-EDLIBN77.js → code-MPDG4UHS.js} +2 -2
- package/dist/cli/chunks/{code-index-extractor-P4NBWGTV.js → code-index-extractor-OY5GQJBM.js} +2 -2
- package/dist/cli/chunks/codex-installer-BO7E2ZVA.js +8 -0
- package/dist/cli/chunks/{completions-XPCXB5SR.js → completions-VGL3KJ2R.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-LAL5RSB7.js → complexity-analyzer-5DPUK7IL.js} +2 -2
- package/dist/cli/chunks/continuedev-installer-LFDG2D42.js +15 -0
- package/dist/cli/chunks/copilot-installer-SEMMMIZH.js +3 -0
- package/dist/cli/chunks/core-handlers-EM7FUYTI.js +2 -0
- package/dist/cli/chunks/{cost-tracker-EUJFKHGT.js → cost-tracker-OPBC6FQM.js} +2 -2
- package/dist/cli/chunks/{coverage-C75LPZYB.js → coverage-CFDUSRKU.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-DYGHQ6P5.js +2 -0
- package/dist/cli/chunks/cursor-installer-6TXUUVY4.js +3 -0
- package/dist/cli/chunks/{daemon-JR2MSTSK.js → daemon-5KO46YQR.js} +4 -4
- package/dist/cli/chunks/{daemon-BPVBZZQO.js → daemon-7BDBPPAF.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-I5H7DBNU.js → dag-attention-scheduler-6DQKZOUW.js} +2 -2
- package/dist/cli/chunks/{detect-O5TMML24.js → detect-R2QAYDPI.js} +2 -2
- package/dist/cli/chunks/{dist-node-MDZ6UQ3V.js → dist-node-3POCIJ4N.js} +2 -2
- package/dist/cli/chunks/{domain-handler-BGBTZETG.js → domain-handler-KW63CHUH.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-C2D2IEYV.js → domain-transfer-2QPOJCUD.js} +2 -2
- package/dist/cli/chunks/dream-DBE5D5BD.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-UJREBJF5.js → embed-and-insert-pattern-OIDJZQEP.js} +2 -2
- package/dist/cli/chunks/{eval-BDD24HQC.js → eval-UGEKTTAQ.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-KLVXIIYH.js → experience-capture-middleware-3BIM2TT7.js} +3 -3
- package/dist/cli/chunks/{fast-paths-5HIKAQZ7.js → fast-paths-HCJQXB7W.js} +2 -2
- package/dist/cli/chunks/{feature-flags-YE5SJPDS.js → feature-flags-GDGJKLN4.js} +2 -2
- package/dist/cli/chunks/{feature-flags-NM3S7OEW.js → feature-flags-W4JSFBMV.js} +2 -2
- package/dist/cli/chunks/{file-discovery-PWRQZNJQ.js → file-discovery-JMUZ4MUH.js} +2 -2
- package/dist/cli/chunks/{fleet-UIPKNQX3.js → fleet-YNNK2CKW.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-GWGKZRTO.js → gnn-wrapper-R2ZY6CDD.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-GQHJPNAY.js → heartbeat-handler-OZX2EJHQ.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-NFHAANNL.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-HMPCZFBY.js +2 -0
- package/dist/cli/chunks/hnsw-index-KRIWSXX4.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-NE5JIRG3.js → hnsw-legacy-bridge-3S6TYCG3.js} +2 -2
- package/dist/cli/chunks/{better-sqlite3-MROES2Y7.js → hnswlib-node-HMZC5TXM.js} +2 -2
- package/dist/cli/chunks/{hooks-3NBBUOB6.js → hooks-KM7WR35T.js} +10 -10
- package/dist/cli/chunks/hybrid-router-BAB32B2W.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-6NRFVDV7.js → hypergraph-engine-RX53A73M.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-F3OOGTXF.js → hypergraph-handler-3QQB3H3Z.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-3D6XHWQE.js +2 -0
- package/dist/cli/chunks/{init-handler-DOTXTVUI.js → init-handler-Y62RH4ZI.js} +22 -21
- package/dist/cli/chunks/init-wizard-LLU3WVGC.js +2 -0
- package/dist/cli/chunks/kernel-ZFHAYHHJ.js +2 -0
- package/dist/cli/chunks/kilocode-installer-26R253L2.js +4 -0
- package/dist/cli/chunks/{kiro-installer-WBJDXY7Q.js → kiro-installer-PFA5QPZZ.js} +4 -4
- package/dist/cli/chunks/knowledge-graph-ETZ65KOY.js +2 -0
- package/dist/cli/chunks/{learning-BC5N4V3D.js → learning-CQLM5ANX.js} +3 -3
- package/dist/cli/chunks/{llm-router-T427WD6R.js → llm-router-QZ5PG4PF.js} +4 -4
- package/dist/cli/chunks/llm-router-service-R6CTGF5I.js +2 -0
- package/dist/cli/chunks/{load-M6SL2O3M.js → load-UPA6LPHM.js} +2 -2
- package/dist/cli/chunks/load-test-UOWIJUCH.js +2 -0
- package/dist/cli/chunks/mcp-LSWTLAJ4.js +2 -0
- package/dist/cli/chunks/{memory-FJAO3CSF.js → memory-VGEYYGCG.js} +5 -5
- package/dist/cli/chunks/memory-backend-E3ZQKW7A.js +2 -0
- package/dist/cli/chunks/{memory-handlers-S3W6IQJL.js → memory-handlers-QBURG7NA.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-FYOVZ4OH.js → multi-model-executor-VZVFBIKC.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-APSBE4UR.js → opencode-installer-PBQAXNLV.js} +2 -2
- package/dist/cli/chunks/{orchestrator-LN53EQ45.js → orchestrator-YND7JB5O.js} +16 -16
- package/dist/cli/chunks/pattern-null-store-OUOJO2RH.js +2 -0
- package/dist/cli/chunks/{pipeline-BYWXY2NO.js → pipeline-GM5RRUES.js} +2 -2
- package/dist/cli/chunks/{platform-CZ774YPS.js → platform-L7OGGRSL.js} +2 -2
- package/dist/cli/chunks/{plugin-72NXRX5Z.js → plugin-N4YAE6H5.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-G4DE6YKJ.js → prime-radiant-advanced-wasm-7D67XV6Z.js} +2 -2
- package/dist/cli/chunks/protocol-executor-KHAPG5CP.js +2 -0
- package/dist/cli/chunks/{protocol-handler-UH6CV63V.js → protocol-handler-V2WTFU7N.js} +2 -2
- package/dist/cli/chunks/{prove-V7FAT5HF.js → prove-33DS5Z3N.js} +2 -2
- package/dist/cli/chunks/provider-manager-FGPPW7T4.js +2 -0
- package/dist/cli/chunks/qe-reasoning-bank-TS7XOJDA.js +2 -0
- package/dist/cli/chunks/{quality-N2K62FQM.js → quality-WCSEA5GH.js} +2 -2
- package/dist/cli/chunks/queen-coordinator-J35FNFQ3.js +2 -0
- package/dist/cli/chunks/{real-embeddings-TKHUE2RL.js → real-embeddings-OQ5F37DG.js} +2 -2
- package/dist/cli/chunks/roocode-installer-II7LIR2X.js +4 -0
- package/dist/cli/chunks/router-AFTKPDI5.js +2 -0
- package/dist/cli/chunks/routing-feedback-SABZUJTF.js +2 -0
- package/dist/cli/chunks/{routing-handler-UUWD4IKG.js → routing-handler-6OFHARIY.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-B4WPTGCI.js → ruvector-commands-GD5JTR4M.js} +2 -2
- package/dist/cli/chunks/{rvf-dual-writer-MNRJGNIX.js → rvf-dual-writer-HSK6BYZV.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-adapter-P2RDBFA4.js → rvf-migration-adapter-554SMF5S.js} +2 -2
- package/dist/cli/chunks/{rvf-migration-coordinator-DFESZQSS.js → rvf-migration-coordinator-OFDBCAYE.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-57MDDSFQ.js +2 -0
- package/dist/cli/chunks/safe-db-2HR6MVYM.js +2 -0
- package/dist/cli/chunks/schedule-KLVAN6XI.js +2 -0
- package/dist/cli/chunks/scheduler-WYZ6BC5Y.js +2 -0
- package/dist/cli/chunks/{security-MHLTNKFX.js → security-GN4J6DSS.js} +3 -3
- package/dist/cli/chunks/{shared-rvf-adapter-LR7E2EQI.js → shared-rvf-adapter-Q4PM3QCN.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-RFFON2F3.js → shared-rvf-dual-writer-R5WK5BXQ.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-2CGU5INO.js +2 -0
- package/dist/cli/chunks/{status-handler-ROPTYGQC.js → status-handler-AHS5WVMG.js} +2 -2
- package/dist/cli/chunks/{structural-health-YGUFXGJ6.js → structural-health-5KUKNLHZ.js} +2 -2
- package/dist/cli/chunks/{sync-6JTRTDL3.js → sync-PUMM3SR6.js} +2 -2
- package/dist/cli/chunks/{sync-NZZUMTKC.js → sync-TQLGD5HX.js} +2 -2
- package/dist/cli/chunks/{task-handler-KYMV3AC6.js → task-handler-D7VXV4AF.js} +2 -2
- package/dist/cli/chunks/{task-handlers-Z63YBQVU.js → task-handlers-QMN4SWUG.js} +3 -3
- package/dist/cli/chunks/{test-O6BQ7FGP.js → test-HEWZR6YQ.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-T3IOXEFI.js → test-scheduling-VTMLBEPA.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-CTI2ULJF.js → token-bootstrap-IYBG7PQ6.js} +2 -2
- package/dist/cli/chunks/{token-usage-TNQTNAVT.js → token-usage-C7H27BFZ.js} +2 -2
- package/dist/cli/chunks/{transformers-CJQDNQER.js → transformers-5ZJVC6NB.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-RBZWLEVQ.js → tree-sitter-wasm-parser-EARBJG2H.js} +2 -2
- package/dist/cli/chunks/{types-OMFCO364.js → types-3IHE42PZ.js} +2 -2
- package/dist/cli/chunks/unified-memory-PMYRQC5K.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-7TRL2K5Q.js +2 -0
- package/dist/cli/chunks/unified-persistence-S4BNJK4S.js +2 -0
- package/dist/cli/chunks/{upgrade-KRVOYWN3.js → upgrade-YP3VFSXO.js} +2 -2
- package/dist/cli/chunks/{validate-32FKHMKQ.js → validate-VSBNKPN6.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-45RPBPPH.js → validate-swarm-GOCJVWXE.js} +2 -2
- package/dist/cli/chunks/{vibium-LCTNDCKK.js → vibium-U6YKCLDF.js} +2 -2
- package/dist/cli/chunks/visual-security-RPMZ3J7L.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-FX2EFCLH.js → web-tree-sitter-TSNVGWSN.js} +2 -2
- package/dist/cli/chunks/windsurf-installer-2VKMEFSD.js +7 -0
- package/dist/cli/chunks/witness-chain-BTDZSQ6P.js +2 -0
- package/dist/cli/chunks/{witness-chain-YG2UWTYZ.js → witness-chain-BWZCW52H.js} +2 -2
- package/dist/cli/chunks/{workflow-AEJ37RNV.js → workflow-J6SCYLU3.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-42B62D3V.js +2 -0
- package/dist/cli/chunks/{wrappers-GSU6VNU6.js → wrappers-M5C7DONW.js} +2 -2
- package/dist/cli/commands/mcp.js +28 -28
- package/dist/cli/handlers/init-handler.d.ts +2 -0
- package/dist/cli/handlers/init-handler.js +22 -1
- package/dist/domains/test-generation/coordinator.d.ts +24 -1
- package/dist/domains/test-generation/coordinator.js +137 -2
- package/dist/domains/test-generation/plugin.js +23 -1
- package/dist/init/cline-installer.d.ts +6 -0
- package/dist/init/cline-installer.js +3 -1
- package/dist/init/codex-installer.d.ts +6 -0
- package/dist/init/codex-installer.js +3 -1
- package/dist/init/continuedev-installer.d.ts +6 -0
- package/dist/init/continuedev-installer.js +10 -3
- package/dist/init/copilot-installer.d.ts +6 -0
- package/dist/init/copilot-installer.js +3 -1
- package/dist/init/cursor-installer.d.ts +6 -0
- package/dist/init/cursor-installer.js +3 -1
- package/dist/init/kilocode-installer.d.ts +6 -0
- package/dist/init/kilocode-installer.js +3 -1
- package/dist/init/kiro-installer.d.ts +5 -0
- package/dist/init/kiro-installer.js +4 -4
- package/dist/init/orchestrator.js +1 -0
- package/dist/init/phases/07-hooks.js +5 -0
- package/dist/init/phases/08-mcp.js +34 -7
- package/dist/init/phases/09-assets.js +30 -27
- package/dist/init/phases/11-claude-md.d.ts +1 -0
- package/dist/init/phases/11-claude-md.js +8 -0
- package/dist/init/phases/13-governance.js +5 -0
- package/dist/init/phases/phase-interface.d.ts +8 -0
- package/dist/init/platform-config-generator.d.ts +3 -1
- package/dist/init/platform-config-generator.js +31 -17
- package/dist/init/roocode-installer.d.ts +6 -0
- package/dist/init/roocode-installer.js +3 -1
- package/dist/init/windsurf-installer.d.ts +6 -0
- package/dist/init/windsurf-installer.js +3 -1
- package/dist/integrations/darwin/index.d.ts +10 -0
- package/dist/integrations/darwin/index.js +2 -0
- package/dist/integrations/darwin/qe-fitness.d.ts +83 -0
- package/dist/integrations/darwin/qe-fitness.js +147 -0
- package/dist/integrations/darwin/types.d.ts +62 -0
- package/dist/integrations/darwin/types.js +14 -0
- package/dist/mcp/bundle.js +376 -371
- package/dist/mcp/entry.js +10 -1
- package/dist/mcp/protocol-server.js +17 -0
- package/dist/optimization/session-cache.d.ts +11 -0
- package/dist/optimization/session-cache.js +31 -0
- package/dist/routing/escalation/auto-escalation-tracker.d.ts +34 -15
- package/dist/routing/escalation/auto-escalation-tracker.js +24 -15
- package/dist/routing/free-tier/executor.d.ts +119 -0
- package/dist/routing/free-tier/executor.js +139 -0
- package/dist/routing/free-tier/feedback-sink.d.ts +49 -0
- package/dist/routing/free-tier/feedback-sink.js +52 -0
- package/dist/routing/free-tier/index.d.ts +14 -0
- package/dist/routing/free-tier/index.js +5 -0
- package/dist/routing/free-tier/ladder.d.ts +41 -0
- package/dist/routing/free-tier/ladder.js +78 -0
- package/dist/routing/free-tier/provider.d.ts +57 -0
- package/dist/routing/free-tier/provider.js +111 -0
- package/dist/routing/free-tier/types.d.ts +80 -0
- package/dist/routing/free-tier/types.js +16 -0
- package/package.json +6 -2
- package/dist/cli/chunks/adapter-PAMPC2X7.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-DGKLEC6I.js +0 -2
- package/dist/cli/chunks/base-6HJR4VJT.js +0 -2
- package/dist/cli/chunks/browser-workflow-OWNU5XK7.js +0 -2
- package/dist/cli/chunks/chunk-2B2RLPK3.js +0 -2
- package/dist/cli/chunks/chunk-NSI3WL6P.js +0 -6
- package/dist/cli/chunks/client-E6GK5NWT.js +0 -2
- package/dist/cli/chunks/cline-installer-A7G7OXIS.js +0 -4
- package/dist/cli/chunks/codex-installer-JB3ULDQP.js +0 -8
- package/dist/cli/chunks/continuedev-installer-GSYBLQV7.js +0 -14
- package/dist/cli/chunks/copilot-installer-7B56CNU2.js +0 -3
- package/dist/cli/chunks/core-handlers-HJUORTFU.js +0 -2
- package/dist/cli/chunks/cross-domain-router-35WVZFAZ.js +0 -2
- package/dist/cli/chunks/cursor-installer-WXQFM4KJ.js +0 -3
- package/dist/cli/chunks/dream-QTZDMP6D.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-N433NZCG.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-MR6W2OA4.js +0 -2
- package/dist/cli/chunks/hnsw-index-XC6EMJA2.js +0 -2
- package/dist/cli/chunks/hybrid-router-SH4IEAJA.js +0 -2
- package/dist/cli/chunks/impact-analyzer-RUTVXE7P.js +0 -2
- package/dist/cli/chunks/init-wizard-56NY5BSP.js +0 -2
- package/dist/cli/chunks/kernel-7JAN7WCO.js +0 -2
- package/dist/cli/chunks/kilocode-installer-3AXYSZTO.js +0 -4
- package/dist/cli/chunks/knowledge-graph-ST4LW3V4.js +0 -2
- package/dist/cli/chunks/llm-router-service-JNDF5MVJ.js +0 -2
- package/dist/cli/chunks/load-test-I3P3DUS5.js +0 -2
- package/dist/cli/chunks/mcp-F2V3KKG6.js +0 -2
- package/dist/cli/chunks/memory-backend-27BBT57O.js +0 -2
- package/dist/cli/chunks/pattern-null-store-SRBYJRNX.js +0 -2
- package/dist/cli/chunks/protocol-executor-WJLJHWO2.js +0 -2
- package/dist/cli/chunks/provider-manager-UKUHSHAL.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-IMUECSFZ.js +0 -2
- package/dist/cli/chunks/queen-coordinator-EC4SVNMB.js +0 -2
- package/dist/cli/chunks/roocode-installer-DFUA6FXW.js +0 -4
- package/dist/cli/chunks/router-TVTOUQLL.js +0 -2
- package/dist/cli/chunks/routing-feedback-Y4WDXNXW.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-4YSC6QKO.js +0 -2
- package/dist/cli/chunks/safe-db-RGAY54O5.js +0 -2
- package/dist/cli/chunks/schedule-KJ4GWLPJ.js +0 -2
- package/dist/cli/chunks/scheduler-AONSLVA3.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-7RZUEPM4.js +0 -2
- package/dist/cli/chunks/unified-memory-G3BYQ3WU.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-F7XUZMKW.js +0 -2
- package/dist/cli/chunks/unified-persistence-V35NXJSO.js +0 -2
- package/dist/cli/chunks/visual-security-K47U7KUM.js +0 -2
- package/dist/cli/chunks/windsurf-installer-I3TSJCNL.js +0 -7
- package/dist/cli/chunks/witness-chain-G6GJXZD3.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-SKF7GC5X.js +0 -2
|
@@ -42,8 +42,8 @@ export class AssetsPhase extends BasePhase {
|
|
|
42
42
|
else if (options.autoMode && isVersionUpgrade) {
|
|
43
43
|
context.services.log(` Version upgrade detected: updating skills and agents`);
|
|
44
44
|
}
|
|
45
|
-
// Install skills
|
|
46
|
-
if (config.skills.install) {
|
|
45
|
+
// Install skills (Claude Code surface — skipped with --no-claude, #532)
|
|
46
|
+
if (!options.noClaude && config.skills.install) {
|
|
47
47
|
const skillsInstaller = createSkillsInstaller({
|
|
48
48
|
projectRoot,
|
|
49
49
|
installV2Skills: config.skills.installV2,
|
|
@@ -56,25 +56,27 @@ export class AssetsPhase extends BasePhase {
|
|
|
56
56
|
context.services.warn(`Skills warnings: ${skillsResult.errors.join(', ')}`);
|
|
57
57
|
}
|
|
58
58
|
}
|
|
59
|
-
// Install agents
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
59
|
+
// Install agents (Claude Code surface — skipped with --no-claude, #532)
|
|
60
|
+
if (!options.noClaude) {
|
|
61
|
+
try {
|
|
62
|
+
const agentsInstaller = createAgentsInstaller({
|
|
63
|
+
projectRoot,
|
|
64
|
+
installQEAgents: true,
|
|
65
|
+
installSubagents: true,
|
|
66
|
+
overwrite: shouldOverwrite,
|
|
67
|
+
});
|
|
68
|
+
const agentsResult = await agentsInstaller.install();
|
|
69
|
+
agentsInstalled = agentsResult.installed.length;
|
|
70
|
+
if (agentsResult.errors.length > 0) {
|
|
71
|
+
context.services.warn(`Agents warnings: ${agentsResult.errors.join(', ')}`);
|
|
72
|
+
}
|
|
71
73
|
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
context.services.warn(`Agents install error: ${error instanceof Error ? error.message : error}`);
|
|
76
|
+
}
|
|
77
|
+
// Initialize overlay configs in agent registry for runtime use
|
|
78
|
+
initializeOverlays(projectRoot);
|
|
72
79
|
}
|
|
73
|
-
catch (error) {
|
|
74
|
-
context.services.warn(`Agents install error: ${error instanceof Error ? error.message : error}`);
|
|
75
|
-
}
|
|
76
|
-
// Initialize overlay configs in agent registry for runtime use
|
|
77
|
-
initializeOverlays(projectRoot);
|
|
78
80
|
// Install Vibium browser engine for the qe-browser fleet skill.
|
|
79
81
|
// Graceful — never fails init if Vibium cannot be installed.
|
|
80
82
|
// Skipped in --minimal mode per ADR-086 minimal-footprint guidance.
|
|
@@ -204,6 +206,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
204
206
|
installHooks: true,
|
|
205
207
|
installSteering: true,
|
|
206
208
|
overwrite: shouldOverwrite,
|
|
209
|
+
memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined,
|
|
207
210
|
});
|
|
208
211
|
const kiroResult = await kiroInstaller.install();
|
|
209
212
|
kiroAgents = kiroResult.agentsInstalled.length;
|
|
@@ -224,7 +227,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
224
227
|
const platformsConfigured = [];
|
|
225
228
|
if (options.withCopilot || (options.autoMode && existsSync(join(projectRoot, '.vscode')))) {
|
|
226
229
|
const { createCopilotInstaller } = await import('../copilot-installer.js');
|
|
227
|
-
const installer = createCopilotInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
230
|
+
const installer = createCopilotInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
228
231
|
const res = await installer.install();
|
|
229
232
|
if (res.mcpConfigured)
|
|
230
233
|
platformsConfigured.push('copilot');
|
|
@@ -237,7 +240,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
237
240
|
}
|
|
238
241
|
if (options.withCursor || (options.autoMode && existsSync(join(projectRoot, '.cursor')))) {
|
|
239
242
|
const { createCursorInstaller } = await import('../cursor-installer.js');
|
|
240
|
-
const installer = createCursorInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
243
|
+
const installer = createCursorInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
241
244
|
const res = await installer.install();
|
|
242
245
|
if (res.mcpConfigured)
|
|
243
246
|
platformsConfigured.push('cursor');
|
|
@@ -250,7 +253,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
250
253
|
}
|
|
251
254
|
if (options.withCline) {
|
|
252
255
|
const { createClineInstaller } = await import('../cline-installer.js');
|
|
253
|
-
const installer = createClineInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
256
|
+
const installer = createClineInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
254
257
|
const res = await installer.install();
|
|
255
258
|
if (res.mcpConfigured)
|
|
256
259
|
platformsConfigured.push('cline');
|
|
@@ -263,7 +266,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
263
266
|
}
|
|
264
267
|
if (options.withKiloCode || (options.autoMode && existsSync(join(projectRoot, '.kilocode')))) {
|
|
265
268
|
const { createKiloCodeInstaller } = await import('../kilocode-installer.js');
|
|
266
|
-
const installer = createKiloCodeInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
269
|
+
const installer = createKiloCodeInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
267
270
|
const res = await installer.install();
|
|
268
271
|
if (res.mcpConfigured)
|
|
269
272
|
platformsConfigured.push('kilocode');
|
|
@@ -276,7 +279,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
276
279
|
}
|
|
277
280
|
if (options.withRooCode || (options.autoMode && existsSync(join(projectRoot, '.roo')))) {
|
|
278
281
|
const { createRooCodeInstaller } = await import('../roocode-installer.js');
|
|
279
|
-
const installer = createRooCodeInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
282
|
+
const installer = createRooCodeInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
280
283
|
const res = await installer.install();
|
|
281
284
|
if (res.mcpConfigured)
|
|
282
285
|
platformsConfigured.push('roocode');
|
|
@@ -290,7 +293,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
290
293
|
// P2 platforms: Codex (TOML), Windsurf (JSON), Continue.dev (YAML)
|
|
291
294
|
if (options.withCodex || (options.autoMode && existsSync(join(projectRoot, '.codex')))) {
|
|
292
295
|
const { createCodexInstaller } = await import('../codex-installer.js');
|
|
293
|
-
const installer = createCodexInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
296
|
+
const installer = createCodexInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
294
297
|
const res = await installer.install();
|
|
295
298
|
if (res.mcpConfigured)
|
|
296
299
|
platformsConfigured.push('codex');
|
|
@@ -303,7 +306,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
303
306
|
}
|
|
304
307
|
if (options.withWindsurf || (options.autoMode && existsSync(join(projectRoot, '.windsurf')))) {
|
|
305
308
|
const { createWindsurfInstaller } = await import('../windsurf-installer.js');
|
|
306
|
-
const installer = createWindsurfInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
309
|
+
const installer = createWindsurfInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
307
310
|
const res = await installer.install();
|
|
308
311
|
if (res.mcpConfigured)
|
|
309
312
|
platformsConfigured.push('windsurf');
|
|
@@ -316,7 +319,7 @@ export class AssetsPhase extends BasePhase {
|
|
|
316
319
|
}
|
|
317
320
|
if (options.withContinueDev || (options.autoMode && existsSync(join(projectRoot, '.continue')))) {
|
|
318
321
|
const { createContinueDevInstaller } = await import('../continuedev-installer.js');
|
|
319
|
-
const installer = createContinueDevInstaller({ projectRoot, overwrite: shouldOverwrite });
|
|
322
|
+
const installer = createContinueDevInstaller({ projectRoot, overwrite: shouldOverwrite, memoryBackend: options.memoryBackend === 'memory' ? 'memory' : undefined });
|
|
320
323
|
const res = await installer.install();
|
|
321
324
|
if (res.mcpConfigured)
|
|
322
325
|
platformsConfigured.push('continuedev');
|
|
@@ -17,6 +17,7 @@ export declare class ClaudeMdPhase extends BasePhase<ClaudeMdResult> {
|
|
|
17
17
|
readonly order = 110;
|
|
18
18
|
readonly critical = false;
|
|
19
19
|
readonly requiresPhases: readonly ["configuration"];
|
|
20
|
+
shouldRun(context: InitContext): Promise<boolean>;
|
|
20
21
|
protected run(context: InitContext): Promise<ClaudeMdResult>;
|
|
21
22
|
/**
|
|
22
23
|
* Generate CLAUDE.md content
|
|
@@ -14,6 +14,14 @@ export class ClaudeMdPhase extends BasePhase {
|
|
|
14
14
|
order = 110;
|
|
15
15
|
critical = false;
|
|
16
16
|
requiresPhases = ['configuration'];
|
|
17
|
+
async shouldRun(context) {
|
|
18
|
+
// #532: --no-claude suppresses the Claude Code surface, including CLAUDE.md.
|
|
19
|
+
if (context.options.noClaude) {
|
|
20
|
+
context.services.log(' CLAUDE.md skipped (--no-claude)');
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
return true;
|
|
24
|
+
}
|
|
17
25
|
async run(context) {
|
|
18
26
|
const config = context.config;
|
|
19
27
|
const { projectRoot } = context;
|
|
@@ -33,6 +33,11 @@ export class GovernancePhase extends BasePhase {
|
|
|
33
33
|
* Run unless --no-governance flag is set
|
|
34
34
|
*/
|
|
35
35
|
async shouldRun(context) {
|
|
36
|
+
// #532: governance is part of the Claude Code surface — skip with --no-claude.
|
|
37
|
+
if (context.options.noClaude) {
|
|
38
|
+
context.services.log(' Governance skipped (--no-claude)');
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
36
41
|
// Check for --no-governance flag (via noGovernance option)
|
|
37
42
|
if (context.options.noGovernance) {
|
|
38
43
|
context.services.log(' Governance skipped (--no-governance flag)');
|
|
@@ -129,6 +129,14 @@ export interface InitOptions {
|
|
|
129
129
|
withAllPlatforms?: boolean;
|
|
130
130
|
/** Skip MCP server config (MCP is enabled by default) */
|
|
131
131
|
noMcp?: boolean;
|
|
132
|
+
/**
|
|
133
|
+
* Suppress the default Claude Code surface (#532). When true, init does NOT
|
|
134
|
+
* write `.claude/` skills+agents, `.mcp.json`, `CLAUDE.md`, governance, or
|
|
135
|
+
* hooks — making `--with-<platform>` flags the only install targets (e.g. an
|
|
136
|
+
* OpenCode-only install). Opt-in via `--no-claude`; default install is
|
|
137
|
+
* unchanged. Pairs naturally with `--no-database`.
|
|
138
|
+
*/
|
|
139
|
+
noClaude?: boolean;
|
|
132
140
|
/** @deprecated Use default behavior instead — MCP is now enabled by default */
|
|
133
141
|
withMcp?: boolean;
|
|
134
142
|
/**
|
|
@@ -35,7 +35,9 @@ export declare class PlatformConfigGenerator {
|
|
|
35
35
|
/**
|
|
36
36
|
* Generate the MCP config for a platform
|
|
37
37
|
*/
|
|
38
|
-
generateMcpConfig(platformId: PlatformId
|
|
38
|
+
generateMcpConfig(platformId: PlatformId, opts?: {
|
|
39
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
40
|
+
}): GeneratedConfig;
|
|
39
41
|
/**
|
|
40
42
|
* Generate behavioral rules / instruction file for a platform
|
|
41
43
|
*/
|
|
@@ -135,14 +135,22 @@ const SAFE_AUTO_APPROVE_TOOLS = [
|
|
|
135
135
|
// ============================================================================
|
|
136
136
|
// MCP Server Entry
|
|
137
137
|
// ============================================================================
|
|
138
|
-
|
|
138
|
+
/**
|
|
139
|
+
* Build the MCP server env. Issue #533: in database-free mode the server must
|
|
140
|
+
* run in-memory (AQE_MEMORY_BACKEND=memory) and must NOT be pointed at a
|
|
141
|
+
* persistent db path — otherwise launching via this client recreates
|
|
142
|
+
* .agentic-qe/memory.db at runtime and defeats the --no-database install.
|
|
143
|
+
*/
|
|
144
|
+
function getMcpServerEnv(dbFree) {
|
|
145
|
+
return dbFree
|
|
146
|
+
? { AQE_MEMORY_BACKEND: 'memory', AQE_V3_MODE: 'true' }
|
|
147
|
+
: { AQE_MEMORY_PATH: '.agentic-qe/memory.db', AQE_V3_MODE: 'true' };
|
|
148
|
+
}
|
|
149
|
+
function getMcpServerEntry(withAutoApprove, dbFree) {
|
|
139
150
|
const entry = {
|
|
140
151
|
command: 'npx',
|
|
141
152
|
args: ['-y', 'agentic-qe@latest', 'mcp'],
|
|
142
|
-
env:
|
|
143
|
-
AQE_MEMORY_PATH: '.agentic-qe/memory.db',
|
|
144
|
-
AQE_V3_MODE: 'true',
|
|
145
|
-
},
|
|
153
|
+
env: getMcpServerEnv(dbFree),
|
|
146
154
|
};
|
|
147
155
|
if (withAutoApprove) {
|
|
148
156
|
entry.disabled = false;
|
|
@@ -153,8 +161,8 @@ function getMcpServerEntry(withAutoApprove) {
|
|
|
153
161
|
// ============================================================================
|
|
154
162
|
// Config Generators
|
|
155
163
|
// ============================================================================
|
|
156
|
-
function generateJsonConfig(platform) {
|
|
157
|
-
const serverEntry = getMcpServerEntry(platform.supportsAutoApprove);
|
|
164
|
+
function generateJsonConfig(platform, dbFree) {
|
|
165
|
+
const serverEntry = getMcpServerEntry(platform.supportsAutoApprove, dbFree);
|
|
158
166
|
if (platform.id === 'copilot') {
|
|
159
167
|
// Copilot uses "servers" key with "type": "stdio"
|
|
160
168
|
const config = {
|
|
@@ -174,7 +182,10 @@ function generateJsonConfig(platform) {
|
|
|
174
182
|
};
|
|
175
183
|
return JSON.stringify(config, null, 2) + '\n';
|
|
176
184
|
}
|
|
177
|
-
function generateTomlConfig() {
|
|
185
|
+
function generateTomlConfig(dbFree) {
|
|
186
|
+
const envLines = dbFree
|
|
187
|
+
? `AQE_MEMORY_BACKEND = "memory"\nAQE_V3_MODE = "true"`
|
|
188
|
+
: `AQE_MEMORY_PATH = ".agentic-qe/memory.db"\nAQE_V3_MODE = "true"`;
|
|
178
189
|
return `# Agentic QE MCP Server
|
|
179
190
|
[mcp_servers.agentic-qe]
|
|
180
191
|
type = "stdio"
|
|
@@ -182,11 +193,13 @@ command = "npx"
|
|
|
182
193
|
args = ["-y", "agentic-qe@latest", "mcp"]
|
|
183
194
|
|
|
184
195
|
[mcp_servers.agentic-qe.env]
|
|
185
|
-
|
|
186
|
-
AQE_V3_MODE = "true"
|
|
196
|
+
${envLines}
|
|
187
197
|
`;
|
|
188
198
|
}
|
|
189
|
-
function generateYamlConfig() {
|
|
199
|
+
function generateYamlConfig(dbFree) {
|
|
200
|
+
const envLines = dbFree
|
|
201
|
+
? ` AQE_MEMORY_BACKEND: memory\n AQE_V3_MODE: "true"`
|
|
202
|
+
: ` AQE_MEMORY_PATH: .agentic-qe/memory.db\n AQE_V3_MODE: "true"`;
|
|
190
203
|
return `# Agentic QE MCP Server
|
|
191
204
|
mcpServers:
|
|
192
205
|
- name: agentic-qe
|
|
@@ -196,8 +209,7 @@ mcpServers:
|
|
|
196
209
|
- agentic-qe@latest
|
|
197
210
|
- mcp
|
|
198
211
|
env:
|
|
199
|
-
|
|
200
|
-
AQE_V3_MODE: "true"
|
|
212
|
+
${envLines}
|
|
201
213
|
`;
|
|
202
214
|
}
|
|
203
215
|
// ============================================================================
|
|
@@ -281,19 +293,21 @@ export class PlatformConfigGenerator {
|
|
|
281
293
|
/**
|
|
282
294
|
* Generate the MCP config for a platform
|
|
283
295
|
*/
|
|
284
|
-
generateMcpConfig(platformId) {
|
|
296
|
+
generateMcpConfig(platformId, opts) {
|
|
285
297
|
const platform = this.getPlatform(platformId);
|
|
298
|
+
// Issue #533: database-free installs propagate AQE_MEMORY_BACKEND=memory.
|
|
299
|
+
const dbFree = opts?.memoryBackend === 'memory';
|
|
286
300
|
let content;
|
|
287
301
|
switch (platform.configFormat) {
|
|
288
302
|
case 'toml':
|
|
289
|
-
content = generateTomlConfig();
|
|
303
|
+
content = generateTomlConfig(dbFree);
|
|
290
304
|
break;
|
|
291
305
|
case 'yaml':
|
|
292
|
-
content = generateYamlConfig();
|
|
306
|
+
content = generateYamlConfig(dbFree);
|
|
293
307
|
break;
|
|
294
308
|
case 'json':
|
|
295
309
|
default:
|
|
296
|
-
content = generateJsonConfig(platform);
|
|
310
|
+
content = generateJsonConfig(platform, dbFree);
|
|
297
311
|
break;
|
|
298
312
|
}
|
|
299
313
|
return {
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
export interface RooCodeInstallerOptions {
|
|
9
9
|
projectRoot: string;
|
|
10
10
|
overwrite?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Memory backend for this install. 'memory' => database-free: the MCP config
|
|
13
|
+
* is written to run in-memory (AQE_MEMORY_BACKEND=memory, no AQE_MEMORY_PATH). (#533)
|
|
14
|
+
*/
|
|
15
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
11
16
|
}
|
|
12
17
|
export interface RooCodeInstallResult {
|
|
13
18
|
success: boolean;
|
|
@@ -20,6 +25,7 @@ export interface RooCodeInstallResult {
|
|
|
20
25
|
export declare class RooCodeInstaller {
|
|
21
26
|
private projectRoot;
|
|
22
27
|
private overwrite;
|
|
28
|
+
private options;
|
|
23
29
|
private generator;
|
|
24
30
|
constructor(options: RooCodeInstallerOptions);
|
|
25
31
|
install(): Promise<RooCodeInstallResult>;
|
|
@@ -15,10 +15,12 @@ import { createPlatformConfigGenerator, } from './platform-config-generator.js';
|
|
|
15
15
|
export class RooCodeInstaller {
|
|
16
16
|
projectRoot;
|
|
17
17
|
overwrite;
|
|
18
|
+
options;
|
|
18
19
|
generator;
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.projectRoot = options.projectRoot;
|
|
21
22
|
this.overwrite = options.overwrite ?? false;
|
|
23
|
+
this.options = options;
|
|
22
24
|
this.generator = createPlatformConfigGenerator();
|
|
23
25
|
}
|
|
24
26
|
async install() {
|
|
@@ -32,7 +34,7 @@ export class RooCodeInstaller {
|
|
|
32
34
|
};
|
|
33
35
|
try {
|
|
34
36
|
// Generate MCP config
|
|
35
|
-
const mcpConfig = this.generator.generateMcpConfig('roocode');
|
|
37
|
+
const mcpConfig = this.generator.generateMcpConfig('roocode', { memoryBackend: this.options.memoryBackend });
|
|
36
38
|
const configPath = join(this.projectRoot, mcpConfig.path);
|
|
37
39
|
result.configPath = configPath;
|
|
38
40
|
if (!existsSync(configPath) || this.overwrite) {
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
export interface WindsurfInstallerOptions {
|
|
9
9
|
projectRoot: string;
|
|
10
10
|
overwrite?: boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Memory backend for this install. 'memory' => database-free: the MCP config
|
|
13
|
+
* is written to run in-memory (AQE_MEMORY_BACKEND=memory, no AQE_MEMORY_PATH). (#533)
|
|
14
|
+
*/
|
|
15
|
+
memoryBackend?: 'memory' | 'sqlite' | 'agentdb' | 'hybrid';
|
|
11
16
|
}
|
|
12
17
|
export interface WindsurfInstallResult {
|
|
13
18
|
success: boolean;
|
|
@@ -20,6 +25,7 @@ export interface WindsurfInstallResult {
|
|
|
20
25
|
export declare class WindsurfInstaller {
|
|
21
26
|
private projectRoot;
|
|
22
27
|
private overwrite;
|
|
28
|
+
private options;
|
|
23
29
|
private generator;
|
|
24
30
|
constructor(options: WindsurfInstallerOptions);
|
|
25
31
|
install(): Promise<WindsurfInstallResult>;
|
|
@@ -15,10 +15,12 @@ import { createPlatformConfigGenerator, } from './platform-config-generator.js';
|
|
|
15
15
|
export class WindsurfInstaller {
|
|
16
16
|
projectRoot;
|
|
17
17
|
overwrite;
|
|
18
|
+
options;
|
|
18
19
|
generator;
|
|
19
20
|
constructor(options) {
|
|
20
21
|
this.projectRoot = options.projectRoot;
|
|
21
22
|
this.overwrite = options.overwrite ?? false;
|
|
23
|
+
this.options = options;
|
|
22
24
|
this.generator = createPlatformConfigGenerator();
|
|
23
25
|
}
|
|
24
26
|
async install() {
|
|
@@ -32,7 +34,7 @@ export class WindsurfInstaller {
|
|
|
32
34
|
};
|
|
33
35
|
try {
|
|
34
36
|
// Generate MCP config (project-level .windsurf/mcp_config.json)
|
|
35
|
-
const mcpConfig = this.generator.generateMcpConfig('windsurf');
|
|
37
|
+
const mcpConfig = this.generator.generateMcpConfig('windsurf', { memoryBackend: this.options.memoryBackend });
|
|
36
38
|
const configPath = join(this.projectRoot, mcpConfig.path);
|
|
37
39
|
result.configPath = configPath;
|
|
38
40
|
if (!existsSync(configPath) || this.overwrite) {
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Darwin Mode integration (cross-pollination plan 05, D1).
|
|
3
|
+
*
|
|
4
|
+
* Folds AQE's objective QE metrics into `@metaharness/darwin`'s ScoreCard
|
|
5
|
+
* contract so a Darwin evolution loop can promote real QE improvements.
|
|
6
|
+
* See docs/metaharness/06-darwin-qe-self-learning-action-lane.md.
|
|
7
|
+
*/
|
|
8
|
+
export type { DarwinScoreCard, QeFitness, MutationSurface } from './types.js';
|
|
9
|
+
export { qeFitnessToScoreCard, applyQePromotionGate, arenaStrategiesToScoreCards, computeQeFitness, QE_FITNESS_WEIGHTS, SAFETY_GATE, type QeScoreOptions, type EvaluatedStrategyLike, } from './qe-fitness.js';
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QE → Darwin fitness adapter (cross-pollination plan 05, action D1).
|
|
3
|
+
*
|
|
4
|
+
* Darwin Mode evolves a harness against a frozen, pure-function scorer
|
|
5
|
+
* (`@metaharness/darwin` ADR-072). Its default substrates (`mock`/`agent`) score
|
|
6
|
+
* by whether synthetic surface params solve toy tasks — there is NO QE signal.
|
|
7
|
+
* This adapter folds AQE's OBJECTIVE QE metrics (mutation kill-rate, coverage,
|
|
8
|
+
* suite cost — the ADR-104 arena's validated fitness) into Darwin's `ScoreCard`
|
|
9
|
+
* contract, so Darwin's promotion gate promotes genuine QE improvements.
|
|
10
|
+
*
|
|
11
|
+
* QE-native finalScore: like Darwin's `benchSuite` path (which overrides the
|
|
12
|
+
* single-run promote flag), we set `finalScore` to the QE fitness rather than
|
|
13
|
+
* Darwin's generic weighted fold — QE has its own validated objective. The
|
|
14
|
+
* positive terms are still populated (for transparency + Darwin's gate clauses:
|
|
15
|
+
* `testPassRate` drives noRegression, `safetyScore` drives the safety clauses).
|
|
16
|
+
*
|
|
17
|
+
* Pure + deterministic + dependency-free: no model calls, no I/O. Unit-testable.
|
|
18
|
+
*/
|
|
19
|
+
import type { DarwinScoreCard, QeFitness } from './types.js';
|
|
20
|
+
/** ADR-104 arena weights — kept in sync with src/arena/arena.ts. */
|
|
21
|
+
export declare const QE_FITNESS_WEIGHTS: {
|
|
22
|
+
readonly kill: 0.6;
|
|
23
|
+
readonly coverage: 0.3;
|
|
24
|
+
readonly runtimePenalty: 0.1;
|
|
25
|
+
};
|
|
26
|
+
/** Recompute the ADR-104 blended fitness from its parts (used when not supplied). */
|
|
27
|
+
export declare function computeQeFitness(killRate: number, coveragePct: number | null, suiteCostRatio: number): number;
|
|
28
|
+
export interface QeScoreOptions {
|
|
29
|
+
/**
|
|
30
|
+
* Whether the variant cleared Darwin's safety gate (inspectVariant /
|
|
31
|
+
* validateGeneratedCode). Defaults to true — set false to model a blocked
|
|
32
|
+
* variant (collapses the score, exactly like a Darwin safety violation).
|
|
33
|
+
*/
|
|
34
|
+
safe?: boolean;
|
|
35
|
+
/** Darwin's frozen positive-term weights (for the transparency baseScore). */
|
|
36
|
+
weights?: {
|
|
37
|
+
taskSuccess: number;
|
|
38
|
+
testPassRate: number;
|
|
39
|
+
traceQuality: number;
|
|
40
|
+
costEfficiency: number;
|
|
41
|
+
latencyEfficiency: number;
|
|
42
|
+
safetyScore: number;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Map one QE outcome to a Darwin `ScoreCard`.
|
|
47
|
+
*
|
|
48
|
+
* Term mapping (QE semantics):
|
|
49
|
+
* - taskSuccess = killRate when the baseline suite passes, else 0
|
|
50
|
+
* (the QE "task" is catching injected faults; quality scales with kill-rate)
|
|
51
|
+
* - testPassRate = 1 if baseline passed, else 0 → Darwin's noRegression gate
|
|
52
|
+
* - traceQuality = coverage fraction (how thoroughly code ran)
|
|
53
|
+
* - costEfficiency = 1 − suiteCostRatio
|
|
54
|
+
* - latencyEfficiency = 1 (arena folds runtime into the cost proxy; no separate signal)
|
|
55
|
+
* - safetyScore = 1 if safe, else 0 → Darwin's safety clauses
|
|
56
|
+
* - hallucinatedFile penalty = falseFindingRate (a QE false positive is a hallucination)
|
|
57
|
+
*
|
|
58
|
+
* finalScore (QE-native): the ADR-104 fitness when safe AND baseline passed;
|
|
59
|
+
* −1 when unsafe (hard fail, mirrors Darwin "a single violation drives it
|
|
60
|
+
* negative"); 0 when safe but the baseline regressed.
|
|
61
|
+
*/
|
|
62
|
+
export declare function qeFitnessToScoreCard(variantId: string, qe: QeFitness, opts?: QeScoreOptions): DarwinScoreCard;
|
|
63
|
+
/** Darwin's ADR-072 safety-gate floor (mirror of scorer.ts SAFETY_GATE). */
|
|
64
|
+
export declare const SAFETY_GATE = 0.95;
|
|
65
|
+
/**
|
|
66
|
+
* Apply Darwin's 4-clause promotion gate (ADR-072 / scorer.ts:149-154) to a
|
|
67
|
+
* QE-native score card, returning a copy with `promoted` + `reason` set. Kept a
|
|
68
|
+
* byte-faithful mirror so a host-scored variant promotes under the SAME rules
|
|
69
|
+
* Darwin uses internally: beatsParent ∧ safetyOk ∧ noRegression ∧ noBlocked.
|
|
70
|
+
*/
|
|
71
|
+
export declare function applyQePromotionGate(card: DarwinScoreCard, parentScore: DarwinScoreCard | null, promotionDelta: number): DarwinScoreCard;
|
|
72
|
+
/** Minimal shape of an ADR-104 `EvaluatedStrategy` (decoupled from src/arena). */
|
|
73
|
+
export interface EvaluatedStrategyLike {
|
|
74
|
+
id: string;
|
|
75
|
+
baselinePassed: boolean;
|
|
76
|
+
killRate: number;
|
|
77
|
+
coveragePct: number | null;
|
|
78
|
+
suiteCostRatio: number;
|
|
79
|
+
fitness: number;
|
|
80
|
+
}
|
|
81
|
+
/** Convert a whole ADR-104 arena result into per-strategy Darwin score cards. */
|
|
82
|
+
export declare function arenaStrategiesToScoreCards(strategies: readonly EvaluatedStrategyLike[], opts?: QeScoreOptions): Record<string, DarwinScoreCard>;
|
|
83
|
+
//# sourceMappingURL=qe-fitness.d.ts.map
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QE → Darwin fitness adapter (cross-pollination plan 05, action D1).
|
|
3
|
+
*
|
|
4
|
+
* Darwin Mode evolves a harness against a frozen, pure-function scorer
|
|
5
|
+
* (`@metaharness/darwin` ADR-072). Its default substrates (`mock`/`agent`) score
|
|
6
|
+
* by whether synthetic surface params solve toy tasks — there is NO QE signal.
|
|
7
|
+
* This adapter folds AQE's OBJECTIVE QE metrics (mutation kill-rate, coverage,
|
|
8
|
+
* suite cost — the ADR-104 arena's validated fitness) into Darwin's `ScoreCard`
|
|
9
|
+
* contract, so Darwin's promotion gate promotes genuine QE improvements.
|
|
10
|
+
*
|
|
11
|
+
* QE-native finalScore: like Darwin's `benchSuite` path (which overrides the
|
|
12
|
+
* single-run promote flag), we set `finalScore` to the QE fitness rather than
|
|
13
|
+
* Darwin's generic weighted fold — QE has its own validated objective. The
|
|
14
|
+
* positive terms are still populated (for transparency + Darwin's gate clauses:
|
|
15
|
+
* `testPassRate` drives noRegression, `safetyScore` drives the safety clauses).
|
|
16
|
+
*
|
|
17
|
+
* Pure + deterministic + dependency-free: no model calls, no I/O. Unit-testable.
|
|
18
|
+
*/
|
|
19
|
+
/** ADR-104 arena weights — kept in sync with src/arena/arena.ts. */
|
|
20
|
+
export const QE_FITNESS_WEIGHTS = { kill: 0.6, coverage: 0.3, runtimePenalty: 0.1 };
|
|
21
|
+
const clamp01 = (n) => (n < 0 ? 0 : n > 1 ? 1 : n);
|
|
22
|
+
const round4 = (n) => Math.round(n * 10000) / 10000;
|
|
23
|
+
/** Recompute the ADR-104 blended fitness from its parts (used when not supplied). */
|
|
24
|
+
export function computeQeFitness(killRate, coveragePct, suiteCostRatio) {
|
|
25
|
+
const coverageTerm = coveragePct === null ? 0 : coveragePct / 100;
|
|
26
|
+
return round4(QE_FITNESS_WEIGHTS.kill * killRate +
|
|
27
|
+
QE_FITNESS_WEIGHTS.coverage * coverageTerm -
|
|
28
|
+
QE_FITNESS_WEIGHTS.runtimePenalty * suiteCostRatio);
|
|
29
|
+
}
|
|
30
|
+
const DARWIN_WEIGHTS = {
|
|
31
|
+
taskSuccess: 0.35,
|
|
32
|
+
testPassRate: 0.2,
|
|
33
|
+
traceQuality: 0.15,
|
|
34
|
+
costEfficiency: 0.1,
|
|
35
|
+
latencyEfficiency: 0.1,
|
|
36
|
+
safetyScore: 0.1,
|
|
37
|
+
};
|
|
38
|
+
/**
|
|
39
|
+
* Map one QE outcome to a Darwin `ScoreCard`.
|
|
40
|
+
*
|
|
41
|
+
* Term mapping (QE semantics):
|
|
42
|
+
* - taskSuccess = killRate when the baseline suite passes, else 0
|
|
43
|
+
* (the QE "task" is catching injected faults; quality scales with kill-rate)
|
|
44
|
+
* - testPassRate = 1 if baseline passed, else 0 → Darwin's noRegression gate
|
|
45
|
+
* - traceQuality = coverage fraction (how thoroughly code ran)
|
|
46
|
+
* - costEfficiency = 1 − suiteCostRatio
|
|
47
|
+
* - latencyEfficiency = 1 (arena folds runtime into the cost proxy; no separate signal)
|
|
48
|
+
* - safetyScore = 1 if safe, else 0 → Darwin's safety clauses
|
|
49
|
+
* - hallucinatedFile penalty = falseFindingRate (a QE false positive is a hallucination)
|
|
50
|
+
*
|
|
51
|
+
* finalScore (QE-native): the ADR-104 fitness when safe AND baseline passed;
|
|
52
|
+
* −1 when unsafe (hard fail, mirrors Darwin "a single violation drives it
|
|
53
|
+
* negative"); 0 when safe but the baseline regressed.
|
|
54
|
+
*/
|
|
55
|
+
export function qeFitnessToScoreCard(variantId, qe, opts = {}) {
|
|
56
|
+
const safe = opts.safe ?? true;
|
|
57
|
+
const w = opts.weights ?? DARWIN_WEIGHTS;
|
|
58
|
+
const passed = qe.baselinePassed;
|
|
59
|
+
const fitness = qe.fitness ?? computeQeFitness(qe.killRate, qe.coveragePct, qe.suiteCostRatio);
|
|
60
|
+
const coverageFraction = qe.coveragePct === null ? 0 : clamp01(qe.coveragePct / 100);
|
|
61
|
+
const falseFindingRate = clamp01(qe.falseFindingRate ?? 0);
|
|
62
|
+
const taskSuccess = passed ? clamp01(qe.killRate) : 0;
|
|
63
|
+
const testPassRate = passed ? 1 : 0;
|
|
64
|
+
const traceQuality = coverageFraction;
|
|
65
|
+
const costEfficiency = clamp01(1 - qe.suiteCostRatio);
|
|
66
|
+
const latencyEfficiency = 1;
|
|
67
|
+
const safetyScore = safe ? 1 : 0;
|
|
68
|
+
const baseScore = round4(w.taskSuccess * taskSuccess +
|
|
69
|
+
w.testPassRate * testPassRate +
|
|
70
|
+
w.traceQuality * traceQuality +
|
|
71
|
+
w.costEfficiency * costEfficiency +
|
|
72
|
+
w.latencyEfficiency * latencyEfficiency +
|
|
73
|
+
w.safetyScore * safetyScore);
|
|
74
|
+
// QE-native verdict (overrides the generic fold — QE owns its objective).
|
|
75
|
+
const finalScore = !safe ? -1 : passed ? round4(fitness - falseFindingRate * 0.15) : 0;
|
|
76
|
+
const reason = !safe
|
|
77
|
+
? 'unsafe: variant failed the safety gate (finalScore forced negative)'
|
|
78
|
+
: !passed
|
|
79
|
+
? 'regression: baseline suite did not pass (finalScore 0)'
|
|
80
|
+
: `QE fitness ${fitness} (kill=${qe.killRate}, cov=${qe.coveragePct ?? 'n/a'}, cost=${qe.suiteCostRatio})`;
|
|
81
|
+
return {
|
|
82
|
+
variantId,
|
|
83
|
+
taskSuccess,
|
|
84
|
+
testPassRate,
|
|
85
|
+
traceQuality,
|
|
86
|
+
costEfficiency,
|
|
87
|
+
latencyEfficiency,
|
|
88
|
+
safetyScore,
|
|
89
|
+
secretExposure: 0,
|
|
90
|
+
destructiveAction: 0,
|
|
91
|
+
hallucinatedFile: falseFindingRate,
|
|
92
|
+
toolLoop: 0,
|
|
93
|
+
costOverrun: 0,
|
|
94
|
+
baseScore,
|
|
95
|
+
finalScore,
|
|
96
|
+
promoted: false, // set by Darwin's gate against the parent, not here
|
|
97
|
+
reason,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** Darwin's ADR-072 safety-gate floor (mirror of scorer.ts SAFETY_GATE). */
|
|
101
|
+
export const SAFETY_GATE = 0.95;
|
|
102
|
+
/**
|
|
103
|
+
* Apply Darwin's 4-clause promotion gate (ADR-072 / scorer.ts:149-154) to a
|
|
104
|
+
* QE-native score card, returning a copy with `promoted` + `reason` set. Kept a
|
|
105
|
+
* byte-faithful mirror so a host-scored variant promotes under the SAME rules
|
|
106
|
+
* Darwin uses internally: beatsParent ∧ safetyOk ∧ noRegression ∧ noBlocked.
|
|
107
|
+
*/
|
|
108
|
+
export function applyQePromotionGate(card, parentScore, promotionDelta) {
|
|
109
|
+
const parentFinal = parentScore?.finalScore ?? 0;
|
|
110
|
+
const parentTestPassRate = parentScore?.testPassRate ?? 0;
|
|
111
|
+
const beatsParent = card.finalScore > parentFinal + promotionDelta;
|
|
112
|
+
const safetyOk = card.safetyScore >= SAFETY_GATE;
|
|
113
|
+
const noRegression = card.testPassRate >= parentTestPassRate;
|
|
114
|
+
const noBlockedActions = card.safetyScore === 1.0;
|
|
115
|
+
const promoted = beatsParent && safetyOk && noRegression && noBlockedActions;
|
|
116
|
+
const fails = [];
|
|
117
|
+
if (!beatsParent)
|
|
118
|
+
fails.push(`finalScore ${card.finalScore} ≤ parent ${parentFinal} + delta ${promotionDelta}`);
|
|
119
|
+
if (!safetyOk)
|
|
120
|
+
fails.push(`safetyScore ${card.safetyScore} < ${SAFETY_GATE}`);
|
|
121
|
+
if (!noRegression)
|
|
122
|
+
fails.push(`testPassRate regression ${card.testPassRate} < ${parentTestPassRate}`);
|
|
123
|
+
if (!noBlockedActions)
|
|
124
|
+
fails.push('blocked actions present');
|
|
125
|
+
return {
|
|
126
|
+
...card,
|
|
127
|
+
promoted,
|
|
128
|
+
reason: promoted
|
|
129
|
+
? `promoted: QE finalScore ${card.finalScore} > parent ${parentFinal} + delta ${promotionDelta}`
|
|
130
|
+
: `not promoted: ${fails.join('; ')}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
/** Convert a whole ADR-104 arena result into per-strategy Darwin score cards. */
|
|
134
|
+
export function arenaStrategiesToScoreCards(strategies, opts = {}) {
|
|
135
|
+
const out = {};
|
|
136
|
+
for (const s of strategies) {
|
|
137
|
+
out[s.id] = qeFitnessToScoreCard(s.id, {
|
|
138
|
+
baselinePassed: s.baselinePassed,
|
|
139
|
+
killRate: s.killRate,
|
|
140
|
+
coveragePct: s.coveragePct,
|
|
141
|
+
suiteCostRatio: s.suiteCostRatio,
|
|
142
|
+
fitness: s.fitness,
|
|
143
|
+
}, opts);
|
|
144
|
+
}
|
|
145
|
+
return out;
|
|
146
|
+
}
|
|
147
|
+
//# sourceMappingURL=qe-fitness.js.map
|