agentic-qe 3.15.5 → 3.15.7
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 +262 -0
- package/README.md +2 -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 +8 -6
- package/dist/cli/chunks/adapter-PEOUNYXJ.js +2 -0
- package/dist/cli/chunks/{agent-booster-wasm-CCTTGCQS.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-DHYUF3NX.js → agent-handler-PI4I7PME.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-642W7CYX.js → agent-memory-branch-J7TXHX4U.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
- package/dist/cli/chunks/{arena-MUCC7UUN.js → arena-FXESDCFR.js} +4 -4
- package/dist/cli/chunks/{arena-NW2JVAFY.js → arena-OWUGXKNT.js} +2 -2
- package/dist/cli/chunks/{audit-VKQTZJAA.js → audit-EPAWLYIZ.js} +3 -3
- package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-7ZUFVWLQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-7LKAWSBI.js → brain-handler-3W2E6TC6.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-HUNXJKM4.js → branch-enumerator-HU7VACJ4.js} +2 -2
- package/dist/cli/chunks/{browser-ZSZEYUDP.js → browser-72XOR6E2.js} +2 -2
- package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
- package/dist/cli/chunks/{chunk-PVAE65B4.js → chunk-2423JAA5.js} +1 -1
- package/dist/cli/chunks/{chunk-VLOIEVER.js → chunk-24CENUT4.js} +3 -3
- package/dist/cli/chunks/chunk-2AYBYXOA.js +4 -0
- package/dist/cli/chunks/{chunk-FWYJ6UDX.js → chunk-2E3XWKEU.js} +2 -2
- package/dist/cli/chunks/{chunk-L375O3CZ.js → chunk-2RJYA6WK.js} +2 -2
- package/dist/cli/chunks/{chunk-SDWMLT7B.js → chunk-2YVJ5OUL.js} +5 -5
- package/dist/cli/chunks/{chunk-WN55MNZ2.js → chunk-34JLY3U6.js} +2 -2
- package/dist/cli/chunks/{chunk-6ZIDZ4TJ.js → chunk-3JD2USUH.js} +2 -2
- package/dist/cli/chunks/{chunk-5BOZCMXZ.js → chunk-3RM46XFP.js} +1 -1
- package/dist/cli/chunks/{chunk-UE22ODHN.js → chunk-44DPYNPE.js} +1 -1
- package/dist/cli/chunks/{chunk-AUZXRFOX.js → chunk-4DIZ5BT6.js} +2 -2
- package/dist/cli/chunks/{chunk-RUSLEOMC.js → chunk-4G2VNW4C.js} +2 -2
- package/dist/cli/chunks/{chunk-VML4SG3X.js → chunk-56ZKQYZY.js} +3 -3
- package/dist/cli/chunks/{chunk-FHUJCVT3.js → chunk-5KCBX225.js} +2 -2
- package/dist/cli/chunks/chunk-5KS7HA37.js +2 -0
- package/dist/cli/chunks/{chunk-IJ2EXSMO.js → chunk-5PBRBS7D.js} +2 -2
- package/dist/cli/chunks/chunk-5Q22XPTH.js +2 -0
- package/dist/cli/chunks/{chunk-PDPEMBFV.js → chunk-634D2ENF.js} +2 -2
- package/dist/cli/chunks/{chunk-BYXNHGQC.js → chunk-6AYRAOCA.js} +2 -2
- package/dist/cli/chunks/{chunk-ORTBRO7F.js → chunk-6BO3WCK7.js} +2 -2
- package/dist/cli/chunks/{chunk-6LG5UEQE.js → chunk-6FEQ73BF.js} +2 -2
- package/dist/cli/chunks/{chunk-JYY7AYGA.js → chunk-6JT73S5B.js} +1 -1
- package/dist/cli/chunks/{chunk-LNO5IWGH.js → chunk-6OS7HREG.js} +1 -1
- package/dist/cli/chunks/{chunk-XNEEYXR2.js → chunk-6PKCQXEW.js} +2 -2
- package/dist/cli/chunks/{chunk-KHCALIFP.js → chunk-7EX4DEQR.js} +2 -2
- package/dist/cli/chunks/chunk-7UCVYYWL.js +3 -0
- package/dist/cli/chunks/chunk-AAA4SHEG.js +2 -0
- package/dist/cli/chunks/{chunk-DTJODGCE.js → chunk-AXO7OOOA.js} +2 -2
- package/dist/cli/chunks/{chunk-ZT3GUYM5.js → chunk-B7M323VL.js} +2 -2
- package/dist/cli/chunks/{chunk-L6SVCNXK.js → chunk-BB7OLQKO.js} +1 -1
- package/dist/cli/chunks/{chunk-6UYN5PHA.js → chunk-BTIBXGVQ.js} +4 -4
- package/dist/cli/chunks/chunk-BTYKGVJ5.js +2 -0
- package/dist/cli/chunks/{chunk-6JFGB2JB.js → chunk-C2CUPJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-EAYQCBXL.js → chunk-C2MDBBFF.js} +3 -3
- package/dist/cli/chunks/{chunk-3AYYGR6W.js → chunk-CG5DZCOZ.js} +1 -1
- package/dist/cli/chunks/chunk-CIFWOMNX.js +2 -0
- package/dist/cli/chunks/{chunk-Y2WMPEUP.js → chunk-CWPRU7ZI.js} +2 -2
- package/dist/cli/chunks/{chunk-XNHB6TLC.js → chunk-CXTJ47QS.js} +2 -2
- package/dist/cli/chunks/{chunk-4PT5KNXL.js → chunk-DCJW2DPL.js} +4 -4
- package/dist/cli/chunks/{chunk-VCKDVOPD.js → chunk-DGK6GQMO.js} +2 -2
- package/dist/cli/chunks/{chunk-47GEI2LT.js → chunk-DVPGBDBP.js} +3 -3
- package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
- package/dist/cli/chunks/{chunk-CXOXUBYU.js → chunk-ECSLJJOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-A2WOQO2N.js → chunk-ED32XJ5R.js} +2 -2
- package/dist/cli/chunks/{chunk-35MDATQE.js → chunk-EDU72RTW.js} +1 -1
- package/dist/cli/chunks/{chunk-PCCIZFD7.js → chunk-EL75G2A3.js} +1 -1
- package/dist/cli/chunks/{chunk-4UXPDV7E.js → chunk-EV2BYY6T.js} +1 -1
- package/dist/cli/chunks/{chunk-3YASZPLO.js → chunk-F62EKVVC.js} +2 -2
- package/dist/cli/chunks/{chunk-AQN5EDBM.js → chunk-FTTFJ7SJ.js} +1 -1
- package/dist/cli/chunks/chunk-FVBFASOD.js +2 -0
- package/dist/cli/chunks/{chunk-QXY3IRBW.js → chunk-G762PEFO.js} +26 -26
- package/dist/cli/chunks/{chunk-A5J4XJS6.js → chunk-G7YTZTGU.js} +1 -1
- package/dist/cli/chunks/{chunk-YINFES3E.js → chunk-GY2SAIXP.js} +2 -2
- package/dist/cli/chunks/chunk-H4WHDFB5.js +4 -0
- package/dist/cli/chunks/chunk-HLZATDD2.js +2 -0
- package/dist/cli/chunks/{chunk-7EZLOC4K.js → chunk-HPG7354V.js} +2 -2
- package/dist/cli/chunks/{chunk-HLFDC4SF.js → chunk-HSDOOFV7.js} +1 -1
- package/dist/cli/chunks/{chunk-MQGEZA2A.js → chunk-HTWIGQL4.js} +2 -2
- package/dist/cli/chunks/{chunk-HBYQYGXP.js → chunk-HXBAQKMH.js} +2 -2
- package/dist/cli/chunks/chunk-HZFT3P5B.js +2 -0
- package/dist/cli/chunks/{chunk-MS3Z2CP5.js → chunk-I7H4IP7T.js} +2 -2
- package/dist/cli/chunks/{chunk-IHFUEPZH.js → chunk-IARSGAG7.js} +2 -2
- package/dist/cli/chunks/{chunk-ZTC5FBL6.js → chunk-IC2WSSD5.js} +8 -8
- package/dist/cli/chunks/{chunk-GKPRECLL.js → chunk-ICPALF4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-FQKEZVN6.js → chunk-IWQQIXHO.js} +2 -2
- package/dist/cli/chunks/{chunk-DWZI3IVB.js → chunk-IYQ7XNE5.js} +2 -2
- package/dist/cli/chunks/{chunk-ZLBBX24Q.js → chunk-J26GADQE.js} +418 -412
- package/dist/cli/chunks/{chunk-NMJVG22Z.js → chunk-J43DV3ME.js} +1 -1
- package/dist/cli/chunks/{chunk-EUEHBERE.js → chunk-JFPXCQNP.js} +1 -1
- package/dist/cli/chunks/{chunk-3YNP33GB.js → chunk-JK6B3ULP.js} +2 -2
- package/dist/cli/chunks/{chunk-FBEXG4HD.js → chunk-JPHDMHFG.js} +2 -2
- package/dist/cli/chunks/{chunk-U6OVPMQX.js → chunk-JVYPXW6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-X52TMBHU.js → chunk-JY4AIEZ7.js} +1 -1
- package/dist/cli/chunks/{chunk-MNQ36MAF.js → chunk-JY4WLN3K.js} +2 -2
- package/dist/cli/chunks/{chunk-E4VIVMDL.js → chunk-JYXOFN3E.js} +2 -2
- package/dist/cli/chunks/{chunk-CR2JUANW.js → chunk-K7W55B7Q.js} +3 -3
- package/dist/cli/chunks/{chunk-WLIYWBQR.js → chunk-KPOPBUUJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DXVZBJE4.js → chunk-LDXQRNTT.js} +1 -1
- package/dist/cli/chunks/{chunk-W3ZGNNDV.js → chunk-LDZWIV2O.js} +1 -1
- package/dist/cli/chunks/{chunk-VRJPH3LG.js → chunk-LGBN7TKC.js} +2 -2
- package/dist/cli/chunks/{chunk-RUJLVJDE.js → chunk-LMEU64TR.js} +2 -2
- package/dist/cli/chunks/{chunk-JI77KJP7.js → chunk-LP4AS2E4.js} +1 -1
- package/dist/cli/chunks/{chunk-QPV3OKX2.js → chunk-LQOVA4YX.js} +2 -2
- package/dist/cli/chunks/{chunk-NLDFNAOS.js → chunk-LVEX4GID.js} +2 -2
- package/dist/cli/chunks/{chunk-U4TV75AC.js → chunk-M63QB466.js} +2 -2
- package/dist/cli/chunks/{chunk-SAPIRK2G.js → chunk-MDC4G323.js} +1 -1
- package/dist/cli/chunks/chunk-MHZPC4HJ.js +2 -0
- package/dist/cli/chunks/{chunk-WR64BKUE.js → chunk-MJJC6HUK.js} +1 -1
- package/dist/cli/chunks/{chunk-Y7GPLOXB.js → chunk-MKFQNCXI.js} +2 -2
- package/dist/cli/chunks/{chunk-BZFT4QDQ.js → chunk-MMXG3LL6.js} +2 -2
- package/dist/cli/chunks/{chunk-HGBJ2QQ4.js → chunk-MNCF643K.js} +2 -2
- package/dist/cli/chunks/{chunk-XIE7OHML.js → chunk-MNZFEIE5.js} +1 -1
- package/dist/cli/chunks/{chunk-FE3AIZI6.js → chunk-MQ6OF6DU.js} +1 -1
- package/dist/cli/chunks/{chunk-3QD7U3FY.js → chunk-MRHM4COP.js} +2 -2
- package/dist/cli/chunks/{chunk-663ZFPUL.js → chunk-N4PMPSJJ.js} +2 -2
- package/dist/cli/chunks/{chunk-DL5JENWD.js → chunk-NZQPP533.js} +3 -3
- package/dist/cli/chunks/{chunk-4XSCZVON.js → chunk-OA4GR3EZ.js} +2 -2
- package/dist/cli/chunks/{chunk-IJOFZBXD.js → chunk-OJEZNLB6.js} +2 -2
- package/dist/cli/chunks/{chunk-OU4ZAWCC.js → chunk-ONVALAZN.js} +2 -2
- package/dist/cli/chunks/{chunk-A337MD3C.js → chunk-PEKDSJBC.js} +2 -2
- package/dist/cli/chunks/{chunk-D3G2NN7F.js → chunk-PG64YV6C.js} +66 -65
- package/dist/cli/chunks/{chunk-VYDNLQJN.js → chunk-PQV7E7XH.js} +2 -2
- package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
- package/dist/cli/chunks/{chunk-LRASYSGV.js → chunk-PUECC4WI.js} +2 -2
- package/dist/cli/chunks/{chunk-3OAQPN2N.js → chunk-PXZKPUW6.js} +2 -2
- package/dist/cli/chunks/chunk-PYHYOKYT.js +2 -0
- package/dist/cli/chunks/{chunk-WT3JC4A6.js → chunk-PZG3542B.js} +2 -2
- package/dist/cli/chunks/{chunk-RMJ7PJOS.js → chunk-Q2T5FXEA.js} +2 -2
- package/dist/cli/chunks/chunk-QJE6ZW2X.js +6 -0
- package/dist/cli/chunks/{chunk-2XYTS2WY.js → chunk-QNQSM2OG.js} +2 -2
- package/dist/cli/chunks/{chunk-EVCFUYYK.js → chunk-QQT6QENQ.js} +9 -9
- package/dist/cli/chunks/{chunk-VH3EB6ZG.js → chunk-QVG4ZDXX.js} +3 -3
- package/dist/cli/chunks/chunk-QWLTHFZW.js +16 -0
- package/dist/cli/chunks/{chunk-GGDKOJVF.js → chunk-RCYLCA7E.js} +10 -6
- package/dist/cli/chunks/{chunk-BMWAWZAN.js → chunk-REEIFA6A.js} +2 -2
- package/dist/cli/chunks/{chunk-Y2E3IJ53.js → chunk-RNYX4CPI.js} +2 -2
- package/dist/cli/chunks/{chunk-BY646JOM.js → chunk-RORZ5O5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-JNMUVBAJ.js → chunk-RRPYWBFX.js} +2 -2
- package/dist/cli/chunks/{chunk-XQRE2HWM.js → chunk-RXAFLK34.js} +2 -2
- package/dist/cli/chunks/{chunk-UXZEVIFX.js → chunk-SQHLC6I5.js} +1 -1
- package/dist/cli/chunks/{chunk-DPV33C77.js → chunk-SSP2B2WR.js} +2 -2
- package/dist/cli/chunks/chunk-SX2YSHE7.js +115 -0
- package/dist/cli/chunks/chunk-T3ZDVU6F.js +5 -0
- package/dist/cli/chunks/{chunk-JCC7QEKZ.js → chunk-T6W5APYP.js} +1 -1
- package/dist/cli/chunks/{chunk-DEGWCUMY.js → chunk-TU4LIIOP.js} +2 -2
- package/dist/cli/chunks/{chunk-CQMHDAJS.js → chunk-UBYCR3O4.js} +2 -2
- package/dist/cli/chunks/{chunk-PHP4UJYP.js → chunk-UCLN6AME.js} +1 -1
- package/dist/cli/chunks/{chunk-HIUNCO2W.js → chunk-UIYKR2SA.js} +2 -2
- package/dist/cli/chunks/{chunk-ONCH5AXU.js → chunk-UUHIEM2M.js} +18 -18
- package/dist/cli/chunks/{chunk-CFPR24YK.js → chunk-UY3REQOK.js} +2 -2
- package/dist/cli/chunks/{chunk-FNAYDITO.js → chunk-V2SAEMZY.js} +1 -1
- package/dist/cli/chunks/{chunk-JANLATHN.js → chunk-V5NGBQAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-644DFAGS.js → chunk-VCA6YYII.js} +1 -1
- package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
- package/dist/cli/chunks/{chunk-7BIYJRQJ.js → chunk-VKPKYMCT.js} +2 -2
- package/dist/cli/chunks/{chunk-2KWI3MT3.js → chunk-VNW5Q2CX.js} +2 -2
- package/dist/cli/chunks/chunk-VUFRTGML.js +3 -0
- package/dist/cli/chunks/{chunk-PHAQWAEV.js → chunk-W4X2VTIY.js} +2 -2
- package/dist/cli/chunks/{chunk-PURHGLEC.js → chunk-WTLIEBDH.js} +1 -1
- package/dist/cli/chunks/{chunk-3SH23PS3.js → chunk-WUV5RZUI.js} +2 -2
- package/dist/cli/chunks/{chunk-OGYWWZU7.js → chunk-WXI2STKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-OW42F2TX.js → chunk-XEWXYGJI.js} +2 -2
- package/dist/cli/chunks/{chunk-DPYDUKVZ.js → chunk-XNSQZ3O7.js} +2 -2
- package/dist/cli/chunks/{chunk-B2UHTA4Q.js → chunk-XTJMY3KS.js} +1 -1
- package/dist/cli/chunks/{chunk-NF6AFIAX.js → chunk-XXAVQACL.js} +1 -1
- package/dist/cli/chunks/{chunk-V7GNUVYI.js → chunk-Y4SAWE45.js} +1 -1
- package/dist/cli/chunks/{chunk-WC47GICZ.js → chunk-Y6A46M3B.js} +2 -2
- package/dist/cli/chunks/{chunk-3DTEQHFB.js → chunk-YDZJWDR6.js} +3 -3
- package/dist/cli/chunks/{chunk-KJ3KBP24.js → chunk-YFOBQSOW.js} +2 -2
- package/dist/cli/chunks/{chunk-MB4VFAJC.js → chunk-YK3NOC2R.js} +2 -2
- package/dist/cli/chunks/{chunk-GRIPCYW5.js → chunk-YUC7RJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-HPLMX62I.js → chunk-Z3VJLWRR.js} +2 -2
- package/dist/cli/chunks/{chunk-EOR3RECZ.js → chunk-ZLVQSEZK.js} +2 -2
- package/dist/cli/chunks/{chunk-4AZP7ZCW.js → chunk-ZRLNACPY.js} +2 -2
- package/dist/cli/chunks/{chunk-OQDC7GCM.js → chunk-ZTMZFF25.js} +2 -2
- package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
- package/dist/cli/chunks/ci-5HEXJZ2C.js +81 -0
- package/dist/cli/chunks/{ci-config-XDDZOOEI.js → ci-config-WU4NPDAM.js} +2 -2
- package/dist/cli/chunks/{ci-output-7ZUQI4U6.js → ci-output-BJQVXX5E.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-ALXKCFAL.js → circuit-breaker-3BMGTQCB.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-RL7K2NI2.js → claude-flow-setup-GVDGJWMU.js} +2 -2
- package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
- package/dist/cli/chunks/{cline-installer-2Z2QQKC3.js → cline-installer-V4MRGWVA.js} +2 -2
- package/dist/cli/chunks/{code-QSZTDINQ.js → code-A3TGQPEO.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-5CGR5D3Y.js → code-index-extractor-YJQSYWD3.js} +2 -2
- package/dist/cli/chunks/{codex-installer-7JLSEDE5.js → codex-installer-7N7UQPAH.js} +2 -2
- package/dist/cli/chunks/{completions-U4NBSXEB.js → completions-PPGVYLZS.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-WYZD2YSY.js → complexity-analyzer-XZTFLYV5.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-UPXINJFT.js → continuedev-installer-Z5I57RAH.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-WIVYQRIF.js → copilot-installer-F5YZ6BHB.js} +2 -2
- package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
- package/dist/cli/chunks/{cost-tracker-RIN4JDDM.js → cost-tracker-GO33ZQAP.js} +2 -2
- package/dist/cli/chunks/coverage-GSHKLY74.js +49 -0
- package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
- package/dist/cli/chunks/{cursor-installer-POM7NGCC.js → cursor-installer-JJ7IVJZB.js} +2 -2
- package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
- package/dist/cli/chunks/{daemon-HFGKQ6LB.js → daemon-IRL7QRNE.js} +5 -5
- package/dist/cli/chunks/{dag-attention-scheduler-HJXM7Q5P.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
- package/dist/cli/chunks/{detect-XKQGLZYN.js → detect-RHU62KRI.js} +2 -2
- package/dist/cli/chunks/{dist-node-SSKB53QL.js → dist-node-3VKV4Z6C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-6BNDHATU.js → domain-handler-SFIML4FK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-DOX54YE3.js → domain-plugins-CJ4FA3OC.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FW4ZX3Z7.js → domain-transfer-BCRKPCAA.js} +2 -2
- package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
- package/dist/cli/chunks/embed-and-insert-pattern-VL3HFLPV.js +3 -0
- package/dist/cli/chunks/{eval-K7E4XXBS.js → eval-GGKRI4P5.js} +2 -2
- package/dist/cli/chunks/experience-capture-middleware-F72TIRQY.js +40 -0
- package/dist/cli/chunks/{fast-paths-5JXXTYAG.js → fast-paths-7KOOF3MA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-2CR3CO23.js → feature-flags-FNHBTHBH.js} +2 -2
- package/dist/cli/chunks/{feature-flags-RB72LHOJ.js → feature-flags-IOZEWWFU.js} +2 -2
- package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
- package/dist/cli/chunks/{fleet-SDU7QEOA.js → fleet-QX5KXTRC.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-AWCFODUV.js → gnn-wrapper-OH2DOQP7.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-A4PJ3NFP.js → heartbeat-handler-W67NXTNE.js} +4 -4
- package/dist/cli/chunks/heartbeat-scheduler-7ZIDVXIP.js +2 -0
- package/dist/cli/chunks/hnsw-adapter-P77OC7FM.js +2 -0
- package/dist/cli/chunks/hnsw-index-3LBOTQAW.js +2 -0
- package/dist/cli/chunks/{hnsw-legacy-bridge-KRS7SSFM.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-OGGCPKPO.js → hnswlib-node-4UDISJ3G.js} +2 -2
- package/dist/cli/chunks/{hooks-XNRNMUBW.js → hooks-NOQJWQ4P.js} +43 -43
- package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-X35LTXYT.js → hypergraph-engine-2OD3APVP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-M6THKAG6.js → hypergraph-handler-5AZGMBUM.js} +3 -3
- package/dist/cli/chunks/impact-analyzer-QSDJVBPS.js +2 -0
- package/dist/cli/chunks/init-guard-SMGJ45PW.js +2 -0
- package/dist/cli/chunks/init-handler-5T4MP2NM.js +88 -0
- package/dist/cli/chunks/init-wizard-MK2325JJ.js +2 -0
- package/dist/cli/chunks/kernel-2NJQQ2KT.js +2 -0
- package/dist/cli/chunks/{kilocode-installer-TEPR2ZJD.js → kilocode-installer-RLZYLVQJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-RUKHGDEE.js → kiro-installer-LFZOC7VD.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
- package/dist/cli/chunks/learning-XRPGLUWR.js +122 -0
- package/dist/cli/chunks/{llm-router-7GECMDCP.js → llm-router-OMK5HYPH.js} +4 -4
- package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
- package/dist/cli/chunks/{load-NTJ4Y4ZR.js → load-XADC7KCU.js} +2 -2
- package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
- package/dist/cli/chunks/{mcp-4335GTTG.js → mcp-PIBKSSVU.js} +2 -2
- package/dist/cli/chunks/{memory-HYC4M4XS.js → memory-AP7EZERS.js} +5 -5
- package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
- package/dist/cli/chunks/memory-handlers-MOFDNB6E.js +2 -0
- package/dist/cli/chunks/{multi-model-executor-T7FYKM6T.js → multi-model-executor-7JJ2FZ33.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-3USXVT5M.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
- package/dist/cli/chunks/orchestrator-2H2YKSGJ.js +452 -0
- package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-CMZLPX2K.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
- package/dist/cli/chunks/{pipeline-BTRZOVSL.js → pipeline-LIE5BWQY.js} +2 -2
- package/dist/cli/chunks/{platform-2MCRKC25.js → platform-SMYUNLGX.js} +2 -2
- package/dist/cli/chunks/plugin-LJDIXQNT.js +27 -0
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-TXFEMBP6.js → prime-radiant-advanced-wasm-RIDNE5D2.js} +2 -2
- package/dist/cli/chunks/project-root-NBIQF63D.js +2 -0
- package/dist/cli/chunks/protocol-executor-BRPGIYWQ.js +2 -0
- package/dist/cli/chunks/{protocol-handler-DZ26OYVZ.js → protocol-handler-YVM66DLI.js} +2 -2
- package/dist/cli/chunks/{prove-QWONEJWX.js → prove-ZBDT52GD.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
- package/dist/cli/chunks/{quality-WFH54FY7.js → quality-DUKXGDDO.js} +2 -2
- package/dist/cli/chunks/{quality-gate-ONJB7XU7.js → quality-gate-SM3RXF4V.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
- package/dist/cli/chunks/real-embeddings-4QLQZDB5.js +2 -0
- package/dist/cli/chunks/{ref-validation-HW5Y55ZC.js → ref-validation-M3EO32YQ.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-5OABDNZT.js → roocode-installer-S6Q5OLV5.js} +2 -2
- package/dist/cli/chunks/router-H5YSIRH2.js +2 -0
- package/dist/cli/chunks/routing-feedback-5R36TJDH.js +2 -0
- package/dist/cli/chunks/{routing-handler-CVHVOQTC.js → routing-handler-55FMUACP.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-KKDKFGIQ.js → ruvector-commands-QATKAAPK.js} +2 -2
- package/dist/cli/chunks/rvf-dual-writer-TT2DBQQQ.js +2 -0
- package/dist/cli/chunks/rvf-migration-adapter-BCLFJKSK.js +2 -0
- package/dist/cli/chunks/rvf-migration-coordinator-RFXFU6JD.js +2 -0
- package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-UGUXKIFX.js → rvf-store-integrity-PKDVXQAW.js} +2 -2
- package/dist/cli/chunks/safe-db-MSTD2GDH.js +2 -0
- package/dist/cli/chunks/schedule-KST6KIFD.js +2 -0
- package/dist/cli/chunks/scheduler-FTQS6YK3.js +2 -0
- package/dist/cli/chunks/security-CMRB6WA3.js +18 -0
- package/dist/cli/chunks/shared-rvf-adapter-YHLLNFHF.js +2 -0
- package/dist/cli/chunks/{shared-rvf-dual-writer-ZSHYG5IA.js → shared-rvf-dual-writer-4BGDVPQ7.js} +2 -2
- package/dist/cli/chunks/sqlite-persistence-ZX5QFDMR.js +2 -0
- package/dist/cli/chunks/{standalone-memory-MHZEEYMK.js → standalone-memory-LUHKQAGM.js} +2 -2
- package/dist/cli/chunks/{status-handler-JKXPJ22K.js → status-handler-S6S5PNR7.js} +2 -2
- package/dist/cli/chunks/{structural-health-J4RKCYWF.js → structural-health-PQ7NZAJ4.js} +2 -2
- package/dist/cli/chunks/{sync-PDPORHVN.js → sync-Q6KRQXU6.js} +2 -2
- package/dist/cli/chunks/sync-S744AEJC.js +2 -0
- package/dist/cli/chunks/{task-handler-VERADM44.js → task-handler-GAMGEHUW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-4RUCWUR2.js → task-handlers-6CRDEELN.js} +3 -3
- package/dist/cli/chunks/{test-DMBJFQNL.js → test-FNH67DBK.js} +12 -12
- package/dist/cli/chunks/{test-scheduling-LUPTVGCD.js → test-scheduling-NZA5SHK6.js} +3 -3
- package/dist/cli/chunks/token-bootstrap-CXKG55JD.js +2 -0
- package/dist/cli/chunks/{token-usage-VOA34IKM.js → token-usage-M7WWEDJX.js} +2 -2
- package/dist/cli/chunks/{transformers-GU4TYAN5.js → transformers-2IFMCK6A.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-MZPXAH7C.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
- package/dist/cli/chunks/{types-K4FLXR2K.js → types-N7FWTOLD.js} +2 -2
- package/dist/cli/chunks/unified-memory-2Z2F446J.js +2 -0
- package/dist/cli/chunks/unified-memory-hnsw-A4EWYPJQ.js +2 -0
- package/dist/cli/chunks/unified-persistence-Z6N6JZFA.js +2 -0
- package/dist/cli/chunks/{upgrade-M3ATDRMK.js → upgrade-KDB5RGL7.js} +2 -2
- package/dist/cli/chunks/{validate-AAP773B3.js → validate-KMUV5FUA.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-7RGAZX5F.js → validate-swarm-ANZWRCJU.js} +2 -2
- package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-GQMRHGGI.js → web-tree-sitter-SXXC4NMS.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-HG6HF2GF.js → windsurf-installer-2LWSKMBU.js} +2 -2
- package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
- package/dist/cli/chunks/{witness-chain-WKU3ZIBQ.js → witness-chain-JJMSJFZP.js} +2 -2
- package/dist/cli/chunks/witness-chain-repair-OX7VFW6T.js +2 -0
- package/dist/cli/chunks/{witness-chain-verifier-Q2KW3QEQ.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
- package/dist/cli/chunks/witness-key-manager-3DS4L7LE.js +2 -0
- package/dist/cli/chunks/{workflow-CX6SHFBW.js → workflow-ARWAMHD3.js} +28 -28
- package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
- package/dist/cli/chunks/wrappers-J6KGTUSJ.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 +50 -9
- package/dist/cli/commands/security.d.ts +16 -0
- package/dist/cli/commands/security.js +76 -9
- package/dist/cli/commands/test.js +6 -7
- package/dist/cli/commands/workflow.js +9 -5
- package/dist/cli/handlers/init-guard.d.ts +33 -0
- package/dist/cli/handlers/init-guard.js +66 -0
- package/dist/cli/handlers/init-handler.d.ts +3 -0
- package/dist/cli/handlers/init-handler.js +64 -54
- package/dist/cli/handlers/interfaces.js +5 -1
- package/dist/cli/index.js +11 -0
- 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 +13 -1
- package/dist/cli/utils/ci-output.js +21 -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/security-handlers.js +22 -6
- 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 +12 -3
- package/dist/coordination/protocols/quality-gate.js +10 -6
- package/dist/coordination/protocols/security-audit.js +11 -0
- package/dist/coordination/result-saver.d.ts +31 -0
- package/dist/coordination/result-saver.js +146 -46
- 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 +35 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +42 -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 +13 -8
- 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 +50 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +49 -3
- 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 +197 -112
- package/dist/domains/quality-assessment/services/quality-gate.js +12 -3
- package/dist/domains/security-compliance/dependency-advisory-engine.d.ts +52 -0
- package/dist/domains/security-compliance/dependency-advisory-engine.js +113 -0
- package/dist/domains/security-compliance/interfaces.d.ts +30 -0
- package/dist/domains/security-compliance/plugin.d.ts +7 -1
- package/dist/domains/security-compliance/plugin.js +19 -0
- package/dist/domains/security-compliance/services/scanners/dast-scanner.js +22 -16
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.d.ts +71 -0
- package/dist/domains/security-compliance/services/scanners/dependency-resolver.js +232 -0
- package/dist/domains/security-compliance/services/scanners/dependency-scanner.d.ts +21 -6
- package/dist/domains/security-compliance/services/scanners/dependency-scanner.js +142 -64
- package/dist/domains/security-compliance/services/scanners/lockfile-versions.d.ts +43 -0
- package/dist/domains/security-compliance/services/scanners/lockfile-versions.js +248 -0
- package/dist/domains/security-compliance/services/scanners/scanner-types.d.ts +30 -2
- package/dist/domains/security-compliance/services/security-auditor.d.ts +19 -6
- package/dist/domains/security-compliance/services/security-auditor.js +133 -92
- 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/retry-handler.js +17 -6
- package/dist/domains/test-execution/services/test-executor.d.ts +1 -0
- package/dist/domains/test-execution/services/test-executor.js +239 -109
- 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 +180 -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 +908 -896
- package/dist/mcp/handlers/domain-handler-configs.d.ts +35 -1
- package/dist/mcp/handlers/domain-handler-configs.js +42 -4
- package/dist/mcp/handlers/handler-factory.js +40 -14
- package/dist/mcp/protocol-server.js +29 -3
- 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 +10 -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/shared/security/index.d.ts +2 -2
- package/dist/shared/security/index.js +1 -1
- package/dist/shared/security/osv-client.d.ts +79 -132
- package/dist/shared/security/osv-client.js +344 -167
- package/dist/shared/security/osv-lookup.d.ts +124 -0
- package/dist/shared/security/osv-lookup.js +246 -0
- package/dist/shared/security/osv-types.d.ts +119 -0
- package/dist/shared/security/osv-types.js +6 -0
- package/dist/workers/interfaces.d.ts +15 -2
- package/dist/workers/namespaced-keys.d.ts +16 -0
- package/dist/workers/namespaced-keys.js +24 -0
- 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 +3 -3
- package/dist/workers/quality-daemon/persistent-memory.js +4 -4
- package/dist/workers/worker-manager.js +10 -3
- package/dist/workers/workers/coverage-tracker.js +69 -33
- package/dist/workers/workers/defect-predictor.d.ts +25 -8
- package/dist/workers/workers/defect-predictor.js +223 -216
- package/dist/workers/workers/performance-baseline.d.ts +24 -9
- package/dist/workers/workers/performance-baseline.js +187 -230
- package/dist/workers/workers/quality-gate.d.ts +11 -9
- package/dist/workers/workers/quality-gate.js +125 -267
- package/dist/workers/workers/regression-monitor.d.ts +18 -1
- package/dist/workers/workers/regression-monitor.js +276 -117
- package/dist/workers/workers/security-scan-records.d.ts +111 -0
- package/dist/workers/workers/security-scan-records.js +128 -0
- package/dist/workers/workers/security-scan.d.ts +25 -7
- package/dist/workers/workers/security-scan.js +187 -164
- package/package.json +2 -2
- 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-BO4PKNYP.js +0 -102
- 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-GTSOFCMQ.js +0 -2
- 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/security-7723AZZ4.js +0 -13
- 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
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - OSV lookup outcome types and response validation (#1049)
|
|
3
|
+
*
|
|
4
|
+
* A failed or partial advisory lookup is never "no vulnerabilities". Every
|
|
5
|
+
* package the lookup could not check is listed with the reason, and the
|
|
6
|
+
* overall status says whether the result can be read as a measurement.
|
|
7
|
+
*/
|
|
8
|
+
import type { ParsedVulnerability } from './osv-types';
|
|
9
|
+
/** A package handed to an OSV lookup. */
|
|
10
|
+
export interface OSVPackageQuery {
|
|
11
|
+
name: string;
|
|
12
|
+
ecosystem: string;
|
|
13
|
+
version?: string;
|
|
14
|
+
}
|
|
15
|
+
/** A package whose advisories could not be checked, and why. */
|
|
16
|
+
export interface OSVUncheckedPackage {
|
|
17
|
+
name: string;
|
|
18
|
+
ecosystem: string;
|
|
19
|
+
version?: string;
|
|
20
|
+
reason: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Outcome of an OSV batch lookup.
|
|
24
|
+
* - complete: every package was checked; `results` is a measurement.
|
|
25
|
+
* - incomplete: some packages were checked (their findings are real), others not.
|
|
26
|
+
* - failed: no package could be checked.
|
|
27
|
+
*/
|
|
28
|
+
export interface OSVBatchLookup {
|
|
29
|
+
status: 'complete' | 'incomplete' | 'failed';
|
|
30
|
+
/** Keyed `${ecosystem}:${name}`; only packages that were actually checked. */
|
|
31
|
+
results: Map<string, ParsedVulnerability[]>;
|
|
32
|
+
packagesRequested: number;
|
|
33
|
+
packagesChecked: number;
|
|
34
|
+
unchecked: OSVUncheckedPackage[];
|
|
35
|
+
/** Bounded, request-level error descriptions (no response bodies). */
|
|
36
|
+
errors: string[];
|
|
37
|
+
}
|
|
38
|
+
/** Thrown by the legacy list-returning methods when a lookup did not complete. */
|
|
39
|
+
export declare class OSVLookupError extends Error {
|
|
40
|
+
readonly lookup?: OSVBatchLookup;
|
|
41
|
+
constructor(message: string, lookup?: OSVBatchLookup);
|
|
42
|
+
static fromLookup(lookup: OSVBatchLookup): OSVLookupError;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Result key for one queried package: `${ecosystem}:${name}@${version}`.
|
|
46
|
+
* Keyed by version so two versions of one package never overwrite each other.
|
|
47
|
+
*/
|
|
48
|
+
export declare const lookupKey: (pkg: {
|
|
49
|
+
ecosystem: string;
|
|
50
|
+
name: string;
|
|
51
|
+
version?: string;
|
|
52
|
+
}) => string;
|
|
53
|
+
/** At most `max` ids, then "and N more" — keeps reasons bounded. */
|
|
54
|
+
export declare function boundedList(items: readonly string[], max?: number): string;
|
|
55
|
+
/**
|
|
56
|
+
* The exact npm version a spec pins ("4.17.15", "=4.17.15", "v4.17.15"), or
|
|
57
|
+
* null for anything else: ranges (^ ~ < > <= >= || hyphen), wildcards, tags,
|
|
58
|
+
* and non-registry specs. A range is never reduced to a guessed version (#1049).
|
|
59
|
+
*/
|
|
60
|
+
export declare function exactNpmVersion(spec: string): string | null;
|
|
61
|
+
/**
|
|
62
|
+
* What an npm dependency spec points at (#1049):
|
|
63
|
+
* - `local`: a workspace / linked / local-directory package. Not an OSV subject
|
|
64
|
+
* (its own dependencies are what can carry advisories).
|
|
65
|
+
* - `remote`: git, GitHub shorthand, URL or tarball (incl. `file:*.tgz`): third-party
|
|
66
|
+
* code with no registry version, so advisories cannot be matched.
|
|
67
|
+
* - `alias`: `npm:<real>@<range>` — the registry package `<real>`.
|
|
68
|
+
* - `registry`: an ordinary registry spec (exact version, range or tag).
|
|
69
|
+
*/
|
|
70
|
+
export type NpmSpecKind = {
|
|
71
|
+
kind: 'local';
|
|
72
|
+
} | {
|
|
73
|
+
kind: 'remote';
|
|
74
|
+
} | {
|
|
75
|
+
kind: 'alias';
|
|
76
|
+
name: string;
|
|
77
|
+
spec: string;
|
|
78
|
+
} | {
|
|
79
|
+
kind: 'registry';
|
|
80
|
+
spec: string;
|
|
81
|
+
};
|
|
82
|
+
export declare function classifyNpmSpec(spec: string): NpmSpecKind;
|
|
83
|
+
/** A spec whose source is not the npm registry (local or remote); aliases are registry packages. */
|
|
84
|
+
export declare function isNonRegistrySpec(spec: string): boolean;
|
|
85
|
+
/**
|
|
86
|
+
* True for a concrete version OSV can match ("4.17.15", "1.0rc1", "2.0.0-beta.1").
|
|
87
|
+
* Ranges, tags, wildcards, URLs and aliases are not: querying OSV without a
|
|
88
|
+
* concrete version returns every advisory the package ever had.
|
|
89
|
+
*/
|
|
90
|
+
export declare function isConcreteVersion(version: string): boolean;
|
|
91
|
+
/** Longest version string considered; versions come from repo-controlled files. */
|
|
92
|
+
export declare const MAX_VERSION_LENGTH = 256;
|
|
93
|
+
/** One querybatch entry: the advisory ids reported for a package, or why it is unusable. */
|
|
94
|
+
export type BatchEntry = {
|
|
95
|
+
ids: string[];
|
|
96
|
+
} | {
|
|
97
|
+
reason: string;
|
|
98
|
+
};
|
|
99
|
+
/**
|
|
100
|
+
* Validate a querybatch body against the queries sent. `null` means the body as
|
|
101
|
+
* a whole is unusable (every package in the chunk is unchecked).
|
|
102
|
+
*/
|
|
103
|
+
export declare function parseBatchBody(body: unknown, expected: number): BatchEntry[] | null;
|
|
104
|
+
/** A full OSV advisory record has a string id and an `affected` array. */
|
|
105
|
+
export declare function isAdvisoryRecord(body: unknown): body is {
|
|
106
|
+
id: string;
|
|
107
|
+
affected: unknown[];
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Whether an advisory affects `pkg@version` according to its own `affected`
|
|
111
|
+
* entries. Used to confirm querybatch matches: OSV's batch endpoint can return
|
|
112
|
+
* advisories whose ranges for the package exclude the version. An advisory is
|
|
113
|
+
* dropped only when every matching entry is positively evaluated as not
|
|
114
|
+
* affected; anything that cannot be evaluated (no matching entry, ECOSYSTEM/GIT
|
|
115
|
+
* ranges, unparseable versions) is kept.
|
|
116
|
+
*/
|
|
117
|
+
export declare function advisoryAffectsVersion(advisory: unknown, pkg: {
|
|
118
|
+
name: string;
|
|
119
|
+
ecosystem: string;
|
|
120
|
+
version: string;
|
|
121
|
+
}): boolean;
|
|
122
|
+
/** Lookup status from the counts. */
|
|
123
|
+
export declare function lookupStatus(requested: number, checked: number): OSVBatchLookup['status'];
|
|
124
|
+
//# sourceMappingURL=osv-lookup.d.ts.map
|
|
@@ -0,0 +1,246 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - OSV lookup outcome types and response validation (#1049)
|
|
3
|
+
*
|
|
4
|
+
* A failed or partial advisory lookup is never "no vulnerabilities". Every
|
|
5
|
+
* package the lookup could not check is listed with the reason, and the
|
|
6
|
+
* overall status says whether the result can be read as a measurement.
|
|
7
|
+
*/
|
|
8
|
+
/** Thrown by the legacy list-returning methods when a lookup did not complete. */
|
|
9
|
+
export class OSVLookupError extends Error {
|
|
10
|
+
lookup;
|
|
11
|
+
constructor(message, lookup) {
|
|
12
|
+
super(message);
|
|
13
|
+
this.name = 'OSVLookupError';
|
|
14
|
+
this.lookup = lookup;
|
|
15
|
+
}
|
|
16
|
+
static fromLookup(lookup) {
|
|
17
|
+
const reasons = [...new Set(lookup.unchecked.map((p) => p.reason))].slice(0, 3).join('; ');
|
|
18
|
+
return new OSVLookupError(`OSV advisories could not be checked for ${lookup.unchecked.length} of ${lookup.packagesRequested} package(s): ${reasons}`, lookup);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Result key for one queried package: `${ecosystem}:${name}@${version}`.
|
|
23
|
+
* Keyed by version so two versions of one package never overwrite each other.
|
|
24
|
+
*/
|
|
25
|
+
export const lookupKey = (pkg) => `${pkg.ecosystem}:${pkg.name}@${pkg.version ?? ''}`;
|
|
26
|
+
/** At most `max` ids, then "and N more" — keeps reasons bounded. */
|
|
27
|
+
export function boundedList(items, max = 5) {
|
|
28
|
+
return items.length <= max ? items.join(', ') : `${items.slice(0, max).join(', ')} and ${items.length - max} more`;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The exact npm version a spec pins ("4.17.15", "=4.17.15", "v4.17.15"), or
|
|
32
|
+
* null for anything else: ranges (^ ~ < > <= >= || hyphen), wildcards, tags,
|
|
33
|
+
* and non-registry specs. A range is never reduced to a guessed version (#1049).
|
|
34
|
+
*/
|
|
35
|
+
export function exactNpmVersion(spec) {
|
|
36
|
+
const m = /^=?v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?)$/.exec(spec.trim());
|
|
37
|
+
return m ? m[1] : null;
|
|
38
|
+
}
|
|
39
|
+
export function classifyNpmSpec(spec) {
|
|
40
|
+
const s = spec.trim();
|
|
41
|
+
const alias = /^npm:((?:@[^/@\s]+\/)?[^@\s]+)(?:@(.*))?$/.exec(s);
|
|
42
|
+
if (alias)
|
|
43
|
+
return { kind: 'alias', name: alias[1], spec: alias[2] ?? '' };
|
|
44
|
+
if (/^(workspace:|link:|portal:)/.test(s))
|
|
45
|
+
return { kind: 'local' };
|
|
46
|
+
if (/^file:/.test(s))
|
|
47
|
+
return /\.(tgz|tar\.gz|tar)$/i.test(s) ? { kind: 'remote' } : { kind: 'local' };
|
|
48
|
+
if (/^(\.{0,2}\/|~\/)/.test(s))
|
|
49
|
+
return /\.(tgz|tar\.gz|tar)$/i.test(s) ? { kind: 'remote' } : { kind: 'local' };
|
|
50
|
+
if (/^(patch:|exec:|git\+|git:|github:|gitlab:|bitbucket:|https?:)/.test(s))
|
|
51
|
+
return { kind: 'remote' };
|
|
52
|
+
if (/^[^\s@/:]+\/[^\s@/:]+(#.*)?$/.test(s))
|
|
53
|
+
return { kind: 'remote' }; // GitHub "user/repo" shorthand
|
|
54
|
+
return { kind: 'registry', spec: s };
|
|
55
|
+
}
|
|
56
|
+
/** A spec whose source is not the npm registry (local or remote); aliases are registry packages. */
|
|
57
|
+
export function isNonRegistrySpec(spec) {
|
|
58
|
+
const k = classifyNpmSpec(spec).kind;
|
|
59
|
+
return k === 'local' || k === 'remote';
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* True for a concrete version OSV can match ("4.17.15", "1.0rc1", "2.0.0-beta.1").
|
|
63
|
+
* Ranges, tags, wildcards, URLs and aliases are not: querying OSV without a
|
|
64
|
+
* concrete version returns every advisory the package ever had.
|
|
65
|
+
*/
|
|
66
|
+
export function isConcreteVersion(version) {
|
|
67
|
+
if (version.length === 0 || version.length > MAX_VERSION_LENGTH)
|
|
68
|
+
return false;
|
|
69
|
+
if (!matchesVersionShape(version))
|
|
70
|
+
return false;
|
|
71
|
+
return !/(^|\.)[xX*](\.|$)/.test(version);
|
|
72
|
+
}
|
|
73
|
+
/** Longest version string considered; versions come from repo-controlled files. */
|
|
74
|
+
export const MAX_VERSION_LENGTH = 256;
|
|
75
|
+
const VERSION_CORE = /^\d+(?:\.\d+)*$/;
|
|
76
|
+
const VERSION_TAIL = /^[0-9A-Za-z][0-9A-Za-z.+-]*$/;
|
|
77
|
+
/**
|
|
78
|
+
* Linear equivalent of `^\d+(\.\d+)*([-+._]?[0-9A-Za-z][0-9A-Za-z.+-]*)?$`
|
|
79
|
+
* (whose overlapping quantifiers backtrack polynomially, CodeQL js/polynomial-redos).
|
|
80
|
+
* `_` is not in the tail class, so it can only be the separator right after the
|
|
81
|
+
* numeric core. Without `_`, any accepted split can be re-split after the first
|
|
82
|
+
* digit run (the remaining `.digits` segments fit the tail class).
|
|
83
|
+
*/
|
|
84
|
+
function matchesVersionShape(version) {
|
|
85
|
+
const underscore = version.indexOf('_');
|
|
86
|
+
if (underscore >= 0) {
|
|
87
|
+
return VERSION_CORE.test(version.slice(0, underscore)) && VERSION_TAIL.test(version.slice(underscore + 1));
|
|
88
|
+
}
|
|
89
|
+
let i = 0;
|
|
90
|
+
while (i < version.length && version.charCodeAt(i) >= 48 && version.charCodeAt(i) <= 57)
|
|
91
|
+
i++;
|
|
92
|
+
if (i === 0)
|
|
93
|
+
return false;
|
|
94
|
+
const rest = version.slice(i);
|
|
95
|
+
if (rest === '')
|
|
96
|
+
return true;
|
|
97
|
+
// Splitting inside a 2+ digit run makes the tail start with a digit: the rest
|
|
98
|
+
// then only has to fit the tail class ("11." = core "1" + tail "1.").
|
|
99
|
+
if (i >= 2 && VERSION_TAIL_REST.test(rest))
|
|
100
|
+
return true;
|
|
101
|
+
const sep = rest[0] === '-' || rest[0] === '+' || rest[0] === '.';
|
|
102
|
+
return VERSION_TAIL.test(sep ? rest.slice(1) : rest);
|
|
103
|
+
}
|
|
104
|
+
const VERSION_TAIL_REST = /^[0-9A-Za-z.+-]*$/;
|
|
105
|
+
const isObject = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
106
|
+
/**
|
|
107
|
+
* Validate a querybatch body against the queries sent. `null` means the body as
|
|
108
|
+
* a whole is unusable (every package in the chunk is unchecked).
|
|
109
|
+
*/
|
|
110
|
+
export function parseBatchBody(body, expected) {
|
|
111
|
+
if (!isObject(body) || !Array.isArray(body.results) || body.results.length !== expected)
|
|
112
|
+
return null;
|
|
113
|
+
return body.results.map((entry) => {
|
|
114
|
+
if (!isObject(entry))
|
|
115
|
+
return { reason: 'malformed OSV result entry' };
|
|
116
|
+
if (typeof entry.next_page_token === 'string' && entry.next_page_token) {
|
|
117
|
+
return { reason: 'OSV advisory list was truncated (paginated) and not fully retrieved' };
|
|
118
|
+
}
|
|
119
|
+
if (entry.vulns === undefined)
|
|
120
|
+
return { ids: [] };
|
|
121
|
+
if (!Array.isArray(entry.vulns))
|
|
122
|
+
return { reason: 'malformed OSV result entry' };
|
|
123
|
+
const ids = [];
|
|
124
|
+
for (const v of entry.vulns) {
|
|
125
|
+
if (!isObject(v) || typeof v.id !== 'string' || !v.id)
|
|
126
|
+
return { reason: 'malformed OSV advisory reference' };
|
|
127
|
+
ids.push(v.id);
|
|
128
|
+
}
|
|
129
|
+
return { ids };
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
/** A full OSV advisory record has a string id and an `affected` array. */
|
|
133
|
+
export function isAdvisoryRecord(body) {
|
|
134
|
+
return isObject(body) && typeof body.id === 'string' && Array.isArray(body.affected);
|
|
135
|
+
}
|
|
136
|
+
function parseSemver(version) {
|
|
137
|
+
const m = /^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+[0-9A-Za-z.-]+)?$/.exec(version.trim());
|
|
138
|
+
if (!m)
|
|
139
|
+
return null;
|
|
140
|
+
return { nums: [Number(m[1]), Number(m[2]), Number(m[3])], pre: m[4] ? m[4].split('.') : [] };
|
|
141
|
+
}
|
|
142
|
+
function compareSemver(a, b) {
|
|
143
|
+
for (let i = 0; i < 3; i++)
|
|
144
|
+
if (a.nums[i] !== b.nums[i])
|
|
145
|
+
return a.nums[i] < b.nums[i] ? -1 : 1;
|
|
146
|
+
if (a.pre.length === 0 || b.pre.length === 0)
|
|
147
|
+
return a.pre.length === b.pre.length ? 0 : a.pre.length === 0 ? 1 : -1;
|
|
148
|
+
for (let i = 0; i < Math.max(a.pre.length, b.pre.length); i++) {
|
|
149
|
+
const x = a.pre[i];
|
|
150
|
+
const y = b.pre[i];
|
|
151
|
+
if (x === undefined || y === undefined)
|
|
152
|
+
return x === undefined ? -1 : 1;
|
|
153
|
+
if (x === y)
|
|
154
|
+
continue;
|
|
155
|
+
const nx = /^\d+$/.test(x);
|
|
156
|
+
const ny = /^\d+$/.test(y);
|
|
157
|
+
if (nx && ny)
|
|
158
|
+
return Number(x) < Number(y) ? -1 : 1;
|
|
159
|
+
if (nx !== ny)
|
|
160
|
+
return nx ? -1 : 1;
|
|
161
|
+
return x < y ? -1 : 1;
|
|
162
|
+
}
|
|
163
|
+
return 0;
|
|
164
|
+
}
|
|
165
|
+
/** OSV SEMVER range evaluation; null when an event version cannot be parsed. */
|
|
166
|
+
function semverRangeAffects(version, events) {
|
|
167
|
+
// `at: null` is `introduced: "0"`: before every version, prereleases included.
|
|
168
|
+
const keyed = [];
|
|
169
|
+
for (const e of events) {
|
|
170
|
+
const kind = e.introduced !== undefined ? 'introduced' : e.fixed !== undefined ? 'fixed' : e.last_affected !== undefined ? 'last_affected' : null;
|
|
171
|
+
if (!kind)
|
|
172
|
+
continue; // `limit` does not change membership for a single version
|
|
173
|
+
const raw = e[kind];
|
|
174
|
+
if (kind === 'introduced' && raw === '0') {
|
|
175
|
+
keyed.push({ at: null, kind });
|
|
176
|
+
continue;
|
|
177
|
+
}
|
|
178
|
+
const at = parseSemver(raw);
|
|
179
|
+
if (!at)
|
|
180
|
+
return null;
|
|
181
|
+
keyed.push({ at, kind });
|
|
182
|
+
}
|
|
183
|
+
// Sort by version; on a tie a fixed/last_affected closes the earlier window
|
|
184
|
+
// before an introduced at the same version opens the next one.
|
|
185
|
+
const tieRank = (kind) => (kind === 'introduced' ? 1 : 0);
|
|
186
|
+
keyed.sort((a, b) => {
|
|
187
|
+
if (!a.at || !b.at)
|
|
188
|
+
return a.at === b.at ? 0 : a.at ? 1 : -1;
|
|
189
|
+
return compareSemver(a.at, b.at) || tieRank(a.kind) - tieRank(b.kind);
|
|
190
|
+
});
|
|
191
|
+
let affected = false;
|
|
192
|
+
for (const { at, kind } of keyed) {
|
|
193
|
+
if (!at) {
|
|
194
|
+
affected = true;
|
|
195
|
+
continue;
|
|
196
|
+
}
|
|
197
|
+
const cmp = compareSemver(version, at);
|
|
198
|
+
if (kind === 'introduced' && cmp >= 0)
|
|
199
|
+
affected = true;
|
|
200
|
+
else if (kind === 'fixed' && cmp >= 0)
|
|
201
|
+
affected = false;
|
|
202
|
+
else if (kind === 'last_affected' && cmp > 0)
|
|
203
|
+
affected = false;
|
|
204
|
+
}
|
|
205
|
+
return affected;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Whether an advisory affects `pkg@version` according to its own `affected`
|
|
209
|
+
* entries. Used to confirm querybatch matches: OSV's batch endpoint can return
|
|
210
|
+
* advisories whose ranges for the package exclude the version. An advisory is
|
|
211
|
+
* dropped only when every matching entry is positively evaluated as not
|
|
212
|
+
* affected; anything that cannot be evaluated (no matching entry, ECOSYSTEM/GIT
|
|
213
|
+
* ranges, unparseable versions) is kept.
|
|
214
|
+
*/
|
|
215
|
+
export function advisoryAffectsVersion(advisory, pkg) {
|
|
216
|
+
const affected = advisory.affected;
|
|
217
|
+
if (!Array.isArray(affected))
|
|
218
|
+
return true;
|
|
219
|
+
const entries = affected.filter((a) => isObject(a) && isObject(a.package)
|
|
220
|
+
&& a.package.name === pkg.name && a.package.ecosystem === pkg.ecosystem);
|
|
221
|
+
if (entries.length === 0)
|
|
222
|
+
return true;
|
|
223
|
+
const version = parseSemver(pkg.version);
|
|
224
|
+
for (const entry of entries) {
|
|
225
|
+
if (Array.isArray(entry.versions) && entry.versions.includes(pkg.version))
|
|
226
|
+
return true;
|
|
227
|
+
const ranges = Array.isArray(entry.ranges) ? entry.ranges.filter(isObject) : [];
|
|
228
|
+
if (ranges.length === 0 && !Array.isArray(entry.versions))
|
|
229
|
+
return true;
|
|
230
|
+
for (const range of ranges) {
|
|
231
|
+
if (range.type !== 'SEMVER' || !version || !Array.isArray(range.events))
|
|
232
|
+
return true;
|
|
233
|
+
const verdict = semverRangeAffects(version, range.events);
|
|
234
|
+
if (verdict !== false)
|
|
235
|
+
return true;
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
240
|
+
/** Lookup status from the counts. */
|
|
241
|
+
export function lookupStatus(requested, checked) {
|
|
242
|
+
if (checked === requested)
|
|
243
|
+
return 'complete';
|
|
244
|
+
return checked === 0 ? 'failed' : 'incomplete';
|
|
245
|
+
}
|
|
246
|
+
//# sourceMappingURL=osv-lookup.js.map
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - OSV API record types
|
|
3
|
+
* API Documentation: https://google.github.io/osv.dev/api/
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* OSV query request
|
|
7
|
+
*/
|
|
8
|
+
export interface OSVQueryRequest {
|
|
9
|
+
/** Package name */
|
|
10
|
+
package?: {
|
|
11
|
+
name: string;
|
|
12
|
+
ecosystem: OSVEcosystem;
|
|
13
|
+
};
|
|
14
|
+
/** Git commit hash */
|
|
15
|
+
commit?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Package version to match. OSV reads it here, at the top level of the query;
|
|
18
|
+
* a `version` inside `package` is ignored (it returns every advisory ever).
|
|
19
|
+
*/
|
|
20
|
+
version?: string;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Supported ecosystems
|
|
24
|
+
*/
|
|
25
|
+
export type OSVEcosystem = 'npm' | 'PyPI' | 'Go' | 'Maven' | 'crates.io' | 'NuGet' | 'Packagist' | 'RubyGems' | 'Hex' | 'Pub';
|
|
26
|
+
/**
|
|
27
|
+
* OSV vulnerability record
|
|
28
|
+
*/
|
|
29
|
+
export interface OSVVulnerability {
|
|
30
|
+
id: string;
|
|
31
|
+
summary: string;
|
|
32
|
+
details?: string;
|
|
33
|
+
aliases?: string[];
|
|
34
|
+
modified: string;
|
|
35
|
+
published?: string;
|
|
36
|
+
withdrawn?: string;
|
|
37
|
+
severity?: OSVSeverity[];
|
|
38
|
+
affected: OSVAffected[];
|
|
39
|
+
references?: OSVReference[];
|
|
40
|
+
database_specific?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* OSV severity rating
|
|
44
|
+
*/
|
|
45
|
+
export interface OSVSeverity {
|
|
46
|
+
type: 'CVSS_V2' | 'CVSS_V3';
|
|
47
|
+
score: string;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* OSV affected package information
|
|
51
|
+
*/
|
|
52
|
+
export interface OSVAffected {
|
|
53
|
+
package: {
|
|
54
|
+
name: string;
|
|
55
|
+
ecosystem: string;
|
|
56
|
+
purl?: string;
|
|
57
|
+
};
|
|
58
|
+
ranges?: OSVRange[];
|
|
59
|
+
versions?: string[];
|
|
60
|
+
ecosystem_specific?: Record<string, unknown>;
|
|
61
|
+
database_specific?: Record<string, unknown>;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* OSV version range
|
|
65
|
+
*/
|
|
66
|
+
export interface OSVRange {
|
|
67
|
+
type: 'SEMVER' | 'ECOSYSTEM' | 'GIT';
|
|
68
|
+
repo?: string;
|
|
69
|
+
events: Array<{
|
|
70
|
+
introduced?: string;
|
|
71
|
+
fixed?: string;
|
|
72
|
+
last_affected?: string;
|
|
73
|
+
limit?: string;
|
|
74
|
+
}>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* OSV reference link
|
|
78
|
+
*/
|
|
79
|
+
export interface OSVReference {
|
|
80
|
+
type: 'ADVISORY' | 'ARTICLE' | 'DETECTION' | 'DISCUSSION' | 'REPORT' | 'FIX' | 'GIT' | 'PACKAGE' | 'EVIDENCE' | 'WEB';
|
|
81
|
+
url: string;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* OSV query response
|
|
85
|
+
*/
|
|
86
|
+
export interface OSVQueryResponse {
|
|
87
|
+
vulns: OSVVulnerability[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* OSV batch query request
|
|
91
|
+
*/
|
|
92
|
+
export interface OSVBatchQueryRequest {
|
|
93
|
+
queries: OSVQueryRequest[];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* OSV batch query response
|
|
97
|
+
*/
|
|
98
|
+
export interface OSVBatchQueryResponse {
|
|
99
|
+
results: Array<{
|
|
100
|
+
vulns?: OSVVulnerability[];
|
|
101
|
+
}>;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Parsed vulnerability for easier consumption
|
|
105
|
+
*/
|
|
106
|
+
export interface ParsedVulnerability {
|
|
107
|
+
id: string;
|
|
108
|
+
cveIds: string[];
|
|
109
|
+
summary: string;
|
|
110
|
+
details: string;
|
|
111
|
+
severity: 'critical' | 'high' | 'medium' | 'low' | 'unknown';
|
|
112
|
+
cvssScore: number | null;
|
|
113
|
+
affectedPackage: string;
|
|
114
|
+
affectedVersions: string[];
|
|
115
|
+
fixedVersions: string[];
|
|
116
|
+
publishedDate: Date | null;
|
|
117
|
+
references: string[];
|
|
118
|
+
}
|
|
119
|
+
//# sourceMappingURL=osv-types.d.ts.map
|
|
@@ -152,10 +152,23 @@ export interface WorkerEvent {
|
|
|
152
152
|
readonly timestamp: Date;
|
|
153
153
|
readonly payload: unknown;
|
|
154
154
|
}
|
|
155
|
+
/** Read options; `namespace` reads another domain's records (e.g. quality evidence). */
|
|
156
|
+
export interface WorkerMemoryReadOptions {
|
|
157
|
+
namespace?: string;
|
|
158
|
+
}
|
|
155
159
|
export interface WorkerMemory {
|
|
156
|
-
|
|
160
|
+
/**
|
|
161
|
+
* Read a key. Without `namespace` the worker's own namespace is used; a
|
|
162
|
+
* backend without namespaces ignores it.
|
|
163
|
+
*/
|
|
164
|
+
get<T>(key: string, options?: WorkerMemoryReadOptions): Promise<T | undefined>;
|
|
157
165
|
set<T>(key: string, value: T): Promise<void>;
|
|
158
|
-
|
|
166
|
+
/**
|
|
167
|
+
* Keys matching a glob pattern. Like `get`, `options.namespace` searches
|
|
168
|
+
* another domain's records (e.g. recorded security scans, #1043); a backend
|
|
169
|
+
* without namespaces returns nothing for one.
|
|
170
|
+
*/
|
|
171
|
+
search(pattern: string, limit?: number, options?: WorkerMemoryReadOptions): Promise<string[]>;
|
|
159
172
|
}
|
|
160
173
|
export interface WorkerLogger {
|
|
161
174
|
debug(message: string, meta?: Record<string, unknown>): void;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - namespaced search keys (#1049)
|
|
3
|
+
*
|
|
4
|
+
* Kernel memory backends disagree on what a namespaced `search` returns: the
|
|
5
|
+
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
6
|
+
* `<namespace>:<key>`. A worker that passes a search result straight back to
|
|
7
|
+
* `get(key, { namespace })` then double-prefixes the key and reads nothing.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
11
|
+
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
12
|
+
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
13
|
+
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
14
|
+
*/
|
|
15
|
+
export declare function bareSearchKey(found: string, namespace: string, pattern: string): string;
|
|
16
|
+
//# sourceMappingURL=namespaced-keys.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - namespaced search keys (#1049)
|
|
3
|
+
*
|
|
4
|
+
* Kernel memory backends disagree on what a namespaced `search` returns: the
|
|
5
|
+
* hybrid (sqlite) backend returns bare keys, the in-memory backend returns
|
|
6
|
+
* `<namespace>:<key>`. A worker that passes a search result straight back to
|
|
7
|
+
* `get(key, { namespace })` then double-prefixes the key and reads nothing.
|
|
8
|
+
*/
|
|
9
|
+
function globToRegExp(pattern) {
|
|
10
|
+
const escaped = pattern.replace(/[.+^${}()|[\]\\]/g, '\\$&');
|
|
11
|
+
return new RegExp(`^${escaped.replace(/\*/g, '.*').replace(/\?/g, '.')}$`, 's');
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The bare key for a key returned by `search(pattern, limit, { namespace })`.
|
|
15
|
+
* A result that already matches `pattern` is bare (keys may legitimately start
|
|
16
|
+
* with the namespace name, e.g. `defect-intelligence:predictor:…`); otherwise a
|
|
17
|
+
* leading `<namespace>:` is the backend's prefix and is removed.
|
|
18
|
+
*/
|
|
19
|
+
export function bareSearchKey(found, namespace, pattern) {
|
|
20
|
+
if (globToRegExp(pattern).test(found))
|
|
21
|
+
return found;
|
|
22
|
+
return found.startsWith(`${namespace}:`) ? found.slice(namespace.length + 1) : found;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=namespaced-keys.js.map
|
|
@@ -17,9 +17,10 @@ export interface CoverageSnapshot {
|
|
|
17
17
|
}
|
|
18
18
|
export interface CoverageMetrics {
|
|
19
19
|
readonly line: number;
|
|
20
|
-
|
|
21
|
-
readonly
|
|
22
|
-
readonly
|
|
20
|
+
/** `null` = not collected in that snapshot (#1027 B2) — never a fake 0. */
|
|
21
|
+
readonly branch: number | null;
|
|
22
|
+
readonly function: number | null;
|
|
23
|
+
readonly statement: number | null;
|
|
23
24
|
}
|
|
24
25
|
export interface FileCoverage {
|
|
25
26
|
readonly line: number;
|
|
@@ -8,6 +8,11 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Enqueues test suggestion tasks when gaps exceed threshold.
|
|
10
10
|
*/
|
|
11
|
+
import { measuredCoverageSummary } from '../../domains/quality-assessment/coverage-report-event.js';
|
|
12
|
+
/** Delta of a metric; 0 when either side did not collect it (#1027 B2). */
|
|
13
|
+
function metricDelta(now, before) {
|
|
14
|
+
return now === null || before === null ? 0 : now - before;
|
|
15
|
+
}
|
|
11
16
|
const DEFAULTS = {
|
|
12
17
|
regressionThreshold: 2,
|
|
13
18
|
gapThreshold: 60,
|
|
@@ -39,12 +44,12 @@ export class CoverageDeltaAnalyzer {
|
|
|
39
44
|
const previous = previousRaw;
|
|
40
45
|
const overallDelta = {
|
|
41
46
|
line: current.overall.line - previous.overall.line,
|
|
42
|
-
branch: current.overall.branch
|
|
43
|
-
function: current.overall.function
|
|
44
|
-
statement: current.overall.statement
|
|
47
|
+
branch: metricDelta(current.overall.branch, previous.overall.branch ?? null),
|
|
48
|
+
function: metricDelta(current.overall.function, previous.overall.function ?? null),
|
|
49
|
+
statement: metricDelta(current.overall.statement, previous.overall.statement ?? null),
|
|
45
50
|
};
|
|
46
51
|
const regressionDetected = overallDelta.line < -this.options.regressionThreshold ||
|
|
47
|
-
overallDelta.branch < -this.options.regressionThreshold;
|
|
52
|
+
(overallDelta.branch ?? 0) < -this.options.regressionThreshold;
|
|
48
53
|
// Compute per-file deltas
|
|
49
54
|
const filesToCheck = changedFiles ?? Object.keys(current.files);
|
|
50
55
|
const affectedFiles = [];
|
|
@@ -90,7 +95,9 @@ export class CoverageDeltaAnalyzer {
|
|
|
90
95
|
* Build a CoverageSnapshot from raw lcov/istanbul data stored in memory.
|
|
91
96
|
*/
|
|
92
97
|
async buildSnapshot(memory) {
|
|
93
|
-
const
|
|
98
|
+
const raw = await memory.get('coverage:latest');
|
|
99
|
+
// #1014: only a measured record is a snapshot; legacy/estimated records are not.
|
|
100
|
+
const latest = measuredCoverageSummary(raw);
|
|
94
101
|
if (!latest)
|
|
95
102
|
return undefined;
|
|
96
103
|
return {
|
|
@@ -101,7 +108,7 @@ export class CoverageDeltaAnalyzer {
|
|
|
101
108
|
function: latest.function,
|
|
102
109
|
statement: latest.statement,
|
|
103
110
|
},
|
|
104
|
-
files:
|
|
111
|
+
files: raw && typeof raw.files === 'object' ? raw.files : {},
|
|
105
112
|
};
|
|
106
113
|
}
|
|
107
114
|
// ============================================================================
|
|
@@ -306,11 +306,12 @@ export class QualityDaemon {
|
|
|
306
306
|
try {
|
|
307
307
|
const snapshot = await this.coverageDelta.buildSnapshot(memory);
|
|
308
308
|
if (snapshot) {
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
snapshot.overall.statement
|
|
313
|
-
|
|
309
|
+
// #1027 B2: average the metrics that were collected; an uncollected
|
|
310
|
+
// one (null) is left out rather than dragging health down as 0.
|
|
311
|
+
const collected = [snapshot.overall.line, snapshot.overall.branch,
|
|
312
|
+
snapshot.overall.function, snapshot.overall.statement]
|
|
313
|
+
.filter((v) => typeof v === 'number');
|
|
314
|
+
this._coverageHealth = Math.round(collected.reduce((a, v) => a + v, 0) / collected.length);
|
|
314
315
|
this._lastCoverageCheck = now;
|
|
315
316
|
}
|
|
316
317
|
}
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
* Notification types: gate_failure, coverage_drop, flaky_detected, suggestion_available
|
|
9
9
|
*/
|
|
10
10
|
import { writeFileSync, mkdirSync, readdirSync, readFileSync, unlinkSync } from 'fs';
|
|
11
|
-
import { join
|
|
11
|
+
import { join } from 'path';
|
|
12
|
+
import { getProjectStorePath } from '../../kernel/project-root.js';
|
|
12
13
|
const DEFAULTS = {
|
|
13
|
-
notificationsDir: resolve(process.cwd(), '.agentic-qe', 'notifications'),
|
|
14
14
|
maxNotifications: 200,
|
|
15
15
|
};
|
|
16
16
|
export class NotificationService {
|
|
@@ -20,7 +20,7 @@ export class NotificationService {
|
|
|
20
20
|
urlValidator;
|
|
21
21
|
_sentCount = 0;
|
|
22
22
|
constructor(options) {
|
|
23
|
-
this.notificationsDir = options?.notificationsDir ??
|
|
23
|
+
this.notificationsDir = options?.notificationsDir ?? getProjectStorePath('notifications');
|
|
24
24
|
this.maxNotifications = options?.maxNotifications ?? DEFAULTS.maxNotifications;
|
|
25
25
|
this.webhookUrl = options?.webhookUrl;
|
|
26
26
|
this.urlValidator = options?.urlValidator;
|