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
|
@@ -49,6 +49,11 @@ export interface TrendData {
|
|
|
49
49
|
export declare class ResultSaver {
|
|
50
50
|
private readonly baseDir;
|
|
51
51
|
private readonly resultsDir;
|
|
52
|
+
/**
|
|
53
|
+
* @param baseDir Store directory. Defaults to the resolved project's
|
|
54
|
+
* `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
|
|
55
|
+
* `<tmp>/.agentic-qe/results` when run from a shared dir).
|
|
56
|
+
*/
|
|
52
57
|
constructor(baseDir?: string);
|
|
53
58
|
/**
|
|
54
59
|
* Save task result in appropriate format(s)
|
|
@@ -71,12 +76,29 @@ export declare class ResultSaver {
|
|
|
71
76
|
private generateSecurityReport;
|
|
72
77
|
private generateQualityReport;
|
|
73
78
|
private ensureDirectories;
|
|
79
|
+
/** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
|
|
74
80
|
private formatTimestamp;
|
|
81
|
+
/** Short task-id fragment plus random hex, unique per save. */
|
|
82
|
+
private uniqueSuffix;
|
|
83
|
+
/** Write `filePath` via a temp file and rename, replacing any previous version. */
|
|
84
|
+
private replaceFile;
|
|
85
|
+
/**
|
|
86
|
+
* Create `filePath` exclusively and record it. If the name is taken (a
|
|
87
|
+
* reused custom prefix), write to
|
|
88
|
+
* `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
|
|
89
|
+
*/
|
|
90
|
+
private writeNewFile;
|
|
75
91
|
private sanitizeFilename;
|
|
76
92
|
private getTestExtension;
|
|
77
93
|
private createFileEntry;
|
|
78
94
|
private extractSummary;
|
|
95
|
+
/**
|
|
96
|
+
* Append to index.json. Concurrent saves read-modify-write the same file, so
|
|
97
|
+
* updates are serialized per index path in this process and the file is
|
|
98
|
+
* replaced atomically, otherwise one save's entry is lost (#1007).
|
|
99
|
+
*/
|
|
79
100
|
private updateIndex;
|
|
101
|
+
private writeIndexEntry;
|
|
80
102
|
}
|
|
81
103
|
export declare function createResultSaver(baseDir?: string): ResultSaver;
|
|
82
104
|
//# sourceMappingURL=result-saver.d.ts.map
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from 'fs/promises';
|
|
6
6
|
import * as path from 'path';
|
|
7
|
-
import { createHash } from 'crypto';
|
|
7
|
+
import { createHash, randomBytes } from 'crypto';
|
|
8
8
|
import { safeJsonParse } from '../shared/safe-json.js';
|
|
9
|
+
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
9
10
|
function securityReportExecution(data) {
|
|
10
11
|
return data.evidence?.completeness === 'complete' ? 'completed'
|
|
11
12
|
: data.evidence?.completeness === 'partial' ? 'partial'
|
|
@@ -77,7 +78,12 @@ const TEST_FILE_PATTERNS = {
|
|
|
77
78
|
export class ResultSaver {
|
|
78
79
|
baseDir;
|
|
79
80
|
resultsDir;
|
|
80
|
-
|
|
81
|
+
/**
|
|
82
|
+
* @param baseDir Store directory. Defaults to the resolved project's
|
|
83
|
+
* `.agentic-qe` (review of #1026 N2: a cwd-relative default wrote
|
|
84
|
+
* `<tmp>/.agentic-qe/results` when run from a shared dir).
|
|
85
|
+
*/
|
|
86
|
+
constructor(baseDir = getProjectStorePath()) {
|
|
81
87
|
this.baseDir = baseDir;
|
|
82
88
|
this.resultsDir = path.join(baseDir, 'results');
|
|
83
89
|
}
|
|
@@ -94,8 +100,13 @@ export class ResultSaver {
|
|
|
94
100
|
// Ensure directories exist
|
|
95
101
|
await this.ensureDirectories(taskType);
|
|
96
102
|
// Get timestamp string for filenames
|
|
103
|
+
// #1007: millisecond timestamp plus a per-save suffix. Names to the second
|
|
104
|
+
// let two saves in the same second overwrite each other. Report, manifest
|
|
105
|
+
// and data files are created exclusively (see writeNewFile), so even a
|
|
106
|
+
// reused custom prefix never replaces an earlier result. Generated test
|
|
107
|
+
// files are the exception: one file per test name (see replaceFile).
|
|
97
108
|
const tsStr = this.formatTimestamp(timestamp);
|
|
98
|
-
const prefix = options.filenamePrefix || tsStr
|
|
109
|
+
const prefix = options.filenamePrefix || `${tsStr}_${this.uniqueSuffix(taskId)}`;
|
|
99
110
|
// Save based on task type
|
|
100
111
|
switch (taskType) {
|
|
101
112
|
case 'generate-tests':
|
|
@@ -159,8 +170,7 @@ export class ResultSaver {
|
|
|
159
170
|
framework: options.framework || 'vitest',
|
|
160
171
|
tests: data.tests,
|
|
161
172
|
}, null, 2);
|
|
162
|
-
await
|
|
163
|
-
files.push(await this.createFileEntry(manifestPath, 'json'));
|
|
173
|
+
files.push(await this.writeNewFile(manifestPath, manifestContent, 'json'));
|
|
164
174
|
// Save individual test files if code is provided
|
|
165
175
|
if (data.tests) {
|
|
166
176
|
for (const test of data.tests) {
|
|
@@ -168,16 +178,17 @@ export class ResultSaver {
|
|
|
168
178
|
const ext = this.getTestExtension(options.language || 'typescript', options.framework || 'vitest');
|
|
169
179
|
const testFilename = this.sanitizeFilename(test.name) + ext;
|
|
170
180
|
const testPath = path.join(testDir, testFilename);
|
|
171
|
-
|
|
172
|
-
|
|
181
|
+
// Review of #1026 N7: a generated test keeps one file per test name
|
|
182
|
+
// (replaced atomically), unlike reports, so numbered copies never
|
|
183
|
+
// pile up for a test runner to collect.
|
|
184
|
+
files.push(await this.replaceFile(testPath, test.code, 'source'));
|
|
173
185
|
}
|
|
174
186
|
}
|
|
175
187
|
}
|
|
176
188
|
// Save markdown report
|
|
177
189
|
const reportPath = path.join(this.resultsDir, 'tests', `${prefix}_report.md`);
|
|
178
190
|
const reportContent = this.generateTestReport(data, options);
|
|
179
|
-
await
|
|
180
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
191
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
181
192
|
return files;
|
|
182
193
|
}
|
|
183
194
|
async saveCoverage(result, prefix, options) {
|
|
@@ -189,8 +200,7 @@ export class ResultSaver {
|
|
|
189
200
|
const coverageDir = path.join(this.resultsDir, 'coverage');
|
|
190
201
|
// Save JSON
|
|
191
202
|
const jsonPath = path.join(coverageDir, `${prefix}_coverage.json`);
|
|
192
|
-
await
|
|
193
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
203
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
194
204
|
// Save LCOV format — ONLY for genuinely measured coverage.
|
|
195
205
|
//
|
|
196
206
|
// #569/ADR-126: LCOV has nowhere to record provenance. Emitting it for an
|
|
@@ -202,14 +212,12 @@ export class ResultSaver {
|
|
|
202
212
|
if (options.includeSecondary !== false && data.measured === true) {
|
|
203
213
|
const lcovPath = path.join(coverageDir, `${prefix}_coverage.lcov`);
|
|
204
214
|
const lcovContent = this.generateLcov(data);
|
|
205
|
-
await
|
|
206
|
-
files.push(await this.createFileEntry(lcovPath, 'lcov'));
|
|
215
|
+
files.push(await this.writeNewFile(lcovPath, lcovContent, 'lcov'));
|
|
207
216
|
}
|
|
208
217
|
// Save markdown report
|
|
209
218
|
const reportPath = path.join(coverageDir, `${prefix}_report.md`);
|
|
210
219
|
const reportContent = this.generateCoverageReport(data);
|
|
211
|
-
await
|
|
212
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
220
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
213
221
|
return files;
|
|
214
222
|
}
|
|
215
223
|
async saveSecurityScan(result, prefix, options) {
|
|
@@ -218,20 +226,17 @@ export class ResultSaver {
|
|
|
218
226
|
const securityDir = path.join(this.resultsDir, 'security');
|
|
219
227
|
// Save JSON
|
|
220
228
|
const jsonPath = path.join(securityDir, `${prefix}_scan.json`);
|
|
221
|
-
await
|
|
222
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
229
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
223
230
|
// Save SARIF format
|
|
224
231
|
if (options.includeSecondary !== false) {
|
|
225
232
|
const sarifPath = path.join(securityDir, `${prefix}_scan.sarif`);
|
|
226
233
|
const sarifContent = this.generateSarif(data);
|
|
227
|
-
await
|
|
228
|
-
files.push(await this.createFileEntry(sarifPath, 'sarif'));
|
|
234
|
+
files.push(await this.writeNewFile(sarifPath, sarifContent, 'sarif'));
|
|
229
235
|
}
|
|
230
236
|
// Save markdown report
|
|
231
237
|
const reportPath = path.join(securityDir, `${prefix}_report.md`);
|
|
232
238
|
const reportContent = this.generateSecurityReport(data);
|
|
233
|
-
await
|
|
234
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
239
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
235
240
|
return files;
|
|
236
241
|
}
|
|
237
242
|
async saveQualityAssessment(result, prefix, _options) {
|
|
@@ -240,13 +245,11 @@ export class ResultSaver {
|
|
|
240
245
|
const qualityDir = path.join(this.resultsDir, 'quality');
|
|
241
246
|
// Save JSON
|
|
242
247
|
const jsonPath = path.join(qualityDir, `${prefix}_assessment.json`);
|
|
243
|
-
await
|
|
244
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
248
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
245
249
|
// Save markdown report
|
|
246
250
|
const reportPath = path.join(qualityDir, `${prefix}_report.md`);
|
|
247
251
|
const reportContent = this.generateQualityReport(data);
|
|
248
|
-
await
|
|
249
|
-
files.push(await this.createFileEntry(reportPath, 'markdown'));
|
|
252
|
+
files.push(await this.writeNewFile(reportPath, reportContent, 'markdown'));
|
|
250
253
|
return files;
|
|
251
254
|
}
|
|
252
255
|
async saveCodeIndex(result, prefix, _options) {
|
|
@@ -256,8 +259,7 @@ export class ResultSaver {
|
|
|
256
259
|
await fs.mkdir(indexDir, { recursive: true });
|
|
257
260
|
// Save JSON
|
|
258
261
|
const jsonPath = path.join(indexDir, `${prefix}_index.json`);
|
|
259
|
-
await
|
|
260
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
262
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(data, null, 2), 'json'));
|
|
261
263
|
return files;
|
|
262
264
|
}
|
|
263
265
|
async saveDefectPrediction(result, prefix, _options) {
|
|
@@ -266,8 +268,7 @@ export class ResultSaver {
|
|
|
266
268
|
await fs.mkdir(defectDir, { recursive: true });
|
|
267
269
|
// Save JSON
|
|
268
270
|
const jsonPath = path.join(defectDir, `${prefix}_prediction.json`);
|
|
269
|
-
await
|
|
270
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
271
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
271
272
|
return files;
|
|
272
273
|
}
|
|
273
274
|
async saveContractValidation(result, prefix, _options) {
|
|
@@ -276,8 +277,7 @@ export class ResultSaver {
|
|
|
276
277
|
await fs.mkdir(contractDir, { recursive: true });
|
|
277
278
|
// Save JSON
|
|
278
279
|
const jsonPath = path.join(contractDir, `${prefix}_validation.json`);
|
|
279
|
-
await
|
|
280
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
280
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
281
281
|
return files;
|
|
282
282
|
}
|
|
283
283
|
async saveAccessibilityTest(result, prefix, _options) {
|
|
@@ -286,8 +286,7 @@ export class ResultSaver {
|
|
|
286
286
|
await fs.mkdir(a11yDir, { recursive: true });
|
|
287
287
|
// Save JSON
|
|
288
288
|
const jsonPath = path.join(a11yDir, `${prefix}_test.json`);
|
|
289
|
-
await
|
|
290
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
289
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
291
290
|
return files;
|
|
292
291
|
}
|
|
293
292
|
async saveChaosTest(result, prefix, _options) {
|
|
@@ -296,8 +295,7 @@ export class ResultSaver {
|
|
|
296
295
|
await fs.mkdir(chaosDir, { recursive: true });
|
|
297
296
|
// Save JSON
|
|
298
297
|
const jsonPath = path.join(chaosDir, `${prefix}_chaos.json`);
|
|
299
|
-
await
|
|
300
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
298
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
301
299
|
return files;
|
|
302
300
|
}
|
|
303
301
|
async saveGeneric(taskType, result, prefix) {
|
|
@@ -305,8 +303,7 @@ export class ResultSaver {
|
|
|
305
303
|
const genericDir = path.join(this.resultsDir, 'other');
|
|
306
304
|
await fs.mkdir(genericDir, { recursive: true });
|
|
307
305
|
const jsonPath = path.join(genericDir, `${prefix}_${taskType}.json`);
|
|
308
|
-
await
|
|
309
|
-
files.push(await this.createFileEntry(jsonPath, 'json'));
|
|
306
|
+
files.push(await this.writeNewFile(jsonPath, JSON.stringify(result, null, 2), 'json'));
|
|
310
307
|
return files;
|
|
311
308
|
}
|
|
312
309
|
// ==========================================================================
|
|
@@ -486,7 +483,12 @@ ${data.recommendations.map((r, i) => `${i + 1}. ${r}`).join('\n')}
|
|
|
486
483
|
|
|
487
484
|
## Quality Score
|
|
488
485
|
|
|
489
|
-
${typeof data.qualityScore
|
|
486
|
+
${typeof data.qualityScore !== 'number' ? 'N/A — measured gate uses individual checks.'
|
|
487
|
+
: data.qualityScore < 0 ? 'Not measured — no requested metric had measured data (#1011).'
|
|
488
|
+
: data.evidenceStatus === 'insufficient-evidence'
|
|
489
|
+
? `Subset score over measured metrics: ${data.qualityScore.toFixed(1)} (not a verdict)`
|
|
490
|
+
+ (data.scoreBasis?.length ? `\nBased on: ${data.scoreBasis.join(', ')}` : '')
|
|
491
|
+
: `**${data.qualityScore.toFixed(1)}** / 100`}
|
|
490
492
|
|
|
491
493
|
## Metrics
|
|
492
494
|
|
|
@@ -515,8 +517,51 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
515
517
|
await fs.mkdir(dir, { recursive: true });
|
|
516
518
|
}
|
|
517
519
|
}
|
|
520
|
+
/** `YYYY-MM-DDTHH-MM-SS-mmm` (#1007: milliseconds, not seconds). */
|
|
518
521
|
formatTimestamp(date) {
|
|
519
|
-
return date.toISOString().replace(/[:.]/g, '-').slice(0,
|
|
522
|
+
return date.toISOString().replace(/[:.]/g, '-').slice(0, 23);
|
|
523
|
+
}
|
|
524
|
+
/** Short task-id fragment plus random hex, unique per save. */
|
|
525
|
+
uniqueSuffix(taskId) {
|
|
526
|
+
const idPart = this.sanitizeFilename(taskId).slice(-12) || 'task';
|
|
527
|
+
return `${idPart}-${randomBytes(3).toString('hex')}`;
|
|
528
|
+
}
|
|
529
|
+
/** Write `filePath` via a temp file and rename, replacing any previous version. */
|
|
530
|
+
async replaceFile(filePath, content, format) {
|
|
531
|
+
const tmpPath = `${filePath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
|
|
532
|
+
try {
|
|
533
|
+
await fs.writeFile(tmpPath, content, { flag: 'wx' });
|
|
534
|
+
await fs.rename(tmpPath, filePath);
|
|
535
|
+
}
|
|
536
|
+
catch (error) {
|
|
537
|
+
await fs.rm(tmpPath, { force: true });
|
|
538
|
+
throw error;
|
|
539
|
+
}
|
|
540
|
+
return this.createFileEntry(filePath, format);
|
|
541
|
+
}
|
|
542
|
+
/**
|
|
543
|
+
* Create `filePath` exclusively and record it. If the name is taken (a
|
|
544
|
+
* reused custom prefix), write to
|
|
545
|
+
* `name-1.ext`, `name-2.ext`, … instead of replacing the earlier file (#1007).
|
|
546
|
+
*/
|
|
547
|
+
async writeNewFile(filePath, content, format) {
|
|
548
|
+
const dir = path.dirname(filePath);
|
|
549
|
+
const base = path.basename(filePath);
|
|
550
|
+
const dot = base.indexOf('.', 1);
|
|
551
|
+
const stem = dot > 0 ? base.slice(0, dot) : base;
|
|
552
|
+
const ext = dot > 0 ? base.slice(dot) : '';
|
|
553
|
+
for (let attempt = 0; attempt < 1000; attempt++) {
|
|
554
|
+
const candidate = attempt === 0 ? filePath : path.join(dir, `${stem}-${attempt}${ext}`);
|
|
555
|
+
try {
|
|
556
|
+
await fs.writeFile(candidate, content, { flag: 'wx' });
|
|
557
|
+
return this.createFileEntry(candidate, format);
|
|
558
|
+
}
|
|
559
|
+
catch (error) {
|
|
560
|
+
if (error.code !== 'EEXIST')
|
|
561
|
+
throw error;
|
|
562
|
+
}
|
|
563
|
+
}
|
|
564
|
+
throw new Error(`ResultSaver: no free file name for ${filePath}`);
|
|
520
565
|
}
|
|
521
566
|
sanitizeFilename(name) {
|
|
522
567
|
return name.replace(/[^a-zA-Z0-9_-]/g, '_').toLowerCase();
|
|
@@ -555,7 +600,10 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
555
600
|
};
|
|
556
601
|
case 'assess-quality':
|
|
557
602
|
return {
|
|
558
|
-
|
|
603
|
+
// #1021: -1 means "not measured", and a subset score under insufficient
|
|
604
|
+
// evidence is not a verdict; keep both out of the index and trends.
|
|
605
|
+
...(typeof data.qualityScore === 'number' && data.qualityScore >= 0
|
|
606
|
+
&& data.evidenceStatus !== 'insufficient-evidence' ? { qualityScore: data.qualityScore } : {}),
|
|
559
607
|
passed: data.passed,
|
|
560
608
|
...(data.evidenceStatus !== undefined ? { evidenceStatus: data.evidenceStatus } : {}),
|
|
561
609
|
};
|
|
@@ -568,8 +616,26 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
568
616
|
return {};
|
|
569
617
|
}
|
|
570
618
|
}
|
|
571
|
-
|
|
572
|
-
|
|
619
|
+
/**
|
|
620
|
+
* Append to index.json. Concurrent saves read-modify-write the same file, so
|
|
621
|
+
* updates are serialized per index path in this process and the file is
|
|
622
|
+
* replaced atomically, otherwise one save's entry is lost (#1007).
|
|
623
|
+
*/
|
|
624
|
+
updateIndex(taskId, taskType, timestamp, files, summary) {
|
|
625
|
+
const indexPath = path.resolve(this.resultsDir, 'index.json');
|
|
626
|
+
const previous = indexUpdateQueues.get(indexPath) ?? Promise.resolve();
|
|
627
|
+
const next = previous
|
|
628
|
+
.catch(() => undefined)
|
|
629
|
+
.then(() => this.writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary));
|
|
630
|
+
indexUpdateQueues.set(indexPath, next);
|
|
631
|
+
const settle = () => {
|
|
632
|
+
if (indexUpdateQueues.get(indexPath) === next)
|
|
633
|
+
indexUpdateQueues.delete(indexPath);
|
|
634
|
+
};
|
|
635
|
+
next.then(settle, settle);
|
|
636
|
+
return next;
|
|
637
|
+
}
|
|
638
|
+
async writeIndexEntry(indexPath, taskId, taskType, timestamp, files, summary) {
|
|
573
639
|
let index;
|
|
574
640
|
try {
|
|
575
641
|
const content = await fs.readFile(indexPath, 'utf-8');
|
|
@@ -598,9 +664,13 @@ ${data.recommendations.length === 0 ? noRecommendations : data.recommendations.m
|
|
|
598
664
|
if (index.results.length > 100) {
|
|
599
665
|
index.results = index.results.slice(-100);
|
|
600
666
|
}
|
|
601
|
-
|
|
667
|
+
const tmpPath = `${indexPath}.${process.pid}.${randomBytes(4).toString('hex')}.tmp`;
|
|
668
|
+
await fs.writeFile(tmpPath, JSON.stringify(index, null, 2));
|
|
669
|
+
await fs.rename(tmpPath, indexPath);
|
|
602
670
|
}
|
|
603
671
|
}
|
|
672
|
+
/** Pending index.json updates, keyed by absolute index path (#1007). */
|
|
673
|
+
const indexUpdateQueues = new Map();
|
|
604
674
|
// Factory function
|
|
605
675
|
export function createResultSaver(baseDir) {
|
|
606
676
|
return new ResultSaver(baseDir);
|
|
@@ -22,6 +22,7 @@ type CoverageAnalyzerService = import('../domains/coverage-analysis').CoverageAn
|
|
|
22
22
|
type SecurityScannerService = import('../domains/security-compliance').SecurityScannerService;
|
|
23
23
|
type KnowledgeGraphService = import('../domains/code-intelligence').KnowledgeGraphService;
|
|
24
24
|
type QualityAnalyzerService = import('../domains/quality-assessment').QualityAnalyzerService;
|
|
25
|
+
type ProjectMetricsCollector = import('./handlers/handler-types').ProjectMetricsCollector;
|
|
25
26
|
export interface TaskExecutorConfig {
|
|
26
27
|
timeout: number;
|
|
27
28
|
maxRetries: number;
|
|
@@ -106,6 +107,12 @@ export declare class DomainTaskExecutor implements TaskHandlerContext {
|
|
|
106
107
|
*/
|
|
107
108
|
private resolveLLMRouter;
|
|
108
109
|
getKnowledgeGraph(): KnowledgeGraphService;
|
|
110
|
+
/**
|
|
111
|
+
* #999: the code-intelligence coordinator, so the MCP index-code handler can
|
|
112
|
+
* run the same project-metric step as `aqe code index`. Loads the domain
|
|
113
|
+
* lazily; undefined when it is disabled or fails to load.
|
|
114
|
+
*/
|
|
115
|
+
getCodeIntelligenceCoordinator(): Promise<ProjectMetricsCollector | undefined>;
|
|
109
116
|
getQualityAnalyzer(): QualityAnalyzerService;
|
|
110
117
|
private registerHandlers;
|
|
111
118
|
/**
|
|
@@ -16,6 +16,7 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
16
16
|
import { isCallerInputError, toErrorMessage } from '../shared/error-utils.js';
|
|
17
17
|
import { InsufficientQualityEvidenceError } from '../domains/quality-assessment/quality-evidence.js';
|
|
18
18
|
import { createResultSaver } from './result-saver.js';
|
|
19
|
+
import { getProjectStorePath } from '../kernel/project-root.js';
|
|
19
20
|
import { createLogger } from '../logging/logger-factory.js';
|
|
20
21
|
import { getClaudeModelForTier } from '../shared/llm/model-registry.js';
|
|
21
22
|
// ADR-051: Agent Booster integration for Tier 0 tasks
|
|
@@ -54,9 +55,15 @@ function resolveQualityAnalyzerService(memory) {
|
|
|
54
55
|
const factory = DomainServiceRegistry.resolve(ServiceKeys.QualityAnalyzerService);
|
|
55
56
|
return factory(memory);
|
|
56
57
|
}
|
|
57
|
-
/**
|
|
58
|
+
/**
|
|
59
|
+
* #996: structured details, only from error types known to carry them.
|
|
60
|
+
* #1021 round 2b: a caller-input error is marked so learners do not record
|
|
61
|
+
* the caller's mistake as a component failure.
|
|
62
|
+
*/
|
|
58
63
|
function errorDetailsOf(error) {
|
|
59
|
-
|
|
64
|
+
if (error instanceof InsufficientQualityEvidenceError)
|
|
65
|
+
return { ...error.toDetails() };
|
|
66
|
+
return isCallerInputError(error) ? { callerError: true } : undefined;
|
|
60
67
|
}
|
|
61
68
|
// ============================================================================
|
|
62
69
|
// ADR-051: Model Routing Support
|
|
@@ -141,7 +148,8 @@ export class DomainTaskExecutor {
|
|
|
141
148
|
maxRetries: config?.maxRetries ?? 3,
|
|
142
149
|
enableCaching: config?.enableCaching ?? true,
|
|
143
150
|
saveResults: config?.saveResults ?? true,
|
|
144
|
-
|
|
151
|
+
// Review of #1026 N2: resolve the project store, not a cwd-relative one.
|
|
152
|
+
resultsDir: config?.resultsDir ?? getProjectStorePath(),
|
|
145
153
|
defaultLanguage: config?.defaultLanguage ?? 'typescript',
|
|
146
154
|
defaultFramework: config?.defaultFramework ?? 'vitest',
|
|
147
155
|
};
|
|
@@ -240,6 +248,25 @@ export class DomainTaskExecutor {
|
|
|
240
248
|
}
|
|
241
249
|
return this.knowledgeGraph;
|
|
242
250
|
}
|
|
251
|
+
/**
|
|
252
|
+
* #999: the code-intelligence coordinator, so the MCP index-code handler can
|
|
253
|
+
* run the same project-metric step as `aqe code index`. Loads the domain
|
|
254
|
+
* lazily; undefined when it is disabled or fails to load.
|
|
255
|
+
*/
|
|
256
|
+
async getCodeIntelligenceCoordinator() {
|
|
257
|
+
try {
|
|
258
|
+
const api = this.kernel.getDomainAPIAsync
|
|
259
|
+
? await this.kernel.getDomainAPIAsync('code-intelligence')
|
|
260
|
+
: this.kernel.getDomainAPI('code-intelligence');
|
|
261
|
+
return typeof api?.getCoordinator === 'function' ? api.getCoordinator() : undefined;
|
|
262
|
+
}
|
|
263
|
+
catch (error) {
|
|
264
|
+
logger.debug('code-intelligence coordinator unavailable for project metrics', {
|
|
265
|
+
error: error instanceof Error ? error.message : String(error),
|
|
266
|
+
});
|
|
267
|
+
return undefined;
|
|
268
|
+
}
|
|
269
|
+
}
|
|
243
270
|
getQualityAnalyzer() {
|
|
244
271
|
if (!this.qualityAnalyzer) {
|
|
245
272
|
this.qualityAnalyzer = resolveQualityAnalyzerService(this.kernel.memory);
|
|
@@ -498,12 +525,14 @@ export class DomainTaskExecutor {
|
|
|
498
525
|
await this.publishTaskFailed(task.id, errorMessage, domain, isCallerInputError(error));
|
|
499
526
|
// ADR-051: Record failed outcome
|
|
500
527
|
this.recordOutcome(task, routingTier, false, Date.now() - startTime).catch((e) => { logger.warn('recordOutcome failed', { error: e instanceof Error ? e.message : String(e), taskId: task.id }); });
|
|
528
|
+
const errorDetails = errorDetailsOf(error);
|
|
501
529
|
return {
|
|
502
530
|
taskId: task.id,
|
|
503
531
|
success: false,
|
|
504
532
|
error: errorMessage,
|
|
505
533
|
duration: Date.now() - startTime,
|
|
506
534
|
domain,
|
|
535
|
+
...(errorDetails ? { errorDetails } : {}),
|
|
507
536
|
};
|
|
508
537
|
}
|
|
509
538
|
}
|
|
@@ -9,6 +9,7 @@ import { KnowledgeGraphService, } from './services/knowledge-graph.js';
|
|
|
9
9
|
import { SemanticAnalyzerService, } from './services/semantic-analyzer.js';
|
|
10
10
|
import { toError } from '../../shared/error-utils.js';
|
|
11
11
|
import { ImpactAnalyzerService, } from './services/impact-analyzer.js';
|
|
12
|
+
import { isMeasuredGapPayload } from '../../shared/events/domain-events.js';
|
|
12
13
|
/**
|
|
13
14
|
* Code Intelligence Domain Plugin
|
|
14
15
|
* Provides knowledge graph, semantic search, and impact analysis capabilities
|
|
@@ -301,6 +302,9 @@ export class CodeIntelligencePlugin extends BaseDomainPlugin {
|
|
|
301
302
|
);
|
|
302
303
|
}
|
|
303
304
|
async handleCoverageGap(event) {
|
|
305
|
+
// #1014: only a gap found in MEASURED coverage is acted on / learned from.
|
|
306
|
+
if (!isMeasuredGapPayload(event.payload))
|
|
307
|
+
return;
|
|
304
308
|
// Coverage gap detected - update risk scores in knowledge graph
|
|
305
309
|
const payload = event.payload;
|
|
306
310
|
// Store coverage gap info for impact analysis
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { existsSync, readFileSync, readdirSync } from 'fs';
|
|
16
16
|
import { join, extname } from 'path';
|
|
17
|
+
import { AQE_STATE_DIR } from '../../../../shared/aqe-managed-dirs.js';
|
|
17
18
|
import { DEFAULT_METRIC_CONFIG, } from './interfaces.js';
|
|
18
19
|
import { countLOC, checkLOCTools } from './loc-counter.js';
|
|
19
20
|
import { countTests, checkTestRunners } from './test-counter.js';
|
|
@@ -211,6 +212,10 @@ export class MetricCollectorService {
|
|
|
211
212
|
let totalTodos = 0;
|
|
212
213
|
let totalConsole = 0;
|
|
213
214
|
const patterns = this.getPatternsForLanguage(language);
|
|
215
|
+
// #999: same exclusions as LOC/test counting (.agentic-qe anywhere; .claude at
|
|
216
|
+
// the root or next to a nested .agentic-qe)
|
|
217
|
+
const excludeDirs = new Set(this.config.excludeDirs);
|
|
218
|
+
const rootExcludeDirs = new Set(this.config.excludeRootDirs ?? []);
|
|
214
219
|
function walkDirectory(dirPath) {
|
|
215
220
|
if (!existsSync(dirPath))
|
|
216
221
|
return;
|
|
@@ -219,8 +224,10 @@ export class MetricCollectorService {
|
|
|
219
224
|
const fullPath = join(dirPath, entry.name);
|
|
220
225
|
if (entry.isDirectory()) {
|
|
221
226
|
// Skip excluded directories
|
|
222
|
-
|
|
223
|
-
|
|
227
|
+
if (excludeDirs.has(entry.name))
|
|
228
|
+
continue;
|
|
229
|
+
if (rootExcludeDirs.has(entry.name) &&
|
|
230
|
+
(dirPath === projectPath || existsSync(join(dirPath, AQE_STATE_DIR))))
|
|
224
231
|
continue;
|
|
225
232
|
walkDirectory(fullPath);
|
|
226
233
|
}
|
|
@@ -130,6 +130,15 @@ export interface MetricCollectorConfig {
|
|
|
130
130
|
timeout: number;
|
|
131
131
|
/** Directories to exclude from LOC counting */
|
|
132
132
|
excludeDirs: string[];
|
|
133
|
+
/** File names (exact match) to exclude from LOC counting, e.g. lockfiles (#999) */
|
|
134
|
+
excludeFiles: string[];
|
|
135
|
+
/**
|
|
136
|
+
* Directories excluded directly under the project root, and nested only when
|
|
137
|
+
* they sit next to a `.agentic-qe/` (a nested `aqe init`): the assets init
|
|
138
|
+
* writes. Any other directory of the same name (e.g. a plugin's own
|
|
139
|
+
* `.claude/hooks` source) is still counted (#999 review N4 / round 2b).
|
|
140
|
+
*/
|
|
141
|
+
excludeRootDirs: string[];
|
|
133
142
|
/** File patterns to include for test counting */
|
|
134
143
|
testPatterns: string[];
|
|
135
144
|
/** Enable caching of metrics (default: true) */
|
|
@@ -137,6 +146,18 @@ export interface MetricCollectorConfig {
|
|
|
137
146
|
/** Cache TTL in milliseconds (default: 300000 = 5 minutes) */
|
|
138
147
|
cacheTTL: number;
|
|
139
148
|
}
|
|
149
|
+
/**
|
|
150
|
+
* Generated dependency lockfiles. They are machine-written, often thousands of
|
|
151
|
+
* lines, and are not project code, so LOC counting skips them (#999: a 3-line
|
|
152
|
+
* project reported 1662 LOC from package-lock.json).
|
|
153
|
+
*/
|
|
154
|
+
export declare const LOC_EXCLUDED_FILE_NAMES: readonly string[];
|
|
155
|
+
/**
|
|
156
|
+
* Init-written assets: excluded at the project root, and nested only next to a
|
|
157
|
+
* `.agentic-qe/` (a nested `aqe init`). `.agentic-qe` itself is in excludeDirs
|
|
158
|
+
* (state, never source, at any depth). #999 review N4 / round 2b.
|
|
159
|
+
*/
|
|
160
|
+
export declare const PROJECT_ROOT_EXCLUDED_DIRS: readonly string[];
|
|
140
161
|
/**
|
|
141
162
|
* Default configuration values
|
|
142
163
|
*/
|
|
@@ -6,6 +6,27 @@
|
|
|
6
6
|
*
|
|
7
7
|
* @see docs/plans/AQE_V3_IMPROVEMENTS_PLAN.md - Phase 5
|
|
8
8
|
*/
|
|
9
|
+
/**
|
|
10
|
+
* Generated dependency lockfiles. They are machine-written, often thousands of
|
|
11
|
+
* lines, and are not project code, so LOC counting skips them (#999: a 3-line
|
|
12
|
+
* project reported 1662 LOC from package-lock.json).
|
|
13
|
+
*/
|
|
14
|
+
export const LOC_EXCLUDED_FILE_NAMES = Object.freeze([
|
|
15
|
+
// JS/TS
|
|
16
|
+
'package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb', 'bun.lock',
|
|
17
|
+
'deno.lock',
|
|
18
|
+
// Python
|
|
19
|
+
'poetry.lock', 'Pipfile.lock', 'uv.lock', 'pdm.lock',
|
|
20
|
+
// Rust / Go / Ruby / PHP / Elixir / Dart / .NET / Swift / Nix / Gradle
|
|
21
|
+
'Cargo.lock', 'go.sum', 'Gemfile.lock', 'composer.lock', 'mix.lock', 'pubspec.lock',
|
|
22
|
+
'packages.lock.json', 'Package.resolved', 'flake.lock', 'gradle.lockfile',
|
|
23
|
+
]);
|
|
24
|
+
/**
|
|
25
|
+
* Init-written assets: excluded at the project root, and nested only next to a
|
|
26
|
+
* `.agentic-qe/` (a nested `aqe init`). `.agentic-qe` itself is in excludeDirs
|
|
27
|
+
* (state, never source, at any depth). #999 review N4 / round 2b.
|
|
28
|
+
*/
|
|
29
|
+
export const PROJECT_ROOT_EXCLUDED_DIRS = Object.freeze(['.claude']);
|
|
9
30
|
/**
|
|
10
31
|
* Default configuration values
|
|
11
32
|
*/
|
|
@@ -20,7 +41,11 @@ export const DEFAULT_METRIC_CONFIG = {
|
|
|
20
41
|
'target', '.gradle', 'vendor', '.bundle',
|
|
21
42
|
// General
|
|
22
43
|
'.git', '.svn', '.hg',
|
|
44
|
+
// AQE runtime state: never source, at any depth (#999)
|
|
45
|
+
'.agentic-qe',
|
|
23
46
|
],
|
|
47
|
+
excludeFiles: [...LOC_EXCLUDED_FILE_NAMES],
|
|
48
|
+
excludeRootDirs: [...PROJECT_ROOT_EXCLUDED_DIRS],
|
|
24
49
|
testPatterns: ['**/*.test.ts', '**/*.spec.ts', '**/*.test.js', '**/*.spec.js'],
|
|
25
50
|
enableCache: true,
|
|
26
51
|
cacheTTL: 300000,
|
|
@@ -25,4 +25,16 @@ export declare function countLOC(projectPath: string, config?: Partial<MetricCol
|
|
|
25
25
|
* Check which LOC counting tools are available
|
|
26
26
|
*/
|
|
27
27
|
export declare function checkLOCTools(): ToolAvailability[];
|
|
28
|
+
/**
|
|
29
|
+
* cloc `--not-match-f` regex matching any of `names` exactly (basename), or
|
|
30
|
+
* null when there is nothing to exclude.
|
|
31
|
+
*/
|
|
32
|
+
export declare function excludedFileNamesRegex(names: readonly string[] | undefined): string | null;
|
|
33
|
+
/**
|
|
34
|
+
* cloc `--not-match-d` regex (with --fullpath) matching the given
|
|
35
|
+
* project-relative directories ('/'-separated) and everything below them, but
|
|
36
|
+
* no other directory of the same name (#999 review N4 / round 2b). Either
|
|
37
|
+
* path separator matches. Null when there are none.
|
|
38
|
+
*/
|
|
39
|
+
export declare function rootAnchoredDirsRegex(projectPath: string, relDirs: readonly string[] | undefined): string | null;
|
|
28
40
|
//# sourceMappingURL=loc-counter.d.ts.map
|