agentic-qe 3.15.5 → 3.15.6
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/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/.claude/skills/qe-court/evals/qe-court.yaml +3 -2
- package/.claude/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/.claude/skills/skills-manifest.json +1 -1
- package/CHANGELOG.md +121 -0
- package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/README.md +9 -2
- package/assets/skills/qe-court/evals/qe-court.yaml +3 -2
- package/assets/skills/qe-quality-assessment/schemas/output.json +12 -2
- package/assets/skills/skills-manifest.json +1 -1
- package/dist/cli/bundle.js +5 -5
- package/dist/cli/chunks/adapter-PP3XIXDV.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-SY7UCLBL.js} +2 -2
- package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-KAMYBU3S.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-2CAW3KUM.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +2 -0
- package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-4OFLJ3R2.js} +2 -2
- package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-QCCVIOAH.js} +4 -4
- package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-RBDQJQJB.js} +3 -3
- package/dist/cli/chunks/base-QSYWWPCE.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-5JRACCDQ.js} +2 -2
- package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-W4QIIRT4.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-IBNGI572.js} +2 -2
- package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-GMSCVAOI.js} +2 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +2 -0
- package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-22OZIJAD.js} +2 -2
- package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-24ZSGYC6.js} +1 -1
- package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-2CIDFR2H.js} +3 -3
- package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2IWPJUVV.js} +5 -5
- package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-2ZTWPMTK.js} +2 -2
- package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34MDMFET.js} +2 -2
- package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-3DJNKNBR.js} +66 -65
- package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-3NJ7O3OH.js} +2 -2
- package/dist/cli/chunks/chunk-45MVRQG4.js +2 -0
- package/dist/cli/chunks/chunk-46HBVDMU.js +2 -0
- package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-47Q7JL3V.js} +2 -2
- package/dist/cli/chunks/chunk-4CLDYT36.js +2 -0
- package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-4KOVHQXK.js} +2 -2
- package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-4POOJYXA.js} +1 -1
- package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-5DH5QI7G.js} +26 -26
- package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-5GIJU2ZY.js} +2 -2
- package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-5HAPS6VD.js} +2 -2
- package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-5LST62QR.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-5MT7DMD7.js} +2 -2
- package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-5NC7QEJ6.js} +4 -4
- package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-5UPIL62W.js} +3 -3
- package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-5VUIXDY2.js} +2 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +3 -0
- package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-624QRKQX.js} +1 -1
- package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-66NW3ZB4.js} +2 -2
- package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-6HWARQWV.js} +2 -2
- package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6MXAJBEA.js} +1 -1
- package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6R3FBFCJ.js} +2 -2
- package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-6RDVY26I.js} +2 -2
- package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-6T6AHVLF.js} +1 -1
- package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-6WOZUSSN.js} +2 -2
- package/dist/cli/chunks/chunk-72MQCZSM.js +2 -0
- package/dist/cli/chunks/chunk-7QVPMH25.js +3 -0
- package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-7SAMMQVS.js} +1 -1
- package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-7TJZDRDU.js} +1 -1
- package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-7TVIX4WL.js} +2 -2
- package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-7VTKR44N.js} +2 -2
- package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-7XTANLTN.js} +1 -1
- package/dist/cli/chunks/chunk-7XUB7U6Z.js +4 -0
- package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-A74J23QB.js} +2 -2
- package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-A7ANPS4E.js} +2 -2
- package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-AJT3XDRD.js} +2 -2
- package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-ALCIUWFC.js} +1 -1
- package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-AUN4FG7V.js} +1 -1
- package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-AUOSHM63.js} +2 -2
- package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-AX26QJ6T.js} +2 -2
- package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-B7RHBKHL.js} +2 -2
- package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-BAYGQRNP.js} +2 -2
- package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-BIXRTOH3.js} +18 -18
- package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-BO7UFNYV.js} +2 -2
- package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-BUTGIVKW.js} +1 -1
- package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-BXATKI5S.js} +2 -2
- package/dist/cli/chunks/{chunk-BO4PKNYP.js → chunk-CCL436IU.js} +32 -27
- package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-CEXNW5TR.js} +1 -1
- package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-CLAMMGY3.js} +2 -2
- package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-CR66HNAE.js} +1 -1
- package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-CZBIREL5.js} +2 -2
- package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-D5N2O5EH.js} +2 -2
- package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-DA7DGDTI.js} +2 -2
- package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-DLSFT6PO.js} +2 -2
- package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-DQNUPEY5.js} +2 -2
- package/dist/cli/chunks/{chunk-GTSOFCMQ.js → chunk-EECF4CMA.js} +1 -1
- package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-EF5UHDCG.js} +1 -1
- package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-EJ4KZFZN.js} +1 -1
- package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-ELI4GDQO.js} +2 -2
- package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-F3KS3TAB.js} +2 -2
- package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-F7A2UBZO.js} +2 -2
- package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-FOJRPEIP.js} +2 -2
- package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-FQ5N666N.js} +1 -1
- package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-FU7LNUD7.js} +2 -2
- package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-GFB6BZWU.js} +2 -2
- package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-GI5HWS4H.js} +1 -1
- package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-GNYOHZVV.js} +1 -1
- package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-GVRFSXY6.js} +2 -2
- package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-GWM4M5NF.js} +1 -1
- package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-HAN4MS5T.js} +2 -2
- package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-HEGGV2PT.js} +2 -2
- package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-HOEWMEF2.js} +2 -2
- package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-HZFK2Z2Z.js} +1 -1
- package/dist/cli/chunks/chunk-I7WAW7TM.js +2 -0
- package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-IEPWO4XP.js} +2 -2
- package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-ITIJ23K2.js} +2 -2
- package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-IVJIHZSM.js} +1 -1
- package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-JAPBSSFY.js} +1 -1
- package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-JCE76MPP.js} +2 -2
- package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-JPJEAK4G.js} +1 -1
- package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-JYKQVYX2.js} +2 -2
- package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-K55EAWZ5.js} +2 -2
- package/dist/cli/chunks/chunk-KCB6P463.js +3 -0
- package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-KIDOBLUO.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-KYVIOC3C.js} +2 -2
- package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-L2TDHJR3.js} +2 -2
- package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-L4D3TPFP.js} +1 -1
- package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-LAY7NCQK.js} +3 -3
- package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-LCCTJ2PC.js} +2 -2
- package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-LJCEDTUM.js} +3 -3
- package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-LMAEMVPA.js} +1 -1
- package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-LZWJ5BMP.js} +2 -2
- package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-MP3FSUNB.js} +2 -2
- package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-MQCTLTGE.js} +2 -2
- package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-MQTA6KIO.js} +1 -1
- package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-NBUXM5X6.js} +10 -6
- package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-NHRF3V4B.js} +2 -2
- package/dist/cli/chunks/chunk-NMY4KTWA.js +16 -0
- package/dist/cli/chunks/chunk-NYS2GUNO.js +2 -0
- package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-ONPPBLRB.js} +2 -2
- package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-OPDZBRIL.js} +2 -2
- package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-OQ4S6B7P.js} +1 -1
- package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-ORBODZSO.js} +2 -2
- package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-ORFL3YXB.js} +2 -2
- package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-P7DXVL2S.js} +2 -2
- package/dist/cli/chunks/chunk-PEMSXSP2.js +4 -0
- package/dist/cli/chunks/chunk-PS6WFCA4.js +6 -0
- package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-Q2RBOC7V.js} +2 -2
- package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-QLKUCMZC.js} +1 -1
- package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QLYO3H7E.js} +9 -9
- package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-QS5KZYUZ.js} +2 -2
- package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-R363XXGH.js} +2 -2
- package/dist/cli/chunks/chunk-RD5BYLN7.js +2 -0
- package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-RFDFET3O.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-RHIQ6QO5.js} +357 -351
- package/dist/cli/chunks/chunk-RLB7K7QP.js +2 -0
- package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-RUTO67PT.js} +2 -2
- package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-RV6HSMKJ.js} +1 -1
- package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-SOSJWM3E.js} +4 -4
- package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-SV5BUYHH.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-TL5GV3PR.js} +8 -8
- package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-TLUIO37P.js} +2 -2
- package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-TUDENMAE.js} +2 -2
- package/dist/cli/chunks/chunk-TVLOED6O.js +2 -0
- package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-UB6DQGWM.js} +2 -2
- package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-UHHMAKPE.js} +1 -1
- package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-ULCHPPW2.js} +1 -1
- package/dist/cli/chunks/chunk-V3OLS2NG.js +2 -0
- package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-VAYZ5QIE.js} +1 -1
- package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-VCONCVSY.js} +3 -3
- package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-VVF337SV.js} +2 -2
- package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-WKDWRRDT.js} +2 -2
- package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-X2DR27AY.js} +2 -2
- package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-X33F7NXH.js} +3 -3
- package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-XBEI2JBA.js} +2 -2
- package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-XBFQJZWX.js} +2 -2
- package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-XFPQIWEH.js} +3 -3
- package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-XPB5BVU6.js} +2 -2
- package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-XQ53PZEF.js} +3 -3
- package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-XZ46CI35.js} +2 -2
- package/dist/cli/chunks/chunk-YLNYPQDR.js +2 -0
- package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-YNG7E26C.js} +2 -2
- package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-YXU35GGD.js} +1 -1
- package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-ZCP4P6O2.js} +2 -2
- package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-ZL5LJT7D.js} +2 -2
- package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-ZOUEQ6DL.js} +1 -1
- package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-ZSBD4FUX.js} +2 -2
- package/dist/cli/chunks/chunk-ZTB32K5N.js +5 -0
- package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-ZUTFHGEO.js} +1 -1
- package/dist/cli/chunks/ci-GEJCXMBK.js +81 -0
- package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-2ZVV4OXL.js} +2 -2
- package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-E45OGVPR.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-X73ITYZC.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-W4PPH46C.js} +2 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +2 -0
- package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-NUEPMWDE.js} +2 -2
- package/dist/cli/chunks/{code-QSZTDINQ.js → code-6WQHBS7G.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-BXQIFIFT.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-Z337R2KH.js} +2 -2
- package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-F5DMYFHV.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-W2SYPZDI.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-ZCHUIFTN.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-M5JNODXF.js} +2 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +2 -0
- package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-LSYTHBHV.js} +2 -2
- package/dist/cli/chunks/coverage-PGMRS5SS.js +49 -0
- package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +2 -0
- package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-XPUA73UW.js} +2 -2
- package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-ITKDIYMW.js} +5 -5
- package/dist/cli/chunks/daemon-QBYTCIMH.js +10 -0
- package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-T55AXLD6.js} +2 -2
- package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-DR7J6K4O.js} +2 -2
- package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-LAJJBOUT.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-OMSHCRMK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-EQXSKC5K.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-FKRAGVSW.js} +2 -2
- package/dist/cli/chunks/dream-3UABDRZJ.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-JZFPCNL3.js +3 -0
- package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-JSNNASBW.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-UPD3IZBK.js +40 -0
- package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-YNMIBS2E.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-SRLXDKBI.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-VIR7O4L7.js} +2 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +2 -0
- package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-K2ED46EL.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-QCU4ZRYW.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-YYQI4WZM.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +2 -0
- package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-C5TJSWTZ.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-SE3MJJYS.js} +2 -2
- package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-C572SRDH.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-35A6G3M5.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-U2756CWI.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +2 -0
- package/dist/cli/chunks/init-handler-PCLYQUSB.js +88 -0
- package/dist/cli/chunks/init-wizard-MQMDSIOF.js +2 -0
- package/dist/cli/chunks/kernel-MEJ5GMRH.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-32PX5YH7.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-C4ROMMUS.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +2 -0
- package/dist/cli/chunks/learning-GEPVZGJQ.js +122 -0
- package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-XRKTTJTX.js} +4 -4
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +2 -0
- package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XVH6HW7E.js} +2 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +2 -0
- package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-IULSTM4Z.js} +2 -2
- package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-6K7IAU4T.js} +5 -5
- package/dist/cli/chunks/memory-backend-TRPOMPK4.js +2 -0
- package/dist/cli/chunks/memory-handlers-CG6DRLAW.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-VZDUYPLX.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-QUTXKNH4.js} +2 -2
- package/dist/cli/chunks/orchestrator-PCKKUWOP.js +452 -0
- package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-PX5HQVRL.js} +2 -2
- package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-O562GTOG.js} +2 -2
- package/dist/cli/chunks/{platform-2MCRKC25.js → platform-PM7Q2AZS.js} +2 -2
- package/dist/cli/chunks/plugin-OTYTFGPY.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-6CFXTHC2.js} +2 -2
- package/dist/cli/chunks/project-root-VVSTHIP4.js +2 -0
- package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +2 -0
- package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-PPGNSAOS.js} +2 -2
- package/dist/cli/chunks/{prove-QWONEJWX.js → prove-WQ3BKRZG.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +2 -0
- package/dist/cli/chunks/{quality-WFH54FY7.js → quality-C5WUU3AA.js} +2 -2
- package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-WSSRKD5U.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +2 -0
- package/dist/cli/chunks/real-embeddings-CFQE7IRQ.js +2 -0
- package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-DHKHXVZT.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-3PPODABV.js} +2 -2
- package/dist/cli/chunks/router-HYRPWLAY.js +2 -0
- package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +2 -0
- package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-JNXTGT6T.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-6YLROPVP.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-4DWB4WRK.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-YKR2ZNBF.js} +2 -2
- package/dist/cli/chunks/safe-db-KS65XDCP.js +2 -0
- package/dist/cli/chunks/schedule-KD2VN6GB.js +2 -0
- package/dist/cli/chunks/scheduler-ZH3RMUHY.js +2 -0
- package/dist/cli/chunks/{security-7723AZZ4.js → security-PWQTGDRU.js} +3 -3
- package/dist/cli/chunks/shared-rvf-adapter-LNRLFP5I.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-GWU6YQNS.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +2 -0
- package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-46KKBSSV.js} +2 -2
- package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-35T5FTDQ.js} +2 -2
- package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-P7QPQWLO.js} +2 -2
- package/dist/cli/chunks/{sync-PDPORHVN.js → sync-W6Z4R4PL.js} +2 -2
- package/dist/cli/chunks/sync-Y43EWBSY.js +2 -0
- package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-5CX3ZYT7.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-DQZGOJNE.js} +3 -3
- package/dist/cli/chunks/{test-DMBJFQNL.js → test-TPP53VVV.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-WBV4UMQH.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-GIIDXHLC.js +2 -0
- package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-AKK37RB7.js} +2 -2
- package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-7MASPELS.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-YZKD6UGB.js} +2 -2
- package/dist/cli/chunks/{types-K4FLXR2K.js → types-AZ3BTXDP.js} +2 -2
- package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +2 -0
- package/dist/cli/chunks/unified-persistence-FM376LGE.js +2 -0
- package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-L7OTDKEK.js} +2 -2
- package/dist/cli/chunks/{validate-AAP773B3.js → validate-O3QVFIGP.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-2UGBGLTX.js} +2 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-J75IYPRO.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-FQ5DBFCG.js} +2 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +2 -0
- package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-I7TN4MXZ.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-D3NE3NQK.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-RU2WOP5M.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-IHQB2FR5.js +2 -0
- package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-6BWTNVV6.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +2 -0
- package/dist/cli/chunks/wrappers-URVP25VU.js +2 -0
- package/dist/cli/commands/ci.js +47 -25
- package/dist/cli/commands/coverage.d.ts +1 -28
- package/dist/cli/commands/coverage.js +63 -134
- package/dist/cli/commands/daemon.js +7 -1
- package/dist/cli/commands/hooks-handlers/stats-hooks.d.ts +15 -0
- package/dist/cli/commands/hooks-handlers/stats-hooks.js +54 -2
- package/dist/cli/commands/learning.js +47 -7
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +13 -0
- package/dist/cli/handlers/init-guard.js +23 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +9 -0
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/scheduler/persistent-scheduler.d.ts +6 -2
- package/dist/cli/scheduler/persistent-scheduler.js +107 -41
- package/dist/cli/utils/ci-output.d.ts +8 -1
- package/dist/cli/utils/ci-output.js +13 -2
- package/dist/cli/utils/coverage-data.d.ts +3 -0
- package/dist/cli/utils/coverage-data.js +14 -39
- package/dist/cli/utils/coverage-verdict.d.ts +130 -0
- package/dist/cli/utils/coverage-verdict.js +193 -0
- package/dist/cli/utils/file-discovery.js +5 -0
- package/dist/coordination/deterministic-actions.js +24 -13
- package/dist/coordination/handlers/code-intelligence-handlers.d.ts +8 -0
- package/dist/coordination/handlers/code-intelligence-handlers.js +39 -0
- package/dist/coordination/handlers/coverage-handlers.js +34 -6
- package/dist/coordination/handlers/coverage-runner.d.ts +22 -0
- package/dist/coordination/handlers/coverage-runner.js +105 -10
- package/dist/coordination/handlers/coverage-target.d.ts +1 -0
- package/dist/coordination/handlers/coverage-target.js +4 -1
- package/dist/coordination/handlers/handler-types.d.ts +9 -0
- package/dist/coordination/handlers/handler-utils.d.ts +14 -1
- package/dist/coordination/handlers/handler-utils.js +46 -22
- package/dist/coordination/handlers/quality-handlers.js +108 -18
- package/dist/coordination/handlers/test-execution-handlers.js +4 -1
- package/dist/coordination/protocols/defect-investigation.d.ts +2 -1
- package/dist/coordination/protocols/defect-investigation.js +6 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/result-saver.d.ts +22 -0
- package/dist/coordination/result-saver.js +113 -43
- package/dist/coordination/task-executor.d.ts +7 -0
- package/dist/coordination/task-executor.js +32 -3
- package/dist/domains/code-intelligence/plugin.js +4 -0
- package/dist/domains/code-intelligence/services/metric-collector/index.js +9 -2
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.d.ts +21 -0
- package/dist/domains/code-intelligence/services/metric-collector/interfaces.js +25 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.d.ts +12 -0
- package/dist/domains/code-intelligence/services/metric-collector/loc-counter.js +69 -3
- package/dist/domains/code-intelligence/services/metric-collector/test-counter.js +4 -1
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +33 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +36 -0
- package/dist/domains/coverage-analysis/coordinator.js +18 -6
- package/dist/domains/coverage-analysis/interfaces.d.ts +44 -0
- package/dist/domains/coverage-analysis/interfaces.js +6 -1
- package/dist/domains/coverage-analysis/services/coverage-analyzer.js +61 -34
- package/dist/domains/coverage-analysis/services/gap-detector.js +7 -2
- package/dist/domains/defect-intelligence/plugin.js +4 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +6 -4
- package/dist/domains/learning-optimization/coordinator.js +4 -0
- package/dist/domains/learning-optimization/plugin.js +4 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.d.ts +14 -0
- package/dist/domains/quality-assessment/coordinator-rl-integration.js +54 -16
- package/dist/domains/quality-assessment/coordinator.js +10 -6
- package/dist/domains/quality-assessment/coverage-report-event.d.ts +32 -8
- package/dist/domains/quality-assessment/coverage-report-event.js +28 -6
- package/dist/domains/quality-assessment/index.d.ts +1 -1
- package/dist/domains/quality-assessment/interfaces.d.ts +46 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +48 -2
- package/dist/domains/quality-assessment/quality-evidence.js +62 -0
- package/dist/domains/quality-assessment/services/quality-analyzer.d.ts +23 -2
- package/dist/domains/quality-assessment/services/quality-analyzer.js +192 -109
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/test-execution/interfaces.d.ts +10 -6
- package/dist/domains/test-execution/plugin.js +4 -0
- package/dist/domains/test-execution/services/test-executor.js +152 -102
- package/dist/domains/test-generation/coordinator.js +4 -0
- package/dist/domains/test-generation/plugin.js +4 -0
- package/dist/feedback/coverage-learner.js +4 -1
- package/dist/feedback/coverage-session-provenance.d.ts +29 -0
- package/dist/feedback/coverage-session-provenance.js +39 -0
- package/dist/init/orchestrator.js +2 -0
- package/dist/init/phases/09-assets.d.ts +4 -0
- package/dist/init/phases/09-assets.js +35 -0
- package/dist/init/retired-assets.d.ts +86 -0
- package/dist/init/retired-assets.js +230 -0
- package/dist/init/skills-installer.d.ts +2 -0
- package/dist/init/skills-installer.js +4 -0
- package/dist/init/types.d.ts +3 -0
- package/dist/integrations/ruvector/rvf-native-adapter.d.ts +2 -0
- package/dist/integrations/ruvector/rvf-native-adapter.js +5 -0
- package/dist/integrations/ruvector/server-client.js +4 -12
- package/dist/kernel/project-root.d.ts +17 -0
- package/dist/kernel/project-root.js +54 -2
- package/dist/kernel/shared-dirs.d.ts +66 -0
- package/dist/kernel/shared-dirs.js +168 -0
- package/dist/learning/daily-log.js +2 -1
- package/dist/learning/experience-capture-middleware.d.ts +22 -0
- package/dist/learning/experience-capture-middleware.js +35 -0
- package/dist/learning/learnable-result.d.ts +16 -0
- package/dist/learning/learnable-result.js +24 -0
- package/dist/learning/pattern-mutation-error.d.ts +8 -0
- package/dist/learning/pattern-mutation-error.js +12 -0
- package/dist/learning/qe-reasoning-bank.d.ts +10 -0
- package/dist/learning/qe-reasoning-bank.js +50 -1
- package/dist/learning/rvf-reconcile.d.ts +39 -0
- package/dist/learning/rvf-reconcile.js +40 -0
- package/dist/learning/sqlite-persistence.d.ts +14 -0
- package/dist/learning/sqlite-persistence.js +36 -0
- package/dist/mcp/bundle.js +516 -504
- package/dist/mcp/handlers/domain-handler-configs.d.ts +31 -1
- package/dist/mcp/handlers/domain-handler-configs.js +37 -3
- package/dist/mcp/handlers/handler-factory.js +40 -14
- package/dist/mcp/protocol-server.js +27 -2
- package/dist/mcp/tool-cache-scope.d.ts +31 -0
- package/dist/mcp/tool-cache-scope.js +71 -0
- package/dist/mcp/tools/code-intelligence/analyze.js +5 -3
- package/dist/mcp/types.d.ts +4 -0
- package/dist/optimization/session-cache.d.ts +19 -1
- package/dist/optimization/session-cache.js +36 -2
- package/dist/plugins/cache.js +2 -1
- package/dist/plugins/sources/github.js +2 -1
- package/dist/plugins/sources/npm.js +2 -1
- package/dist/shared/aqe-managed-dirs.d.ts +24 -0
- package/dist/shared/aqe-managed-dirs.js +56 -0
- package/dist/shared/events/domain-events.d.ts +18 -3
- package/dist/shared/events/domain-events.js +4 -0
- package/dist/shared/http/http-client.d.ts +6 -0
- package/dist/shared/http/http-client.js +13 -15
- package/dist/shared/io/file-reader.d.ts +26 -0
- package/dist/shared/io/file-reader.js +111 -17
- package/dist/shared/llm/providers/response-deadline.d.ts +7 -2
- package/dist/shared/llm/providers/response-deadline.js +17 -5
- package/dist/shared/metrics/code-metrics.d.ts +24 -0
- package/dist/shared/metrics/code-metrics.js +93 -6
- package/dist/shared/metrics/index.d.ts +1 -1
- package/dist/workers/interfaces.d.ts +9 -1
- package/dist/workers/quality-daemon/coverage-delta.d.ts +4 -3
- package/dist/workers/quality-daemon/coverage-delta.js +13 -6
- package/dist/workers/quality-daemon/index.js +6 -5
- package/dist/workers/quality-daemon/notification-service.js +3 -3
- package/dist/workers/quality-daemon/persistent-memory.d.ts +2 -2
- package/dist/workers/quality-daemon/persistent-memory.js +2 -2
- package/dist/workers/worker-manager.js +5 -1
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/package.json +1 -1
- package/dist/cli/chunks/adapter-EGIPTX5H.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-WP4GCBDT.js +0 -2
- package/dist/cli/chunks/base-6ORFD62I.js +0 -2
- package/dist/cli/chunks/browser-workflow-PIXGERWP.js +0 -2
- package/dist/cli/chunks/chunk-2WFTZSRT.js +0 -2
- package/dist/cli/chunks/chunk-7YB2KELI.js +0 -5
- package/dist/cli/chunks/chunk-BBL6YXD3.js +0 -2
- package/dist/cli/chunks/chunk-BJ5P4IV2.js +0 -2
- package/dist/cli/chunks/chunk-DFPL5N3Q.js +0 -16
- package/dist/cli/chunks/chunk-DLY4YEN3.js +0 -2
- package/dist/cli/chunks/chunk-ERGWWI4Y.js +0 -3
- package/dist/cli/chunks/chunk-KZVJW2SD.js +0 -2
- package/dist/cli/chunks/chunk-L336HFFE.js +0 -2
- package/dist/cli/chunks/chunk-N2TJNIHA.js +0 -2
- package/dist/cli/chunks/chunk-RCXMUEZN.js +0 -3
- package/dist/cli/chunks/chunk-SEZLYRCS.js +0 -2
- package/dist/cli/chunks/chunk-TDLKXLJC.js +0 -4
- package/dist/cli/chunks/chunk-WOZIXXY5.js +0 -7
- package/dist/cli/chunks/ci-KP4GZKJ7.js +0 -81
- package/dist/cli/chunks/client-C3KHVRM6.js +0 -2
- package/dist/cli/chunks/core-handlers-KSQM6Q6S.js +0 -2
- package/dist/cli/chunks/coverage-SPFVHRRU.js +0 -43
- package/dist/cli/chunks/coverage-target-GSRBNHXE.js +0 -2
- package/dist/cli/chunks/cross-domain-router-CTGNOVCF.js +0 -2
- package/dist/cli/chunks/daemon-M5TD5Y6T.js +0 -10
- package/dist/cli/chunks/dream-MIK2E4UL.js +0 -2
- package/dist/cli/chunks/embed-and-insert-pattern-QST77T2B.js +0 -3
- package/dist/cli/chunks/experience-capture-middleware-X66IYSRV.js +0 -40
- package/dist/cli/chunks/file-discovery-3NHRUQQB.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-OCKRACUW.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-X67XG73C.js +0 -2
- package/dist/cli/chunks/hnsw-index-I7KCQBQR.js +0 -2
- package/dist/cli/chunks/hybrid-backend-FOUHTKAK.js +0 -2
- package/dist/cli/chunks/impact-analyzer-GXYVX46O.js +0 -2
- package/dist/cli/chunks/init-handler-2AXMXHYF.js +0 -86
- package/dist/cli/chunks/init-wizard-C2MRX2QG.js +0 -2
- package/dist/cli/chunks/kernel-Q2IUDIDC.js +0 -2
- package/dist/cli/chunks/knowledge-graph-E2Z6K5EE.js +0 -2
- package/dist/cli/chunks/learning-BEA26RNA.js +0 -122
- package/dist/cli/chunks/llm-router-service-YATYFEDD.js +0 -2
- package/dist/cli/chunks/load-test-LV77JXWA.js +0 -2
- package/dist/cli/chunks/memory-backend-XME3X3QX.js +0 -2
- package/dist/cli/chunks/memory-handlers-VG47X5DX.js +0 -2
- package/dist/cli/chunks/orchestrator-VHUXUYIM.js +0 -452
- package/dist/cli/chunks/pattern-null-store-TAXMLENP.js +0 -2
- package/dist/cli/chunks/plugin-2VAYWAO3.js +0 -27
- package/dist/cli/chunks/project-root-CFFPBGPX.js +0 -2
- package/dist/cli/chunks/protocol-executor-ML76QAVQ.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-LUZH6RYV.js +0 -2
- package/dist/cli/chunks/queen-coordinator-EWXNIXB6.js +0 -2
- package/dist/cli/chunks/real-embeddings-GZV4VKK4.js +0 -2
- package/dist/cli/chunks/router-MXOBVEBF.js +0 -2
- package/dist/cli/chunks/routing-feedback-T6CCRUEK.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-WHXVT3V3.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-JFPWIRCG.js +0 -2
- package/dist/cli/chunks/rvf-migration-coordinator-D4KUBNRZ.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-KOXR7TJL.js +0 -2
- package/dist/cli/chunks/safe-db-CI6IPSIN.js +0 -2
- package/dist/cli/chunks/schedule-X4HW6TVJ.js +0 -2
- package/dist/cli/chunks/scheduler-KCNJ2ON3.js +0 -2
- package/dist/cli/chunks/shared-rvf-adapter-KEQ5CLNI.js +0 -2
- package/dist/cli/chunks/sqlite-persistence-PGHU6VUR.js +0 -2
- package/dist/cli/chunks/sync-EFWXMA2H.js +0 -2
- package/dist/cli/chunks/token-bootstrap-S346YBVO.js +0 -2
- package/dist/cli/chunks/unified-memory-6CK3TUNQ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-A7BWBGYN.js +0 -2
- package/dist/cli/chunks/unified-persistence-GEPMDBQZ.js +0 -2
- package/dist/cli/chunks/visual-security-L4J7LQWT.js +0 -2
- package/dist/cli/chunks/witness-chain-CDUMX623.js +0 -2
- package/dist/cli/chunks/witness-chain-repair-WNYH6O4L.js +0 -2
- package/dist/cli/chunks/witness-key-manager-NQ5DAAC4.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-USJDWVDR.js +0 -2
- package/dist/cli/chunks/wrappers-CZDI6Z3X.js +0 -2
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/.claude/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/.claude/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.test.ts → budget-tests.ts.fixture} +0 -0
- /package/assets/skills/qe-court/evals/fixtures/seeded-mutant-delivery/{budget.ts → budget.ts.fixture} +0 -0
- /package/assets/skills/testability-scoring/resources/templates/{testability-scoring.spec.template.js → testability-scoring-spec.template.js} +0 -0
|
@@ -6,54 +6,12 @@
|
|
|
6
6
|
import { Command } from 'commander';
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { runCoverageAnalysisWizard } from '../wizards/coverage-wizard.js';
|
|
9
|
-
import { walkSourceFiles } from '../utils/file-discovery.js';
|
|
10
9
|
import { writeOutput, toJSON, coverageToMarkdown } from '../utils/ci-output.js';
|
|
11
10
|
import * as path from 'path';
|
|
12
|
-
import {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
if (!data.instrumented)
|
|
17
|
-
return { branch: true, function: true }; // labelled heuristic estimate
|
|
18
|
-
return {
|
|
19
|
-
branch: data.files.some(f => f.branches.total > 0),
|
|
20
|
-
function: data.files.some(f => f.functions.total > 0),
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
/** `aqe coverage` exit code when the target has no coverage measurement (#995). */
|
|
24
|
-
export const EXIT_UNMEASURED = 3;
|
|
25
|
-
/**
|
|
26
|
-
* Resolve the coverage data for a CLI target (#995).
|
|
27
|
-
*
|
|
28
|
-
* Uses the SAME resolution and verdict as the MCP `coverage_analyze_sublinear`
|
|
29
|
-
* handler (`resolveExistingCoverage`), so CLI and MCP cannot disagree about
|
|
30
|
-
* what a report says for a target:
|
|
31
|
-
* - a coverage report file (lcov.info, coverage-final.json, ...) is parsed
|
|
32
|
-
* directly;
|
|
33
|
-
* - a directory or source file is scoped against the instrumented report of
|
|
34
|
-
* its PROJECT ROOT (nearest package.json/.git above it), not the cwd;
|
|
35
|
-
* - with no report at the project root, the CLI falls back to its labelled
|
|
36
|
-
* heuristic estimate (the CLI never runs the test suite).
|
|
37
|
-
*/
|
|
38
|
-
export async function resolveCliCoverageData(targetPath) {
|
|
39
|
-
const existing = await resolveExistingCoverage(targetPath);
|
|
40
|
-
if (existing.status === 'target-missing') {
|
|
41
|
-
return { kind: 'no-data', reason: 'target-missing', message: describeNoData('target-missing', targetPath, null) };
|
|
42
|
-
}
|
|
43
|
-
if (existing.status === 'evaluated') {
|
|
44
|
-
const { evaluation, projectRoot } = existing;
|
|
45
|
-
if (evaluation.status === 'measured') {
|
|
46
|
-
const files = evaluation.files;
|
|
47
|
-
return { kind: 'data', data: { files, summary: summarizeCoverage(files), instrumented: true } };
|
|
48
|
-
}
|
|
49
|
-
return { kind: 'no-data', reason: evaluation.reason, message: describeNoData(evaluation.reason, targetPath, projectRoot) };
|
|
50
|
-
}
|
|
51
|
-
const sourceFiles = walkSourceFiles(existing.target, { includeTests: false });
|
|
52
|
-
if (sourceFiles.length === 0)
|
|
53
|
-
return { kind: 'no-sources' };
|
|
54
|
-
console.log(chalk.gray(` Analyzing ${sourceFiles.length} files...\n`));
|
|
55
|
-
return { kind: 'data', data: buildCoverageData(sourceFiles, existing.projectRoot) };
|
|
56
|
-
}
|
|
11
|
+
import { EXIT_UNMEASURED, coverageExitCode, coverageJson, evaluateCliCoverage, } from '../utils/coverage-verdict.js';
|
|
12
|
+
// #1012 / #1010: resolution and verdict are shared with `aqe ci` (and built on
|
|
13
|
+
// the same functions as MCP); re-exported here for existing importers.
|
|
14
|
+
export { EXIT_UNMEASURED, resolveCliCoverageData } from '../utils/coverage-verdict.js';
|
|
57
15
|
function getColorForPercent(percent) {
|
|
58
16
|
if (percent >= 80)
|
|
59
17
|
return chalk.green;
|
|
@@ -87,7 +45,13 @@ Exit codes:
|
|
|
87
45
|
1 coverage below the threshold, or an error (missing target, unreadable report)
|
|
88
46
|
2 coverage within 5% above the threshold
|
|
89
47
|
${EXIT_UNMEASURED} UNMEASURED: no coverage measurement exists for the target
|
|
90
|
-
(not in the report, the runner ran 0 tests, or only test files were reported)
|
|
48
|
+
(not in the report, the runner ran 0 tests, or only test files were reported),
|
|
49
|
+
or NO coverage report exists, so only a labelled static estimate was shown
|
|
50
|
+
(-F json: measured:false, estimated:true; no threshold verdict)
|
|
51
|
+
|
|
52
|
+
In \`aqe ci\`, an UNMEASURED coverage phase is a warning (phase exit code 3); it
|
|
53
|
+
does not fail the pipeline by itself. An enforced quality gate fails on
|
|
54
|
+
missing coverage evidence.`)
|
|
91
55
|
.action(async (target, options) => {
|
|
92
56
|
let analyzeTarget = target;
|
|
93
57
|
let includeRisk = options.risk;
|
|
@@ -141,90 +105,62 @@ Exit codes:
|
|
|
141
105
|
const targetPath = path.resolve(analyzeTarget);
|
|
142
106
|
// Fix #280: shared file discovery supporting all languages.
|
|
143
107
|
// #995: coverage files as targets; reports resolved from the project root.
|
|
144
|
-
|
|
145
|
-
|
|
108
|
+
// #1012: one shared verdict (measured / unmeasured / labelled estimate).
|
|
109
|
+
const outcome = await evaluateCliCoverage(coverageAPI, targetPath, threshold);
|
|
110
|
+
const format = options.format;
|
|
111
|
+
if (outcome.kind === 'no-sources') {
|
|
146
112
|
console.log(chalk.yellow('No source files found'));
|
|
147
113
|
return;
|
|
148
114
|
}
|
|
149
|
-
if (
|
|
150
|
-
// Errors (missing target, unreadable report) exit 1.
|
|
151
|
-
//
|
|
152
|
-
|
|
153
|
-
if (options.format === 'json') {
|
|
115
|
+
if (outcome.kind === 'error' || outcome.kind === 'unmeasured' || outcome.kind === 'analysis-failed') {
|
|
116
|
+
// Errors (missing target, unreadable report) exit 1. "No measurement
|
|
117
|
+
// exists" has its own exit code — never "0%".
|
|
118
|
+
if (format === 'json') {
|
|
154
119
|
// Same shape as a normal result, with nulls (#995 review N4).
|
|
155
|
-
emit(toJSON(
|
|
156
|
-
summary: { line: null, branch: null, function: null, statement: null },
|
|
157
|
-
meetsThreshold: null,
|
|
158
|
-
threshold,
|
|
159
|
-
measured: false,
|
|
160
|
-
unmeasured: isUnmeasured(resolved.reason),
|
|
161
|
-
reason: resolved.reason,
|
|
162
|
-
target: targetPath,
|
|
163
|
-
warning: resolved.message,
|
|
164
|
-
}));
|
|
120
|
+
emit(toJSON(coverageJson(outcome, threshold, targetPath)));
|
|
165
121
|
}
|
|
166
122
|
else {
|
|
167
|
-
console.log((
|
|
123
|
+
console.log((outcome.kind === 'unmeasured' ? chalk.yellow : chalk.red)(` ${outcome.message}\n`));
|
|
168
124
|
}
|
|
169
|
-
await cleanupAndExit(
|
|
125
|
+
await cleanupAndExit(coverageExitCode(outcome, threshold));
|
|
170
126
|
return;
|
|
171
127
|
}
|
|
172
|
-
const coverageData =
|
|
173
|
-
|
|
128
|
+
const coverageData = outcome.data;
|
|
129
|
+
const isEstimate = outcome.kind === 'estimate';
|
|
130
|
+
if (!isEstimate) {
|
|
174
131
|
console.log(chalk.green(' Using instrumented coverage data (V8/istanbul)\n'));
|
|
175
132
|
if (coverageData.unmeasuredFiles?.length) {
|
|
176
133
|
console.log(chalk.yellow(` ${coverageData.unmeasuredFiles.length} file(s) not in the coverage report — UNMEASURED, excluded from the figures\n`));
|
|
177
134
|
}
|
|
178
135
|
}
|
|
179
136
|
else {
|
|
180
|
-
console.log(chalk.yellow(' No
|
|
137
|
+
console.log(chalk.yellow(' No coverage report found — showing a heuristic STATIC ESTIMATE (UNMEASURED)'));
|
|
181
138
|
console.log(chalk.gray(' Run tests with coverage first: npm test -- --coverage\n'));
|
|
182
139
|
}
|
|
183
|
-
// #
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
// For non-text formats, collect all data and output at end
|
|
208
|
-
coverageResult = {
|
|
209
|
-
summary: summary,
|
|
210
|
-
meetsThreshold: verdict.meetsThreshold,
|
|
211
|
-
threshold,
|
|
212
|
-
recommendations,
|
|
213
|
-
};
|
|
214
|
-
if (format === 'text') {
|
|
215
|
-
const fmt = (v) => v === null ? 'n/a (not collected)' : v.toFixed(1) + '%';
|
|
216
|
-
const color = (v) => v === null ? chalk.gray : getColorForPercent(v);
|
|
217
|
-
console.log(chalk.cyan(' Coverage Summary:'));
|
|
218
|
-
console.log(` Lines: ${color(summary.line)(fmt(summary.line))}`);
|
|
219
|
-
console.log(` Branches: ${color(summary.branch)(fmt(summary.branch))}`);
|
|
220
|
-
console.log(` Functions: ${color(summary.function)(fmt(summary.function))}`);
|
|
221
|
-
console.log(` Statements: ${color(summary.statement)(fmt(summary.statement))}`);
|
|
222
|
-
console.log(`\n Threshold: ${verdict.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
|
|
223
|
-
if (recommendations.length > 0) {
|
|
224
|
-
console.log(chalk.cyan('\n Recommendations:'));
|
|
225
|
-
for (const rec of recommendations) {
|
|
226
|
-
console.log(chalk.gray(` - ${rec}`));
|
|
227
|
-
}
|
|
140
|
+
// #1012: the JSON carries its provenance (measured / estimated /
|
|
141
|
+
// coverageMethod) exactly as MCP does; an estimate has no verdict.
|
|
142
|
+
const coverageResult = coverageJson(outcome, threshold, targetPath);
|
|
143
|
+
const summary = outcome.summary;
|
|
144
|
+
if (format === 'text') {
|
|
145
|
+
const fmt = (v) => v === null ? 'n/a (not collected)' : (isEstimate ? '~' : '') + v.toFixed(1) + '%';
|
|
146
|
+
const color = (v) => v === null || isEstimate ? chalk.gray : getColorForPercent(v);
|
|
147
|
+
console.log(chalk.cyan(isEstimate ? ' Coverage Summary (STATIC ESTIMATE — not measured):' : ' Coverage Summary:'));
|
|
148
|
+
console.log(` Lines: ${color(summary.line)(fmt(summary.line))}`);
|
|
149
|
+
console.log(` Branches: ${color(summary.branch)(fmt(summary.branch))}`);
|
|
150
|
+
console.log(` Functions: ${color(summary.function)(fmt(summary.function))}`);
|
|
151
|
+
console.log(` Statements: ${color(summary.statement)(fmt(summary.statement))}`);
|
|
152
|
+
if (outcome.kind === 'measured') {
|
|
153
|
+
console.log(`\n Threshold: ${outcome.verdict.meetsThreshold ? chalk.green(`Met (${threshold}%)`) : chalk.red(`Not met (${threshold}%)`)}`);
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
console.log(`\n Threshold: ${chalk.yellow(`not evaluated (${threshold}%) — UNMEASURED, estimate only`)}`);
|
|
157
|
+
console.log(chalk.gray(` ${outcome.message}`));
|
|
158
|
+
}
|
|
159
|
+
const recommendations = outcome.kind === 'measured' ? outcome.recommendations : [];
|
|
160
|
+
if (recommendations.length > 0) {
|
|
161
|
+
console.log(chalk.cyan('\n Recommendations:'));
|
|
162
|
+
for (const rec of recommendations) {
|
|
163
|
+
console.log(chalk.gray(` - ${rec}`));
|
|
228
164
|
}
|
|
229
165
|
}
|
|
230
166
|
}
|
|
@@ -235,16 +171,17 @@ Exit codes:
|
|
|
235
171
|
coverageData,
|
|
236
172
|
minCoverage: threshold,
|
|
237
173
|
prioritize: includeRisk ? 'risk' : 'size',
|
|
174
|
+
// #1014: gaps in an estimate are shown, never learned or published.
|
|
175
|
+
measured: !isEstimate,
|
|
238
176
|
});
|
|
239
177
|
if (gapResult.success && gapResult.value) {
|
|
240
178
|
const gaps = gapResult.value;
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
}));
|
|
179
|
+
coverageResult.gaps = gaps.gaps.map(g => ({
|
|
180
|
+
file: g.file.replace(process.cwd() + '/', ''),
|
|
181
|
+
lines: g.lines,
|
|
182
|
+
riskScore: g.riskScore,
|
|
183
|
+
severity: g.severity,
|
|
184
|
+
}));
|
|
248
185
|
console.log(chalk.gray(` Total uncovered lines: ${gaps.totalUncoveredLines}`));
|
|
249
186
|
console.log(chalk.gray(` Estimated effort: ${gaps.estimatedEffort} hours\n`));
|
|
250
187
|
for (const gap of gaps.gaps.slice(0, 8)) {
|
|
@@ -307,26 +244,18 @@ Exit codes:
|
|
|
307
244
|
}
|
|
308
245
|
}
|
|
309
246
|
// Non-text format output (collected all data)
|
|
310
|
-
if (
|
|
247
|
+
if (format === 'json') {
|
|
311
248
|
emit(toJSON(coverageResult));
|
|
312
249
|
}
|
|
313
|
-
else if (
|
|
250
|
+
else if (format === 'markdown') {
|
|
314
251
|
emit(coverageToMarkdown(coverageResult));
|
|
315
252
|
}
|
|
316
253
|
else if (format === 'text') {
|
|
317
254
|
console.log(chalk.green('\n Coverage analysis complete\n'));
|
|
318
255
|
}
|
|
319
|
-
// Exit codes: 1 = below threshold, 2 = within 5% of threshold,
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
}
|
|
323
|
-
if (coverageResult) {
|
|
324
|
-
const avg = overallCoverage;
|
|
325
|
-
if (avg < threshold + 5 && avg >= threshold) {
|
|
326
|
-
await cleanupAndExit(2);
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
await cleanupAndExit(0);
|
|
256
|
+
// Exit codes: 1 = below threshold, 2 = within 5% of threshold,
|
|
257
|
+
// 0 = above threshold, 3 = UNMEASURED (estimate only) — shared with `aqe ci`.
|
|
258
|
+
await cleanupAndExit(coverageExitCode(outcome, threshold));
|
|
330
259
|
}
|
|
331
260
|
catch (error) {
|
|
332
261
|
console.error(chalk.red('\nFailed:'), error);
|
|
@@ -70,7 +70,13 @@ Examples:
|
|
|
70
70
|
// Fallback for environments where kernel isn't available
|
|
71
71
|
const store = new Map();
|
|
72
72
|
memory = {
|
|
73
|
-
|
|
73
|
+
// Like InMemoryWorkerMemory (#1028 N4): this process-local store holds
|
|
74
|
+
// only daemon keys, so a read of another namespace finds nothing.
|
|
75
|
+
async get(key, options) {
|
|
76
|
+
if (options?.namespace)
|
|
77
|
+
return undefined;
|
|
78
|
+
return store.get(key);
|
|
79
|
+
},
|
|
74
80
|
async set(key, value) { store.set(key, value); },
|
|
75
81
|
async search(pattern) {
|
|
76
82
|
const escaped = pattern.replace(/[.+?^${}()|[\]\\]/g, '\\$&');
|
|
@@ -5,6 +5,21 @@
|
|
|
5
5
|
* Handles pattern management and statistics subcommands.
|
|
6
6
|
*/
|
|
7
7
|
import { Command } from 'commander';
|
|
8
|
+
/**
|
|
9
|
+
* How a learned pattern reached vector search, by cause (#981, review N1).
|
|
10
|
+
* - `indexed`: stored with its vector in the active index.
|
|
11
|
+
* - `sqlite`: an embedder produced the vector and SQLite holds it (vector
|
|
12
|
+
* search uses it now); only the ANN index (patterns.rvf) was not open in
|
|
13
|
+
* this process. It is ingested automatically the next time the index opens.
|
|
14
|
+
* - `pending`: no vector (no embedding runtime); text search only until an
|
|
15
|
+
* embedder is configured and `aqe learning backfill-embeddings` runs.
|
|
16
|
+
*/
|
|
17
|
+
export declare function describeVectorIndexState(pattern: {
|
|
18
|
+
embedding?: ArrayLike<number>;
|
|
19
|
+
}, indexUnavailableCause?: string): {
|
|
20
|
+
vectorIndex: 'indexed' | 'sqlite' | 'pending';
|
|
21
|
+
notice?: string;
|
|
22
|
+
};
|
|
8
23
|
/**
|
|
9
24
|
* Register stats, list, emit, learn, and search subcommands on the hooks command.
|
|
10
25
|
*/
|
|
@@ -7,7 +7,37 @@
|
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { QE_HOOK_EVENTS } from '../../../learning/qe-hooks.js';
|
|
9
9
|
import { safeJsonParse } from '../../../shared/safe-json.js';
|
|
10
|
+
import { committedPendingIndexPatternId } from '../../../learning/pattern-mutation-error.js';
|
|
10
11
|
import { getHooksSystem, printJson, printSuccess, printError, } from './hooks-shared.js';
|
|
12
|
+
/**
|
|
13
|
+
* How a learned pattern reached vector search, by cause (#981, review N1).
|
|
14
|
+
* - `indexed`: stored with its vector in the active index.
|
|
15
|
+
* - `sqlite`: an embedder produced the vector and SQLite holds it (vector
|
|
16
|
+
* search uses it now); only the ANN index (patterns.rvf) was not open in
|
|
17
|
+
* this process. It is ingested automatically the next time the index opens.
|
|
18
|
+
* - `pending`: no vector (no embedding runtime); text search only until an
|
|
19
|
+
* embedder is configured and `aqe learning backfill-embeddings` runs.
|
|
20
|
+
*/
|
|
21
|
+
export function describeVectorIndexState(pattern, indexUnavailableCause) {
|
|
22
|
+
const hasVector = Boolean(pattern.embedding && pattern.embedding.length > 0);
|
|
23
|
+
if (!hasVector) {
|
|
24
|
+
return {
|
|
25
|
+
vectorIndex: 'pending',
|
|
26
|
+
notice: 'Pattern stored in SQLite without a vector (no embedding runtime is available). ' +
|
|
27
|
+
'Text search finds it now. Set AQE_EMBEDDER_ENDPOINT or install @huggingface/transformers, then run ' +
|
|
28
|
+
'`aqe learning backfill-embeddings` to enable semantic search for it.',
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
if (indexUnavailableCause) {
|
|
32
|
+
return {
|
|
33
|
+
vectorIndex: 'sqlite',
|
|
34
|
+
notice: 'Pattern stored; its vector is stored in SQLite and vector search can use it now. ' +
|
|
35
|
+
`The ANN index (patterns.rvf) was not open in this process (${indexUnavailableCause}); ` +
|
|
36
|
+
'the vector is added to it automatically the next time the index opens.',
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return { vectorIndex: 'indexed' };
|
|
40
|
+
}
|
|
11
41
|
/**
|
|
12
42
|
* Register stats, list, emit, learn, and search subcommands on the hooks command.
|
|
13
43
|
*/
|
|
@@ -161,10 +191,27 @@ export function registerStatsHooks(hooks) {
|
|
|
161
191
|
tags: options.tags || [],
|
|
162
192
|
},
|
|
163
193
|
});
|
|
194
|
+
// #981: COMMITTED_PENDING_INDEX means the authoritative SQLite row was
|
|
195
|
+
// written and only the derived vector index is unavailable (e.g. no
|
|
196
|
+
// embedding runtime). That is a stored pattern, not a failure.
|
|
197
|
+
let pattern = result.success ? result.value : null;
|
|
198
|
+
let indexCause;
|
|
164
199
|
if (!result.success) {
|
|
165
|
-
|
|
200
|
+
const committedId = committedPendingIndexPatternId(result.error);
|
|
201
|
+
if (!committedId) {
|
|
202
|
+
throw new Error(result.error.message);
|
|
203
|
+
}
|
|
204
|
+
pattern = await reasoningBank.getPattern(committedId);
|
|
205
|
+
if (!pattern) {
|
|
206
|
+
throw new Error(result.error.message);
|
|
207
|
+
}
|
|
208
|
+
const cause = result.error.cause;
|
|
209
|
+
indexCause = cause instanceof Error ? cause.message : 'the vector index is unavailable';
|
|
166
210
|
}
|
|
167
|
-
|
|
211
|
+
if (!pattern) {
|
|
212
|
+
throw new Error('learn failed: no pattern returned');
|
|
213
|
+
}
|
|
214
|
+
const { vectorIndex, notice: pendingWarning } = describeVectorIndexState(pattern, indexCause);
|
|
168
215
|
if (options.json) {
|
|
169
216
|
printJson({
|
|
170
217
|
success: true,
|
|
@@ -174,6 +221,8 @@ export function registerStatsHooks(hooks) {
|
|
|
174
221
|
type: pattern.patternType,
|
|
175
222
|
domain: pattern.qeDomain,
|
|
176
223
|
},
|
|
224
|
+
vectorIndex,
|
|
225
|
+
...(pendingWarning ? { warning: pendingWarning } : {}),
|
|
177
226
|
});
|
|
178
227
|
}
|
|
179
228
|
else {
|
|
@@ -181,6 +230,9 @@ export function registerStatsHooks(hooks) {
|
|
|
181
230
|
console.log(chalk.dim(` ID: ${pattern.id}`));
|
|
182
231
|
console.log(chalk.dim(` Domain: ${pattern.qeDomain}`));
|
|
183
232
|
console.log(chalk.dim(` Tier: ${pattern.tier}`));
|
|
233
|
+
if (pendingWarning) {
|
|
234
|
+
console.log(chalk.yellow(` ${vectorIndex === 'pending' ? 'Vector index pending' : 'Vector index'}: ${pendingWarning}`));
|
|
235
|
+
}
|
|
184
236
|
}
|
|
185
237
|
}
|
|
186
238
|
catch (error) {
|
|
@@ -24,6 +24,7 @@ import { backupLearningDatabase, restoreLearningDatabase } from './learning-snap
|
|
|
24
24
|
import { createSQLitePatternStore } from '../../learning/sqlite-persistence.js';
|
|
25
25
|
import { getActiveEmbeddingSpaceIdentity } from '../../learning/real-embeddings.js';
|
|
26
26
|
import { inspectEmbeddingSpaceRows } from '../../learning/embedding-space.js';
|
|
27
|
+
import { committedPendingIndexPatternId } from '../../learning/pattern-mutation-error.js';
|
|
27
28
|
// Extracted helpers
|
|
28
29
|
import { initializeLearningSystem, printJson, printSuccess, printError, printInfo, displayDashboard, getDbPath, compressFile, decompressFile, verifyDatabaseIntegrity, getSchemaVersion, padRight, EXPORT_FORMAT_VERSION, DOMAIN_MAPPING, PATTERN_TYPE_MAPPING, } from './learning-helpers.js';
|
|
29
30
|
// ============================================================================
|
|
@@ -151,11 +152,29 @@ function registerBackfillEmbeddingsCommand(learning) {
|
|
|
151
152
|
}
|
|
152
153
|
const result = await store.backfillEmbeddings(batchSize);
|
|
153
154
|
const after = store.getGhostPatternCount();
|
|
155
|
+
// #981 review B2: backfill writes SQLite vectors only. Opening the
|
|
156
|
+
// reasoning bank reconciles the RVF index with them (ingesting just
|
|
157
|
+
// the ids it is missing), so backfilled patterns reach vector search
|
|
158
|
+
// even when patterns.rvf already held other vectors.
|
|
159
|
+
let rvfIndex = { skipped: 'vector index unavailable' };
|
|
160
|
+
if (result.processed > 0) {
|
|
161
|
+
try {
|
|
162
|
+
const reasoningBank = await initializeLearningSystem();
|
|
163
|
+
const reconciled = reasoningBank.getLastVectorReconcile() ?? reasoningBank.reconcileVectorIndex();
|
|
164
|
+
if (reconciled) {
|
|
165
|
+
rvfIndex = { ingested: reconciled.ingested, missing: reconciled.missing, capped: reconciled.capped };
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
rvfIndex = { skipped: error instanceof Error ? error.message : String(error) };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
154
172
|
const output = {
|
|
155
173
|
...result,
|
|
156
174
|
batchSize,
|
|
157
175
|
missingBefore: before.withoutEmbeddings,
|
|
158
176
|
missingAfter: after.withoutEmbeddings,
|
|
177
|
+
rvfIndex,
|
|
159
178
|
};
|
|
160
179
|
if (options.json) {
|
|
161
180
|
printJson(output);
|
|
@@ -167,6 +186,9 @@ function registerBackfillEmbeddingsCommand(learning) {
|
|
|
167
186
|
console.log(` Errors: ${result.errors}`);
|
|
168
187
|
console.log(` Remaining missing: ${after.withoutEmbeddings}`);
|
|
169
188
|
console.log(` Method: ${result.method}`);
|
|
189
|
+
console.log('ingested' in rvfIndex
|
|
190
|
+
? ` Vector index (RVF): ingested ${rvfIndex.ingested} of ${rvfIndex.missing} missing${rvfIndex.capped ? ' (capped; rerun to continue)' : ''}`
|
|
191
|
+
: ` Vector index (RVF): not updated (${rvfIndex.skipped})`);
|
|
170
192
|
console.log('');
|
|
171
193
|
}
|
|
172
194
|
}
|
|
@@ -416,6 +438,7 @@ function registerImportCommand(learning) {
|
|
|
416
438
|
const reasoningBank = await initializeLearningSystem();
|
|
417
439
|
let imported = 0;
|
|
418
440
|
let skipped = 0;
|
|
441
|
+
let pendingIndex = 0;
|
|
419
442
|
const errors = [];
|
|
420
443
|
if (!options.dryRun) {
|
|
421
444
|
for (const pattern of importData.patterns) {
|
|
@@ -424,8 +447,17 @@ function registerImportCommand(learning) {
|
|
|
424
447
|
patternType: pattern.patternType, name: pattern.name,
|
|
425
448
|
description: pattern.description, template: pattern.template, context: pattern.context,
|
|
426
449
|
});
|
|
427
|
-
if (result.success)
|
|
450
|
+
if (result.success) {
|
|
451
|
+
imported++;
|
|
452
|
+
// #981 review N2: stored text-only (no embedding runtime) → vector pending.
|
|
453
|
+
if (!(result.value.embedding && result.value.embedding.length > 0))
|
|
454
|
+
pendingIndex++;
|
|
455
|
+
}
|
|
456
|
+
// #981: the row committed; only its vector index is pending.
|
|
457
|
+
else if (committedPendingIndexPatternId(result.error)) {
|
|
428
458
|
imported++;
|
|
459
|
+
pendingIndex++;
|
|
460
|
+
}
|
|
429
461
|
else {
|
|
430
462
|
skipped++;
|
|
431
463
|
errors.push(`${pattern.name}: ${result.error.message}`);
|
|
@@ -438,7 +470,7 @@ function registerImportCommand(learning) {
|
|
|
438
470
|
}
|
|
439
471
|
}
|
|
440
472
|
if (options.json) {
|
|
441
|
-
printJson({ dryRun: options.dryRun || false, totalPatterns: importData.patterns.length, imported, skipped, errors });
|
|
473
|
+
printJson({ dryRun: options.dryRun || false, totalPatterns: importData.patterns.length, imported, skipped, pendingIndex, errors });
|
|
442
474
|
}
|
|
443
475
|
else {
|
|
444
476
|
console.log(chalk.bold('\n📥 Pattern Import\n'));
|
|
@@ -450,6 +482,8 @@ function registerImportCommand(learning) {
|
|
|
450
482
|
}
|
|
451
483
|
else {
|
|
452
484
|
console.log(chalk.green(`\n Imported: ${imported}`));
|
|
485
|
+
if (pendingIndex > 0)
|
|
486
|
+
console.log(chalk.yellow(` Vector index pending: ${pendingIndex} (run "aqe learning backfill-embeddings" once an embedder is available)`));
|
|
453
487
|
if (skipped > 0)
|
|
454
488
|
console.log(chalk.yellow(` Skipped: ${skipped}`));
|
|
455
489
|
}
|
|
@@ -593,7 +627,8 @@ function registerExtractCommand(learning) {
|
|
|
593
627
|
template: { type: 'code', content: templateContent, variables: [{ name: 'implementation', type: 'code', required: true, description: 'Implementation code for this pattern' }] },
|
|
594
628
|
context: { tags: [p.domain, p.patternType, `sources:${p.sourceCount}`, `reward:${p.avgReward.toFixed(2)}`] },
|
|
595
629
|
});
|
|
596
|
-
|
|
630
|
+
// #981: a committed row with a pending vector index is stored.
|
|
631
|
+
if (result.success || committedPendingIndexPatternId(result.error))
|
|
597
632
|
stored++;
|
|
598
633
|
else
|
|
599
634
|
errors.push(`${p.name}: ${result.error.message}`);
|
|
@@ -962,7 +997,8 @@ function registerImportMergeCommand(learning) {
|
|
|
962
997
|
}
|
|
963
998
|
try {
|
|
964
999
|
const result = await reasoningBank.storePattern({ patternType: pattern.patternType, name: pattern.name, description: pattern.description, template: pattern.template, context: pattern.context });
|
|
965
|
-
|
|
1000
|
+
// #981: a committed row with a pending vector index is imported.
|
|
1001
|
+
if (result.success || committedPendingIndexPatternId(result.error)) {
|
|
966
1002
|
if (isDuplicate)
|
|
967
1003
|
updated++;
|
|
968
1004
|
else
|
|
@@ -1148,14 +1184,18 @@ function registerDreamCommand(learning) {
|
|
|
1148
1184
|
template: { type: 'workflow', content: insight.suggestedAction || insight.description, variables: [] },
|
|
1149
1185
|
context: { tags: ['dream-generated', insight.type, ...insight.sourceConcepts.slice(0, 3)], complexity: 'medium' },
|
|
1150
1186
|
});
|
|
1187
|
+
// #981: a committed row with a pending vector index is a created pattern.
|
|
1188
|
+
const createdPatternId = patternResult.success
|
|
1189
|
+
? patternResult.value.id
|
|
1190
|
+
: committedPendingIndexPatternId(patternResult.error);
|
|
1151
1191
|
if (options.json) {
|
|
1152
|
-
printJson({ insightId: insight.id, applied: result.success, patternId:
|
|
1192
|
+
printJson({ insightId: insight.id, applied: result.success, patternId: createdPatternId, error: result.error || (createdPatternId ? null : patternResult.success ? null : patternResult.error?.message) });
|
|
1153
1193
|
}
|
|
1154
1194
|
else {
|
|
1155
1195
|
if (result.success) {
|
|
1156
1196
|
printSuccess(`Applied insight ${insight.id.slice(0, 8)}`);
|
|
1157
|
-
if (
|
|
1158
|
-
printSuccess(`Created pattern ${
|
|
1197
|
+
if (createdPatternId)
|
|
1198
|
+
printSuccess(`Created pattern ${createdPatternId} in ReasoningBank`);
|
|
1159
1199
|
}
|
|
1160
1200
|
else
|
|
1161
1201
|
printError(`Failed to apply insight: ${result.error}`);
|
|
@@ -7,7 +7,7 @@ import { Command } from 'commander';
|
|
|
7
7
|
import chalk from 'chalk';
|
|
8
8
|
import { filterTestFilesForFramework, walkSourceFiles } from '../utils/file-discovery.js';
|
|
9
9
|
import { writeOutput, toJSON, toJUnit, testRunToMarkdown } from '../utils/ci-output.js';
|
|
10
|
-
import {
|
|
10
|
+
import { writeTestRunEvidence } from '../../domains/quality-assessment/quality-evidence.js';
|
|
11
11
|
import { validateBehaviorExamples } from '../../domains/test-generation/services/behavior-example-validation.js';
|
|
12
12
|
import { findProjectRoot } from '../../kernel/project-root.js';
|
|
13
13
|
import { writeGeneratedTestFile } from '../utils/generated-test-writer.js';
|
|
@@ -192,12 +192,11 @@ export function createTestCommand(context, cleanupAndExit, ensureInitialized) {
|
|
|
192
192
|
duration: run.duration,
|
|
193
193
|
measuredAt: new Date().toISOString(),
|
|
194
194
|
}, { namespace: 'test-execution', persist: true });
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
});
|
|
195
|
+
// #1027 NB1: the shared run-scoped writer (same as test_execute_parallel),
|
|
196
|
+
// stamped with this run's id so it pairs with the run's own coverage.
|
|
197
|
+
await writeTestRunEvidence(context.kernel.memory, {
|
|
198
|
+
runId: run.runId, passed: run.passed, failed: run.failed, skipped: run.skipped,
|
|
199
|
+
}, { source: 'aqe test execute' });
|
|
201
200
|
if (format === 'json') {
|
|
202
201
|
writeOutput(toJSON(run), options.output);
|
|
203
202
|
}
|
|
@@ -227,13 +227,17 @@ export function createWorkflowCommand(context, cleanupAndExit, ensureInitialized
|
|
|
227
227
|
console.log(chalk.gray(' No scheduled workflows\n'));
|
|
228
228
|
}
|
|
229
229
|
else {
|
|
230
|
+
// #991: entries loaded from a hand-edited or legacy file may lack
|
|
231
|
+
// fields; show "(missing)" rather than "undefined".
|
|
232
|
+
const show = (value) => value === undefined || value === null || value === '' ? '(missing)' : String(value);
|
|
230
233
|
for (const sched of scheduled) {
|
|
231
234
|
const statusIcon = sched.enabled ? chalk.green('*') : chalk.gray('o');
|
|
232
|
-
console.log(` ${statusIcon} ${chalk.white(sched.workflowId)}`);
|
|
233
|
-
console.log(chalk.gray(` ID: ${sched.id}`));
|
|
234
|
-
|
|
235
|
-
console.log(chalk.gray(`
|
|
236
|
-
console.log(chalk.gray(`
|
|
235
|
+
console.log(` ${statusIcon} ${chalk.white(show(sched.workflowId))}`);
|
|
236
|
+
console.log(chalk.gray(` ID: ${show(sched.id)}`));
|
|
237
|
+
const description = sched.scheduleDescription ? ` (${sched.scheduleDescription})` : '';
|
|
238
|
+
console.log(chalk.gray(` Schedule: ${show(sched.schedule)}${description}`));
|
|
239
|
+
console.log(chalk.gray(` File: ${show(sched.pipelinePath)}`));
|
|
240
|
+
console.log(chalk.gray(` Next run: ${show(sched.nextRun)}`));
|
|
237
241
|
if (sched.lastRun) {
|
|
238
242
|
console.log(chalk.gray(` Last run: ${sched.lastRun}`));
|
|
239
243
|
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aqe init` guard for shared directories (#1006, review of #1026 N3).
|
|
3
|
+
*
|
|
4
|
+
* Initializing in the OS temp dir or a system dir wrote `<tmp>/.agentic-qe`
|
|
5
|
+
* and `.mcp.json` there, but every later command resolves such a dir to a
|
|
6
|
+
* private scratch root, so the initialized store was never used. Refusing
|
|
7
|
+
* with a clear next step is less surprising than initializing a hidden root.
|
|
8
|
+
*
|
|
9
|
+
* @module cli/handlers/init-guard
|
|
10
|
+
*/
|
|
11
|
+
/** Error message when `cwd` must not be initialized, otherwise null. */
|
|
12
|
+
export declare function sharedDirInitError(cwd: string, env?: NodeJS.ProcessEnv): string | null;
|
|
13
|
+
//# sourceMappingURL=init-guard.d.ts.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `aqe init` guard for shared directories (#1006, review of #1026 N3).
|
|
3
|
+
*
|
|
4
|
+
* Initializing in the OS temp dir or a system dir wrote `<tmp>/.agentic-qe`
|
|
5
|
+
* and `.mcp.json` there, but every later command resolves such a dir to a
|
|
6
|
+
* private scratch root, so the initialized store was never used. Refusing
|
|
7
|
+
* with a clear next step is less surprising than initializing a hidden root.
|
|
8
|
+
*
|
|
9
|
+
* @module cli/handlers/init-guard
|
|
10
|
+
*/
|
|
11
|
+
import { isSharedSystemDir } from '../../kernel/shared-dirs.js';
|
|
12
|
+
/** Error message when `cwd` must not be initialized, otherwise null. */
|
|
13
|
+
export function sharedDirInitError(cwd, env = process.env) {
|
|
14
|
+
if (env.AQE_PROJECT_ROOT)
|
|
15
|
+
return null;
|
|
16
|
+
if (!isSharedSystemDir(cwd))
|
|
17
|
+
return null;
|
|
18
|
+
return (`Refusing to initialize in "${cwd}": it is a shared temp/system directory, ` +
|
|
19
|
+
'so a store here would be shared by every unrelated project below it and ' +
|
|
20
|
+
'later commands would not use it. Create a project directory first ' +
|
|
21
|
+
'(mkdir my-project && cd my-project) or set AQE_PROJECT_ROOT to choose a root.');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=init-guard.js.map
|
|
@@ -80,6 +80,9 @@ export interface InitJsonOutput {
|
|
|
80
80
|
error?: string;
|
|
81
81
|
};
|
|
82
82
|
};
|
|
83
|
+
/** #1017: pre-3.15.6 test-named skill files removed / kept by init. */
|
|
84
|
+
retiredAssetsRemoved?: string[];
|
|
85
|
+
retiredAssetsKept?: string[];
|
|
83
86
|
};
|
|
84
87
|
totalDurationMs: number;
|
|
85
88
|
timestamp: string;
|