agentic-qe 3.15.6 → 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/skills-manifest.json +1 -1
- package/CHANGELOG.md +141 -0
- package/README.md +2 -0
- 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-SY7UCLBL.js → agent-booster-wasm-OS5G7KMQ.js} +2 -2
- package/dist/cli/chunks/{agent-handler-KAMYBU3S.js → agent-handler-PI4I7PME.js} +2 -2
- package/dist/cli/chunks/{agent-memory-branch-2CAW3KUM.js → agent-memory-branch-J7TXHX4U.js} +2 -2
- package/dist/cli/chunks/aqe-learning-engine-DHKZI5RX.js +2 -0
- package/dist/cli/chunks/{arena-QCCVIOAH.js → arena-FXESDCFR.js} +4 -4
- package/dist/cli/chunks/{arena-4OFLJ3R2.js → arena-OWUGXKNT.js} +2 -2
- package/dist/cli/chunks/{audit-RBDQJQJB.js → audit-EPAWLYIZ.js} +3 -3
- package/dist/cli/chunks/base-QZWK3D5P.js +2 -0
- package/dist/cli/chunks/{better-sqlite3-5JRACCDQ.js → better-sqlite3-IYVR5EQY.js} +2 -2
- package/dist/cli/chunks/{brain-handler-W4QIIRT4.js → brain-handler-3W2E6TC6.js} +3 -3
- package/dist/cli/chunks/{branch-enumerator-IBNGI572.js → branch-enumerator-HU7VACJ4.js} +2 -2
- package/dist/cli/chunks/{browser-GMSCVAOI.js → browser-72XOR6E2.js} +2 -2
- package/dist/cli/chunks/browser-workflow-ITPX72RX.js +2 -0
- package/dist/cli/chunks/{chunk-CR66HNAE.js → chunk-2423JAA5.js} +1 -1
- package/dist/cli/chunks/{chunk-LAY7NCQK.js → chunk-24CENUT4.js} +3 -3
- package/dist/cli/chunks/{chunk-PEMSXSP2.js → chunk-2AYBYXOA.js} +2 -2
- package/dist/cli/chunks/{chunk-TUDENMAE.js → chunk-2E3XWKEU.js} +2 -2
- package/dist/cli/chunks/{chunk-KIDOBLUO.js → chunk-2RJYA6WK.js} +2 -2
- package/dist/cli/chunks/{chunk-2IWPJUVV.js → chunk-2YVJ5OUL.js} +5 -5
- package/dist/cli/chunks/{chunk-34MDMFET.js → chunk-34JLY3U6.js} +2 -2
- package/dist/cli/chunks/{chunk-SV5BUYHH.js → chunk-3JD2USUH.js} +2 -2
- package/dist/cli/chunks/{chunk-EF5UHDCG.js → chunk-3RM46XFP.js} +1 -1
- package/dist/cli/chunks/{chunk-7XTANLTN.js → chunk-44DPYNPE.js} +1 -1
- package/dist/cli/chunks/{chunk-ONPPBLRB.js → chunk-4DIZ5BT6.js} +2 -2
- package/dist/cli/chunks/{chunk-22OZIJAD.js → chunk-4G2VNW4C.js} +2 -2
- package/dist/cli/chunks/{chunk-LJCEDTUM.js → chunk-56ZKQYZY.js} +3 -3
- package/dist/cli/chunks/{chunk-HOEWMEF2.js → chunk-5KCBX225.js} +2 -2
- package/dist/cli/chunks/{chunk-V3OLS2NG.js → chunk-5KS7HA37.js} +2 -2
- package/dist/cli/chunks/{chunk-MQCTLTGE.js → chunk-5PBRBS7D.js} +2 -2
- package/dist/cli/chunks/{chunk-TVLOED6O.js → chunk-5Q22XPTH.js} +2 -2
- package/dist/cli/chunks/{chunk-B7RHBKHL.js → chunk-634D2ENF.js} +2 -2
- package/dist/cli/chunks/{chunk-7TVIX4WL.js → chunk-6AYRAOCA.js} +2 -2
- package/dist/cli/chunks/{chunk-4KOVHQXK.js → chunk-6BO3WCK7.js} +2 -2
- package/dist/cli/chunks/{chunk-5HAPS6VD.js → chunk-6FEQ73BF.js} +2 -2
- package/dist/cli/chunks/{chunk-FQ5N666N.js → chunk-6JT73S5B.js} +1 -1
- package/dist/cli/chunks/{chunk-6MXAJBEA.js → chunk-6OS7HREG.js} +1 -1
- package/dist/cli/chunks/{chunk-6R3FBFCJ.js → chunk-6PKCQXEW.js} +2 -2
- package/dist/cli/chunks/{chunk-DQNUPEY5.js → chunk-7EX4DEQR.js} +2 -2
- package/dist/cli/chunks/{chunk-KCB6P463.js → chunk-7UCVYYWL.js} +2 -2
- package/dist/cli/chunks/{chunk-RLB7K7QP.js → chunk-AAA4SHEG.js} +1 -1
- package/dist/cli/chunks/{chunk-ITIJ23K2.js → chunk-AXO7OOOA.js} +2 -2
- package/dist/cli/chunks/{chunk-6RDVY26I.js → chunk-B7M323VL.js} +2 -2
- package/dist/cli/chunks/{chunk-EJ4KZFZN.js → chunk-BB7OLQKO.js} +1 -1
- package/dist/cli/chunks/{chunk-5NC7QEJ6.js → chunk-BTIBXGVQ.js} +4 -4
- package/dist/cli/chunks/{chunk-RD5BYLN7.js → chunk-BTYKGVJ5.js} +1 -1
- package/dist/cli/chunks/{chunk-YXU35GGD.js → chunk-C2CUPJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-XFPQIWEH.js → chunk-C2MDBBFF.js} +3 -3
- package/dist/cli/chunks/{chunk-QLKUCMZC.js → chunk-CG5DZCOZ.js} +1 -1
- package/dist/cli/chunks/{chunk-YLNYPQDR.js → chunk-CIFWOMNX.js} +1 -1
- package/dist/cli/chunks/{chunk-ORBODZSO.js → chunk-CWPRU7ZI.js} +2 -2
- package/dist/cli/chunks/{chunk-WKDWRRDT.js → chunk-CXTJ47QS.js} +2 -2
- package/dist/cli/chunks/{chunk-SOSJWM3E.js → chunk-DCJW2DPL.js} +4 -4
- package/dist/cli/chunks/{chunk-GVRFSXY6.js → chunk-DGK6GQMO.js} +2 -2
- package/dist/cli/chunks/{chunk-X33F7NXH.js → chunk-DVPGBDBP.js} +3 -3
- package/dist/cli/chunks/chunk-EB2PP6X2.js +2 -0
- package/dist/cli/chunks/{chunk-HZFK2Z2Z.js → chunk-ECSLJJOQ.js} +1 -1
- package/dist/cli/chunks/{chunk-JCE76MPP.js → chunk-ED32XJ5R.js} +2 -2
- package/dist/cli/chunks/{chunk-ULCHPPW2.js → chunk-EDU72RTW.js} +1 -1
- package/dist/cli/chunks/{chunk-ZOUEQ6DL.js → chunk-EL75G2A3.js} +1 -1
- package/dist/cli/chunks/{chunk-GNYOHZVV.js → chunk-EV2BYY6T.js} +1 -1
- package/dist/cli/chunks/{chunk-RUTO67PT.js → chunk-F62EKVVC.js} +2 -2
- package/dist/cli/chunks/{chunk-IVJIHZSM.js → chunk-FTTFJ7SJ.js} +1 -1
- package/dist/cli/chunks/{chunk-NYS2GUNO.js → chunk-FVBFASOD.js} +2 -2
- package/dist/cli/chunks/{chunk-5DH5QI7G.js → chunk-G762PEFO.js} +3 -3
- package/dist/cli/chunks/{chunk-JPJEAK4G.js → chunk-G7YTZTGU.js} +1 -1
- package/dist/cli/chunks/{chunk-5VUIXDY2.js → chunk-GY2SAIXP.js} +2 -2
- package/dist/cli/chunks/{chunk-7XUB7U6Z.js → chunk-H4WHDFB5.js} +2 -2
- package/dist/cli/chunks/{chunk-72MQCZSM.js → chunk-HLZATDD2.js} +2 -2
- package/dist/cli/chunks/{chunk-AX26QJ6T.js → chunk-HPG7354V.js} +2 -2
- package/dist/cli/chunks/{chunk-7SAMMQVS.js → chunk-HSDOOFV7.js} +1 -1
- package/dist/cli/chunks/{chunk-K55EAWZ5.js → chunk-HTWIGQL4.js} +2 -2
- package/dist/cli/chunks/{chunk-BXATKI5S.js → chunk-HXBAQKMH.js} +2 -2
- package/dist/cli/chunks/{chunk-46HBVDMU.js → chunk-HZFT3P5B.js} +1 -1
- package/dist/cli/chunks/{chunk-RFDFET3O.js → chunk-I7H4IP7T.js} +2 -2
- package/dist/cli/chunks/{chunk-AJT3XDRD.js → chunk-IARSGAG7.js} +2 -2
- package/dist/cli/chunks/{chunk-TL5GV3PR.js → chunk-IC2WSSD5.js} +3 -3
- package/dist/cli/chunks/{chunk-TLUIO37P.js → chunk-ICPALF4Q.js} +2 -2
- package/dist/cli/chunks/{chunk-ZSBD4FUX.js → chunk-IWQQIXHO.js} +2 -2
- package/dist/cli/chunks/{chunk-AUOSHM63.js → chunk-IYQ7XNE5.js} +2 -2
- package/dist/cli/chunks/{chunk-RHIQ6QO5.js → chunk-J26GADQE.js} +281 -281
- package/dist/cli/chunks/{chunk-AUN4FG7V.js → chunk-J43DV3ME.js} +1 -1
- package/dist/cli/chunks/{chunk-ALCIUWFC.js → chunk-JFPXCQNP.js} +1 -1
- package/dist/cli/chunks/{chunk-R363XXGH.js → chunk-JK6B3ULP.js} +2 -2
- package/dist/cli/chunks/{chunk-7VTKR44N.js → chunk-JPHDMHFG.js} +2 -2
- package/dist/cli/chunks/{chunk-FOJRPEIP.js → chunk-JVYPXW6Y.js} +2 -2
- package/dist/cli/chunks/{chunk-ZUTFHGEO.js → chunk-JY4AIEZ7.js} +1 -1
- package/dist/cli/chunks/{chunk-47Q7JL3V.js → chunk-JY4WLN3K.js} +2 -2
- package/dist/cli/chunks/{chunk-IEPWO4XP.js → chunk-JYXOFN3E.js} +2 -2
- package/dist/cli/chunks/{chunk-2CIDFR2H.js → chunk-K7W55B7Q.js} +2 -2
- package/dist/cli/chunks/{chunk-D5N2O5EH.js → chunk-KPOPBUUJ.js} +2 -2
- package/dist/cli/chunks/{chunk-OQ4S6B7P.js → chunk-LDXQRNTT.js} +1 -1
- package/dist/cli/chunks/{chunk-6T6AHVLF.js → chunk-LDZWIV2O.js} +1 -1
- package/dist/cli/chunks/{chunk-A7ANPS4E.js → chunk-LGBN7TKC.js} +2 -2
- package/dist/cli/chunks/{chunk-X2DR27AY.js → chunk-LMEU64TR.js} +2 -2
- package/dist/cli/chunks/{chunk-GI5HWS4H.js → chunk-LP4AS2E4.js} +1 -1
- package/dist/cli/chunks/{chunk-VVF337SV.js → chunk-LQOVA4YX.js} +2 -2
- package/dist/cli/chunks/{chunk-KYVIOC3C.js → chunk-LVEX4GID.js} +2 -2
- package/dist/cli/chunks/{chunk-BO7UFNYV.js → chunk-M63QB466.js} +2 -2
- package/dist/cli/chunks/{chunk-UHHMAKPE.js → chunk-MDC4G323.js} +1 -1
- package/dist/cli/chunks/{chunk-4CLDYT36.js → chunk-MHZPC4HJ.js} +2 -2
- package/dist/cli/chunks/{chunk-24ZSGYC6.js → chunk-MJJC6HUK.js} +1 -1
- package/dist/cli/chunks/{chunk-ZL5LJT7D.js → chunk-MKFQNCXI.js} +2 -2
- package/dist/cli/chunks/{chunk-XZ46CI35.js → chunk-MMXG3LL6.js} +2 -2
- package/dist/cli/chunks/{chunk-OPDZBRIL.js → chunk-MNCF643K.js} +2 -2
- package/dist/cli/chunks/{chunk-CEXNW5TR.js → chunk-MNZFEIE5.js} +1 -1
- package/dist/cli/chunks/{chunk-L4D3TPFP.js → chunk-MQ6OF6DU.js} +1 -1
- package/dist/cli/chunks/{chunk-UB6DQGWM.js → chunk-MRHM4COP.js} +2 -2
- package/dist/cli/chunks/{chunk-CLAMMGY3.js → chunk-N4PMPSJJ.js} +2 -2
- package/dist/cli/chunks/{chunk-XQ53PZEF.js → chunk-NZQPP533.js} +3 -3
- package/dist/cli/chunks/{chunk-FU7LNUD7.js → chunk-OA4GR3EZ.js} +2 -2
- package/dist/cli/chunks/{chunk-ORFL3YXB.js → chunk-OJEZNLB6.js} +2 -2
- package/dist/cli/chunks/{chunk-5LST62QR.js → chunk-ONVALAZN.js} +2 -2
- package/dist/cli/chunks/{chunk-DA7DGDTI.js → chunk-PEKDSJBC.js} +2 -2
- package/dist/cli/chunks/{chunk-3DJNKNBR.js → chunk-PG64YV6C.js} +57 -57
- package/dist/cli/chunks/{chunk-2ZTWPMTK.js → chunk-PQV7E7XH.js} +2 -2
- package/dist/cli/chunks/chunk-PTK66HEY.js +2 -0
- package/dist/cli/chunks/{chunk-CZBIREL5.js → chunk-PUECC4WI.js} +2 -2
- package/dist/cli/chunks/{chunk-JYKQVYX2.js → chunk-PXZKPUW6.js} +2 -2
- package/dist/cli/chunks/{chunk-I7WAW7TM.js → chunk-PYHYOKYT.js} +2 -2
- package/dist/cli/chunks/{chunk-LCCTJ2PC.js → chunk-PZG3542B.js} +2 -2
- package/dist/cli/chunks/{chunk-F7A2UBZO.js → chunk-Q2T5FXEA.js} +2 -2
- package/dist/cli/chunks/{chunk-PS6WFCA4.js → chunk-QJE6ZW2X.js} +2 -2
- package/dist/cli/chunks/{chunk-LZWJ5BMP.js → chunk-QNQSM2OG.js} +2 -2
- package/dist/cli/chunks/{chunk-QLYO3H7E.js → chunk-QQT6QENQ.js} +2 -2
- package/dist/cli/chunks/{chunk-VCONCVSY.js → chunk-QVG4ZDXX.js} +2 -2
- package/dist/cli/chunks/{chunk-NMY4KTWA.js → chunk-QWLTHFZW.js} +2 -2
- package/dist/cli/chunks/{chunk-NBUXM5X6.js → chunk-RCYLCA7E.js} +2 -2
- package/dist/cli/chunks/{chunk-P7DXVL2S.js → chunk-REEIFA6A.js} +2 -2
- package/dist/cli/chunks/{chunk-5MT7DMD7.js → chunk-RNYX4CPI.js} +2 -2
- package/dist/cli/chunks/{chunk-HAN4MS5T.js → chunk-RORZ5O5Z.js} +2 -2
- package/dist/cli/chunks/{chunk-ZCP4P6O2.js → chunk-RRPYWBFX.js} +2 -2
- package/dist/cli/chunks/{chunk-3NJ7O3OH.js → chunk-RXAFLK34.js} +2 -2
- package/dist/cli/chunks/{chunk-VAYZ5QIE.js → chunk-SQHLC6I5.js} +1 -1
- package/dist/cli/chunks/{chunk-Q2RBOC7V.js → chunk-SSP2B2WR.js} +2 -2
- package/dist/cli/chunks/{chunk-CCL436IU.js → chunk-SX2YSHE7.js} +14 -6
- package/dist/cli/chunks/{chunk-ZTB32K5N.js → chunk-T3ZDVU6F.js} +3 -3
- package/dist/cli/chunks/{chunk-624QRKQX.js → chunk-T6W5APYP.js} +1 -1
- package/dist/cli/chunks/{chunk-BAYGQRNP.js → chunk-TU4LIIOP.js} +2 -2
- package/dist/cli/chunks/{chunk-L2TDHJR3.js → chunk-UBYCR3O4.js} +2 -2
- package/dist/cli/chunks/{chunk-JAPBSSFY.js → chunk-UCLN6AME.js} +1 -1
- package/dist/cli/chunks/{chunk-66NW3ZB4.js → chunk-UIYKR2SA.js} +2 -2
- package/dist/cli/chunks/{chunk-BIXRTOH3.js → chunk-UUHIEM2M.js} +3 -3
- package/dist/cli/chunks/{chunk-ELI4GDQO.js → chunk-UY3REQOK.js} +2 -2
- package/dist/cli/chunks/{chunk-BUTGIVKW.js → chunk-V2SAEMZY.js} +1 -1
- package/dist/cli/chunks/{chunk-6WOZUSSN.js → chunk-V5NGBQAQ.js} +2 -2
- package/dist/cli/chunks/{chunk-7TJZDRDU.js → chunk-VCA6YYII.js} +1 -1
- package/dist/cli/chunks/chunk-VJRZFWR5.js +2 -0
- package/dist/cli/chunks/{chunk-5GIJU2ZY.js → chunk-VKPKYMCT.js} +2 -2
- package/dist/cli/chunks/{chunk-XPB5BVU6.js → chunk-VNW5Q2CX.js} +2 -2
- package/dist/cli/chunks/{chunk-7QVPMH25.js → chunk-VUFRTGML.js} +2 -2
- package/dist/cli/chunks/{chunk-MP3FSUNB.js → chunk-W4X2VTIY.js} +2 -2
- package/dist/cli/chunks/{chunk-GWM4M5NF.js → chunk-WTLIEBDH.js} +1 -1
- package/dist/cli/chunks/{chunk-QS5KZYUZ.js → chunk-WUV5RZUI.js} +2 -2
- package/dist/cli/chunks/{chunk-HEGGV2PT.js → chunk-WXI2STKQ.js} +2 -2
- package/dist/cli/chunks/{chunk-GFB6BZWU.js → chunk-XEWXYGJI.js} +2 -2
- package/dist/cli/chunks/{chunk-NHRF3V4B.js → chunk-XNSQZ3O7.js} +2 -2
- package/dist/cli/chunks/{chunk-4POOJYXA.js → chunk-XTJMY3KS.js} +1 -1
- package/dist/cli/chunks/{chunk-LMAEMVPA.js → chunk-XXAVQACL.js} +1 -1
- package/dist/cli/chunks/{chunk-RV6HSMKJ.js → chunk-Y4SAWE45.js} +1 -1
- package/dist/cli/chunks/{chunk-DLSFT6PO.js → chunk-Y6A46M3B.js} +2 -2
- package/dist/cli/chunks/{chunk-5UPIL62W.js → chunk-YDZJWDR6.js} +3 -3
- package/dist/cli/chunks/{chunk-F3KS3TAB.js → chunk-YFOBQSOW.js} +2 -2
- package/dist/cli/chunks/{chunk-XBEI2JBA.js → chunk-YK3NOC2R.js} +2 -2
- package/dist/cli/chunks/{chunk-MQTA6KIO.js → chunk-YUC7RJGR.js} +1 -1
- package/dist/cli/chunks/{chunk-A74J23QB.js → chunk-Z3VJLWRR.js} +2 -2
- package/dist/cli/chunks/{chunk-YNG7E26C.js → chunk-ZLVQSEZK.js} +2 -2
- package/dist/cli/chunks/{chunk-6HWARQWV.js → chunk-ZRLNACPY.js} +2 -2
- package/dist/cli/chunks/{chunk-XBFQJZWX.js → chunk-ZTMZFF25.js} +2 -2
- package/dist/cli/chunks/chunk-ZUMDDMDE.js +3 -0
- package/dist/cli/chunks/{ci-GEJCXMBK.js → ci-5HEXJZ2C.js} +2 -2
- package/dist/cli/chunks/{ci-config-2ZVV4OXL.js → ci-config-WU4NPDAM.js} +2 -2
- package/dist/cli/chunks/{ci-output-E45OGVPR.js → ci-output-BJQVXX5E.js} +2 -2
- package/dist/cli/chunks/{circuit-breaker-X73ITYZC.js → circuit-breaker-3BMGTQCB.js} +2 -2
- package/dist/cli/chunks/{claude-flow-setup-W4PPH46C.js → claude-flow-setup-GVDGJWMU.js} +2 -2
- package/dist/cli/chunks/client-S7GNYTZ5.js +2 -0
- package/dist/cli/chunks/{cline-installer-NUEPMWDE.js → cline-installer-V4MRGWVA.js} +2 -2
- package/dist/cli/chunks/{code-6WQHBS7G.js → code-A3TGQPEO.js} +3 -3
- package/dist/cli/chunks/{code-index-extractor-BXQIFIFT.js → code-index-extractor-YJQSYWD3.js} +2 -2
- package/dist/cli/chunks/{codex-installer-Z337R2KH.js → codex-installer-7N7UQPAH.js} +2 -2
- package/dist/cli/chunks/{completions-F5DMYFHV.js → completions-PPGVYLZS.js} +2 -2
- package/dist/cli/chunks/{complexity-analyzer-W2SYPZDI.js → complexity-analyzer-XZTFLYV5.js} +2 -2
- package/dist/cli/chunks/{continuedev-installer-ZCHUIFTN.js → continuedev-installer-Z5I57RAH.js} +2 -2
- package/dist/cli/chunks/{copilot-installer-M5JNODXF.js → copilot-installer-F5YZ6BHB.js} +2 -2
- package/dist/cli/chunks/core-handlers-CUEPOQIO.js +2 -0
- package/dist/cli/chunks/{cost-tracker-LSYTHBHV.js → cost-tracker-GO33ZQAP.js} +2 -2
- package/dist/cli/chunks/{coverage-PGMRS5SS.js → coverage-GSHKLY74.js} +3 -3
- package/dist/cli/chunks/cross-domain-router-CXN5QFEV.js +2 -0
- package/dist/cli/chunks/{cursor-installer-XPUA73UW.js → cursor-installer-JJ7IVJZB.js} +2 -2
- package/dist/cli/chunks/daemon-3DQCKRYO.js +10 -0
- package/dist/cli/chunks/{daemon-ITKDIYMW.js → daemon-IRL7QRNE.js} +3 -3
- package/dist/cli/chunks/{dag-attention-scheduler-T55AXLD6.js → dag-attention-scheduler-ORXSUHPA.js} +2 -2
- package/dist/cli/chunks/{detect-DR7J6K4O.js → detect-RHU62KRI.js} +2 -2
- package/dist/cli/chunks/{dist-node-LAJJBOUT.js → dist-node-3VKV4Z6C.js} +2 -2
- package/dist/cli/chunks/{domain-handler-OMSHCRMK.js → domain-handler-SFIML4FK.js} +2 -2
- package/dist/cli/chunks/{domain-plugins-EQXSKC5K.js → domain-plugins-CJ4FA3OC.js} +2 -2
- package/dist/cli/chunks/{domain-transfer-FKRAGVSW.js → domain-transfer-BCRKPCAA.js} +2 -2
- package/dist/cli/chunks/dream-5AUNJW24.js +2 -0
- package/dist/cli/chunks/{embed-and-insert-pattern-JZFPCNL3.js → embed-and-insert-pattern-VL3HFLPV.js} +2 -2
- package/dist/cli/chunks/{eval-JSNNASBW.js → eval-GGKRI4P5.js} +2 -2
- package/dist/cli/chunks/{experience-capture-middleware-UPD3IZBK.js → experience-capture-middleware-F72TIRQY.js} +3 -3
- package/dist/cli/chunks/{fast-paths-YNMIBS2E.js → fast-paths-7KOOF3MA.js} +2 -2
- package/dist/cli/chunks/{feature-flags-SRLXDKBI.js → feature-flags-FNHBTHBH.js} +2 -2
- package/dist/cli/chunks/{feature-flags-VIR7O4L7.js → feature-flags-IOZEWWFU.js} +2 -2
- package/dist/cli/chunks/file-discovery-AYWF357I.js +2 -0
- package/dist/cli/chunks/{fleet-K2ED46EL.js → fleet-QX5KXTRC.js} +3 -3
- package/dist/cli/chunks/{gnn-wrapper-QCU4ZRYW.js → gnn-wrapper-OH2DOQP7.js} +2 -2
- package/dist/cli/chunks/{heartbeat-handler-YYQI4WZM.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-C5TJSWTZ.js → hnsw-legacy-bridge-6MLLOGOE.js} +2 -2
- package/dist/cli/chunks/{hnswlib-node-SE3MJJYS.js → hnswlib-node-4UDISJ3G.js} +2 -2
- package/dist/cli/chunks/{hooks-C572SRDH.js → hooks-NOQJWQ4P.js} +10 -10
- package/dist/cli/chunks/hybrid-backend-LOM54PDD.js +2 -0
- package/dist/cli/chunks/{hypergraph-engine-35A6G3M5.js → hypergraph-engine-2OD3APVP.js} +2 -2
- package/dist/cli/chunks/{hypergraph-handler-U2756CWI.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-32PX5YH7.js → kilocode-installer-RLZYLVQJ.js} +2 -2
- package/dist/cli/chunks/{kiro-installer-C4ROMMUS.js → kiro-installer-LFZOC7VD.js} +2 -2
- package/dist/cli/chunks/knowledge-graph-SDISHO62.js +2 -0
- package/dist/cli/chunks/{learning-GEPVZGJQ.js → learning-XRPGLUWR.js} +20 -20
- package/dist/cli/chunks/{llm-router-XRKTTJTX.js → llm-router-OMK5HYPH.js} +4 -4
- package/dist/cli/chunks/llm-router-service-YTCMRBAN.js +2 -0
- package/dist/cli/chunks/{load-XVH6HW7E.js → load-XADC7KCU.js} +2 -2
- package/dist/cli/chunks/load-test-RPKHLBCC.js +2 -0
- package/dist/cli/chunks/{mcp-IULSTM4Z.js → mcp-PIBKSSVU.js} +2 -2
- package/dist/cli/chunks/{memory-6K7IAU4T.js → memory-AP7EZERS.js} +5 -5
- package/dist/cli/chunks/memory-backend-BZXFO4JZ.js +2 -0
- package/dist/cli/chunks/{memory-handlers-CG6DRLAW.js → memory-handlers-MOFDNB6E.js} +2 -2
- package/dist/cli/chunks/{multi-model-executor-VZDUYPLX.js → multi-model-executor-7JJ2FZ33.js} +2 -2
- package/dist/cli/chunks/{opencode-installer-QUTXKNH4.js → opencode-installer-ZZZ6EBYJ.js} +2 -2
- package/dist/cli/chunks/{orchestrator-PCKKUWOP.js → orchestrator-2H2YKSGJ.js} +5 -5
- package/dist/cli/chunks/pattern-null-store-4PRPIOR6.js +2 -0
- package/dist/cli/chunks/{pattern-usage-recorder-PX5HQVRL.js → pattern-usage-recorder-7MJJWC2Z.js} +2 -2
- package/dist/cli/chunks/{pipeline-O562GTOG.js → pipeline-LIE5BWQY.js} +2 -2
- package/dist/cli/chunks/{platform-PM7Q2AZS.js → platform-SMYUNLGX.js} +2 -2
- package/dist/cli/chunks/{plugin-OTYTFGPY.js → plugin-LJDIXQNT.js} +2 -2
- package/dist/cli/chunks/{prime-radiant-advanced-wasm-6CFXTHC2.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-PPGNSAOS.js → protocol-handler-YVM66DLI.js} +2 -2
- package/dist/cli/chunks/{prove-WQ3BKRZG.js → prove-ZBDT52GD.js} +2 -2
- package/dist/cli/chunks/qe-reasoning-bank-GDZACWKW.js +2 -0
- package/dist/cli/chunks/{quality-C5WUU3AA.js → quality-DUKXGDDO.js} +2 -2
- package/dist/cli/chunks/{quality-gate-WSSRKD5U.js → quality-gate-SM3RXF4V.js} +3 -3
- package/dist/cli/chunks/queen-coordinator-LDKLBPD5.js +2 -0
- package/dist/cli/chunks/{real-embeddings-CFQE7IRQ.js → real-embeddings-4QLQZDB5.js} +2 -2
- package/dist/cli/chunks/{ref-validation-DHKHXVZT.js → ref-validation-M3EO32YQ.js} +2 -2
- package/dist/cli/chunks/{roocode-installer-3PPODABV.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-JNXTGT6T.js → routing-handler-55FMUACP.js} +2 -2
- package/dist/cli/chunks/{ruvector-commands-6YLROPVP.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-4DWB4WRK.js → rvf-migration-coordinator-RFXFU6JD.js} +2 -2
- package/dist/cli/chunks/rvf-native-adapter-UXI66OQJ.js +2 -0
- package/dist/cli/chunks/{rvf-store-integrity-YKR2ZNBF.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-LNRLFP5I.js → shared-rvf-adapter-YHLLNFHF.js} +2 -2
- package/dist/cli/chunks/{shared-rvf-dual-writer-GWU6YQNS.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-46KKBSSV.js → standalone-memory-LUHKQAGM.js} +2 -2
- package/dist/cli/chunks/{status-handler-35T5FTDQ.js → status-handler-S6S5PNR7.js} +2 -2
- package/dist/cli/chunks/{structural-health-P7QPQWLO.js → structural-health-PQ7NZAJ4.js} +2 -2
- package/dist/cli/chunks/{sync-W6Z4R4PL.js → sync-Q6KRQXU6.js} +2 -2
- package/dist/cli/chunks/{sync-Y43EWBSY.js → sync-S744AEJC.js} +2 -2
- package/dist/cli/chunks/{task-handler-5CX3ZYT7.js → task-handler-GAMGEHUW.js} +2 -2
- package/dist/cli/chunks/{task-handlers-DQZGOJNE.js → task-handlers-6CRDEELN.js} +3 -3
- package/dist/cli/chunks/{test-TPP53VVV.js → test-FNH67DBK.js} +4 -4
- package/dist/cli/chunks/{test-scheduling-WBV4UMQH.js → test-scheduling-NZA5SHK6.js} +3 -3
- package/dist/cli/chunks/{token-bootstrap-GIIDXHLC.js → token-bootstrap-CXKG55JD.js} +2 -2
- package/dist/cli/chunks/{token-usage-AKK37RB7.js → token-usage-M7WWEDJX.js} +2 -2
- package/dist/cli/chunks/{transformers-7MASPELS.js → transformers-2IFMCK6A.js} +2 -2
- package/dist/cli/chunks/{tree-sitter-wasm-parser-YZKD6UGB.js → tree-sitter-wasm-parser-NMNA6RJC.js} +2 -2
- package/dist/cli/chunks/{types-AZ3BTXDP.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-L7OTDKEK.js → upgrade-KDB5RGL7.js} +2 -2
- package/dist/cli/chunks/{validate-O3QVFIGP.js → validate-KMUV5FUA.js} +2 -2
- package/dist/cli/chunks/{validate-swarm-2UGBGLTX.js → validate-swarm-ANZWRCJU.js} +2 -2
- package/dist/cli/chunks/visual-security-GXYZV7KR.js +2 -0
- package/dist/cli/chunks/{web-tree-sitter-J75IYPRO.js → web-tree-sitter-SXXC4NMS.js} +2 -2
- package/dist/cli/chunks/{windsurf-installer-FQ5DBFCG.js → windsurf-installer-2LWSKMBU.js} +2 -2
- package/dist/cli/chunks/witness-chain-52PEIEGK.js +2 -0
- package/dist/cli/chunks/{witness-chain-I7TN4MXZ.js → witness-chain-JJMSJFZP.js} +2 -2
- package/dist/cli/chunks/{witness-chain-repair-D3NE3NQK.js → witness-chain-repair-OX7VFW6T.js} +2 -2
- package/dist/cli/chunks/{witness-chain-verifier-RU2WOP5M.js → witness-chain-verifier-QLSMXHAZ.js} +2 -2
- package/dist/cli/chunks/{witness-key-manager-IHQB2FR5.js → witness-key-manager-3DS4L7LE.js} +2 -2
- package/dist/cli/chunks/{workflow-6BWTNVV6.js → workflow-ARWAMHD3.js} +4 -4
- package/dist/cli/chunks/workflow-orchestrator-DORMQMG7.js +2 -0
- package/dist/cli/chunks/{wrappers-URVP25VU.js → wrappers-J6KGTUSJ.js} +2 -2
- package/dist/cli/commands/learning.js +3 -2
- package/dist/cli/commands/security.d.ts +16 -0
- package/dist/cli/commands/security.js +76 -9
- package/dist/cli/handlers/init-guard.d.ts +21 -1
- package/dist/cli/handlers/init-guard.js +51 -8
- package/dist/cli/handlers/init-handler.js +57 -56
- package/dist/cli/index.js +11 -0
- package/dist/cli/utils/ci-output.d.ts +5 -0
- package/dist/cli/utils/ci-output.js +8 -0
- package/dist/coordination/handlers/security-handlers.js +22 -6
- package/dist/coordination/protocols/defect-investigation.js +7 -1
- package/dist/coordination/protocols/security-audit.js +11 -0
- package/dist/coordination/result-saver.d.ts +9 -0
- package/dist/coordination/result-saver.js +34 -4
- package/dist/domains/coverage-analysis/collected-metrics.d.ts +2 -0
- package/dist/domains/coverage-analysis/collected-metrics.js +6 -0
- package/dist/domains/defect-intelligence/services/defect-predictor.js +9 -6
- package/dist/domains/quality-assessment/interfaces.d.ts +4 -0
- package/dist/domains/quality-assessment/quality-evidence.d.ts +1 -1
- package/dist/domains/quality-assessment/services/quality-analyzer.js +7 -5
- 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/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/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 +87 -7
- package/dist/kernel/shared-dirs.js +17 -5
- package/dist/mcp/bundle.js +874 -874
- package/dist/mcp/handlers/domain-handler-configs.d.ts +4 -0
- package/dist/mcp/handlers/domain-handler-configs.js +5 -1
- package/dist/mcp/protocol-server.js +2 -1
- package/dist/mcp/types.d.ts +6 -0
- 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 +6 -1
- package/dist/workers/namespaced-keys.d.ts +16 -0
- package/dist/workers/namespaced-keys.js +24 -0
- package/dist/workers/quality-daemon/persistent-memory.d.ts +1 -1
- package/dist/workers/quality-daemon/persistent-memory.js +2 -2
- package/dist/workers/worker-manager.js +5 -2
- 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/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-PP3XIXDV.js +0 -2
- package/dist/cli/chunks/aqe-learning-engine-VDUQJKKY.js +0 -2
- package/dist/cli/chunks/base-QSYWWPCE.js +0 -2
- package/dist/cli/chunks/browser-workflow-WXXPBSCM.js +0 -2
- package/dist/cli/chunks/chunk-45MVRQG4.js +0 -2
- package/dist/cli/chunks/chunk-5VZVMO7B.js +0 -3
- package/dist/cli/chunks/chunk-EECF4CMA.js +0 -2
- package/dist/cli/chunks/client-6XKSQ4JT.js +0 -2
- package/dist/cli/chunks/core-handlers-OJYW4Y6M.js +0 -2
- package/dist/cli/chunks/cross-domain-router-QVUPQ2SC.js +0 -2
- package/dist/cli/chunks/daemon-QBYTCIMH.js +0 -10
- package/dist/cli/chunks/dream-3UABDRZJ.js +0 -2
- package/dist/cli/chunks/file-discovery-ZFGZTKZ4.js +0 -2
- package/dist/cli/chunks/heartbeat-scheduler-MJ6MTPDF.js +0 -2
- package/dist/cli/chunks/hnsw-adapter-FQWJCFVW.js +0 -2
- package/dist/cli/chunks/hnsw-index-NJYKJUHC.js +0 -2
- package/dist/cli/chunks/hybrid-backend-SL7RFID7.js +0 -2
- package/dist/cli/chunks/impact-analyzer-5ZJTXPVC.js +0 -2
- package/dist/cli/chunks/init-handler-PCLYQUSB.js +0 -88
- package/dist/cli/chunks/init-wizard-MQMDSIOF.js +0 -2
- package/dist/cli/chunks/kernel-MEJ5GMRH.js +0 -2
- package/dist/cli/chunks/knowledge-graph-XUBZSEZE.js +0 -2
- package/dist/cli/chunks/llm-router-service-QZAPAEPX.js +0 -2
- package/dist/cli/chunks/load-test-OVXIQ3AF.js +0 -2
- package/dist/cli/chunks/memory-backend-TRPOMPK4.js +0 -2
- package/dist/cli/chunks/pattern-null-store-JWYBRBZG.js +0 -2
- package/dist/cli/chunks/project-root-VVSTHIP4.js +0 -2
- package/dist/cli/chunks/protocol-executor-PXZCLZD3.js +0 -2
- package/dist/cli/chunks/qe-reasoning-bank-42FRS5V3.js +0 -2
- package/dist/cli/chunks/queen-coordinator-UI3B7DI6.js +0 -2
- package/dist/cli/chunks/router-HYRPWLAY.js +0 -2
- package/dist/cli/chunks/routing-feedback-BPZ5R6F3.js +0 -2
- package/dist/cli/chunks/rvf-dual-writer-DEKDQ6KO.js +0 -2
- package/dist/cli/chunks/rvf-migration-adapter-L53VBS7I.js +0 -2
- package/dist/cli/chunks/rvf-native-adapter-I6RUGD2D.js +0 -2
- package/dist/cli/chunks/safe-db-KS65XDCP.js +0 -2
- package/dist/cli/chunks/schedule-KD2VN6GB.js +0 -2
- package/dist/cli/chunks/scheduler-ZH3RMUHY.js +0 -2
- package/dist/cli/chunks/security-PWQTGDRU.js +0 -13
- package/dist/cli/chunks/sqlite-persistence-6DTVME5D.js +0 -2
- package/dist/cli/chunks/unified-memory-FCX7NLFZ.js +0 -2
- package/dist/cli/chunks/unified-memory-hnsw-VU5QJK37.js +0 -2
- package/dist/cli/chunks/unified-persistence-FM376LGE.js +0 -2
- package/dist/cli/chunks/visual-security-EU7Y3X46.js +0 -2
- package/dist/cli/chunks/witness-chain-CSEBT52D.js +0 -2
- package/dist/cli/chunks/workflow-orchestrator-ALNKOM3N.js +0 -2
|
@@ -214,6 +214,36 @@ export interface DependencyScanResult {
|
|
|
214
214
|
readonly vulnerabilities: Vulnerability[];
|
|
215
215
|
readonly outdatedPackages: OutdatedPackage[];
|
|
216
216
|
readonly summary: ScanSummary;
|
|
217
|
+
/**
|
|
218
|
+
* #1049: whether the advisory lookup covered every dependency. Only
|
|
219
|
+
* 'complete' is a measurement; 'incomplete' findings are real but partial,
|
|
220
|
+
* and 'failed' means no dependency was checked (never "0 vulnerabilities").
|
|
221
|
+
*/
|
|
222
|
+
readonly status: 'complete' | 'incomplete' | 'failed';
|
|
223
|
+
/** True only when status is 'complete'. */
|
|
224
|
+
readonly measured: boolean;
|
|
225
|
+
readonly packagesChecked: number;
|
|
226
|
+
readonly uncheckedPackages: UncheckedDependency[];
|
|
227
|
+
/** Why the scan is incomplete/failed; absent when complete. */
|
|
228
|
+
readonly error?: string;
|
|
229
|
+
}
|
|
230
|
+
/** A dependency whose advisories could not be checked, and why (#1049). */
|
|
231
|
+
export interface UncheckedDependency {
|
|
232
|
+
readonly name: string;
|
|
233
|
+
/** The spec as declared in the manifest. */
|
|
234
|
+
readonly version: string;
|
|
235
|
+
readonly reason: string;
|
|
236
|
+
/** Workspace member the dependency belongs to (absent for the scanned package itself). */
|
|
237
|
+
readonly member?: string;
|
|
238
|
+
/** The lockfile-resolved version, when the lockfile has one. */
|
|
239
|
+
readonly lockedVersion?: string;
|
|
240
|
+
}
|
|
241
|
+
/** A local (workspace / linked / file-directory) package: not an OSV subject (#1049). */
|
|
242
|
+
export interface LocalDependency {
|
|
243
|
+
readonly name: string;
|
|
244
|
+
readonly spec: string;
|
|
245
|
+
readonly reason: string;
|
|
246
|
+
readonly member?: string;
|
|
217
247
|
}
|
|
218
248
|
export interface PackageSecurityInfo {
|
|
219
249
|
readonly name: string;
|
|
@@ -8,7 +8,7 @@ import { BaseDomainPlugin, TaskHandler } from '../domain-interface.js';
|
|
|
8
8
|
import { FilePath } from '../../shared/value-objects/index.js';
|
|
9
9
|
import type { SecurityAuditOptions, SecurityAuditReport, SecurityPosture, ComplianceReport, ComplianceStandard, SASTResult, DASTResult, Vulnerability, GapAnalysis } from './interfaces.js';
|
|
10
10
|
import { type IExtendedSecurityComplianceCoordinator, type CoordinatorConfig } from './coordinator.js';
|
|
11
|
-
import { type ISecurityScannerService, type SecurityScannerConfig } from './services/security-scanner.js';
|
|
11
|
+
import { type ISecurityScannerService, type SecurityScannerConfig, type DependencyScanResult as OSVDependencyScanResult } from './services/security-scanner.js';
|
|
12
12
|
import { type ISecurityAuditorService, type SecurityAuditorConfig } from './services/security-auditor.js';
|
|
13
13
|
import type { HybridRouter } from '../../shared/llm/router/hybrid-router.js';
|
|
14
14
|
import { type IExtendedComplianceValidationService, type ComplianceValidatorConfig } from './services/compliance-validator.js';
|
|
@@ -26,6 +26,11 @@ export interface SecurityComplianceAPI {
|
|
|
26
26
|
getSecurityPosture(): Promise<Result<SecurityPosture>>;
|
|
27
27
|
runSASTScan(files: FilePath[]): Promise<Result<SASTResult>>;
|
|
28
28
|
runDASTScan(targetUrl: string): Promise<Result<DASTResult>>;
|
|
29
|
+
/**
|
|
30
|
+
* #1049: OSV advisory scan of a package.json. Check `status`: only 'complete'
|
|
31
|
+
* is a measurement; 'incomplete'/'failed' list the unchecked dependencies.
|
|
32
|
+
*/
|
|
33
|
+
runDependencyScan(packageJsonPath: string): Promise<Result<OSVDependencyScanResult>>;
|
|
29
34
|
triageVulnerabilities(vulnerabilities: Vulnerability[]): Promise<Result<{
|
|
30
35
|
immediate: Vulnerability[];
|
|
31
36
|
shortTerm: Vulnerability[];
|
|
@@ -66,6 +71,7 @@ export declare class SecurityCompliancePlugin extends BaseDomainPlugin {
|
|
|
66
71
|
protected onEvent(event: DomainEvent): Promise<void>;
|
|
67
72
|
private runSecurityAudit;
|
|
68
73
|
private getSecurityPosture;
|
|
74
|
+
private runDependencyScan;
|
|
69
75
|
private runSASTScan;
|
|
70
76
|
private runDASTScan;
|
|
71
77
|
private triageVulnerabilities;
|
|
@@ -49,6 +49,7 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
|
|
|
49
49
|
getSecurityPosture: this.getSecurityPosture.bind(this),
|
|
50
50
|
runSASTScan: this.runSASTScan.bind(this),
|
|
51
51
|
runDASTScan: this.runDASTScan.bind(this),
|
|
52
|
+
runDependencyScan: this.runDependencyScan.bind(this),
|
|
52
53
|
triageVulnerabilities: this.triageVulnerabilities.bind(this),
|
|
53
54
|
runComplianceCheck: this.runComplianceCheck.bind(this),
|
|
54
55
|
getAvailableStandards: this.getAvailableStandards.bind(this),
|
|
@@ -209,6 +210,24 @@ export class SecurityCompliancePlugin extends BaseDomainPlugin {
|
|
|
209
210
|
return this.handleError(error);
|
|
210
211
|
}
|
|
211
212
|
}
|
|
213
|
+
async runDependencyScan(packageJsonPath) {
|
|
214
|
+
this.ensureInitialized();
|
|
215
|
+
try {
|
|
216
|
+
const result = await this.securityScanner.scanPackageJson(packageJsonPath);
|
|
217
|
+
if (result.success && result.value.status === 'complete') {
|
|
218
|
+
this.trackSuccessfulOperation('dependency-scan');
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
this.trackFailedOperation('dependency-scan', result.success
|
|
222
|
+
? new Error(result.value.error ?? 'Dependency advisory scan incomplete')
|
|
223
|
+
: result.error);
|
|
224
|
+
}
|
|
225
|
+
return result;
|
|
226
|
+
}
|
|
227
|
+
catch (error) {
|
|
228
|
+
return this.handleError(error);
|
|
229
|
+
}
|
|
230
|
+
}
|
|
212
231
|
async runSASTScan(files) {
|
|
213
232
|
this.ensureInitialized();
|
|
214
233
|
try {
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Dependency resolution for the OSV advisory scan (#1049)
|
|
3
|
+
*
|
|
4
|
+
* Decides, for every direct dependency of a package.json, what can be checked
|
|
5
|
+
* against OSV:
|
|
6
|
+
*
|
|
7
|
+
* - check: a registry package at a concrete version — the lockfile's
|
|
8
|
+
* resolved version when the lockfile is in sync with package.json,
|
|
9
|
+
* else an exact spec. `npm:` aliases resolve to the real package.
|
|
10
|
+
* - local: a workspace / linked / local-directory package. Not an OSV
|
|
11
|
+
* subject; listed separately and never makes a scan incomplete.
|
|
12
|
+
* - unchecked: anything that cannot be matched without guessing — a range
|
|
13
|
+
* with no (in-sync) lockfile resolution, a lockfile out of sync
|
|
14
|
+
* with package.json, git/URL/tarball sources.
|
|
15
|
+
*
|
|
16
|
+
* The lockfile is looked up from the package directory upwards (never above
|
|
17
|
+
* AQE_PROJECT_ROOT or the git root), so scanning a workspace member directly
|
|
18
|
+
* uses the workspace root's lockfile.
|
|
19
|
+
*
|
|
20
|
+
* Workspace member scanning is not part of 3.15.7 (#1057): at a workspace root
|
|
21
|
+
* only the root's own dependencies are checked and the scan is reported as not
|
|
22
|
+
* complete, with a reason; each member can be scanned directly.
|
|
23
|
+
*/
|
|
24
|
+
export interface ResolvedDependency {
|
|
25
|
+
/** Dependency name as declared (the alias name for `npm:` aliases). */
|
|
26
|
+
readonly name: string;
|
|
27
|
+
/** Spec as declared in package.json. */
|
|
28
|
+
readonly spec: string;
|
|
29
|
+
/** Lockfile importer the dependency belongs to ('' = the lockfile root). */
|
|
30
|
+
readonly member: string;
|
|
31
|
+
readonly kind: 'check' | 'local' | 'unchecked';
|
|
32
|
+
/** Registry package to check (differs from `name` for aliases). */
|
|
33
|
+
readonly packageName?: string;
|
|
34
|
+
/** Concrete version to check. */
|
|
35
|
+
readonly version?: string;
|
|
36
|
+
/** Lockfile-resolved version, also reported for unchecked packages when known. */
|
|
37
|
+
readonly lockedVersion?: string;
|
|
38
|
+
readonly reason?: string;
|
|
39
|
+
}
|
|
40
|
+
export interface DependencyResolution {
|
|
41
|
+
readonly dependencies: ResolvedDependency[];
|
|
42
|
+
/** Lockfile used (relative to the scanned package.json directory), or null. */
|
|
43
|
+
readonly lockfile: string | null;
|
|
44
|
+
/** A lockfile that exists but could not be read or parsed. */
|
|
45
|
+
readonly error?: string;
|
|
46
|
+
/**
|
|
47
|
+
* Reasons the scan cannot be complete beyond individual packages — today: a
|
|
48
|
+
* workspace root, whose members' dependencies are not scanned (#1057).
|
|
49
|
+
*/
|
|
50
|
+
readonly memberErrors: string[];
|
|
51
|
+
}
|
|
52
|
+
/** The reason a workspace root's scan is not complete (#1057). */
|
|
53
|
+
export declare const WORKSPACE_NOT_SCANNED = "workspace member dependencies are not scanned yet (#1057); scan each member directory separately";
|
|
54
|
+
type Manifest = {
|
|
55
|
+
name?: unknown;
|
|
56
|
+
workspaces?: unknown;
|
|
57
|
+
} & Partial<Record<'dependencies' | 'devDependencies' | 'peerDependencies' | 'optionalDependencies', Record<string, unknown>>>;
|
|
58
|
+
/** All declared dependencies of a manifest (later fields win, as npm resolves them). */
|
|
59
|
+
export declare function declaredDependencies(manifest: Manifest): Record<string, string>;
|
|
60
|
+
/**
|
|
61
|
+
* Resolve a `name -> spec` record with caller-supplied resolved versions
|
|
62
|
+
* (programmatic use; no lockfile on disk). Same rules as `resolveDependencies`.
|
|
63
|
+
*/
|
|
64
|
+
export declare function resolveFromRecord(dependencies: Record<string, string>, lockedVersions?: Record<string, string>): ResolvedDependency[];
|
|
65
|
+
/**
|
|
66
|
+
* Resolve the dependencies to check for the package.json at `manifestPath`.
|
|
67
|
+
* @throws when package.json itself cannot be read or parsed.
|
|
68
|
+
*/
|
|
69
|
+
export declare function resolveDependencies(manifestPath: string): Promise<DependencyResolution>;
|
|
70
|
+
export {};
|
|
71
|
+
//# sourceMappingURL=dependency-resolver.d.ts.map
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agentic QE v3 - Dependency resolution for the OSV advisory scan (#1049)
|
|
3
|
+
*
|
|
4
|
+
* Decides, for every direct dependency of a package.json, what can be checked
|
|
5
|
+
* against OSV:
|
|
6
|
+
*
|
|
7
|
+
* - check: a registry package at a concrete version — the lockfile's
|
|
8
|
+
* resolved version when the lockfile is in sync with package.json,
|
|
9
|
+
* else an exact spec. `npm:` aliases resolve to the real package.
|
|
10
|
+
* - local: a workspace / linked / local-directory package. Not an OSV
|
|
11
|
+
* subject; listed separately and never makes a scan incomplete.
|
|
12
|
+
* - unchecked: anything that cannot be matched without guessing — a range
|
|
13
|
+
* with no (in-sync) lockfile resolution, a lockfile out of sync
|
|
14
|
+
* with package.json, git/URL/tarball sources.
|
|
15
|
+
*
|
|
16
|
+
* The lockfile is looked up from the package directory upwards (never above
|
|
17
|
+
* AQE_PROJECT_ROOT or the git root), so scanning a workspace member directly
|
|
18
|
+
* uses the workspace root's lockfile.
|
|
19
|
+
*
|
|
20
|
+
* Workspace member scanning is not part of 3.15.7 (#1057): at a workspace root
|
|
21
|
+
* only the root's own dependencies are checked and the scan is reported as not
|
|
22
|
+
* complete, with a reason; each member can be scanned directly.
|
|
23
|
+
*/
|
|
24
|
+
import * as fs from 'fs/promises';
|
|
25
|
+
import * as path from 'path';
|
|
26
|
+
import semver from 'semver';
|
|
27
|
+
import { parse as parseYaml } from 'yaml';
|
|
28
|
+
import { safeJsonParse } from '../../../../shared/safe-json.js';
|
|
29
|
+
import { classifyNpmSpec, exactNpmVersion } from '../../../../shared/security/osv-lookup.js';
|
|
30
|
+
import { LOCKFILES, parseLockfile } from './lockfile-versions.js';
|
|
31
|
+
/** The reason a workspace root's scan is not complete (#1057). */
|
|
32
|
+
export const WORKSPACE_NOT_SCANNED = 'workspace member dependencies are not scanned yet (#1057); scan each member directory separately';
|
|
33
|
+
const OUT_OF_SYNC = 'lockfile out of sync with package.json';
|
|
34
|
+
/** All declared dependencies of a manifest (later fields win, as npm resolves them). */
|
|
35
|
+
export function declaredDependencies(manifest) {
|
|
36
|
+
const out = {};
|
|
37
|
+
for (const field of ['peerDependencies', 'optionalDependencies', 'devDependencies', 'dependencies']) {
|
|
38
|
+
for (const [name, spec] of Object.entries(manifest[field] ?? {})) {
|
|
39
|
+
if (typeof spec === 'string')
|
|
40
|
+
out[name] = spec;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return out;
|
|
44
|
+
}
|
|
45
|
+
async function readManifest(file) {
|
|
46
|
+
return safeJsonParse(await fs.readFile(file, 'utf-8'));
|
|
47
|
+
}
|
|
48
|
+
async function exists(file) {
|
|
49
|
+
try {
|
|
50
|
+
await fs.access(file);
|
|
51
|
+
return true;
|
|
52
|
+
}
|
|
53
|
+
catch {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function realOrResolved(p) {
|
|
58
|
+
try {
|
|
59
|
+
return await fs.realpath(p);
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return path.resolve(p);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Find the lockfile governing `dir`: walk up, but never above the project root
|
|
67
|
+
* (`AQE_PROJECT_ROOT` when `dir` is inside it) nor above the git root.
|
|
68
|
+
*/
|
|
69
|
+
async function findLockfile(dir, env = process.env) {
|
|
70
|
+
let current = await realOrResolved(dir);
|
|
71
|
+
const projectRoot = env.AQE_PROJECT_ROOT ? await realOrResolved(env.AQE_PROJECT_ROOT) : null;
|
|
72
|
+
const boundary = projectRoot && isInside(projectRoot, current) ? projectRoot : null;
|
|
73
|
+
for (;;) {
|
|
74
|
+
for (const file of LOCKFILES) {
|
|
75
|
+
if (await exists(path.join(current, file)))
|
|
76
|
+
return { dir: current, file };
|
|
77
|
+
}
|
|
78
|
+
if (current === boundary || await exists(path.join(current, '.git')))
|
|
79
|
+
return null;
|
|
80
|
+
const parent = path.dirname(current);
|
|
81
|
+
if (parent === current)
|
|
82
|
+
return null;
|
|
83
|
+
current = parent;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
/** Whether `child` is `root` or inside it (both absolute, real paths). */
|
|
87
|
+
function isInside(root, child) {
|
|
88
|
+
const rel = path.relative(root, child);
|
|
89
|
+
return rel === '' || (!rel.startsWith('..') && !path.isAbsolute(rel));
|
|
90
|
+
}
|
|
91
|
+
/** Largest pnpm-workspace.yaml that is read; a larger one counts as a workspace root. */
|
|
92
|
+
const MAX_PNPM_WORKSPACE_BYTES = 1024 * 1024;
|
|
93
|
+
const nonEmptyArray = (v) => Array.isArray(v) && v.length > 0;
|
|
94
|
+
/**
|
|
95
|
+
* A workspace root, detected without expanding any glob: package.json
|
|
96
|
+
* `workspaces` is a non-empty array or an object with a non-empty `packages`,
|
|
97
|
+
* or a pnpm-workspace.yaml declares workspace packages.
|
|
98
|
+
*/
|
|
99
|
+
async function isWorkspaceRoot(dir, manifest) {
|
|
100
|
+
const ws = manifest.workspaces;
|
|
101
|
+
if (nonEmptyArray(ws))
|
|
102
|
+
return true;
|
|
103
|
+
if (ws !== null && typeof ws === 'object' && nonEmptyArray(ws.packages))
|
|
104
|
+
return true;
|
|
105
|
+
return pnpmDeclaresPackages(path.join(dir, 'pnpm-workspace.yaml'));
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* pnpm 10+ keeps project settings (nodeLinker, onlyBuiltDependencies, ...) in
|
|
109
|
+
* pnpm-workspace.yaml even for a single package, so only a file that declares
|
|
110
|
+
* `packages` is a workspace root. Fail closed: an unreadable, oversized,
|
|
111
|
+
* non-regular, dangling or unparsable file, or a `packages` that is not a list,
|
|
112
|
+
* counts as a root. No file, a map without `packages`, or `packages: []` does not.
|
|
113
|
+
*/
|
|
114
|
+
async function pnpmDeclaresPackages(file) {
|
|
115
|
+
try {
|
|
116
|
+
await fs.lstat(file);
|
|
117
|
+
}
|
|
118
|
+
catch (e) {
|
|
119
|
+
return e.code !== 'ENOENT';
|
|
120
|
+
}
|
|
121
|
+
let doc;
|
|
122
|
+
try {
|
|
123
|
+
const st = await fs.stat(file); // follows a link; a dangling one throws
|
|
124
|
+
if (!st.isFile() || st.size > MAX_PNPM_WORKSPACE_BYTES)
|
|
125
|
+
return true;
|
|
126
|
+
const text = await fs.readFile(file, 'utf-8');
|
|
127
|
+
doc = parseYaml(text, { uniqueKeys: false, merge: true, maxAliasCount: 100 });
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return true;
|
|
131
|
+
}
|
|
132
|
+
if (doc === null || typeof doc !== 'object' || Array.isArray(doc))
|
|
133
|
+
return true;
|
|
134
|
+
if (!Object.prototype.hasOwnProperty.call(doc, 'packages'))
|
|
135
|
+
return false;
|
|
136
|
+
const packages = doc.packages;
|
|
137
|
+
return !Array.isArray(packages) || packages.length > 0;
|
|
138
|
+
}
|
|
139
|
+
/** Resolve one declared dependency of `member`. */
|
|
140
|
+
function resolveOne(name, spec, member, index, localNames) {
|
|
141
|
+
const base = { name, spec, member };
|
|
142
|
+
const kind = classifyNpmSpec(spec);
|
|
143
|
+
if (kind.kind === 'local')
|
|
144
|
+
return { ...base, kind: 'local', reason: 'local package (workspace/link/file directory)' };
|
|
145
|
+
if (kind.kind === 'remote') {
|
|
146
|
+
return { ...base, kind: 'unchecked', reason: `not a registry dependency ("${spec}": git/URL/tarball source); OSV advisories cannot be matched` };
|
|
147
|
+
}
|
|
148
|
+
const packageName = kind.kind === 'alias' ? kind.name : name;
|
|
149
|
+
const rangeSpec = kind.spec;
|
|
150
|
+
const locked = index?.resolve(member, name, spec);
|
|
151
|
+
if (locked?.local || (!locked && localNames.has(name))) {
|
|
152
|
+
return { ...base, kind: 'local', reason: 'workspace package (local source)' };
|
|
153
|
+
}
|
|
154
|
+
if (locked && index) {
|
|
155
|
+
const recorded = index.recordedSpec(member, name);
|
|
156
|
+
const lockedVersion = locked.version ? exactNpmVersion(locked.version) ?? undefined : undefined;
|
|
157
|
+
const specDiffers = recorded === undefined || (recorded !== null && recorded !== spec);
|
|
158
|
+
const unsatisfied = lockedVersion !== undefined && !!semver.validRange(rangeSpec)
|
|
159
|
+
&& !semver.satisfies(lockedVersion, rangeSpec, { includePrerelease: true });
|
|
160
|
+
if (specDiffers || unsatisfied) {
|
|
161
|
+
return {
|
|
162
|
+
...base, kind: 'unchecked', ...(lockedVersion ? { lockedVersion } : {}),
|
|
163
|
+
reason: `${OUT_OF_SYNC} (${index.file} has ${recorded ? `"${recorded}"` : 'no entry'}${lockedVersion ? ` -> ${lockedVersion}` : ''} for "${spec}")`,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
if (lockedVersion) {
|
|
167
|
+
return { ...base, kind: 'check', packageName: locked.realName ?? packageName, version: lockedVersion, lockedVersion };
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
const exact = exactNpmVersion(rangeSpec);
|
|
171
|
+
if (exact)
|
|
172
|
+
return { ...base, kind: 'check', packageName, version: exact };
|
|
173
|
+
return { ...base, kind: 'unchecked', reason: `version range "${spec}", no lockfile resolution` };
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Resolve a `name -> spec` record with caller-supplied resolved versions
|
|
177
|
+
* (programmatic use; no lockfile on disk). Same rules as `resolveDependencies`.
|
|
178
|
+
*/
|
|
179
|
+
export function resolveFromRecord(dependencies, lockedVersions = {}) {
|
|
180
|
+
const index = {
|
|
181
|
+
file: 'package-lock.json',
|
|
182
|
+
members: () => [],
|
|
183
|
+
hasImporter: () => true,
|
|
184
|
+
recordedSpec: () => null,
|
|
185
|
+
resolve: (_importer, name) => (lockedVersions[name] !== undefined ? { version: lockedVersions[name] } : undefined),
|
|
186
|
+
};
|
|
187
|
+
return Object.entries(dependencies).map(([name, spec]) => resolveOne(name, spec, '', index, new Set()));
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Resolve the dependencies to check for the package.json at `manifestPath`.
|
|
191
|
+
* @throws when package.json itself cannot be read or parsed.
|
|
192
|
+
*/
|
|
193
|
+
export async function resolveDependencies(manifestPath) {
|
|
194
|
+
const manifestDir = path.dirname(path.resolve(manifestPath));
|
|
195
|
+
const manifest = await readManifest(manifestPath);
|
|
196
|
+
let index = null;
|
|
197
|
+
let lockDir = await realOrResolved(manifestDir);
|
|
198
|
+
const realManifestDir = lockDir;
|
|
199
|
+
let lockfile = null;
|
|
200
|
+
let error;
|
|
201
|
+
const found = await findLockfile(manifestDir);
|
|
202
|
+
if (found) {
|
|
203
|
+
const member = path.relative(found.dir, realManifestDir).split(path.sep).join('/');
|
|
204
|
+
try {
|
|
205
|
+
const parsed = parseLockfile(found.file, await fs.readFile(path.join(found.dir, found.file), 'utf-8'));
|
|
206
|
+
const rootManifest = member ? await readManifest(path.join(found.dir, 'package.json')).catch(() => ({})) : manifest;
|
|
207
|
+
// A member scanned directly: the root lockfile covers it if it lists the
|
|
208
|
+
// importer (npm/pnpm) or, for yarn, if the root declares workspaces.
|
|
209
|
+
const covers = member === '' || parsed.hasImporter(member) && (parsed.file !== 'yarn.lock'
|
|
210
|
+
|| await isWorkspaceRoot(found.dir, rootManifest));
|
|
211
|
+
if (covers) {
|
|
212
|
+
index = parsed;
|
|
213
|
+
lockDir = found.dir;
|
|
214
|
+
lockfile = path.relative(realManifestDir, path.join(found.dir, found.file)).split(path.sep).join('/');
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
catch (e) {
|
|
218
|
+
// #1049 round 4: a malformed lockfile is an error (the scan is not complete), not "no lockfile".
|
|
219
|
+
error = `${path.relative(realManifestDir, path.join(found.dir, found.file)).split(path.sep).join('/')} could not be read or parsed `
|
|
220
|
+
+ `(${e instanceof Error ? e.message.slice(0, 120) : 'error'}); versions were not resolved from it`;
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const scannedMember = path.relative(lockDir, realManifestDir).split(path.sep).join('/');
|
|
224
|
+
// #1057: workspace members are not scanned in 3.15.7 — a workspace root is never complete.
|
|
225
|
+
const memberErrors = await isWorkspaceRoot(realManifestDir, manifest) ? [WORKSPACE_NOT_SCANNED] : [];
|
|
226
|
+
const dependencies = [];
|
|
227
|
+
for (const [name, spec] of Object.entries(declaredDependencies(manifest))) {
|
|
228
|
+
dependencies.push(resolveOne(name, spec, scannedMember, index, new Set()));
|
|
229
|
+
}
|
|
230
|
+
return { dependencies, lockfile, memberErrors, ...(error ? { error } : {}) };
|
|
231
|
+
}
|
|
232
|
+
//# sourceMappingURL=dependency-resolver.js.map
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Scans npm dependencies for known vulnerabilities using OSV API
|
|
4
4
|
*/
|
|
5
5
|
import { Result } from '@shared/types/index.js';
|
|
6
|
+
import { OSVClient } from '@shared/security/index.js';
|
|
6
7
|
import type { SecurityScannerConfig, DependencyScanResult, MemoryBackend, ScanStatus } from './scanner-types.js';
|
|
7
8
|
/**
|
|
8
9
|
* Dependency Scanner - OSV-based Vulnerability Detection
|
|
@@ -13,21 +14,33 @@ export declare class DependencyScanner {
|
|
|
13
14
|
private readonly memory;
|
|
14
15
|
private readonly osvClient;
|
|
15
16
|
private readonly activeScans;
|
|
16
|
-
constructor(config: SecurityScannerConfig, memory: MemoryBackend, activeScans?: Map<string, ScanStatus
|
|
17
|
+
constructor(config: SecurityScannerConfig, memory: MemoryBackend, activeScans?: Map<string, ScanStatus>, osvClient?: OSVClient);
|
|
17
18
|
/**
|
|
18
|
-
* Scan npm dependencies for known vulnerabilities using OSV
|
|
19
|
+
* Scan npm dependencies (`name -> spec`) for known vulnerabilities using OSV.
|
|
20
|
+
*
|
|
21
|
+
* #1049: a failed or partial advisory lookup is recorded and returned as
|
|
22
|
+
* `status: 'failed' | 'incomplete'`, `measured: false`, with the unchecked
|
|
23
|
+
* dependencies and the error, never as a clean scan. Findings for the
|
|
24
|
+
* dependencies that were checked are kept.
|
|
25
|
+
*
|
|
26
|
+
* Each dependency is checked at `lockedVersions[name]` when given and
|
|
27
|
+
* consistent with the spec, else only when its spec is an exact version; a
|
|
28
|
+
* range with no resolution is reported unchecked, never guessed.
|
|
19
29
|
*/
|
|
20
|
-
scanDependencies(dependencies: Record<string, string>): Promise<Result<DependencyScanResult>>;
|
|
30
|
+
scanDependencies(dependencies: Record<string, string>, lockedVersions?: Record<string, string>): Promise<Result<DependencyScanResult>>;
|
|
21
31
|
/**
|
|
22
|
-
* Scan a package.json
|
|
32
|
+
* Scan a package.json: its direct dependencies, at the versions the lockfile
|
|
33
|
+
* resolves. A manifest with no dependencies is a complete scan of nothing; a
|
|
34
|
+
* workspace root is never complete, since its members are not scanned (#1057).
|
|
23
35
|
*/
|
|
24
36
|
scanPackageJson(packageJsonPath: string): Promise<Result<DependencyScanResult>>;
|
|
25
37
|
/**
|
|
26
38
|
* Get scan status
|
|
27
39
|
*/
|
|
28
40
|
getScanStatus(scanId: string): Promise<ScanStatus>;
|
|
41
|
+
private runScan;
|
|
29
42
|
/**
|
|
30
|
-
* Convert OSV vulnerabilities to our internal format
|
|
43
|
+
* Convert OSV vulnerabilities of one checked dependency to our internal format
|
|
31
44
|
*/
|
|
32
45
|
private convertOSVVulnerabilities;
|
|
33
46
|
/**
|
|
@@ -39,7 +52,9 @@ export declare class DependencyScanner {
|
|
|
39
52
|
*/
|
|
40
53
|
private calculateSummary;
|
|
41
54
|
/**
|
|
42
|
-
* Store scan
|
|
55
|
+
* Store the scan record read by the security-scan worker (#1043/#1049).
|
|
56
|
+
* Consumers must treat it as a measurement only when
|
|
57
|
+
* `measured === true && status === 'complete'`.
|
|
43
58
|
*/
|
|
44
59
|
private storeScanResults;
|
|
45
60
|
}
|