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,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - security-scan worker: recorded scan parsing (#1043, #1049)
|
|
3
|
+
*
|
|
4
|
+
* Parses the `security:scan:<id>` records the security-compliance domain writes
|
|
5
|
+
* (OSV dependency scans and SAST scans) into what the security-scan worker
|
|
6
|
+
* reports. Nothing is filled in: a field a record does not carry stays absent.
|
|
7
|
+
*/
|
|
8
|
+
export const SCHEMA_VERSION = 1;
|
|
9
|
+
/** The dependency scanner keeps its records for 7 days; nothing older is current. */
|
|
10
|
+
export const MAX_SCAN_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
11
|
+
export const SEVERITIES = ['critical', 'high', 'medium', 'low', 'informational'];
|
|
12
|
+
export const CVE_ID = /^CVE-\d{4}-\d{4,}$/;
|
|
13
|
+
export const isCount = (v) => typeof v === 'number' && Number.isInteger(v) && v >= 0;
|
|
14
|
+
export const isRecord = (v) => !!v && typeof v === 'object' && !Array.isArray(v);
|
|
15
|
+
export function parseCounts(raw) {
|
|
16
|
+
if (!isRecord(raw))
|
|
17
|
+
return null;
|
|
18
|
+
const counts = {};
|
|
19
|
+
for (const s of SEVERITIES) {
|
|
20
|
+
if (!isCount(raw[s]))
|
|
21
|
+
return null;
|
|
22
|
+
counts[s] = raw[s];
|
|
23
|
+
}
|
|
24
|
+
return counts;
|
|
25
|
+
}
|
|
26
|
+
/** `scannedAt` when the record's timestamp is valid, not in the future and within the scanner's retention. */
|
|
27
|
+
export function parseScannedAt(raw, now) {
|
|
28
|
+
if (typeof raw !== 'string')
|
|
29
|
+
return null;
|
|
30
|
+
const t = Date.parse(raw);
|
|
31
|
+
if (!Number.isFinite(t) || t > now + 60_000 || now - t > MAX_SCAN_AGE_MS)
|
|
32
|
+
return null;
|
|
33
|
+
return raw;
|
|
34
|
+
}
|
|
35
|
+
export function parseVulnerability(raw, kind) {
|
|
36
|
+
if (!isRecord(raw))
|
|
37
|
+
return null;
|
|
38
|
+
const severity = raw.severity;
|
|
39
|
+
if (!SEVERITIES.includes(severity) || typeof raw.title !== 'string')
|
|
40
|
+
return null;
|
|
41
|
+
const location = isRecord(raw.location) ? raw.location : {};
|
|
42
|
+
const remediation = isRecord(raw.remediation) ? raw.remediation : {};
|
|
43
|
+
const vuln = {
|
|
44
|
+
severity,
|
|
45
|
+
title: raw.title,
|
|
46
|
+
description: typeof raw.description === 'string' ? raw.description : '',
|
|
47
|
+
category: typeof raw.category === 'string' ? raw.category : 'other',
|
|
48
|
+
references: Array.isArray(raw.references) ? raw.references.filter((r) => typeof r === 'string') : [],
|
|
49
|
+
};
|
|
50
|
+
if (typeof raw.cveId === 'string' && CVE_ID.test(raw.cveId))
|
|
51
|
+
vuln.cve = raw.cveId;
|
|
52
|
+
if (kind === 'dependency') {
|
|
53
|
+
const dep = isRecord(location.dependency) && typeof location.dependency.name === 'string'
|
|
54
|
+
? location.dependency.name
|
|
55
|
+
: typeof location.snippet === 'string' ? /^"([^"]+)":/.exec(location.snippet)?.[1] : undefined;
|
|
56
|
+
if (dep)
|
|
57
|
+
vuln.package = dep;
|
|
58
|
+
const fixed = typeof remediation.fixExample === 'string' ? /@([^@\s]+)$/.exec(remediation.fixExample)?.[1] : undefined;
|
|
59
|
+
if (fixed)
|
|
60
|
+
vuln.fixedIn = fixed;
|
|
61
|
+
}
|
|
62
|
+
else if (typeof location.file === 'string') {
|
|
63
|
+
vuln.location = typeof location.line === 'number' ? `${location.file}:${location.line}` : location.file;
|
|
64
|
+
}
|
|
65
|
+
return vuln;
|
|
66
|
+
}
|
|
67
|
+
export function parseUnchecked(raw) {
|
|
68
|
+
if (!Array.isArray(raw))
|
|
69
|
+
return [];
|
|
70
|
+
return raw.filter(isRecord).map((p) => ({
|
|
71
|
+
name: typeof p.name === 'string' ? p.name : '?',
|
|
72
|
+
version: typeof p.version === 'string' ? p.version : '?',
|
|
73
|
+
reason: typeof p.reason === 'string' ? p.reason : 'unknown',
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* #1049: a dependency scan is a measurement only when its OSV lookup checked
|
|
78
|
+
* every requested package (`measured: true` and `status: 'complete'`).
|
|
79
|
+
*/
|
|
80
|
+
export function dependencyCompleteness(raw) {
|
|
81
|
+
if (raw.measured === true && raw.status === 'complete')
|
|
82
|
+
return { complete: true };
|
|
83
|
+
return {
|
|
84
|
+
complete: false,
|
|
85
|
+
status: raw.status === 'incomplete' || raw.status === 'failed' ? raw.status : 'unknown',
|
|
86
|
+
...(typeof raw.error === 'string' && raw.error ? { error: raw.error } : {}),
|
|
87
|
+
uncheckedPackages: parseUnchecked(raw.uncheckedPackages),
|
|
88
|
+
...(isCount(raw.packagesChecked) ? { packagesChecked: raw.packagesChecked } : {}),
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
export const SEVERITY_LABEL = {
|
|
92
|
+
critical: 'Critical', high: 'High Severity', medium: 'Medium Severity', low: 'Low Severity', informational: 'Informational',
|
|
93
|
+
};
|
|
94
|
+
/** Health penalty for the real critical/high advisories of a partial dependency scan (#1049). */
|
|
95
|
+
export function partialDependencyPenalty(incomplete) {
|
|
96
|
+
return incomplete ? incomplete.scan.summary.critical * 20 + incomplete.scan.summary.high * 10 : 0;
|
|
97
|
+
}
|
|
98
|
+
/** What a partial dependency scan did check; the dependency totals stay 'unmeasured' (#1049). */
|
|
99
|
+
export function partialDependencyMetrics(incomplete) {
|
|
100
|
+
return incomplete
|
|
101
|
+
? { dependencyVulnerabilitiesInCheckedPackages: incomplete.scan.total, dependencyPackagesUnchecked: incomplete.uncheckedPackages.length }
|
|
102
|
+
: {};
|
|
103
|
+
}
|
|
104
|
+
/** A recorded dependency (OSV) or SAST scan, or `null` when the record is not one. */
|
|
105
|
+
export function parseRecordedScan(raw, now) {
|
|
106
|
+
if (!isRecord(raw))
|
|
107
|
+
return null;
|
|
108
|
+
const kind = raw.scanType;
|
|
109
|
+
if (kind !== 'dependency' && kind !== 'sast')
|
|
110
|
+
return null;
|
|
111
|
+
const scannedAt = parseScannedAt(raw.timestamp, now);
|
|
112
|
+
const summary = parseCounts(raw.summary);
|
|
113
|
+
if (typeof raw.scanId !== 'string' || !scannedAt || !summary)
|
|
114
|
+
return null;
|
|
115
|
+
const listed = kind === 'dependency' ? raw.vulnerabilities : raw.criticalVulnerabilities;
|
|
116
|
+
if (!Array.isArray(listed))
|
|
117
|
+
return null;
|
|
118
|
+
const vulnerabilities = listed.map((v) => parseVulnerability(v, kind));
|
|
119
|
+
if (vulnerabilities.some((v) => v === null))
|
|
120
|
+
return null;
|
|
121
|
+
const counted = SEVERITIES.reduce((sum, s) => sum + summary[s], 0);
|
|
122
|
+
const total = kind === 'sast' && isCount(raw.vulnerabilityCount) ? raw.vulnerabilityCount : counted;
|
|
123
|
+
const scan = {
|
|
124
|
+
scanId: raw.scanId, scannedAt, summary, vulnerabilities: vulnerabilities, total,
|
|
125
|
+
};
|
|
126
|
+
return kind === 'sast' ? { kind, scan } : { kind, scan, completeness: dependencyCompleteness(raw) };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=security-scan-records.js.map
|
|
@@ -2,21 +2,39 @@
|
|
|
2
2
|
* Agentic QE v3 - Security Scan Worker
|
|
3
3
|
* ADR-014: Background Workers for QE Monitoring
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
5
|
+
* Reports the security state from scans the security-compliance domain
|
|
6
|
+
* actually ran:
|
|
7
|
+
* - Dependency vulnerabilities from the OSV dependency scan
|
|
8
|
+
* - Code security issues from the SAST scan
|
|
9
|
+
*
|
|
10
|
+
* #1043: every finding comes from a recorded scan (`security:scan:<id>` in the
|
|
11
|
+
* `security-compliance` namespace, written by DependencyScanner and
|
|
12
|
+
* SASTScanner). The worker runs no scan itself — a background tick must not
|
|
13
|
+
* send the project's dependency list to an external advisory API unasked — and
|
|
14
|
+
* never emits a vulnerability or CVE id a scan did not report. Nothing
|
|
15
|
+
* recorded → nothing stored, an "unmeasured" info finding.
|
|
16
|
+
*
|
|
17
|
+
* #1049: a dependency scan counts only when its OSV lookup was complete
|
|
18
|
+
* (`measured: true`, `status: 'complete'`). The latest scan being incomplete,
|
|
19
|
+
* failed or pre-#1049 (no `status`) leaves the dependency side unmeasured —
|
|
20
|
+
* never "0 vulnerabilities" — with a finding naming the unchecked packages.
|
|
10
21
|
*/
|
|
11
22
|
import { BaseWorker } from '../base-worker';
|
|
12
23
|
import { WorkerContext, WorkerResult } from '../interfaces';
|
|
13
24
|
export declare class SecurityScanWorker extends BaseWorker {
|
|
14
25
|
constructor();
|
|
15
26
|
protected doExecute(context: WorkerContext): Promise<WorkerResult>;
|
|
16
|
-
|
|
27
|
+
/** The most recent recorded dependency and SAST scans, or `null` when neither exists (#1043). */
|
|
28
|
+
private readRecordedScans;
|
|
29
|
+
/**
|
|
30
|
+
* #1049: a dependency scan whose lookup was not complete is unmeasured —
|
|
31
|
+
* never "0 vulnerabilities". Advisories OSV did return for checked packages
|
|
32
|
+
* are real and still reported, marked as coming from a partial scan.
|
|
33
|
+
*/
|
|
34
|
+
private reportIncompleteDependencyScan;
|
|
17
35
|
private analyzeDependencyVulnerabilities;
|
|
18
36
|
private analyzeCodeSecurityIssues;
|
|
19
|
-
|
|
37
|
+
/** Score from the recorded scans' own severity counts. */
|
|
20
38
|
private calculateHealthScore;
|
|
21
39
|
}
|
|
22
40
|
//# sourceMappingURL=security-scan.d.ts.map
|
|
@@ -2,13 +2,26 @@
|
|
|
2
2
|
* Agentic QE v3 - Security Scan Worker
|
|
3
3
|
* ADR-014: Background Workers for QE Monitoring
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
9
|
-
*
|
|
5
|
+
* Reports the security state from scans the security-compliance domain
|
|
6
|
+
* actually ran:
|
|
7
|
+
* - Dependency vulnerabilities from the OSV dependency scan
|
|
8
|
+
* - Code security issues from the SAST scan
|
|
9
|
+
*
|
|
10
|
+
* #1043: every finding comes from a recorded scan (`security:scan:<id>` in the
|
|
11
|
+
* `security-compliance` namespace, written by DependencyScanner and
|
|
12
|
+
* SASTScanner). The worker runs no scan itself — a background tick must not
|
|
13
|
+
* send the project's dependency list to an external advisory API unasked — and
|
|
14
|
+
* never emits a vulnerability or CVE id a scan did not report. Nothing
|
|
15
|
+
* recorded → nothing stored, an "unmeasured" info finding.
|
|
16
|
+
*
|
|
17
|
+
* #1049: a dependency scan counts only when its OSV lookup was complete
|
|
18
|
+
* (`measured: true`, `status: 'complete'`). The latest scan being incomplete,
|
|
19
|
+
* failed or pre-#1049 (no `status`) leaves the dependency side unmeasured —
|
|
20
|
+
* never "0 vulnerabilities" — with a finding naming the unchecked packages.
|
|
10
21
|
*/
|
|
22
|
+
import { bareSearchKey } from '../namespaced-keys.js';
|
|
11
23
|
import { BaseWorker } from '../base-worker.js';
|
|
24
|
+
import { SCHEMA_VERSION, SEVERITIES, SEVERITY_LABEL, parseRecordedScan, partialDependencyMetrics, partialDependencyPenalty, } from './security-scan-records.js';
|
|
12
25
|
const CONFIG = {
|
|
13
26
|
id: 'security-scan',
|
|
14
27
|
name: 'Security Vulnerability Scanner',
|
|
@@ -21,6 +34,10 @@ const CONFIG = {
|
|
|
21
34
|
retryCount: 3,
|
|
22
35
|
retryDelayMs: 30000,
|
|
23
36
|
};
|
|
37
|
+
const SECURITY_NAMESPACE = 'security-compliance';
|
|
38
|
+
const SCAN_KEY_PATTERN = 'security:scan:*';
|
|
39
|
+
const LAST_SCAN_KEY = 'security:lastScan';
|
|
40
|
+
const MAX_SCAN_RECORDS = 1000;
|
|
24
41
|
export class SecurityScanWorker extends BaseWorker {
|
|
25
42
|
constructor() {
|
|
26
43
|
super(CONFIG);
|
|
@@ -30,124 +47,161 @@ export class SecurityScanWorker extends BaseWorker {
|
|
|
30
47
|
context.logger.info('Starting security vulnerability scan');
|
|
31
48
|
const findings = [];
|
|
32
49
|
const recommendations = [];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
50
|
+
const { scan, incompleteDependency } = await this.readRecordedScans(context);
|
|
51
|
+
if (incompleteDependency) {
|
|
52
|
+
this.reportIncompleteDependencyScan(incompleteDependency, findings, recommendations);
|
|
53
|
+
}
|
|
54
|
+
if (!scan) {
|
|
55
|
+
if (!incompleteDependency)
|
|
56
|
+
findings.push({
|
|
57
|
+
type: 'security-unmeasured',
|
|
58
|
+
severity: 'info',
|
|
59
|
+
domain: 'security-compliance',
|
|
60
|
+
title: 'Security Scan Unmeasured',
|
|
61
|
+
description: 'No dependency or SAST scan has been recorded in the last 7 days, so no vulnerabilities are ' +
|
|
62
|
+
'reported and nothing was stored. Run security_scan_comprehensive (or `aqe security`) to scan the project.',
|
|
63
|
+
});
|
|
64
|
+
context.logger.info('Security scan complete', { measured: false });
|
|
65
|
+
return this.createResult(Date.now() - startTime, {
|
|
66
|
+
itemsAnalyzed: incompleteDependency?.scan.total ?? 0,
|
|
67
|
+
issuesFound: findings.filter((f) => f.severity !== 'info').length,
|
|
68
|
+
healthScore: Math.max(0, 100 - partialDependencyPenalty(incompleteDependency)),
|
|
69
|
+
trend: 'stable',
|
|
70
|
+
domainMetrics: {
|
|
71
|
+
dependencyScan: 'unmeasured',
|
|
72
|
+
codeScan: 'unmeasured',
|
|
73
|
+
dependencyVulnerabilities: 'unmeasured',
|
|
74
|
+
codeSecurityIssues: 'unmeasured',
|
|
75
|
+
...partialDependencyMetrics(incompleteDependency),
|
|
76
|
+
},
|
|
77
|
+
}, findings, recommendations);
|
|
42
78
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
scanResult.configurationIssues;
|
|
79
|
+
if (scan.dependency)
|
|
80
|
+
this.analyzeDependencyVulnerabilities(scan.dependency, findings, recommendations);
|
|
81
|
+
if (scan.code)
|
|
82
|
+
this.analyzeCodeSecurityIssues(scan.code, findings, recommendations);
|
|
83
|
+
await context.memory.set(LAST_SCAN_KEY, scan);
|
|
84
|
+
await context.memory.set('security:lastScanTime', scan.evaluatedAt);
|
|
85
|
+
const healthScore = Math.max(0, this.calculateHealthScore(scan) - partialDependencyPenalty(incompleteDependency));
|
|
51
86
|
context.logger.info('Security scan complete', {
|
|
87
|
+
measured: true,
|
|
52
88
|
healthScore,
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
scanResult.codeSecurityIssues.filter(i => i.severity === 'critical').length,
|
|
89
|
+
dependencyScanId: scan.dependency?.scanId ?? null,
|
|
90
|
+
codeScanId: scan.code?.scanId ?? null,
|
|
56
91
|
});
|
|
57
92
|
return this.createResult(Date.now() - startTime, {
|
|
58
|
-
itemsAnalyzed:
|
|
93
|
+
itemsAnalyzed: (scan.dependency?.total ?? 0) + (scan.code?.total ?? 0),
|
|
59
94
|
issuesFound: findings.length,
|
|
60
95
|
healthScore,
|
|
61
96
|
trend: 'stable',
|
|
62
97
|
domainMetrics: {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
98
|
+
dependencyScan: scan.dependency ? scan.dependency.scannedAt : 'unmeasured',
|
|
99
|
+
codeScan: scan.code ? scan.code.scannedAt : 'unmeasured',
|
|
100
|
+
dependencyVulnerabilities: scan.dependency ? scan.dependency.total : 'unmeasured',
|
|
101
|
+
codeSecurityIssues: scan.code ? scan.code.total : 'unmeasured',
|
|
102
|
+
...partialDependencyMetrics(incompleteDependency),
|
|
68
103
|
},
|
|
69
104
|
}, findings, recommendations);
|
|
70
105
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
package: 'minimist',
|
|
90
|
-
version: '1.2.5',
|
|
91
|
-
severity: 'critical',
|
|
92
|
-
cve: 'CVE-2021-44906',
|
|
93
|
-
title: 'Prototype Pollution',
|
|
94
|
-
description: 'Prototype pollution vulnerability allows attackers to manipulate JavaScript object prototypes.',
|
|
95
|
-
fixedIn: '1.2.6',
|
|
96
|
-
},
|
|
97
|
-
],
|
|
98
|
-
codeSecurityIssues: [
|
|
99
|
-
{
|
|
100
|
-
file: 'src/shared/http/http-client.ts',
|
|
101
|
-
line: 45,
|
|
102
|
-
rule: 'no-eval',
|
|
103
|
-
severity: 'high',
|
|
104
|
-
message: 'Avoid using eval() as it can execute arbitrary code',
|
|
105
|
-
category: 'injection',
|
|
106
|
-
},
|
|
107
|
-
{
|
|
108
|
-
file: 'src/kernel/memory-backend.ts',
|
|
109
|
-
line: 122,
|
|
110
|
-
rule: 'sql-injection',
|
|
111
|
-
severity: 'medium',
|
|
112
|
-
message: 'Potential SQL injection - use parameterized queries',
|
|
113
|
-
category: 'injection',
|
|
114
|
-
},
|
|
115
|
-
],
|
|
116
|
-
secretsDetected: 0,
|
|
117
|
-
configurationIssues: 1,
|
|
118
|
-
scanDurationMs: 2500,
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
analyzeDependencyVulnerabilities(vulnerabilities, findings, recommendations) {
|
|
122
|
-
const critical = vulnerabilities.filter(v => v.severity === 'critical');
|
|
123
|
-
const high = vulnerabilities.filter(v => v.severity === 'high');
|
|
124
|
-
for (const vuln of critical) {
|
|
125
|
-
findings.push({
|
|
126
|
-
type: 'critical-vulnerability',
|
|
127
|
-
severity: 'critical',
|
|
128
|
-
domain: 'security-compliance',
|
|
129
|
-
title: `Critical Vulnerability in ${vuln.package}`,
|
|
130
|
-
description: `${vuln.title}: ${vuln.description}`,
|
|
131
|
-
resource: vuln.package,
|
|
132
|
-
context: {
|
|
133
|
-
cve: vuln.cve,
|
|
134
|
-
currentVersion: vuln.version,
|
|
135
|
-
fixedIn: vuln.fixedIn,
|
|
136
|
-
},
|
|
137
|
-
});
|
|
106
|
+
/** The most recent recorded dependency and SAST scans, or `null` when neither exists (#1043). */
|
|
107
|
+
async readRecordedScans(context) {
|
|
108
|
+
const keys = await context.memory.search(SCAN_KEY_PATTERN, MAX_SCAN_RECORDS, { namespace: SECURITY_NAMESPACE });
|
|
109
|
+
const now = Date.now();
|
|
110
|
+
let latestDependency = null;
|
|
111
|
+
let code = null;
|
|
112
|
+
const newer = (a, b) => !b || Date.parse(a.scannedAt) > Date.parse(b.scannedAt);
|
|
113
|
+
for (const found of keys) {
|
|
114
|
+
// The in-memory kernel backend returns namespaced searches as
|
|
115
|
+
// `<namespace>:<key>`; the hybrid backend returns the bare key (#1049).
|
|
116
|
+
const key = bareSearchKey(found, SECURITY_NAMESPACE, SCAN_KEY_PATTERN);
|
|
117
|
+
const parsed = parseRecordedScan(await context.memory.get(key, { namespace: SECURITY_NAMESPACE }), now);
|
|
118
|
+
if (!parsed)
|
|
119
|
+
continue;
|
|
120
|
+
if (parsed.kind === 'dependency' && newer(parsed.scan, latestDependency?.scan ?? null))
|
|
121
|
+
latestDependency = parsed;
|
|
122
|
+
if (parsed.kind === 'sast' && newer(parsed.scan, code))
|
|
123
|
+
code = parsed.scan;
|
|
138
124
|
}
|
|
139
|
-
|
|
125
|
+
// #1049: only the latest dependency scan counts, and only when its lookup
|
|
126
|
+
// was complete — an older complete scan must not mask a newer failure.
|
|
127
|
+
const completeness = latestDependency?.completeness;
|
|
128
|
+
const dependency = latestDependency && completeness?.complete ? latestDependency.scan : null;
|
|
129
|
+
const incompleteDependency = latestDependency && completeness && !completeness.complete
|
|
130
|
+
? {
|
|
131
|
+
scan: latestDependency.scan,
|
|
132
|
+
status: completeness.status,
|
|
133
|
+
...(completeness.error ? { error: completeness.error } : {}),
|
|
134
|
+
uncheckedPackages: completeness.uncheckedPackages,
|
|
135
|
+
...(completeness.packagesChecked !== undefined ? { packagesChecked: completeness.packagesChecked } : {}),
|
|
136
|
+
}
|
|
137
|
+
: null;
|
|
138
|
+
if (!dependency && !code)
|
|
139
|
+
return { scan: null, incompleteDependency };
|
|
140
|
+
return { incompleteDependency, scan: {
|
|
141
|
+
measured: true,
|
|
142
|
+
schemaVersion: SCHEMA_VERSION,
|
|
143
|
+
evaluatedAt: new Date().toISOString(),
|
|
144
|
+
dependency: dependency ? { ...dependency, source: 'osv' } : null,
|
|
145
|
+
code: code ? { ...code, source: 'sast' } : null,
|
|
146
|
+
} };
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* #1049: a dependency scan whose lookup was not complete is unmeasured —
|
|
150
|
+
* never "0 vulnerabilities". Advisories OSV did return for checked packages
|
|
151
|
+
* are real and still reported, marked as coming from a partial scan.
|
|
152
|
+
*/
|
|
153
|
+
reportIncompleteDependencyScan(incomplete, findings, recommendations) {
|
|
154
|
+
const { scan, status, error, uncheckedPackages, packagesChecked } = incomplete;
|
|
155
|
+
const unchecked = uncheckedPackages.map((p) => `${p.name}@${p.version} (${p.reason})`);
|
|
156
|
+
const counts = scan.summary;
|
|
157
|
+
const inChecked = scan.total > 0
|
|
158
|
+
? ` OSV reported ${scan.total} advisory finding(s) in the ${packagesChecked ?? ''}${packagesChecked === undefined ? '' : ' '}checked package(s)` +
|
|
159
|
+
` (${counts.critical} critical, ${counts.high} high, ${counts.medium} medium, ${counts.low} low); they are listed as separate findings.`
|
|
160
|
+
: '';
|
|
161
|
+
const why = status === 'unknown'
|
|
162
|
+
? 'was recorded before scans stated whether every package was checked, so a failed lookup cannot be told apart from a clean one'
|
|
163
|
+
: `is ${status}${error ? ` (${error})` : ''}`;
|
|
164
|
+
findings.push({
|
|
165
|
+
type: 'dependency-scan-incomplete',
|
|
166
|
+
severity: 'info',
|
|
167
|
+
domain: 'security-compliance',
|
|
168
|
+
title: 'Dependency Scan Unmeasured',
|
|
169
|
+
description: `The latest dependency scan (${scan.scannedAt}) ${why}; its result is not a vulnerability count.` +
|
|
170
|
+
(unchecked.length > 0 ? ` Unchecked packages: ${unchecked.join(', ')}.` : '') + inChecked +
|
|
171
|
+
' Re-run the dependency scan.',
|
|
172
|
+
context: {
|
|
173
|
+
scanId: scan.scanId, status, ...(error ? { error } : {}), uncheckedPackages,
|
|
174
|
+
...(packagesChecked !== undefined ? { packagesChecked } : {}),
|
|
175
|
+
advisoriesInCheckedPackages: scan.total,
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
this.analyzeDependencyVulnerabilities(scan, findings, recommendations, true);
|
|
179
|
+
}
|
|
180
|
+
analyzeDependencyVulnerabilities(scan, findings, recommendations, partialScan = false) {
|
|
181
|
+
const critical = scan.vulnerabilities.filter(v => v.severity === 'critical');
|
|
182
|
+
const high = scan.vulnerabilities.filter(v => v.severity === 'high');
|
|
183
|
+
// #1049: a complete scan carries medium/low in its counts; a partial scan has
|
|
184
|
+
// no measured count, so every advisory OSV returned for a checked package is relayed.
|
|
185
|
+
const relayed = partialScan
|
|
186
|
+
? SEVERITIES.flatMap((s) => scan.vulnerabilities.filter(v => v.severity === s))
|
|
187
|
+
: [...critical, ...high];
|
|
188
|
+
for (const vuln of relayed) {
|
|
189
|
+
const pkg = vuln.package ?? vuln.title;
|
|
140
190
|
findings.push({
|
|
141
|
-
type:
|
|
142
|
-
severity: '
|
|
191
|
+
type: `${vuln.severity}-vulnerability`,
|
|
192
|
+
severity: vuln.severity === 'informational' ? 'info' : vuln.severity,
|
|
143
193
|
domain: 'security-compliance',
|
|
144
|
-
title:
|
|
145
|
-
description: `${vuln.title}: ${vuln.description}
|
|
146
|
-
resource:
|
|
194
|
+
title: `${SEVERITY_LABEL[vuln.severity]} Vulnerability in ${pkg}`,
|
|
195
|
+
description: vuln.description ? `${vuln.title}: ${vuln.description}` : vuln.title,
|
|
196
|
+
resource: pkg,
|
|
147
197
|
context: {
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
198
|
+
advisorySource: 'osv',
|
|
199
|
+
scanId: scan.scanId,
|
|
200
|
+
scannedAt: scan.scannedAt,
|
|
201
|
+
...(vuln.cve ? { cve: vuln.cve } : {}),
|
|
202
|
+
...(vuln.fixedIn ? { fixedIn: vuln.fixedIn } : {}),
|
|
203
|
+
references: vuln.references,
|
|
204
|
+
...(partialScan ? { partialScan: true } : {}),
|
|
151
205
|
},
|
|
152
206
|
});
|
|
153
207
|
}
|
|
@@ -156,7 +210,7 @@ export class SecurityScanWorker extends BaseWorker {
|
|
|
156
210
|
priority: 'p0',
|
|
157
211
|
domain: 'security-compliance',
|
|
158
212
|
action: 'Update Critical Vulnerabilities Immediately',
|
|
159
|
-
description:
|
|
213
|
+
description: `The dependency scan of ${scan.scannedAt} reported ${critical.length} critical vulnerabilities. Update to patched versions.`,
|
|
160
214
|
estimatedImpact: 'high',
|
|
161
215
|
effort: 'low',
|
|
162
216
|
autoFixable: true,
|
|
@@ -167,97 +221,66 @@ export class SecurityScanWorker extends BaseWorker {
|
|
|
167
221
|
priority: 'p1',
|
|
168
222
|
domain: 'security-compliance',
|
|
169
223
|
action: 'Address High Severity Vulnerabilities',
|
|
170
|
-
description:
|
|
224
|
+
description: `The dependency scan of ${scan.scannedAt} reported ${high.length} high severity vulnerabilities. Plan updates within current sprint.`,
|
|
171
225
|
estimatedImpact: 'high',
|
|
172
226
|
effort: 'low',
|
|
173
227
|
autoFixable: true,
|
|
174
228
|
});
|
|
175
229
|
}
|
|
176
230
|
}
|
|
177
|
-
analyzeCodeSecurityIssues(
|
|
178
|
-
const
|
|
179
|
-
for (const issue of issues) {
|
|
180
|
-
const existing = byCategory.get(issue.category) || [];
|
|
181
|
-
existing.push(issue);
|
|
182
|
-
byCategory.set(issue.category, existing);
|
|
183
|
-
}
|
|
184
|
-
for (const issue of issues) {
|
|
231
|
+
analyzeCodeSecurityIssues(scan, findings, recommendations) {
|
|
232
|
+
for (const issue of scan.vulnerabilities) {
|
|
185
233
|
findings.push({
|
|
186
234
|
type: `code-security-${issue.category}`,
|
|
187
|
-
severity: issue.severity,
|
|
235
|
+
severity: issue.severity === 'informational' ? 'info' : issue.severity,
|
|
188
236
|
domain: 'security-compliance',
|
|
189
|
-
title: `Security Issue: ${issue.
|
|
190
|
-
description: issue.
|
|
191
|
-
resource:
|
|
237
|
+
title: `Security Issue: ${issue.title}`,
|
|
238
|
+
description: issue.description || issue.title,
|
|
239
|
+
...(issue.location ? { resource: issue.location } : {}),
|
|
192
240
|
context: {
|
|
193
|
-
rule: issue.rule,
|
|
194
241
|
category: issue.category,
|
|
242
|
+
scanId: scan.scanId,
|
|
243
|
+
scannedAt: scan.scannedAt,
|
|
244
|
+
...(issue.cve ? { cve: issue.cve } : {}),
|
|
195
245
|
},
|
|
196
246
|
});
|
|
197
247
|
}
|
|
198
|
-
|
|
199
|
-
const injectionIssues = byCategory.get('injection') || [];
|
|
248
|
+
const injectionIssues = scan.vulnerabilities.filter(v => v.category === 'injection');
|
|
200
249
|
if (injectionIssues.length > 0) {
|
|
201
250
|
recommendations.push({
|
|
202
251
|
priority: 'p0',
|
|
203
252
|
domain: 'security-compliance',
|
|
204
253
|
action: 'Fix Injection Vulnerabilities',
|
|
205
|
-
description:
|
|
254
|
+
description: `The SAST scan of ${scan.scannedAt} reported ${injectionIssues.length} potential injection vulnerabilities. Use parameterized queries and avoid eval().`,
|
|
206
255
|
estimatedImpact: 'high',
|
|
207
256
|
effort: 'medium',
|
|
208
257
|
autoFixable: false,
|
|
209
258
|
});
|
|
210
259
|
}
|
|
211
|
-
const cryptoIssues =
|
|
260
|
+
const cryptoIssues = scan.vulnerabilities.filter(v => v.category === 'sensitive-data');
|
|
212
261
|
if (cryptoIssues.length > 0) {
|
|
213
262
|
recommendations.push({
|
|
214
263
|
priority: 'p1',
|
|
215
264
|
domain: 'security-compliance',
|
|
216
|
-
action: 'Review
|
|
217
|
-
description:
|
|
265
|
+
action: 'Review Sensitive Data Handling',
|
|
266
|
+
description: `The SAST scan of ${scan.scannedAt} reported ${cryptoIssues.length} sensitive-data issues. Ensure secure algorithms and key management.`,
|
|
218
267
|
estimatedImpact: 'high',
|
|
219
268
|
effort: 'high',
|
|
220
269
|
autoFixable: false,
|
|
221
270
|
});
|
|
222
271
|
}
|
|
223
272
|
}
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
type: 'secrets-detected',
|
|
227
|
-
severity: 'critical',
|
|
228
|
-
domain: 'security-compliance',
|
|
229
|
-
title: 'Secrets Detected in Codebase',
|
|
230
|
-
description: `${count} potential secrets/credentials found in source code`,
|
|
231
|
-
context: { count },
|
|
232
|
-
});
|
|
233
|
-
recommendations.push({
|
|
234
|
-
priority: 'p0',
|
|
235
|
-
domain: 'security-compliance',
|
|
236
|
-
action: 'Remove Secrets from Codebase',
|
|
237
|
-
description: 'Immediately rotate any exposed credentials and move them to secure secret management.',
|
|
238
|
-
estimatedImpact: 'high',
|
|
239
|
-
effort: 'medium',
|
|
240
|
-
autoFixable: false,
|
|
241
|
-
});
|
|
242
|
-
}
|
|
243
|
-
calculateHealthScore(result) {
|
|
273
|
+
/** Score from the recorded scans' own severity counts. */
|
|
274
|
+
calculateHealthScore(scan) {
|
|
244
275
|
let score = 100;
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
score -= criticalCode * 15;
|
|
254
|
-
// High code issues: -8 each
|
|
255
|
-
const highCode = result.codeSecurityIssues.filter(i => i.severity === 'high').length;
|
|
256
|
-
score -= highCode * 8;
|
|
257
|
-
// Secrets: -30 each
|
|
258
|
-
score -= result.secretsDetected * 30;
|
|
259
|
-
// Config issues: -5 each
|
|
260
|
-
score -= result.configurationIssues * 5;
|
|
276
|
+
if (scan.dependency) {
|
|
277
|
+
score -= scan.dependency.summary.critical * 20;
|
|
278
|
+
score -= scan.dependency.summary.high * 10;
|
|
279
|
+
}
|
|
280
|
+
if (scan.code) {
|
|
281
|
+
score -= scan.code.summary.critical * 15;
|
|
282
|
+
score -= scan.code.summary.high * 8;
|
|
283
|
+
}
|
|
261
284
|
return Math.max(0, Math.round(score));
|
|
262
285
|
}
|
|
263
286
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agentic-qe",
|
|
3
|
-
"version": "3.15.
|
|
3
|
+
"version": "3.15.7",
|
|
4
4
|
"description": "Agentic Quality Engineering V3 - Domain-Driven Design Architecture with 13 Bounded Contexts, O(log n) coverage analysis, ReasoningBank learning, 60 specialized QE agents, mathematical Coherence verification, deep Claude Flow integration",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -199,7 +199,7 @@
|
|
|
199
199
|
"typescript": "^5.9.3",
|
|
200
200
|
"uuid": "^14.0.0",
|
|
201
201
|
"web-tree-sitter": "~0.26.8",
|
|
202
|
-
"yaml": "^2.
|
|
202
|
+
"yaml": "^2.9.1"
|
|
203
203
|
},
|
|
204
204
|
"peerDependencies": {
|
|
205
205
|
"@claude-flow/browser": "3.0.0-alpha.1",
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.5");process.exit(0)}
|
|
2
|
-
import{a,b,c}from"./chunk-VML4SG3X.js";import"./chunk-KJ3KBP24.js";import"./chunk-GRIPCYW5.js";import"./chunk-RUSLEOMC.js";import"./chunk-NLDFNAOS.js";import"./chunk-HLFDC4SF.js";export{a as AgentBoosterAdapter,b as createAgentBoosterAdapter,c as createAgentBoosterAdapterSync};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{createRequire as __cr}from"module";const require=__cr(import.meta.url);if(process.argv.includes('--version')||process.argv.includes('-v')){console.log("3.15.5");process.exit(0)}
|
|
2
|
-
import{a,b,c,d,e,f}from"./chunk-DL5JENWD.js";import"./chunk-Y2WMPEUP.js";import"./chunk-ZTC5FBL6.js";import"./chunk-4UXPDV7E.js";import"./chunk-4PT5KNXL.js";import"./chunk-4AZP7ZCW.js";import"./chunk-FNAYDITO.js";import"./chunk-A5J4XJS6.js";import"./chunk-V7GNUVYI.js";import"./chunk-OW42F2TX.js";import"./chunk-PDPEMBFV.js";import"./chunk-NMJVG22Z.js";import"./chunk-FHUJCVT3.js";import"./chunk-GGDKOJVF.js";import"./chunk-L6SVCNXK.js";import"./chunk-663ZFPUL.js";import"./chunk-EOR3RECZ.js";import"./chunk-RUJLVJDE.js";import"./chunk-RUSLEOMC.js";import"./chunk-KHCALIFP.js";import"./chunk-2XYTS2WY.js";import"./chunk-3YASZPLO.js";import"./chunk-MQGEZA2A.js";import"./chunk-OU4ZAWCC.js";import"./chunk-OQDC7GCM.js";import"./chunk-RMJ7PJOS.js";import"./chunk-EAYQCBXL.js";import"./chunk-Y2E3IJ53.js";import"./chunk-AQN5EDBM.js";import"./chunk-3AYYGR6W.js";import"./chunk-OGYWWZU7.js";import"./chunk-L336HFFE.js";import"./chunk-E4VIVMDL.js";import"./chunk-WLIYWBQR.js";import"./chunk-NLDFNAOS.js";import"./chunk-VRJPH3LG.js";import"./chunk-3QD7U3FY.js";import"./chunk-KZVJW2SD.js";import"./chunk-UE22ODHN.js";import"./chunk-N2TJNIHA.js";import"./chunk-IHFUEPZH.js";import"./chunk-U6OVPMQX.js";import"./chunk-HLFDC4SF.js";export{b as AQELearningEngine,a as DEFAULT_ENGINE_CONFIG,c as DEFAULT_META_LEARNING_CONFIG,d as MetaLearningEngine,e as createAQELearningEngine,f as createDefaultLearningEngine};
|