0sec-cli 0.24.0 → 0.25.0
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/0.js +64 -60
- package/README.md +121 -82
- package/chunks/{adapt-loop-TEJPXWFG.js → adapt-loop-L2PXCD4J.js} +6 -5
- package/chunks/{artifact-scraper-AJZ3LOQY.js → artifact-scraper-W3LGLXBM.js} +4 -3
- package/chunks/{assumption-mining-EATDC4BB.js → assumption-mining-7IJ6ZWZE.js} +22 -20
- package/chunks/{backend-connections-QE4NASAK.js → backend-connections-MYH4QRQG.js} +5 -4
- package/chunks/{chunk-RBOMXUYL.js → chunk-27SXCYWH.js} +1 -1
- package/chunks/{chunk-E42XEJTK.js → chunk-2J3STRJT.js} +337 -257
- package/chunks/chunk-36J5ZLFE.js +18729 -0
- package/chunks/chunk-3DF55BWV.js +49 -0
- package/chunks/{chunk-GHEBZKUS.js → chunk-3HMO42M2.js} +1426 -321
- package/chunks/{chunk-BIJPMYFA.js → chunk-3T5R7P4T.js} +6 -6
- package/chunks/{chunk-RD4FKFWR.js → chunk-5H2PXZ7Q.js} +1 -1
- package/chunks/chunk-5XOYTAOK.js +1546 -0
- package/chunks/{chunk-QEA2VHBD.js → chunk-6TA3CWND.js} +2656 -2960
- package/chunks/{chunk-H76JYUPE.js → chunk-76CLUI54.js} +3 -3
- package/chunks/{chunk-KCA35IL3.js → chunk-7PUJI64A.js} +11 -9
- package/chunks/{chunk-W6IYTSZH.js → chunk-7TIWL6E5.js} +8 -10
- package/chunks/chunk-ABKUI3QB.js +196 -0
- package/chunks/{chunk-YORL5S5V.js → chunk-ACYZMJHC.js} +1 -1
- package/chunks/{chunk-5FHFG5P2.js → chunk-AL32F74R.js} +1 -1
- package/chunks/{chunk-J6G73WYF.js → chunk-B5TIXHCO.js} +1 -1
- package/chunks/{chunk-G2EJ3R5I.js → chunk-BWUW6ZQR.js} +2052 -1075
- package/chunks/{chunk-3XLEDCFX.js → chunk-C6ZMPXN2.js} +5 -50
- package/chunks/{chunk-4TUR47H5.js → chunk-D4IBEO2K.js} +1 -1
- package/chunks/{chunk-EXTN4SQV.js → chunk-DHNYJ2ML.js} +1 -1
- package/chunks/{chunk-Y7KV7WV6.js → chunk-DJGJECBV.js} +93 -20
- package/chunks/{chunk-UHUW45S3.js → chunk-DMDWIW3E.js} +5 -5
- package/chunks/{chunk-V5I5GAQH.js → chunk-EEP6GBUO.js} +16037 -34417
- package/chunks/{chunk-EYBMTELO.js → chunk-EIONVEFN.js} +208 -29
- package/chunks/chunk-EQBC2ZWL.js +2481 -0
- package/chunks/{chunk-FKGFHLLS.js → chunk-FI2H6HV2.js} +1 -1
- package/chunks/{chunk-4YRXIVPZ.js → chunk-FI5YL4R2.js} +3 -3
- package/chunks/{chunk-DNV3ZMPX.js → chunk-FOLTHXRH.js} +1 -1
- package/chunks/{chunk-ZPFBQ3SD.js → chunk-GOUGG7IQ.js} +3 -3
- package/chunks/{chunk-O3ADFN2A.js → chunk-GXSECFUE.js} +1 -1
- package/chunks/{chunk-YYOQADBB.js → chunk-HDJSHLRM.js} +3 -2
- package/chunks/{chunk-A3EKBUEM.js → chunk-HFUOUT2B.js} +61232 -30665
- package/chunks/chunk-HJKJ4NQP.js +196 -0
- package/chunks/{chunk-RPTO5FY2.js → chunk-I4VIAQHM.js} +1 -1
- package/chunks/{chunk-A6AZZ6XX.js → chunk-ITEMDJAB.js} +3 -3
- package/chunks/chunk-ITHDAIRY.js +57 -0
- package/chunks/{chunk-TOFIGQ63.js → chunk-JCRQV4FE.js} +2 -2
- package/chunks/{chunk-SQCBHFWN.js → chunk-LWMEJYCP.js} +2 -2
- package/chunks/{chunk-52AWIBCT.js → chunk-MY44EZKD.js} +1 -1
- package/chunks/{chunk-SGILXLR3.js → chunk-NBLKIQCW.js} +226 -4
- package/chunks/chunk-NO543ZBU.js +90 -0
- package/chunks/{chunk-CIMN2AO6.js → chunk-OFPF26WL.js} +333 -3
- package/chunks/{chunk-YERUDEXT.js → chunk-PAE7ZAV6.js} +2780 -1255
- package/chunks/{chunk-V4BD7GSP.js → chunk-PMAKX6KP.js} +2 -2
- package/chunks/{chunk-62PGWN7Y.js → chunk-RBTJYREN.js} +8 -171
- package/chunks/{chunk-IK27KMVV.js → chunk-RFK5F45W.js} +1 -1
- package/chunks/{chunk-554D4AYM.js → chunk-S2WCYEK2.js} +4 -99
- package/chunks/{chunk-RZR2XXAK.js → chunk-S3B6HFSM.js} +144 -14
- package/chunks/{chunk-WUPN3D37.js → chunk-S4DFH2FJ.js} +26 -1
- package/chunks/{chunk-TZRHWP7R.js → chunk-SEWZ76MN.js} +77 -13
- package/chunks/{chunk-HRBOZBMC.js → chunk-TFKY6D7O.js} +1 -1
- package/chunks/{chunk-TOAAYJVN.js → chunk-WK6VUCKK.js} +3 -333
- package/chunks/{chunk-IXT64DV5.js → chunk-XPDJE537.js} +97 -1
- package/chunks/{chunk-RCHAFSWS.js → chunk-YXTV2FRE.js} +113 -22
- package/chunks/{chunk-TTDFBFNZ.js → chunk-YYFODVZG.js} +6 -10
- package/chunks/{chunk-3XLFB46W.js → chunk-ZWAWZU6C.js} +30 -13
- package/chunks/{chunk-5POT5OYF.js → chunk-ZZV56ACK.js} +11 -9
- package/chunks/{codex-models-FQPCWRPC.js → codex-models-KCUIVS3R.js} +9 -8
- package/chunks/{commands-I5L3VD2A.js → commands-MPPAADGY.js} +798 -608
- package/chunks/dashboard-MN7GZLLX.js +75 -0
- package/chunks/{db-P5EIKMLP.js → db-R2AQSESC.js} +5 -4
- package/chunks/{deep-review-I7RD5QSS.js → deep-review-Q6BJKEV4.js} +37 -38
- package/chunks/{disclose-PFBWESVJ.js → disclose-GGULOW27.js} +6 -5
- package/chunks/{dist-AJU25UXA.js → dist-6RNAVFAY.js} +376 -333
- package/chunks/{dist-VK2M4HNW.js → dist-DWN7U5OV.js} +5 -2
- package/chunks/{dist-M2X367VW.js → dist-JAZWL3SC.js} +3 -2
- package/chunks/{dist-3SWWY5FZ.js → dist-OLGNKDB2.js} +4 -3
- package/chunks/{dist-LNXGATR2.js → dist-WNAOCQGA.js} +5 -4
- package/chunks/eval-runner-WCTTIYN4.js +38 -0
- package/chunks/{exploit-agent-A4RTIJ4J.js → exploit-agent-M3KUMZJH.js} +1 -1
- package/chunks/{exploit-autoclimb-ABMMBC3M.js → exploit-autoclimb-QTTWC5WM.js} +1 -1
- package/chunks/{exploit-climb-BQ2SVU63.js → exploit-climb-E4KDELTN.js} +4 -3
- package/chunks/{fix-4YCLHFDT.js → fix-U5FFJD4F.js} +9 -8
- package/chunks/{harness-DHWULEIZ.js → harness-FMKIMEH5.js} +5 -4
- package/chunks/{http-conformance-U5F6GKYG.js → http-conformance-AXMUOE6C.js} +3 -2
- package/chunks/hunt-scan-RYPWRUQD.js +43 -0
- package/chunks/{kernel-primitive-SF4NALVR.js → kernel-primitive-CVG2E7MJ.js} +4 -3
- package/chunks/{kernel-vm-runner-WEBEZEIC.js → kernel-vm-runner-62KISULQ.js} +4 -3
- package/chunks/{local-engine-XUG7XRKM.js → local-engine-WP3I7K7G.js} +7 -6
- package/chunks/managed-operation-642WPTLC.js +59 -0
- package/chunks/{memsafety-scan-L2Z7E7TE.js → memsafety-scan-Q2MBZEGJ.js} +1 -2
- package/chunks/{native-loop-ZNAELJGB.js → native-loop-HC77R5NQ.js} +31 -16
- package/chunks/operator-services-E2NONBQS.js +79 -0
- package/chunks/orchestrate-Z3DW265M.js +62 -0
- package/chunks/{prepare-SODWQN6O.js → prepare-7DTS6RJT.js} +7 -6
- package/chunks/{remote-workflow-runtime-XNNGI2PG.js → remote-workflow-runtime-6CEVRZXS.js} +4 -3
- package/chunks/routing-ITJZBJIU.js +61 -0
- package/chunks/{runtime-MB4GEFBY.js → runtime-PZJ77QES.js} +9 -8
- package/chunks/{runtime-HFFRUOPL.js → runtime-W6JNDQRO.js} +4 -3
- package/chunks/{scan-stream-GXBJHCDF.js → scan-stream-6VOJTHTR.js} +6 -4
- package/chunks/{scope-M7L3CD6X.js → scope-FHXW6EX6.js} +4 -3
- package/chunks/service-plugins-CN6Q2NSN.js +63 -0
- package/chunks/{session-store-K7I4GLNH.js → session-store-DBBI544Y.js} +8 -5
- package/chunks/{variant-candidates-2KSP5EHH.js → variant-candidates-DPR6DJ3N.js} +9 -8
- package/chunks/{web-recon-prepass-RAXXTEWH.js → web-recon-prepass-HWDHDQMN.js} +7 -6
- package/chunks/{workflow-runtime-V26HIJO3.js → workflow-runtime-PLB32XC3.js} +50 -49
- package/dashboard/assets/{abnfDiagram-VCTEODGH-CGCueOp5.js → abnfDiagram-VCTEODGH-6e39CQKz.js} +1 -1
- package/dashboard/assets/{arc-BjZaQcCc.js → arc-ClYun86B.js} +1 -1
- package/dashboard/assets/architecture-7GRP2DOG-rM-lWo7E.js +1 -0
- package/dashboard/assets/architectureDiagram-5GKGNRK7-C9gEGZIU.js +36 -0
- package/dashboard/assets/{blockDiagram-I7D4REHJ-C-byT12_.js → blockDiagram-I7D4REHJ-Dgh2n5Lf.js} +2 -2
- package/dashboard/assets/{c4Diagram-7LVT6UL2-DoYjz-Uv.js → c4Diagram-7LVT6UL2-CsorW08z.js} +1 -1
- package/dashboard/assets/channel-BBlDqIBl.js +1 -0
- package/dashboard/assets/{chunk-4HAMMTFA-NBNp2zdt.js → chunk-4HAMMTFA-4_b_LGGQ.js} +1 -1
- package/dashboard/assets/{chunk-75Z2AOVW-BHmkuP0B.js → chunk-75Z2AOVW-qzNlKGCp.js} +1 -1
- package/dashboard/assets/chunk-DU6HZSFF-SAPICW28.js +127 -0
- package/dashboard/assets/{chunk-F27PBJKO-3wwNFUgZ.js → chunk-F27PBJKO-DlLotIQx.js} +1 -1
- package/dashboard/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-COOliuUh.js} +14 -14
- package/dashboard/assets/{chunk-GMAD6QVW-Btg7huZW.js → chunk-GMAD6QVW-DNnr65Nb.js} +7 -7
- package/dashboard/assets/{chunk-GVQU2GXP-ihCURK5O.js → chunk-GVQU2GXP-DTwv0VfU.js} +1 -1
- package/dashboard/assets/{chunk-IMKFNOWR-FsXj7slg.js → chunk-IMKFNOWR-B1fk1q_W.js} +1 -1
- package/dashboard/assets/{chunk-L3NEJ4N5-DorFIxJY.js → chunk-L3NEJ4N5-ByVjFIox.js} +1 -1
- package/dashboard/assets/{chunk-OSK3NFVY-DKun_KfC.js → chunk-OSK3NFVY-DUDCzjbh.js} +1 -1
- package/dashboard/assets/{chunk-P2QGCYS3-XGgiU1Bz.js → chunk-P2QGCYS3-D_D5qEso.js} +1 -1
- package/dashboard/assets/{chunk-POPQ4Y6H-BTXEnGhJ.js → chunk-POPQ4Y6H-CetM-tVm.js} +1 -1
- package/dashboard/assets/{chunk-PWAF6VOD-DYZcGkTL.js → chunk-PWAF6VOD-BcJX4exl.js} +1 -1
- package/dashboard/assets/{chunk-SHT3W25Y-C4WQfwf8.js → chunk-SHT3W25Y-BWQql238.js} +1 -1
- package/dashboard/assets/{chunk-SVP7TREG-C4nCh0-1.js → chunk-SVP7TREG-BSLOD1JE.js} +1 -1
- package/dashboard/assets/{chunk-TICWLB2K-DSB-IiGc.js → chunk-TICWLB2K-DReOl-g_.js} +2 -2
- package/dashboard/assets/{chunk-XXDRQBXY-CS6fjUcj.js → chunk-XXDRQBXY-DSdSMeei.js} +1 -1
- package/dashboard/assets/classDiagram-ZZMXUADV-CRH2kB8G.js +1 -0
- package/dashboard/assets/classDiagram-v2-VYDZK3BY-CRH2kB8G.js +1 -0
- package/dashboard/assets/common-CRRsylCH.js +5 -0
- package/dashboard/assets/cose-bilkent-JH36ORCC-fg-DIBqt.js +1 -0
- package/dashboard/assets/cynefin-OW5HDTMX-XmrbEIFh.js +1 -0
- package/dashboard/assets/{cynefinDiagram-5FMLGOSQ-CgDOOY67.js → cynefinDiagram-5FMLGOSQ-CoQ7QEPl.js} +1 -1
- package/dashboard/assets/cytoscape.esm-BbBREfsg.js +321 -0
- package/dashboard/assets/dagre-D7JM2Yhv.js +1 -0
- package/dashboard/assets/dagre-GXQ25YYZ-qtQtsg6c.js +4 -0
- package/dashboard/assets/{diagram-S7CK7UJ4-CrKqRXZb.js → diagram-S7CK7UJ4-B_ts4_58.js} +2 -2
- package/dashboard/assets/{diagram-UQ7AKVKN-Cu6Es0-v.js → diagram-UQ7AKVKN-DwHbbxFy.js} +1 -1
- package/dashboard/assets/{diagram-VSXAHHWV-eK4d8FwS.js → diagram-VSXAHHWV-2Tg_RG89.js} +1 -1
- package/dashboard/assets/{diagram-VX7I27RA-bFxeFKOc.js → diagram-VX7I27RA-BFYp-YjF.js} +1 -1
- package/dashboard/assets/{diagram-Z3DM3KII-C0ClmnhC.js → diagram-Z3DM3KII-DrPiS4V0.js} +1 -1
- package/dashboard/assets/{dist-BZh8Kb3O.js → dist-cbVssBvx.js} +1 -1
- package/dashboard/assets/{ebnfDiagram-PWID7BFC-CUqxFPzf.js → ebnfDiagram-PWID7BFC-DCMOZtU2.js} +1 -1
- package/dashboard/assets/{erDiagram-RLTQ6QDP-CcYM7pLi.js → erDiagram-RLTQ6QDP-CW4rUJGU.js} +1 -1
- package/dashboard/assets/eventmodeling-NTZA5JFV-C2q-Aaav.js +1 -0
- package/dashboard/assets/flowDiagram-HODETNUW-3NOabgG3.js +1 -0
- package/dashboard/assets/{ganttDiagram-EL5Y4UJY-UmZfbMyD.js → ganttDiagram-EL5Y4UJY-C1AqcwIF.js} +1 -1
- package/dashboard/assets/gitGraph-4MIJSDKK-DYR76gtd.js +1 -0
- package/dashboard/assets/{gitGraphDiagram-WWUBYQGX-CvzeCxVy.js → gitGraphDiagram-WWUBYQGX-B7hL98CE.js} +1 -1
- package/dashboard/assets/info-A6RAGUB7-TXB43LiH.js +1 -0
- package/dashboard/assets/{infoDiagram-27XIBGKW-DjkpNtVW.js → infoDiagram-27XIBGKW-Dk5dXmh_.js} +1 -1
- package/dashboard/assets/{ishikawaDiagram-5VMMS53U-8FhjJaWT.js → ishikawaDiagram-5VMMS53U-BQDuNMka.js} +2 -2
- package/dashboard/assets/{journeyDiagram-3NMN7TZE-DyNJ755f.js → journeyDiagram-3NMN7TZE-DkustddD.js} +1 -1
- package/dashboard/assets/{kanban-definition-UXKFOSKX-_jCmtaY1.js → kanban-definition-UXKFOSKX-BW7Ann84.js} +1 -1
- package/dashboard/assets/{katex-BdBmVSus.js → katex-nLxf_RlZ.js} +2 -2
- package/dashboard/assets/{line-Bf0nxyWf.js → line-DVxcLeru.js} +1 -1
- package/dashboard/assets/linear-DOM_l9bO.js +1 -0
- package/dashboard/assets/mermaid-parser.core-CKg9fDvJ.js +7 -0
- package/dashboard/assets/{mermaid.core-B4yCwiN-.js → mermaid.core-DruW_5-Y.js} +9 -9
- package/dashboard/assets/{mindmap-definition-YA3MSWOX-D5DjWyXj.js → mindmap-definition-YA3MSWOX-Di5W5VB3.js} +1 -1
- package/dashboard/assets/operations-B-t_k60U.js +194 -0
- package/dashboard/assets/operations-D2ZKZFOF.css +1 -0
- package/dashboard/assets/packet-AYTQ26CC-BABwqtNu.js +1 -0
- package/dashboard/assets/{pegDiagram-XKGWAZYB-Bf6a1vaf.js → pegDiagram-XKGWAZYB-Cx4ABT6q.js} +1 -1
- package/dashboard/assets/pie-WAS4IAKB-CNdXyrze.js +1 -0
- package/dashboard/assets/{pieDiagram-E7YTZNPT-D0L1qbch.js → pieDiagram-E7YTZNPT-BilfQbIs.js} +1 -1
- package/dashboard/assets/{quadrantDiagram-AXDQQJYC-CbFyy2Pe.js → quadrantDiagram-AXDQQJYC-BVmMQHE5.js} +1 -1
- package/dashboard/assets/radar-RG4KPBEZ-fKNmDeoK.js +1 -0
- package/dashboard/assets/railroad-74A4TZTK-DhcvDCOh.js +1 -0
- package/dashboard/assets/railroad-abnf-HS5TGJTU-BTRVAmf0.js +1 -0
- package/dashboard/assets/railroad-ebnf-LZEXJU2U-CwS8fgC_.js +1 -0
- package/dashboard/assets/railroad-peg-WCYAUIDC-CXuhXlNp.js +1 -0
- package/dashboard/assets/{railroadDiagram-O6MQD6OU-t7Gp9g2R.js → railroadDiagram-O6MQD6OU-DnBru-jf.js} +1 -1
- package/dashboard/assets/{requirementDiagram-BXWQKSXE-LYmqeBXi.js → requirementDiagram-BXWQKSXE-FwdvUZ7_.js} +1 -1
- package/dashboard/assets/{sankeyDiagram-P5KCCOFB-DnpfA_94.js → sankeyDiagram-P5KCCOFB-BQvDORai.js} +1 -1
- package/dashboard/assets/{sequenceDiagram-WJ2MYXX4-C8s3pTUE.js → sequenceDiagram-WJ2MYXX4-FWYQLzcY.js} +2 -2
- package/dashboard/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
- package/dashboard/assets/src-BwkPhlcp.js +1 -0
- package/dashboard/assets/{stateDiagram-D77RDMKH-BMzm6fK1.js → stateDiagram-D77RDMKH-CjPBd_Sa.js} +1 -1
- package/dashboard/assets/stateDiagram-v2-MP3YSRHH-DHmenujm.js +1 -0
- package/dashboard/assets/swimlanes-42K2YHIH-SQLNsa4J.js +1 -0
- package/dashboard/assets/swimlanesDiagram-VR7AAH4N-D1bH4ETZ.js +8 -0
- package/dashboard/assets/{timeline-definition-24CTP7MA-BfLJMVeG.js → timeline-definition-24CTP7MA-BxCf20k1.js} +1 -1
- package/dashboard/assets/treeView-Q6P3EWNA-BGLYAyGp.js +1 -0
- package/dashboard/assets/treemap-WGGIJYW6-BlzAwncU.js +1 -0
- package/dashboard/assets/{vennDiagram-4TSXK5OY-BYJRHEaL.js → vennDiagram-4TSXK5OY-D76RIZLz.js} +1 -1
- package/dashboard/assets/wardley-WFR3VGLG-Ba_reiVw.js +1 -0
- package/dashboard/assets/{wardleyDiagram-VM6X3IG4-DgPN4nSe.js → wardleyDiagram-VM6X3IG4-Cux4coOD.js} +1 -1
- package/dashboard/assets/{xychartDiagram-S5SC5T6Z-BhkAMAOT.js → xychartDiagram-S5SC5T6Z-Ch5mvnlH.js} +1 -1
- package/dashboard/index.html +2 -2
- package/package.json +2 -5
- package/chunks/chunk-AV5BF4V7.js +0 -4304
- package/chunks/chunk-CSPF47S3.js +0 -6027
- package/chunks/chunk-ESM447R6.js +0 -77
- package/chunks/chunk-FEOPHBMY.js +0 -56
- package/chunks/chunk-GNR3APR6.js +0 -295
- package/chunks/chunk-IIBNQTOK.js +0 -1532
- package/chunks/chunk-JSTLXPJS.js +0 -284
- package/chunks/chunk-NJLKFC66.js +0 -4790
- package/chunks/chunk-O7Q2G2KW.js +0 -117
- package/chunks/chunk-VIT5ALXF.js +0 -4054
- package/chunks/chunk-YJU7QACE.js +0 -279
- package/chunks/dashboard-B2AEGCFM.js +0 -76
- package/chunks/eval-runner-XVRX3R2Y.js +0 -31
- package/chunks/hunt-scan-DXV5H6YN.js +0 -40
- package/chunks/managed-operation-SQFMBWHG.js +0 -60
- package/chunks/orchestrate-YHFJXGID.js +0 -63
- package/chunks/run-5T4Z3Q2D.js +0 -28242
- package/chunks/service-plugins-BGS6QKSZ.js +0 -64
- package/dashboard/assets/architecture-7GRP2DOG-hcbO-9zX.js +0 -1
- package/dashboard/assets/architectureDiagram-5GKGNRK7-DReOXTSq.js +0 -36
- package/dashboard/assets/channel-CUURBnpZ.js +0 -1
- package/dashboard/assets/chunk-DU6HZSFF-DgfLNaL2.js +0 -127
- package/dashboard/assets/classDiagram-ZZMXUADV-CD1Buc26.js +0 -1
- package/dashboard/assets/classDiagram-v2-VYDZK3BY-CD1Buc26.js +0 -1
- package/dashboard/assets/common-BMdQBwfR.js +0 -5
- package/dashboard/assets/cose-bilkent-JH36ORCC-CUjQHTML.js +0 -1
- package/dashboard/assets/cynefin-OW5HDTMX-BC7zCtFq.js +0 -1
- package/dashboard/assets/cytoscape.esm-CGd-uY3x.js +0 -321
- package/dashboard/assets/dagre-GXQ25YYZ-Dqc8FS9x.js +0 -4
- package/dashboard/assets/dagre-PrKaheQc.js +0 -1
- package/dashboard/assets/eventmodeling-NTZA5JFV-D8ZNnPkV.js +0 -1
- package/dashboard/assets/flowDiagram-HODETNUW-pDb1AYm8.js +0 -1
- package/dashboard/assets/gitGraph-4MIJSDKK-mvNUo0ZA.js +0 -1
- package/dashboard/assets/info-A6RAGUB7-DChKqZMi.js +0 -1
- package/dashboard/assets/linear-Bl6JKbf4.js +0 -1
- package/dashboard/assets/mermaid-parser.core-Cc6sgCzs.js +0 -7
- package/dashboard/assets/operations-B7JAWOi6.js +0 -130
- package/dashboard/assets/operations-QjKT0Hwi.css +0 -1
- package/dashboard/assets/packet-AYTQ26CC-bQXLDhQC.js +0 -1
- package/dashboard/assets/pie-WAS4IAKB-DfzoABIi.js +0 -1
- package/dashboard/assets/radar-RG4KPBEZ-CZ2pyeUT.js +0 -1
- package/dashboard/assets/railroad-74A4TZTK-CP4Jazfd.js +0 -1
- package/dashboard/assets/railroad-abnf-HS5TGJTU-3MvEiHwD.js +0 -1
- package/dashboard/assets/railroad-ebnf-LZEXJU2U-BWto6cXE.js +0 -1
- package/dashboard/assets/railroad-peg-WCYAUIDC-DasEjbyf.js +0 -1
- package/dashboard/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
- package/dashboard/assets/src-CaNUT1AQ.js +0 -1
- package/dashboard/assets/stateDiagram-v2-MP3YSRHH-B3REMjpY.js +0 -1
- package/dashboard/assets/swimlanes-42K2YHIH-uJE05Tt_.js +0 -1
- package/dashboard/assets/swimlanesDiagram-VR7AAH4N-CIaVMZEy.js +0 -8
- package/dashboard/assets/treeView-Q6P3EWNA-ZOE2enu2.js +0 -1
- package/dashboard/assets/treemap-WGGIJYW6-yIZoPBF5.js +0 -1
- package/dashboard/assets/wardley-WFR3VGLG-D5V-jLbB.js +0 -1
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
scanExecutionSignal
|
|
6
|
+
} from "./chunk-HDJSHLRM.js";
|
|
4
7
|
import {
|
|
5
8
|
homeStateDir
|
|
6
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-S3B6HFSM.js";
|
|
7
10
|
|
|
8
11
|
// packages/core/dist/scope/waf-detect.js
|
|
9
12
|
function readHeader(headers, name) {
|
|
@@ -2584,9 +2587,332 @@ function warnRejectedSources(sources, results, context) {
|
|
|
2584
2587
|
}
|
|
2585
2588
|
}
|
|
2586
2589
|
|
|
2590
|
+
// packages/core/dist/scope/rate-limit.js
|
|
2591
|
+
var TokenBucket = class {
|
|
2592
|
+
state;
|
|
2593
|
+
nowFn;
|
|
2594
|
+
sleepFn;
|
|
2595
|
+
jitter;
|
|
2596
|
+
constructor(rps, capacity = rps, nowFn = () => Date.now(), sleepFn = defaultSleep2, jitter) {
|
|
2597
|
+
if (!Number.isFinite(rps) || rps <= 0) {
|
|
2598
|
+
throw new Error(`TokenBucket: rps must be a positive finite number, got ${rps}`);
|
|
2599
|
+
}
|
|
2600
|
+
if (!Number.isFinite(capacity) || capacity <= 0) {
|
|
2601
|
+
throw new Error(`TokenBucket: capacity must be a positive finite number, got ${capacity}`);
|
|
2602
|
+
}
|
|
2603
|
+
this.nowFn = nowFn;
|
|
2604
|
+
this.sleepFn = sleepFn;
|
|
2605
|
+
this.jitter = jitter && jitter.baseMs > 0 ? jitter : void 0;
|
|
2606
|
+
this.state = {
|
|
2607
|
+
tokens: capacity,
|
|
2608
|
+
refillRatePerMs: rps / 1e3,
|
|
2609
|
+
capacity,
|
|
2610
|
+
lastRefill: nowFn(),
|
|
2611
|
+
retryUntil: 0
|
|
2612
|
+
};
|
|
2613
|
+
}
|
|
2614
|
+
refill() {
|
|
2615
|
+
const now = this.nowFn();
|
|
2616
|
+
const elapsed = now - this.state.lastRefill;
|
|
2617
|
+
if (elapsed > 0) {
|
|
2618
|
+
this.state.tokens = Math.min(this.state.capacity, this.state.tokens + elapsed * this.state.refillRatePerMs);
|
|
2619
|
+
this.state.lastRefill = now;
|
|
2620
|
+
}
|
|
2621
|
+
}
|
|
2622
|
+
/**
|
|
2623
|
+
* Non-blocking. Returns true and consumes `n` tokens if available;
|
|
2624
|
+
* returns false and consumes nothing otherwise. Blocked during 429
|
|
2625
|
+
* cool-off (returns false until park expires).
|
|
2626
|
+
*/
|
|
2627
|
+
tryConsume(n = 1) {
|
|
2628
|
+
if (this.nowFn() < this.state.retryUntil)
|
|
2629
|
+
return false;
|
|
2630
|
+
this.refill();
|
|
2631
|
+
if (this.state.tokens >= n) {
|
|
2632
|
+
this.state.tokens -= n;
|
|
2633
|
+
return true;
|
|
2634
|
+
}
|
|
2635
|
+
return false;
|
|
2636
|
+
}
|
|
2637
|
+
/**
|
|
2638
|
+
* Block until `n` tokens are available, then consume them. Honours
|
|
2639
|
+
* the 429 park deadline first, then refill-and-spin with sleeps
|
|
2640
|
+
* sized to the exact next-token-available time.
|
|
2641
|
+
*/
|
|
2642
|
+
async acquire(n = 1, signal = scanExecutionSignal()) {
|
|
2643
|
+
signal?.throwIfAborted();
|
|
2644
|
+
if (n > this.state.capacity) {
|
|
2645
|
+
n = this.state.capacity;
|
|
2646
|
+
}
|
|
2647
|
+
while (this.nowFn() < this.state.retryUntil) {
|
|
2648
|
+
const wait = this.state.retryUntil - this.nowFn();
|
|
2649
|
+
await this.sleepFn(Math.max(1, Math.min(wait, 1e3)), signal);
|
|
2650
|
+
}
|
|
2651
|
+
while (true) {
|
|
2652
|
+
signal?.throwIfAborted();
|
|
2653
|
+
this.refill();
|
|
2654
|
+
if (this.state.tokens >= n) {
|
|
2655
|
+
this.state.tokens -= n;
|
|
2656
|
+
await this.pace(signal);
|
|
2657
|
+
return;
|
|
2658
|
+
}
|
|
2659
|
+
const tokensNeeded = n - this.state.tokens;
|
|
2660
|
+
const waitMs = Math.max(1, Math.ceil(tokensNeeded / this.state.refillRatePerMs));
|
|
2661
|
+
await this.sleepFn(waitMs, signal);
|
|
2662
|
+
}
|
|
2663
|
+
}
|
|
2664
|
+
/**
|
|
2665
|
+
* Sleep the configured full-jitter delay. No-op (and no `await`-visible
|
|
2666
|
+
* sleep) when no jitter is configured, so the default path is unchanged.
|
|
2667
|
+
*
|
|
2668
|
+
* Reuses `jitterFor` from `waf-detect.ts` — attempt 0 with an injected rng
|
|
2669
|
+
* yields full jitter in `[0, baseMs]` — rather than growing a second
|
|
2670
|
+
* jitter implementation.
|
|
2671
|
+
*/
|
|
2672
|
+
async pace(signal = scanExecutionSignal()) {
|
|
2673
|
+
signal?.throwIfAborted();
|
|
2674
|
+
if (!this.jitter)
|
|
2675
|
+
return;
|
|
2676
|
+
const ms = jitterFor(0, this.jitter.baseMs, this.jitter.rng ?? Math.random);
|
|
2677
|
+
if (ms > 0)
|
|
2678
|
+
await this.sleepFn(ms, signal);
|
|
2679
|
+
}
|
|
2680
|
+
/**
|
|
2681
|
+
* Park the bucket until `deadline` (ms since epoch). Subsequent
|
|
2682
|
+
* `acquire`/`tryConsume` calls block until the deadline passes.
|
|
2683
|
+
* Idempotent in the "later wins" sense: a longer park overrides a
|
|
2684
|
+
* shorter one, but a shorter park does NOT shorten an existing one.
|
|
2685
|
+
*/
|
|
2686
|
+
markRetryUntil(deadline) {
|
|
2687
|
+
if (deadline > this.state.retryUntil) {
|
|
2688
|
+
this.state.retryUntil = deadline;
|
|
2689
|
+
}
|
|
2690
|
+
}
|
|
2691
|
+
/** Test introspection. */
|
|
2692
|
+
_peek() {
|
|
2693
|
+
this.refill();
|
|
2694
|
+
return {
|
|
2695
|
+
tokens: this.state.tokens,
|
|
2696
|
+
retryUntil: this.state.retryUntil,
|
|
2697
|
+
capacity: this.state.capacity
|
|
2698
|
+
};
|
|
2699
|
+
}
|
|
2700
|
+
};
|
|
2701
|
+
var RateLimiter = class _RateLimiter {
|
|
2702
|
+
buckets = /* @__PURE__ */ new Map();
|
|
2703
|
+
defaultCfg;
|
|
2704
|
+
perHost;
|
|
2705
|
+
jitter;
|
|
2706
|
+
nowFn;
|
|
2707
|
+
sleepFn;
|
|
2708
|
+
/**
|
|
2709
|
+
* Conservative cool-off floor when a 429 lands without a useful
|
|
2710
|
+
* `Retry-After`, or with a tiny one. 60s matches the PoC-runtime
|
|
2711
|
+
* precedent in #206 — a target that just told us to slow down has
|
|
2712
|
+
* earned more than a one-second pause.
|
|
2713
|
+
*/
|
|
2714
|
+
static RETRY_AFTER_FLOOR_MS = 6e4;
|
|
2715
|
+
/**
|
|
2716
|
+
* Optional observer invoked once whenever a fetch is actually throttled:
|
|
2717
|
+
* either an `acquire` that had to block because the bucket was dry, or a
|
|
2718
|
+
* 429 response parking the host. Used by the http_audit enforcement
|
|
2719
|
+
* tracker to populate `rate_limited_count`. No-op when unset, so the
|
|
2720
|
+
* normal scan path is unaffected.
|
|
2721
|
+
*/
|
|
2722
|
+
onThrottle;
|
|
2723
|
+
constructor(config, opts = {}) {
|
|
2724
|
+
this.defaultCfg = config.default;
|
|
2725
|
+
this.jitter = config.jitter;
|
|
2726
|
+
this.perHost = {};
|
|
2727
|
+
if (config.perHost) {
|
|
2728
|
+
for (const [host, cfg] of Object.entries(config.perHost)) {
|
|
2729
|
+
this.perHost[host.toLowerCase()] = cfg;
|
|
2730
|
+
}
|
|
2731
|
+
}
|
|
2732
|
+
this.nowFn = opts.nowFn ?? (() => Date.now());
|
|
2733
|
+
this.sleepFn = opts.sleepFn ?? defaultSleep2;
|
|
2734
|
+
this.onThrottle = opts.onThrottle;
|
|
2735
|
+
}
|
|
2736
|
+
/**
|
|
2737
|
+
* Normalize a URL or host string to a bucket key. Lowercased,
|
|
2738
|
+
* port-stripped, IPv6 brackets retained on the literal but dropped
|
|
2739
|
+
* from the port suffix (e.g. `[::1]:443` → `[::1]`).
|
|
2740
|
+
*/
|
|
2741
|
+
hostKey(urlOrHost) {
|
|
2742
|
+
let host;
|
|
2743
|
+
try {
|
|
2744
|
+
host = new URL(urlOrHost).hostname;
|
|
2745
|
+
} catch {
|
|
2746
|
+
const trimmed = urlOrHost.trim();
|
|
2747
|
+
if (!trimmed)
|
|
2748
|
+
return null;
|
|
2749
|
+
if (trimmed.startsWith("[")) {
|
|
2750
|
+
const close = trimmed.indexOf("]");
|
|
2751
|
+
if (close < 0)
|
|
2752
|
+
return null;
|
|
2753
|
+
host = trimmed.slice(0, close + 1);
|
|
2754
|
+
} else {
|
|
2755
|
+
host = trimmed.split(":")[0];
|
|
2756
|
+
}
|
|
2757
|
+
}
|
|
2758
|
+
return host.toLowerCase();
|
|
2759
|
+
}
|
|
2760
|
+
getBucket(host) {
|
|
2761
|
+
let bucket = this.buckets.get(host);
|
|
2762
|
+
if (!bucket) {
|
|
2763
|
+
const cfg = this.perHost[host] ?? this.defaultCfg;
|
|
2764
|
+
bucket = new TokenBucket(cfg.rps, cfg.burst ?? cfg.rps, this.nowFn, this.sleepFn, this.jitter);
|
|
2765
|
+
this.buckets.set(host, bucket);
|
|
2766
|
+
}
|
|
2767
|
+
return bucket;
|
|
2768
|
+
}
|
|
2769
|
+
/**
|
|
2770
|
+
* Block until a token is available for `urlOrHost`'s host, then
|
|
2771
|
+
* consume it. Unparseable input is treated as a no-op (returns
|
|
2772
|
+
* immediately) — callers should not rely on rate-limiting unknowable
|
|
2773
|
+
* hosts. The fetch sites that wire this up always pass full URLs.
|
|
2774
|
+
*/
|
|
2775
|
+
async acquire(urlOrHost, n = 1, signal = scanExecutionSignal()) {
|
|
2776
|
+
signal?.throwIfAborted();
|
|
2777
|
+
const host = this.hostKey(urlOrHost);
|
|
2778
|
+
if (!host)
|
|
2779
|
+
return;
|
|
2780
|
+
const bucket = this.getBucket(host);
|
|
2781
|
+
if (bucket.tryConsume(n)) {
|
|
2782
|
+
await bucket.pace(signal);
|
|
2783
|
+
return;
|
|
2784
|
+
}
|
|
2785
|
+
this.onThrottle?.();
|
|
2786
|
+
await bucket.acquire(n, signal);
|
|
2787
|
+
}
|
|
2788
|
+
/**
|
|
2789
|
+
* Non-blocking variant. Returns true and consumes if available,
|
|
2790
|
+
* false otherwise. Used by callers that want to fall through to a
|
|
2791
|
+
* fast-path / degrade rather than wait.
|
|
2792
|
+
*/
|
|
2793
|
+
tryAcquire(urlOrHost, n = 1) {
|
|
2794
|
+
const host = this.hostKey(urlOrHost);
|
|
2795
|
+
if (!host)
|
|
2796
|
+
return true;
|
|
2797
|
+
return this.getBucket(host).tryConsume(n);
|
|
2798
|
+
}
|
|
2799
|
+
/**
|
|
2800
|
+
* Inspect a fetch response and, if it's a 429, park the host's
|
|
2801
|
+
* bucket until `Retry-After` (or 60s, whichever is longer). The
|
|
2802
|
+
* parsed value supports both delta-seconds (RFC 7231 §7.1.3) and
|
|
2803
|
+
* HTTP-date forms; anything else falls back to the floor.
|
|
2804
|
+
*
|
|
2805
|
+
* No-ops on non-429 responses, or on hosts with no bucket yet
|
|
2806
|
+
* (which can't happen if the caller acquired before fetching, but
|
|
2807
|
+
* we don't depend on that).
|
|
2808
|
+
*/
|
|
2809
|
+
noteResponse(urlOrHost, res) {
|
|
2810
|
+
if (res.status !== 429)
|
|
2811
|
+
return;
|
|
2812
|
+
const host = this.hostKey(urlOrHost);
|
|
2813
|
+
if (!host)
|
|
2814
|
+
return;
|
|
2815
|
+
this.onThrottle?.();
|
|
2816
|
+
const bucket = this.getBucket(host);
|
|
2817
|
+
const retryAfter = readHeader2(res.headers, "retry-after");
|
|
2818
|
+
const delayMs = parseRetryAfter(retryAfter, this.nowFn());
|
|
2819
|
+
const deadline = this.nowFn() + Math.max(delayMs, _RateLimiter.RETRY_AFTER_FLOOR_MS);
|
|
2820
|
+
bucket.markRetryUntil(deadline);
|
|
2821
|
+
}
|
|
2822
|
+
/** Test-only. Reset all buckets. */
|
|
2823
|
+
_reset() {
|
|
2824
|
+
this.buckets.clear();
|
|
2825
|
+
}
|
|
2826
|
+
};
|
|
2827
|
+
function defaultSleep2(ms, signal) {
|
|
2828
|
+
signal?.throwIfAborted();
|
|
2829
|
+
const { promise, resolve, reject } = Promise.withResolvers();
|
|
2830
|
+
const timer = setTimeout(() => {
|
|
2831
|
+
signal?.removeEventListener("abort", abort);
|
|
2832
|
+
resolve();
|
|
2833
|
+
}, ms);
|
|
2834
|
+
const abort = () => {
|
|
2835
|
+
clearTimeout(timer);
|
|
2836
|
+
reject(signal?.reason ?? new Error("Rate-limit wait cancelled."));
|
|
2837
|
+
};
|
|
2838
|
+
signal?.addEventListener("abort", abort, { once: true });
|
|
2839
|
+
return promise;
|
|
2840
|
+
}
|
|
2841
|
+
function readHeader2(headers, name) {
|
|
2842
|
+
if (typeof headers.get === "function") {
|
|
2843
|
+
return headers.get(name);
|
|
2844
|
+
}
|
|
2845
|
+
return null;
|
|
2846
|
+
}
|
|
2847
|
+
function parseRetryAfter(value, now) {
|
|
2848
|
+
if (!value)
|
|
2849
|
+
return 0;
|
|
2850
|
+
const trimmed = value.trim();
|
|
2851
|
+
if (!trimmed)
|
|
2852
|
+
return 0;
|
|
2853
|
+
if (/^\d+$/.test(trimmed)) {
|
|
2854
|
+
const seconds = parseInt(trimmed, 10);
|
|
2855
|
+
return Number.isFinite(seconds) && seconds > 0 ? seconds * 1e3 : 0;
|
|
2856
|
+
}
|
|
2857
|
+
const date = Date.parse(trimmed);
|
|
2858
|
+
if (Number.isFinite(date)) {
|
|
2859
|
+
return Math.max(0, date - now);
|
|
2860
|
+
}
|
|
2861
|
+
return 0;
|
|
2862
|
+
}
|
|
2863
|
+
function parseRateLimitFlag(spec, fallbackRps = 5) {
|
|
2864
|
+
const trimmed = spec.trim();
|
|
2865
|
+
if (!trimmed) {
|
|
2866
|
+
return { default: { rps: fallbackRps } };
|
|
2867
|
+
}
|
|
2868
|
+
const parts = trimmed.split(",").map((p) => p.trim()).filter(Boolean);
|
|
2869
|
+
let defaultCfg = null;
|
|
2870
|
+
const perHost = {};
|
|
2871
|
+
for (const part of parts) {
|
|
2872
|
+
const eq = part.indexOf("=");
|
|
2873
|
+
if (eq < 0) {
|
|
2874
|
+
const cfg = parseRpsBurst(part);
|
|
2875
|
+
defaultCfg = cfg;
|
|
2876
|
+
} else {
|
|
2877
|
+
const host = part.slice(0, eq).trim().toLowerCase();
|
|
2878
|
+
const cfg = parseRpsBurst(part.slice(eq + 1));
|
|
2879
|
+
if (!host) {
|
|
2880
|
+
throw new Error(`--rate-limit: empty host in "${part}"`);
|
|
2881
|
+
}
|
|
2882
|
+
perHost[host] = cfg;
|
|
2883
|
+
}
|
|
2884
|
+
}
|
|
2885
|
+
return {
|
|
2886
|
+
default: defaultCfg ?? { rps: fallbackRps },
|
|
2887
|
+
perHost: Object.keys(perHost).length > 0 ? perHost : void 0
|
|
2888
|
+
};
|
|
2889
|
+
}
|
|
2890
|
+
function parseRpsBurst(s) {
|
|
2891
|
+
const trimmed = s.trim();
|
|
2892
|
+
if (!trimmed) {
|
|
2893
|
+
throw new Error(`--rate-limit: empty rps value`);
|
|
2894
|
+
}
|
|
2895
|
+
const colon = trimmed.indexOf(":");
|
|
2896
|
+
if (colon < 0) {
|
|
2897
|
+
const rps2 = Number(trimmed);
|
|
2898
|
+
if (!Number.isFinite(rps2) || rps2 <= 0) {
|
|
2899
|
+
throw new Error(`--rate-limit: invalid rps "${trimmed}"`);
|
|
2900
|
+
}
|
|
2901
|
+
return { rps: rps2 };
|
|
2902
|
+
}
|
|
2903
|
+
const rps = Number(trimmed.slice(0, colon));
|
|
2904
|
+
const burst = Number(trimmed.slice(colon + 1));
|
|
2905
|
+
if (!Number.isFinite(rps) || rps <= 0) {
|
|
2906
|
+
throw new Error(`--rate-limit: invalid rps "${trimmed.slice(0, colon)}"`);
|
|
2907
|
+
}
|
|
2908
|
+
if (!Number.isFinite(burst) || burst <= 0) {
|
|
2909
|
+
throw new Error(`--rate-limit: invalid burst "${trimmed.slice(colon + 1)}"`);
|
|
2910
|
+
}
|
|
2911
|
+
return { rps, burst };
|
|
2912
|
+
}
|
|
2913
|
+
|
|
2587
2914
|
export {
|
|
2588
2915
|
classifyResponse,
|
|
2589
|
-
jitterFor,
|
|
2590
2916
|
runEvasionCampaign,
|
|
2591
2917
|
WafDetector,
|
|
2592
2918
|
enumerateSubdomains,
|
|
@@ -2622,5 +2948,9 @@ export {
|
|
|
2622
2948
|
searchTargetHistory,
|
|
2623
2949
|
lookupAdvisory,
|
|
2624
2950
|
searchPublicReports,
|
|
2625
|
-
advisorySweep
|
|
2951
|
+
advisorySweep,
|
|
2952
|
+
TokenBucket,
|
|
2953
|
+
RateLimiter,
|
|
2954
|
+
parseRetryAfter,
|
|
2955
|
+
parseRateLimitFlag
|
|
2626
2956
|
};
|