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
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
installPackageForEcosystem,
|
|
6
|
+
isExistingLocalTargetPath,
|
|
7
|
+
isExplicitLocalTargetPath,
|
|
8
|
+
resolveLocalTargetPath
|
|
9
|
+
} from "./chunk-2J3STRJT.js";
|
|
10
|
+
|
|
11
|
+
// packages/core/dist/prepare.js
|
|
12
|
+
import { execFileSync } from "node:child_process";
|
|
13
|
+
import { existsSync, mkdirSync, rmSync } from "node:fs";
|
|
14
|
+
import { join, basename } from "node:path";
|
|
15
|
+
import { randomUUID } from "node:crypto";
|
|
16
|
+
import { tmpdir } from "node:os";
|
|
17
|
+
function detectTargetType(target) {
|
|
18
|
+
if (target.startsWith("git@") || target.startsWith("git://") || target.endsWith(".git") || target.startsWith("https://github.com/")) {
|
|
19
|
+
return "source-code";
|
|
20
|
+
}
|
|
21
|
+
if (target.startsWith("http://") || target.startsWith("https://")) {
|
|
22
|
+
return "url";
|
|
23
|
+
}
|
|
24
|
+
if (isExplicitLocalTargetPath(target) || isExistingLocalTargetPath(target)) {
|
|
25
|
+
return "source-code";
|
|
26
|
+
}
|
|
27
|
+
if (/^(@[a-z0-9-]+\/)?[a-z0-9][a-z0-9._-]*(@.*)?$/.test(target)) {
|
|
28
|
+
return "npm-package";
|
|
29
|
+
}
|
|
30
|
+
return "source-code";
|
|
31
|
+
}
|
|
32
|
+
function installPackage(ecosystem, packageName, requestedVersion, emit) {
|
|
33
|
+
return installPackageForEcosystem(ecosystem, packageName, requestedVersion, emit);
|
|
34
|
+
}
|
|
35
|
+
function resolveRepo(repo, emit) {
|
|
36
|
+
const isUrl = repo.startsWith("https://") || repo.startsWith("http://") || repo.startsWith("git@") || repo.startsWith("git://");
|
|
37
|
+
if (!isUrl) {
|
|
38
|
+
const absPath = resolveLocalTargetPath(repo);
|
|
39
|
+
if (!existsSync(absPath)) {
|
|
40
|
+
throw new Error(`Repository path not found: ${absPath}`);
|
|
41
|
+
}
|
|
42
|
+
return { repoPath: absPath, cloned: false };
|
|
43
|
+
}
|
|
44
|
+
const tempDir = join(tmpdir(), `0-review-${randomUUID().slice(0, 8)}`);
|
|
45
|
+
mkdirSync(tempDir, { recursive: true });
|
|
46
|
+
emit({
|
|
47
|
+
type: "stage:start",
|
|
48
|
+
stage: "discovery",
|
|
49
|
+
message: `Cloning ${repo}...`
|
|
50
|
+
});
|
|
51
|
+
try {
|
|
52
|
+
execFileSync("git", ["clone", "--depth", "1", repo, `${tempDir}/repo`], {
|
|
53
|
+
timeout: 12e4,
|
|
54
|
+
stdio: "pipe"
|
|
55
|
+
});
|
|
56
|
+
} catch (err) {
|
|
57
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
58
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
59
|
+
throw new Error(`Failed to clone ${repo}: ${msg}`);
|
|
60
|
+
}
|
|
61
|
+
const repoPath = join(tempDir, "repo");
|
|
62
|
+
emit({
|
|
63
|
+
type: "stage:end",
|
|
64
|
+
stage: "discovery",
|
|
65
|
+
message: `Cloned ${basename(repo.replace(/\.git$/, ""))}`
|
|
66
|
+
});
|
|
67
|
+
return { repoPath, cloned: true, tempDir };
|
|
68
|
+
}
|
|
69
|
+
async function validateUrl(url) {
|
|
70
|
+
const controller = new AbortController();
|
|
71
|
+
const timer = setTimeout(() => controller.abort(), 1e4);
|
|
72
|
+
try {
|
|
73
|
+
const res = await fetch(url, {
|
|
74
|
+
method: "HEAD",
|
|
75
|
+
signal: controller.signal,
|
|
76
|
+
redirect: "follow"
|
|
77
|
+
});
|
|
78
|
+
if (!res.ok) {
|
|
79
|
+
throw new Error(`URL returned HTTP ${res.status}: ${url}`);
|
|
80
|
+
}
|
|
81
|
+
} catch (err) {
|
|
82
|
+
if (err instanceof Error && err.name === "AbortError") {
|
|
83
|
+
throw new Error(`URL unreachable (timeout): ${url}`);
|
|
84
|
+
}
|
|
85
|
+
throw err;
|
|
86
|
+
} finally {
|
|
87
|
+
clearTimeout(timer);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function prepare(target, type, opts, emit) {
|
|
91
|
+
switch (type) {
|
|
92
|
+
case "npm-package": {
|
|
93
|
+
let packageName = target;
|
|
94
|
+
let version = opts.packageVersion;
|
|
95
|
+
const atIdx = target.startsWith("@") ? target.indexOf("@", 1) : target.indexOf("@");
|
|
96
|
+
if (atIdx > 0) {
|
|
97
|
+
packageName = target.slice(0, atIdx);
|
|
98
|
+
version = version ?? target.slice(atIdx + 1);
|
|
99
|
+
}
|
|
100
|
+
const pkg = installPackage("npm", packageName, version, emit);
|
|
101
|
+
return {
|
|
102
|
+
targetType: type,
|
|
103
|
+
resolvedTarget: pkg.path,
|
|
104
|
+
packageInfo: pkg,
|
|
105
|
+
cleanup: () => {
|
|
106
|
+
try {
|
|
107
|
+
rmSync(pkg.tempDir, { recursive: true, force: true });
|
|
108
|
+
} catch {
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
case "pypi-package": {
|
|
114
|
+
const pkg = installPackage("pypi", target, opts.packageVersion, emit);
|
|
115
|
+
return {
|
|
116
|
+
targetType: type,
|
|
117
|
+
resolvedTarget: pkg.path,
|
|
118
|
+
packageInfo: pkg,
|
|
119
|
+
cleanup: () => {
|
|
120
|
+
try {
|
|
121
|
+
rmSync(pkg.tempDir, { recursive: true, force: true });
|
|
122
|
+
} catch {
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
case "cargo-package": {
|
|
128
|
+
const pkg = installPackage("cargo", target, opts.packageVersion, emit);
|
|
129
|
+
return {
|
|
130
|
+
targetType: type,
|
|
131
|
+
resolvedTarget: pkg.path,
|
|
132
|
+
packageInfo: pkg,
|
|
133
|
+
cleanup: () => {
|
|
134
|
+
try {
|
|
135
|
+
rmSync(pkg.tempDir, { recursive: true, force: true });
|
|
136
|
+
} catch {
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
case "oci-image": {
|
|
142
|
+
const pkg = installPackage("oci", target, opts.packageVersion, emit);
|
|
143
|
+
return {
|
|
144
|
+
targetType: type,
|
|
145
|
+
resolvedTarget: pkg.path,
|
|
146
|
+
packageInfo: pkg,
|
|
147
|
+
cleanup: () => {
|
|
148
|
+
try {
|
|
149
|
+
rmSync(pkg.tempDir, { recursive: true, force: true });
|
|
150
|
+
} catch {
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
case "source-code": {
|
|
156
|
+
const { repoPath, cloned, tempDir } = resolveRepo(target, emit);
|
|
157
|
+
return {
|
|
158
|
+
targetType: type,
|
|
159
|
+
resolvedTarget: repoPath,
|
|
160
|
+
repoPath,
|
|
161
|
+
cleanup: () => {
|
|
162
|
+
if (cloned && tempDir) {
|
|
163
|
+
try {
|
|
164
|
+
rmSync(tempDir, { recursive: true, force: true });
|
|
165
|
+
} catch {
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
}
|
|
171
|
+
case "url":
|
|
172
|
+
case "web-app": {
|
|
173
|
+
await validateUrl(target);
|
|
174
|
+
emit({
|
|
175
|
+
type: "stage:end",
|
|
176
|
+
stage: "discovery",
|
|
177
|
+
message: `URL reachable: ${target}`
|
|
178
|
+
});
|
|
179
|
+
return {
|
|
180
|
+
targetType: type,
|
|
181
|
+
resolvedTarget: target,
|
|
182
|
+
cleanup: () => {
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
default: {
|
|
187
|
+
const _exhaustive = type;
|
|
188
|
+
throw new Error(`Unknown target type: ${_exhaustive}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export {
|
|
194
|
+
detectTargetType,
|
|
195
|
+
prepare
|
|
196
|
+
};
|
|
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
|
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
severityRank
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-S3B6HFSM.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/triage/kernel-primitive.js
|
|
9
9
|
function maxSeverity(a, b) {
|
|
@@ -8,13 +8,13 @@ import {
|
|
|
8
8
|
parsePatch,
|
|
9
9
|
readEvolutionArtifact,
|
|
10
10
|
resolveScopedPath
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DJGJECBV.js";
|
|
12
12
|
import {
|
|
13
13
|
homeStateDir
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-S3B6HFSM.js";
|
|
15
15
|
import {
|
|
16
16
|
external_exports
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-5XOYTAOK.js";
|
|
18
18
|
|
|
19
19
|
// packages/core/dist/fix/source-fix.js
|
|
20
20
|
import { execFile } from "node:child_process";
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
source_default
|
|
6
|
+
} from "./chunk-HLFS6WV2.js";
|
|
7
|
+
|
|
8
|
+
// packages/cli/src/utils.ts
|
|
9
|
+
import { gzipSync } from "zlib";
|
|
10
|
+
async function getRuntimeAvailability() {
|
|
11
|
+
const { detectAvailableRuntimes, LlmApiRuntime } = await import("./dist-6RNAVFAY.js");
|
|
12
|
+
const apiRuntimeDiagnostics = new LlmApiRuntime({ type: "api", timeout: 5e3 }).getConfigurationDiagnostics();
|
|
13
|
+
const hasApiKey = apiRuntimeDiagnostics.valid;
|
|
14
|
+
const availableRuntimes = [...await detectAvailableRuntimes()];
|
|
15
|
+
return {
|
|
16
|
+
hasApiKey,
|
|
17
|
+
availableRuntimes,
|
|
18
|
+
apiRuntime: {
|
|
19
|
+
configured: apiRuntimeDiagnostics.reason !== "missing_key",
|
|
20
|
+
valid: apiRuntimeDiagnostics.valid,
|
|
21
|
+
providerLabel: apiRuntimeDiagnostics.providerLabel,
|
|
22
|
+
error: apiRuntimeDiagnostics.fatalError
|
|
23
|
+
}
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
async function checkRuntimeAvailability(runtime) {
|
|
27
|
+
const availability = await getRuntimeAvailability();
|
|
28
|
+
const { hasApiKey, availableRuntimes, apiRuntime } = availability;
|
|
29
|
+
if (hasApiKey) return;
|
|
30
|
+
console.log("");
|
|
31
|
+
if ((runtime === "api" || runtime === "auto") && apiRuntime.configured && apiRuntime.error) {
|
|
32
|
+
console.log(source_default.red(` ${apiRuntime.providerLabel} config error: ${apiRuntime.error.split("\n")[0]}`));
|
|
33
|
+
}
|
|
34
|
+
if (runtime === "api") {
|
|
35
|
+
console.log(source_default.yellow(
|
|
36
|
+
apiRuntime.configured ? " Warning: `--runtime api` needs a valid provider configuration. AI analysis will fail until this is fixed." : " Warning: `--runtime api` needs provider credentials. AI analysis may be skipped."
|
|
37
|
+
));
|
|
38
|
+
} else if (availableRuntimes.length > 0) {
|
|
39
|
+
console.log(source_default.cyan(` Using local runtime(s): ${availableRuntimes.join(", ")}`));
|
|
40
|
+
} else {
|
|
41
|
+
console.log(source_default.yellow(" Warning: No API key or local agent runtime detected. AI analysis will be skipped."));
|
|
42
|
+
}
|
|
43
|
+
console.log(source_default.gray(" Provider credentials: ZERO_CHATGPT_ACCESS_TOKEN | ZERO_CHATGPT_OAUTH_REFRESH_TOKEN, OPENROUTER_API_KEY, ANTHROPIC_API_KEY, AZURE_OPENAI_API_KEY, OPENAI_API_KEY"));
|
|
44
|
+
console.log("");
|
|
45
|
+
}
|
|
46
|
+
function buildShareUrl(report) {
|
|
47
|
+
const json = JSON.stringify(report);
|
|
48
|
+
const compressed = gzipSync(Buffer.from(json, "utf-8"));
|
|
49
|
+
const b64 = compressed.toString("base64url");
|
|
50
|
+
return `https://0.security/r#${b64}`;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export {
|
|
54
|
+
getRuntimeAvailability,
|
|
55
|
+
checkRuntimeAvailability,
|
|
56
|
+
buildShareUrl
|
|
57
|
+
};
|
|
@@ -3,10 +3,10 @@ import { createRequire as __0CreateRequire } from "node:module";
|
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
executeWorkflow
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-EEP6GBUO.js";
|
|
7
7
|
import {
|
|
8
8
|
SecurityWorkflowStore
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-YXTV2FRE.js";
|
|
10
10
|
|
|
11
11
|
// packages/cli/src/managed-operation.ts
|
|
12
12
|
async function executeManagedOperation(options, dependencies = { store: (path) => new SecurityWorkflowStore(path) }) {
|
|
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
|
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
external_exports
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-5XOYTAOK.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/protocol/http-conformance.js
|
|
9
9
|
import { randomUUID } from "node:crypto";
|
|
@@ -20,7 +20,7 @@ var HTTP_SURFACES = ["method", "header", "status"];
|
|
|
20
20
|
var httpExerciseSchema = external_exports.object({
|
|
21
21
|
method: external_exports.string().min(1),
|
|
22
22
|
path: external_exports.string().optional(),
|
|
23
|
-
headers: external_exports.record(external_exports.string()).optional(),
|
|
23
|
+
headers: external_exports.record(external_exports.string(), external_exports.string()).optional(),
|
|
24
24
|
body: external_exports.string().optional()
|
|
25
25
|
}).strict();
|
|
26
26
|
var conformanceRuleSchema = external_exports.object({
|
|
@@ -3,7 +3,7 @@ import { createRequire as __0CreateRequire } from "node:module";
|
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
5
|
createPresentationEvent
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-S3B6HFSM.js";
|
|
7
7
|
|
|
8
8
|
// packages/core/dist/events/bus.js
|
|
9
9
|
function presentationEventSink(sink, options = {}) {
|
|
@@ -2,20 +2,237 @@
|
|
|
2
2
|
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
3
|
const require = __0CreateRequire(import.meta.url);
|
|
4
4
|
import {
|
|
5
|
-
|
|
6
|
-
} from "./chunk-
|
|
5
|
+
presentationEventBus
|
|
6
|
+
} from "./chunk-S4DFH2FJ.js";
|
|
7
7
|
import {
|
|
8
8
|
loadLayeredSettings
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-6TA3CWND.js";
|
|
10
10
|
import {
|
|
11
|
+
createPresentationEvent,
|
|
11
12
|
homeStateDir
|
|
12
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-S3B6HFSM.js";
|
|
14
|
+
|
|
15
|
+
// packages/cli/src/presentation/process-output.ts
|
|
16
|
+
import { format } from "node:util";
|
|
17
|
+
var streamBridgeSuppressionDepth = 0;
|
|
18
|
+
var activeStreamBridge = null;
|
|
19
|
+
function currentPresentationTimestamp() {
|
|
20
|
+
return (/* @__PURE__ */ new Date()).toISOString();
|
|
21
|
+
}
|
|
22
|
+
function createProcessPresentationOutput(options = {}) {
|
|
23
|
+
const stdout = options.stdout ?? { write: process.stdout.write.bind(process.stdout) };
|
|
24
|
+
const stderr = options.stderr ?? { write: process.stderr.write.bind(process.stderr) };
|
|
25
|
+
const source = options.source ?? "cli";
|
|
26
|
+
const now = options.now ?? currentPresentationTimestamp;
|
|
27
|
+
let sequence = 0;
|
|
28
|
+
const write = (channel, target, text, eventType) => {
|
|
29
|
+
const event = createPresentationEvent({
|
|
30
|
+
source,
|
|
31
|
+
sequence: ++sequence,
|
|
32
|
+
at: now(),
|
|
33
|
+
eventType,
|
|
34
|
+
payload: { channel, text }
|
|
35
|
+
});
|
|
36
|
+
streamBridgeSuppressionDepth += 1;
|
|
37
|
+
try {
|
|
38
|
+
target.write(text);
|
|
39
|
+
} finally {
|
|
40
|
+
streamBridgeSuppressionDepth -= 1;
|
|
41
|
+
}
|
|
42
|
+
options.onEvent?.(event);
|
|
43
|
+
return event;
|
|
44
|
+
};
|
|
45
|
+
return {
|
|
46
|
+
stdout(text, eventType = "output.stdout") {
|
|
47
|
+
return write("stdout", stdout, text, eventType);
|
|
48
|
+
},
|
|
49
|
+
stderr(text, eventType = "output.stderr") {
|
|
50
|
+
return write("stderr", stderr, text, eventType);
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function createConsolePresentationOutput(options = {}) {
|
|
55
|
+
const source = options.source ?? "cli";
|
|
56
|
+
const now = options.now ?? currentPresentationTimestamp;
|
|
57
|
+
let sequence = 0;
|
|
58
|
+
const emit = (channel, text, eventType) => {
|
|
59
|
+
const event = createPresentationEvent({
|
|
60
|
+
source,
|
|
61
|
+
sequence: ++sequence,
|
|
62
|
+
at: now(),
|
|
63
|
+
eventType,
|
|
64
|
+
payload: { channel, text }
|
|
65
|
+
});
|
|
66
|
+
streamBridgeSuppressionDepth += 1;
|
|
67
|
+
try {
|
|
68
|
+
if (channel === "stdout") {
|
|
69
|
+
(options.log ?? console.log)(text);
|
|
70
|
+
} else {
|
|
71
|
+
(options.error ?? console.error)(text);
|
|
72
|
+
}
|
|
73
|
+
} finally {
|
|
74
|
+
streamBridgeSuppressionDepth -= 1;
|
|
75
|
+
}
|
|
76
|
+
options.onEvent?.(event);
|
|
77
|
+
return event;
|
|
78
|
+
};
|
|
79
|
+
return {
|
|
80
|
+
stdout(text, eventType = "output.stdout") {
|
|
81
|
+
return emit("stdout", text, eventType);
|
|
82
|
+
},
|
|
83
|
+
stderr(text, eventType = "output.stderr") {
|
|
84
|
+
return emit("stderr", text, eventType);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
var consolePresentationOutput = createConsolePresentationOutput({
|
|
89
|
+
onEvent(event) {
|
|
90
|
+
presentationEventBus.emit(event);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
function installConsolePresentationBridge(options = {}) {
|
|
94
|
+
const target = options.target ?? console;
|
|
95
|
+
const originals = {
|
|
96
|
+
log: target.log,
|
|
97
|
+
info: target.info,
|
|
98
|
+
warn: target.warn,
|
|
99
|
+
error: target.error
|
|
100
|
+
};
|
|
101
|
+
const source = options.source ?? "cli";
|
|
102
|
+
const now = options.now ?? currentPresentationTimestamp;
|
|
103
|
+
let sequence = 0;
|
|
104
|
+
const emit = (method, channel, args, eventType) => {
|
|
105
|
+
const text = format(...args);
|
|
106
|
+
if (streamBridgeSuppressionDepth > 0) {
|
|
107
|
+
originals[method].call(target, text);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
const event = createPresentationEvent({
|
|
111
|
+
source,
|
|
112
|
+
sequence: ++sequence,
|
|
113
|
+
at: now(),
|
|
114
|
+
eventType,
|
|
115
|
+
payload: { channel, text }
|
|
116
|
+
});
|
|
117
|
+
streamBridgeSuppressionDepth += 1;
|
|
118
|
+
try {
|
|
119
|
+
originals[method].call(target, text);
|
|
120
|
+
} finally {
|
|
121
|
+
streamBridgeSuppressionDepth -= 1;
|
|
122
|
+
}
|
|
123
|
+
presentationEventBus.emit(event);
|
|
124
|
+
options.onEvent?.(event);
|
|
125
|
+
};
|
|
126
|
+
const bridgedLog = (...args) => emit("log", "stdout", args, "output.console.log");
|
|
127
|
+
const bridgedInfo = (...args) => emit("info", "stdout", args, "output.console.info");
|
|
128
|
+
const bridgedWarn = (...args) => emit("warn", "stderr", args, "output.console.warn");
|
|
129
|
+
const bridgedError = (...args) => emit("error", "stderr", args, "output.console.error");
|
|
130
|
+
target.log = bridgedLog;
|
|
131
|
+
target.info = bridgedInfo;
|
|
132
|
+
target.warn = bridgedWarn;
|
|
133
|
+
target.error = bridgedError;
|
|
134
|
+
return {
|
|
135
|
+
restore() {
|
|
136
|
+
if (target.log === bridgedLog) target.log = originals.log;
|
|
137
|
+
if (target.info === bridgedInfo) target.info = originals.info;
|
|
138
|
+
if (target.warn === bridgedWarn) target.warn = originals.warn;
|
|
139
|
+
if (target.error === bridgedError) target.error = originals.error;
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
function installProcessPresentationStreamBridge(options = {}) {
|
|
144
|
+
if (activeStreamBridge) return activeStreamBridge;
|
|
145
|
+
const source = options.source ?? "cli";
|
|
146
|
+
const now = options.now ?? currentPresentationTimestamp;
|
|
147
|
+
let sequence = 0;
|
|
148
|
+
let suspended = false;
|
|
149
|
+
const streams = [];
|
|
150
|
+
const emit = (channel, chunk, encoding) => {
|
|
151
|
+
const text = typeof chunk === "string" ? chunk : chunk instanceof Uint8Array ? Buffer.from(chunk).toString(typeof encoding === "string" ? encoding : "utf8") : String(chunk ?? "");
|
|
152
|
+
if (channel === "stdout" && text.startsWith("ZERO_EVENT_")) return;
|
|
153
|
+
const event = createPresentationEvent({
|
|
154
|
+
source,
|
|
155
|
+
sequence: ++sequence,
|
|
156
|
+
at: now(),
|
|
157
|
+
eventType: channel === "stdout" ? "output.stream.stdout" : "output.stream.stderr",
|
|
158
|
+
payload: { channel, text }
|
|
159
|
+
});
|
|
160
|
+
presentationEventBus.emit(event);
|
|
161
|
+
options.onEvent?.(event);
|
|
162
|
+
};
|
|
163
|
+
for (const [channel, stream] of [
|
|
164
|
+
["stdout", options.stdout ?? process.stdout],
|
|
165
|
+
["stderr", options.stderr ?? process.stderr]
|
|
166
|
+
]) {
|
|
167
|
+
const original = stream.write;
|
|
168
|
+
const patched = ((chunk, encoding, callback) => {
|
|
169
|
+
const result = original.call(stream, chunk, encoding, callback);
|
|
170
|
+
if (!suspended && streamBridgeSuppressionDepth === 0) emit(channel, chunk, encoding);
|
|
171
|
+
return result;
|
|
172
|
+
});
|
|
173
|
+
streams.push({ channel, stream, original, patched });
|
|
174
|
+
}
|
|
175
|
+
const bridge = {
|
|
176
|
+
suspend() {
|
|
177
|
+
if (suspended) return;
|
|
178
|
+
suspended = true;
|
|
179
|
+
for (const item of streams) {
|
|
180
|
+
if (item.stream.write === item.patched) item.stream.write = item.original;
|
|
181
|
+
}
|
|
182
|
+
},
|
|
183
|
+
resume() {
|
|
184
|
+
if (!suspended) return;
|
|
185
|
+
suspended = false;
|
|
186
|
+
for (const item of streams) {
|
|
187
|
+
if (item.stream.write === item.original) item.stream.write = item.patched;
|
|
188
|
+
}
|
|
189
|
+
},
|
|
190
|
+
restore() {
|
|
191
|
+
for (const item of streams) {
|
|
192
|
+
if (item.stream.write === item.patched) item.stream.write = item.original;
|
|
193
|
+
}
|
|
194
|
+
if (activeStreamBridge === bridge) activeStreamBridge = null;
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
for (const item of streams) item.stream.write = item.patched;
|
|
198
|
+
activeStreamBridge = bridge;
|
|
199
|
+
return bridge;
|
|
200
|
+
}
|
|
201
|
+
var processPresentationOutput = createProcessPresentationOutput({
|
|
202
|
+
onEvent(event) {
|
|
203
|
+
presentationEventBus.emit(event);
|
|
204
|
+
}
|
|
205
|
+
});
|
|
206
|
+
function writePresentationLine(text, eventType = "output.stdout") {
|
|
207
|
+
return processPresentationOutput.stdout(`${text}
|
|
208
|
+
`, eventType);
|
|
209
|
+
}
|
|
13
210
|
|
|
14
211
|
// packages/cli/src/utils/update-check.ts
|
|
15
212
|
import { readFileSync, writeFileSync, mkdirSync } from "node:fs";
|
|
16
213
|
import { join } from "node:path";
|
|
17
214
|
import { spawn } from "node:child_process";
|
|
18
215
|
|
|
216
|
+
// packages/cli/src/tui/animations.ts
|
|
217
|
+
function safeFrame(frame) {
|
|
218
|
+
if (!Number.isFinite(frame)) return 0;
|
|
219
|
+
const t = Math.trunc(frame);
|
|
220
|
+
return t < 0 ? 0 : t;
|
|
221
|
+
}
|
|
222
|
+
var SPINNER_PERIOD = 8;
|
|
223
|
+
var TOAST_ENTER_FRAMES = 6;
|
|
224
|
+
var TOAST_HOLD_FRAMES = 28;
|
|
225
|
+
var TOAST_EXIT_FRAMES = 6;
|
|
226
|
+
var TOAST_TOTAL_FRAMES = TOAST_ENTER_FRAMES + TOAST_HOLD_FRAMES + TOAST_EXIT_FRAMES;
|
|
227
|
+
var SPINNER_FRAMES = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827"];
|
|
228
|
+
function spinnerFrame(frame, opts = {}) {
|
|
229
|
+
if (opts.reduceMotion) return 0;
|
|
230
|
+
return safeFrame(frame) % SPINNER_PERIOD;
|
|
231
|
+
}
|
|
232
|
+
function spinnerGlyph(frame, opts = {}) {
|
|
233
|
+
return SPINNER_FRAMES[spinnerFrame(frame, opts)] ?? SPINNER_FRAMES[0];
|
|
234
|
+
}
|
|
235
|
+
|
|
19
236
|
// packages/cli/src/utils/terminal-progress.ts
|
|
20
237
|
function terminalProgress(label, output = process.stderr, reduceMotion = false) {
|
|
21
238
|
const animated = Boolean(output.isTTY && process.env["TERM"] !== "dumb");
|
|
@@ -284,6 +501,11 @@ async function runStartupUpdate(version) {
|
|
|
284
501
|
}
|
|
285
502
|
|
|
286
503
|
export {
|
|
504
|
+
consolePresentationOutput,
|
|
505
|
+
installConsolePresentationBridge,
|
|
506
|
+
installProcessPresentationStreamBridge,
|
|
507
|
+
processPresentationOutput,
|
|
508
|
+
writePresentationLine,
|
|
287
509
|
performAutoUpdate,
|
|
288
510
|
runStartupUpdate
|
|
289
511
|
};
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire as __0CreateRequire } from "node:module";
|
|
3
|
+
const require = __0CreateRequire(import.meta.url);
|
|
4
|
+
import {
|
|
5
|
+
expandHomePath,
|
|
6
|
+
isExistingLocalTargetPath,
|
|
7
|
+
isExplicitLocalTargetPath
|
|
8
|
+
} from "./chunk-2J3STRJT.js";
|
|
9
|
+
|
|
10
|
+
// packages/cli/src/engagement-plan.ts
|
|
11
|
+
var PACKAGE_PREFIXES = {
|
|
12
|
+
"npm:": { ecosystem: "npm", targetType: "npm-package" },
|
|
13
|
+
"pypi:": { ecosystem: "pypi", targetType: "pypi-package" },
|
|
14
|
+
"cargo:": { ecosystem: "cargo", targetType: "cargo-package" },
|
|
15
|
+
"oci:": { ecosystem: "oci", targetType: "oci-image" }
|
|
16
|
+
};
|
|
17
|
+
function resolveEngagement(rawTarget) {
|
|
18
|
+
const raw = rawTarget.trim();
|
|
19
|
+
if (raw.length === 0) return { ok: false, message: "Enter a URL, source path, git URL, or ecosystem-prefixed package." };
|
|
20
|
+
for (const [prefix, packagePlan] of Object.entries(PACKAGE_PREFIXES)) {
|
|
21
|
+
if (!raw.startsWith(prefix)) continue;
|
|
22
|
+
const target = raw.slice(prefix.length).trim();
|
|
23
|
+
if (target.length === 0) return { ok: false, message: `${prefix} requires a package name.` };
|
|
24
|
+
return {
|
|
25
|
+
ok: true,
|
|
26
|
+
plan: {
|
|
27
|
+
kind: "package",
|
|
28
|
+
target,
|
|
29
|
+
targetType: packagePlan.targetType,
|
|
30
|
+
ecosystem: packagePlan.ecosystem,
|
|
31
|
+
label: `${packagePlan.ecosystem} package ${target}`
|
|
32
|
+
}
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
if (raw.startsWith("source:")) {
|
|
36
|
+
const target = raw.slice("source:".length).trim();
|
|
37
|
+
if (target.length === 0) return { ok: false, message: "source: requires a local path or git URL." };
|
|
38
|
+
return {
|
|
39
|
+
ok: true,
|
|
40
|
+
plan: {
|
|
41
|
+
kind: "source",
|
|
42
|
+
target: expandHomePath(target),
|
|
43
|
+
targetType: "source-code",
|
|
44
|
+
label: `source review ${target}`
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
if (raw.startsWith("git@") || raw.startsWith("git://") || raw.endsWith(".git") || raw.startsWith("https://github.com/")) {
|
|
49
|
+
return {
|
|
50
|
+
ok: true,
|
|
51
|
+
plan: {
|
|
52
|
+
kind: "source",
|
|
53
|
+
target: raw,
|
|
54
|
+
targetType: "source-code",
|
|
55
|
+
label: `source review ${raw}`
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
if (raw.startsWith("mcp://") || raw.startsWith("http://") || raw.startsWith("https://")) {
|
|
60
|
+
return {
|
|
61
|
+
ok: true,
|
|
62
|
+
plan: {
|
|
63
|
+
kind: "web",
|
|
64
|
+
target: raw,
|
|
65
|
+
targetType: "url",
|
|
66
|
+
label: `web target ${raw}`
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
if (isExplicitLocalTargetPath(raw) || isExistingLocalTargetPath(raw)) {
|
|
71
|
+
const target = expandHomePath(raw);
|
|
72
|
+
return {
|
|
73
|
+
ok: true,
|
|
74
|
+
plan: {
|
|
75
|
+
kind: "source",
|
|
76
|
+
target,
|
|
77
|
+
targetType: "source-code",
|
|
78
|
+
label: `source review ${target}`
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return {
|
|
83
|
+
ok: false,
|
|
84
|
+
message: "Ambiguous target. Use https://\u2026, ./path, source:\u2026, npm:\u2026, pypi:\u2026, cargo:\u2026, or oci:\u2026."
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
export {
|
|
89
|
+
resolveEngagement
|
|
90
|
+
};
|