0sec-cli 0.24.1 → 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.
Files changed (243) hide show
  1. package/0.js +64 -60
  2. package/README.md +121 -82
  3. package/chunks/{adapt-loop-L77BWMNE.js → adapt-loop-L2PXCD4J.js} +6 -5
  4. package/chunks/{artifact-scraper-BV67RAP5.js → artifact-scraper-W3LGLXBM.js} +4 -3
  5. package/chunks/{assumption-mining-RPVR77A3.js → assumption-mining-7IJ6ZWZE.js} +22 -20
  6. package/chunks/{backend-connections-ACIXNYZN.js → backend-connections-MYH4QRQG.js} +5 -4
  7. package/chunks/{chunk-QNRYOJEB.js → chunk-27SXCYWH.js} +1 -1
  8. package/chunks/{chunk-PJU24AKR.js → chunk-2J3STRJT.js} +337 -257
  9. package/chunks/chunk-36J5ZLFE.js +18729 -0
  10. package/chunks/chunk-3DF55BWV.js +49 -0
  11. package/chunks/{chunk-F2P25DJY.js → chunk-3HMO42M2.js} +1417 -316
  12. package/chunks/{chunk-PVJUPIQG.js → chunk-3T5R7P4T.js} +6 -6
  13. package/chunks/{chunk-SU4IHQQI.js → chunk-5H2PXZ7Q.js} +1 -1
  14. package/chunks/chunk-5XOYTAOK.js +1546 -0
  15. package/chunks/{chunk-X2IPO5JO.js → chunk-6TA3CWND.js} +2656 -2960
  16. package/chunks/{chunk-TVS6WVSK.js → chunk-76CLUI54.js} +3 -3
  17. package/chunks/{chunk-KCA35IL3.js → chunk-7PUJI64A.js} +11 -9
  18. package/chunks/{chunk-2NBZZFRG.js → chunk-7TIWL6E5.js} +8 -10
  19. package/chunks/chunk-ABKUI3QB.js +196 -0
  20. package/chunks/{chunk-3LPBJMHB.js → chunk-ACYZMJHC.js} +1 -1
  21. package/chunks/{chunk-H5QURBBK.js → chunk-AL32F74R.js} +1 -1
  22. package/chunks/{chunk-RURJYCWY.js → chunk-B5TIXHCO.js} +1 -1
  23. package/chunks/{chunk-GZA7RGK7.js → chunk-BWUW6ZQR.js} +2052 -1075
  24. package/chunks/{chunk-I43YYHDU.js → chunk-C6ZMPXN2.js} +5 -50
  25. package/chunks/{chunk-ILRMLA6J.js → chunk-D4IBEO2K.js} +1 -1
  26. package/chunks/{chunk-K74DRDC5.js → chunk-DHNYJ2ML.js} +1 -1
  27. package/chunks/{chunk-YKWARO3T.js → chunk-DJGJECBV.js} +93 -20
  28. package/chunks/{chunk-RVJVM5L4.js → chunk-DMDWIW3E.js} +5 -5
  29. package/chunks/{chunk-ZM6ANQZJ.js → chunk-EEP6GBUO.js} +16037 -34417
  30. package/chunks/{chunk-IJ6UPW3H.js → chunk-EIONVEFN.js} +208 -29
  31. package/chunks/chunk-EQBC2ZWL.js +2481 -0
  32. package/chunks/{chunk-3WUPCZGF.js → chunk-FI2H6HV2.js} +1 -1
  33. package/chunks/{chunk-5NFIY2SJ.js → chunk-FI5YL4R2.js} +3 -3
  34. package/chunks/{chunk-XA2IBHPB.js → chunk-FOLTHXRH.js} +1 -1
  35. package/chunks/{chunk-CJRZSWII.js → chunk-GOUGG7IQ.js} +3 -3
  36. package/chunks/{chunk-NBV4I237.js → chunk-GXSECFUE.js} +1 -1
  37. package/chunks/{chunk-BD7WULFS.js → chunk-HDJSHLRM.js} +3 -2
  38. package/chunks/{chunk-5WAHHZBF.js → chunk-HFUOUT2B.js} +61232 -30665
  39. package/chunks/chunk-HJKJ4NQP.js +196 -0
  40. package/chunks/{chunk-UJE4WOQS.js → chunk-I4VIAQHM.js} +1 -1
  41. package/chunks/{chunk-5ETI27Q3.js → chunk-ITEMDJAB.js} +3 -3
  42. package/chunks/chunk-ITHDAIRY.js +57 -0
  43. package/chunks/{chunk-R2XBH476.js → chunk-JCRQV4FE.js} +2 -2
  44. package/chunks/{chunk-SQCBHFWN.js → chunk-LWMEJYCP.js} +2 -2
  45. package/chunks/{chunk-5PFRE522.js → chunk-MY44EZKD.js} +1 -1
  46. package/chunks/{chunk-7UHAXEOV.js → chunk-NBLKIQCW.js} +226 -4
  47. package/chunks/chunk-NO543ZBU.js +90 -0
  48. package/chunks/{chunk-X2ZMSRTP.js → chunk-OFPF26WL.js} +333 -3
  49. package/chunks/{chunk-YERUDEXT.js → chunk-PAE7ZAV6.js} +2780 -1255
  50. package/chunks/{chunk-S2GITRD5.js → chunk-PMAKX6KP.js} +2 -2
  51. package/chunks/{chunk-LMP2T4G2.js → chunk-RBTJYREN.js} +8 -171
  52. package/chunks/{chunk-CGBDEST2.js → chunk-RFK5F45W.js} +1 -1
  53. package/chunks/{chunk-GTED3FSZ.js → chunk-S2WCYEK2.js} +4 -99
  54. package/chunks/{chunk-GXXX7AGH.js → chunk-S3B6HFSM.js} +144 -14
  55. package/chunks/{chunk-WUPN3D37.js → chunk-S4DFH2FJ.js} +26 -1
  56. package/chunks/{chunk-Q7JKIKKF.js → chunk-SEWZ76MN.js} +77 -13
  57. package/chunks/{chunk-6XMFCVJS.js → chunk-TFKY6D7O.js} +1 -1
  58. package/chunks/{chunk-BOBIAHKA.js → chunk-WK6VUCKK.js} +3 -333
  59. package/chunks/{chunk-IXT64DV5.js → chunk-XPDJE537.js} +97 -1
  60. package/chunks/{chunk-BMDG6T7D.js → chunk-YXTV2FRE.js} +113 -22
  61. package/chunks/{chunk-SZDD77KX.js → chunk-YYFODVZG.js} +6 -10
  62. package/chunks/{chunk-JWSOUKFF.js → chunk-ZWAWZU6C.js} +30 -13
  63. package/chunks/{chunk-GV5WXDHY.js → chunk-ZZV56ACK.js} +11 -9
  64. package/chunks/{codex-models-6XVNFRXZ.js → codex-models-KCUIVS3R.js} +9 -8
  65. package/chunks/{commands-FRPOFIO4.js → commands-MPPAADGY.js} +798 -608
  66. package/chunks/dashboard-MN7GZLLX.js +75 -0
  67. package/chunks/{db-BXJNWUYJ.js → db-R2AQSESC.js} +5 -4
  68. package/chunks/{deep-review-GSJEBLCG.js → deep-review-Q6BJKEV4.js} +37 -38
  69. package/chunks/{disclose-OU6Z6GVT.js → disclose-GGULOW27.js} +6 -5
  70. package/chunks/{dist-TQMHMSBZ.js → dist-6RNAVFAY.js} +376 -333
  71. package/chunks/{dist-7KSYDDSG.js → dist-DWN7U5OV.js} +5 -2
  72. package/chunks/{dist-M2X367VW.js → dist-JAZWL3SC.js} +3 -2
  73. package/chunks/{dist-RKLQIXDT.js → dist-OLGNKDB2.js} +4 -3
  74. package/chunks/{dist-LNXGATR2.js → dist-WNAOCQGA.js} +5 -4
  75. package/chunks/eval-runner-WCTTIYN4.js +38 -0
  76. package/chunks/{exploit-agent-Y2P4GFIY.js → exploit-agent-M3KUMZJH.js} +1 -1
  77. package/chunks/{exploit-autoclimb-YRZ3TMS2.js → exploit-autoclimb-QTTWC5WM.js} +1 -1
  78. package/chunks/{exploit-climb-4LEY4SDW.js → exploit-climb-E4KDELTN.js} +4 -3
  79. package/chunks/{fix-RQSIG75B.js → fix-U5FFJD4F.js} +9 -8
  80. package/chunks/{harness-3NVC3DDY.js → harness-FMKIMEH5.js} +5 -4
  81. package/chunks/{http-conformance-U5F6GKYG.js → http-conformance-AXMUOE6C.js} +3 -2
  82. package/chunks/hunt-scan-RYPWRUQD.js +43 -0
  83. package/chunks/{kernel-primitive-T47V3RD3.js → kernel-primitive-CVG2E7MJ.js} +4 -3
  84. package/chunks/{kernel-vm-runner-AEL5E3SV.js → kernel-vm-runner-62KISULQ.js} +4 -3
  85. package/chunks/{local-engine-ZCW4YC6E.js → local-engine-WP3I7K7G.js} +7 -6
  86. package/chunks/managed-operation-642WPTLC.js +59 -0
  87. package/chunks/{memsafety-scan-L2Z7E7TE.js → memsafety-scan-Q2MBZEGJ.js} +1 -2
  88. package/chunks/{native-loop-26X2CHBV.js → native-loop-HC77R5NQ.js} +31 -16
  89. package/chunks/operator-services-E2NONBQS.js +79 -0
  90. package/chunks/orchestrate-Z3DW265M.js +62 -0
  91. package/chunks/{prepare-C3KGMBXT.js → prepare-7DTS6RJT.js} +7 -6
  92. package/chunks/{remote-workflow-runtime-DB52SINR.js → remote-workflow-runtime-6CEVRZXS.js} +4 -3
  93. package/chunks/routing-ITJZBJIU.js +61 -0
  94. package/chunks/{runtime-U66JNSAY.js → runtime-PZJ77QES.js} +9 -8
  95. package/chunks/{runtime-AUBLQUOH.js → runtime-W6JNDQRO.js} +4 -3
  96. package/chunks/{scan-stream-34F3LTPV.js → scan-stream-6VOJTHTR.js} +6 -4
  97. package/chunks/{scope-HSTG63TQ.js → scope-FHXW6EX6.js} +4 -3
  98. package/chunks/service-plugins-CN6Q2NSN.js +63 -0
  99. package/chunks/{session-store-MKAAP3WL.js → session-store-DBBI544Y.js} +8 -5
  100. package/chunks/{variant-candidates-LG767HWH.js → variant-candidates-DPR6DJ3N.js} +9 -8
  101. package/chunks/{web-recon-prepass-NJP6J3E4.js → web-recon-prepass-HWDHDQMN.js} +7 -6
  102. package/chunks/{workflow-runtime-AR627I26.js → workflow-runtime-PLB32XC3.js} +50 -49
  103. package/dashboard/assets/{abnfDiagram-VCTEODGH-Cq149Jpk.js → abnfDiagram-VCTEODGH-6e39CQKz.js} +1 -1
  104. package/dashboard/assets/{arc-CpP-3TRW.js → arc-ClYun86B.js} +1 -1
  105. package/dashboard/assets/architecture-7GRP2DOG-rM-lWo7E.js +1 -0
  106. package/dashboard/assets/architectureDiagram-5GKGNRK7-C9gEGZIU.js +36 -0
  107. package/dashboard/assets/{blockDiagram-I7D4REHJ-CZYkRRDi.js → blockDiagram-I7D4REHJ-Dgh2n5Lf.js} +2 -2
  108. package/dashboard/assets/{c4Diagram-7LVT6UL2-CV7Iu3_Z.js → c4Diagram-7LVT6UL2-CsorW08z.js} +1 -1
  109. package/dashboard/assets/channel-BBlDqIBl.js +1 -0
  110. package/dashboard/assets/{chunk-4HAMMTFA-PKCyW4m-.js → chunk-4HAMMTFA-4_b_LGGQ.js} +1 -1
  111. package/dashboard/assets/{chunk-75Z2AOVW-C5MlFTc_.js → chunk-75Z2AOVW-qzNlKGCp.js} +1 -1
  112. package/dashboard/assets/chunk-DU6HZSFF-SAPICW28.js +127 -0
  113. package/dashboard/assets/{chunk-F27PBJKO-DTAok0qM.js → chunk-F27PBJKO-DlLotIQx.js} +1 -1
  114. package/dashboard/assets/{chunk-FOHPRMQF-DHwB1DNv.js → chunk-FOHPRMQF-COOliuUh.js} +14 -14
  115. package/dashboard/assets/{chunk-GMAD6QVW-CPsr2F33.js → chunk-GMAD6QVW-DNnr65Nb.js} +7 -7
  116. package/dashboard/assets/{chunk-GVQU2GXP-C2AXGf9A.js → chunk-GVQU2GXP-DTwv0VfU.js} +1 -1
  117. package/dashboard/assets/{chunk-IMKFNOWR-DMG6yD_O.js → chunk-IMKFNOWR-B1fk1q_W.js} +1 -1
  118. package/dashboard/assets/{chunk-L3NEJ4N5-BSvwdbXx.js → chunk-L3NEJ4N5-ByVjFIox.js} +1 -1
  119. package/dashboard/assets/{chunk-OSK3NFVY-CfB8V7FU.js → chunk-OSK3NFVY-DUDCzjbh.js} +1 -1
  120. package/dashboard/assets/{chunk-P2QGCYS3-CvmZvq6n.js → chunk-P2QGCYS3-D_D5qEso.js} +1 -1
  121. package/dashboard/assets/{chunk-POPQ4Y6H-D_TvwDxL.js → chunk-POPQ4Y6H-CetM-tVm.js} +1 -1
  122. package/dashboard/assets/{chunk-PWAF6VOD-Da5GnuOY.js → chunk-PWAF6VOD-BcJX4exl.js} +1 -1
  123. package/dashboard/assets/{chunk-SHT3W25Y-CcsMJpR-.js → chunk-SHT3W25Y-BWQql238.js} +1 -1
  124. package/dashboard/assets/{chunk-SVP7TREG-COojjieJ.js → chunk-SVP7TREG-BSLOD1JE.js} +1 -1
  125. package/dashboard/assets/{chunk-TICWLB2K-nBAmJwx6.js → chunk-TICWLB2K-DReOl-g_.js} +2 -2
  126. package/dashboard/assets/{chunk-XXDRQBXY-r5HyhWDv.js → chunk-XXDRQBXY-DSdSMeei.js} +1 -1
  127. package/dashboard/assets/classDiagram-ZZMXUADV-CRH2kB8G.js +1 -0
  128. package/dashboard/assets/classDiagram-v2-VYDZK3BY-CRH2kB8G.js +1 -0
  129. package/dashboard/assets/common-CRRsylCH.js +5 -0
  130. package/dashboard/assets/cose-bilkent-JH36ORCC-fg-DIBqt.js +1 -0
  131. package/dashboard/assets/cynefin-OW5HDTMX-XmrbEIFh.js +1 -0
  132. package/dashboard/assets/{cynefinDiagram-5FMLGOSQ-xodkuQtW.js → cynefinDiagram-5FMLGOSQ-CoQ7QEPl.js} +1 -1
  133. package/dashboard/assets/cytoscape.esm-BbBREfsg.js +321 -0
  134. package/dashboard/assets/dagre-D7JM2Yhv.js +1 -0
  135. package/dashboard/assets/dagre-GXQ25YYZ-qtQtsg6c.js +4 -0
  136. package/dashboard/assets/{diagram-S7CK7UJ4-DNoTMlCO.js → diagram-S7CK7UJ4-B_ts4_58.js} +2 -2
  137. package/dashboard/assets/{diagram-UQ7AKVKN-COccuyew.js → diagram-UQ7AKVKN-DwHbbxFy.js} +1 -1
  138. package/dashboard/assets/{diagram-VSXAHHWV-g6D1tWRb.js → diagram-VSXAHHWV-2Tg_RG89.js} +1 -1
  139. package/dashboard/assets/{diagram-VX7I27RA-DhO4eVIC.js → diagram-VX7I27RA-BFYp-YjF.js} +1 -1
  140. package/dashboard/assets/{diagram-Z3DM3KII-DeOQFexd.js → diagram-Z3DM3KII-DrPiS4V0.js} +1 -1
  141. package/dashboard/assets/{dist-BQYeOQg3.js → dist-cbVssBvx.js} +1 -1
  142. package/dashboard/assets/{ebnfDiagram-PWID7BFC-MtkX2feM.js → ebnfDiagram-PWID7BFC-DCMOZtU2.js} +1 -1
  143. package/dashboard/assets/{erDiagram-RLTQ6QDP-DIWSsoYZ.js → erDiagram-RLTQ6QDP-CW4rUJGU.js} +1 -1
  144. package/dashboard/assets/eventmodeling-NTZA5JFV-C2q-Aaav.js +1 -0
  145. package/dashboard/assets/flowDiagram-HODETNUW-3NOabgG3.js +1 -0
  146. package/dashboard/assets/{ganttDiagram-EL5Y4UJY-DKggkJe0.js → ganttDiagram-EL5Y4UJY-C1AqcwIF.js} +1 -1
  147. package/dashboard/assets/gitGraph-4MIJSDKK-DYR76gtd.js +1 -0
  148. package/dashboard/assets/{gitGraphDiagram-WWUBYQGX-r_iR8Qzo.js → gitGraphDiagram-WWUBYQGX-B7hL98CE.js} +1 -1
  149. package/dashboard/assets/info-A6RAGUB7-TXB43LiH.js +1 -0
  150. package/dashboard/assets/{infoDiagram-27XIBGKW-ClQk7UyQ.js → infoDiagram-27XIBGKW-Dk5dXmh_.js} +1 -1
  151. package/dashboard/assets/{ishikawaDiagram-5VMMS53U-tR7Vziog.js → ishikawaDiagram-5VMMS53U-BQDuNMka.js} +2 -2
  152. package/dashboard/assets/{journeyDiagram-3NMN7TZE-Cpb9IqKL.js → journeyDiagram-3NMN7TZE-DkustddD.js} +1 -1
  153. package/dashboard/assets/{kanban-definition-UXKFOSKX-BzUuKbA9.js → kanban-definition-UXKFOSKX-BW7Ann84.js} +1 -1
  154. package/dashboard/assets/{katex-BdBmVSus.js → katex-nLxf_RlZ.js} +2 -2
  155. package/dashboard/assets/{line-BHY_tSHu.js → line-DVxcLeru.js} +1 -1
  156. package/dashboard/assets/linear-DOM_l9bO.js +1 -0
  157. package/dashboard/assets/mermaid-parser.core-CKg9fDvJ.js +7 -0
  158. package/dashboard/assets/{mermaid.core-D_QsUPU8.js → mermaid.core-DruW_5-Y.js} +9 -9
  159. package/dashboard/assets/{mindmap-definition-YA3MSWOX-CtfLTPPJ.js → mindmap-definition-YA3MSWOX-Di5W5VB3.js} +1 -1
  160. package/dashboard/assets/operations-B-t_k60U.js +194 -0
  161. package/dashboard/assets/operations-D2ZKZFOF.css +1 -0
  162. package/dashboard/assets/packet-AYTQ26CC-BABwqtNu.js +1 -0
  163. package/dashboard/assets/{pegDiagram-XKGWAZYB-C1Dclbzj.js → pegDiagram-XKGWAZYB-Cx4ABT6q.js} +1 -1
  164. package/dashboard/assets/pie-WAS4IAKB-CNdXyrze.js +1 -0
  165. package/dashboard/assets/{pieDiagram-E7YTZNPT-Cd7XwYo5.js → pieDiagram-E7YTZNPT-BilfQbIs.js} +1 -1
  166. package/dashboard/assets/{quadrantDiagram-AXDQQJYC-CaS-GQ4X.js → quadrantDiagram-AXDQQJYC-BVmMQHE5.js} +1 -1
  167. package/dashboard/assets/radar-RG4KPBEZ-fKNmDeoK.js +1 -0
  168. package/dashboard/assets/railroad-74A4TZTK-DhcvDCOh.js +1 -0
  169. package/dashboard/assets/railroad-abnf-HS5TGJTU-BTRVAmf0.js +1 -0
  170. package/dashboard/assets/railroad-ebnf-LZEXJU2U-CwS8fgC_.js +1 -0
  171. package/dashboard/assets/railroad-peg-WCYAUIDC-CXuhXlNp.js +1 -0
  172. package/dashboard/assets/{railroadDiagram-O6MQD6OU-BeesTrqn.js → railroadDiagram-O6MQD6OU-DnBru-jf.js} +1 -1
  173. package/dashboard/assets/{requirementDiagram-BXWQKSXE-IjyK0DhW.js → requirementDiagram-BXWQKSXE-FwdvUZ7_.js} +1 -1
  174. package/dashboard/assets/{sankeyDiagram-P5KCCOFB-DmIluQqo.js → sankeyDiagram-P5KCCOFB-BQvDORai.js} +1 -1
  175. package/dashboard/assets/{sequenceDiagram-WJ2MYXX4-CUp8ZjTc.js → sequenceDiagram-WJ2MYXX4-FWYQLzcY.js} +2 -2
  176. package/dashboard/assets/sizeCapture-INFHLROL-3uHXrFqA.js +1 -0
  177. package/dashboard/assets/src-BwkPhlcp.js +1 -0
  178. package/dashboard/assets/{stateDiagram-D77RDMKH-Dy9TQb8P.js → stateDiagram-D77RDMKH-CjPBd_Sa.js} +1 -1
  179. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-DHmenujm.js +1 -0
  180. package/dashboard/assets/swimlanes-42K2YHIH-SQLNsa4J.js +1 -0
  181. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-D1bH4ETZ.js +8 -0
  182. package/dashboard/assets/{timeline-definition-24CTP7MA-BGdXW-iY.js → timeline-definition-24CTP7MA-BxCf20k1.js} +1 -1
  183. package/dashboard/assets/treeView-Q6P3EWNA-BGLYAyGp.js +1 -0
  184. package/dashboard/assets/treemap-WGGIJYW6-BlzAwncU.js +1 -0
  185. package/dashboard/assets/{vennDiagram-4TSXK5OY-DzKWHJsl.js → vennDiagram-4TSXK5OY-D76RIZLz.js} +1 -1
  186. package/dashboard/assets/wardley-WFR3VGLG-Ba_reiVw.js +1 -0
  187. package/dashboard/assets/{wardleyDiagram-VM6X3IG4-DGsjYmNJ.js → wardleyDiagram-VM6X3IG4-Cux4coOD.js} +1 -1
  188. package/dashboard/assets/{xychartDiagram-S5SC5T6Z-C7_T_tWt.js → xychartDiagram-S5SC5T6Z-Ch5mvnlH.js} +1 -1
  189. package/dashboard/index.html +2 -2
  190. package/package.json +2 -5
  191. package/chunks/chunk-2XGBEH53.js +0 -4304
  192. package/chunks/chunk-4ROZFLSR.js +0 -279
  193. package/chunks/chunk-56UTQKXO.js +0 -56
  194. package/chunks/chunk-BPU6M42R.js +0 -77
  195. package/chunks/chunk-IIBNQTOK.js +0 -1532
  196. package/chunks/chunk-NJLKFC66.js +0 -4790
  197. package/chunks/chunk-OOMBOLAF.js +0 -295
  198. package/chunks/chunk-VIT5ALXF.js +0 -4054
  199. package/chunks/chunk-VU7V2SDW.js +0 -284
  200. package/chunks/chunk-W624J7NF.js +0 -117
  201. package/chunks/chunk-YSQWZ67M.js +0 -6027
  202. package/chunks/dashboard-5HDSNBAU.js +0 -76
  203. package/chunks/eval-runner-A2DIGVP7.js +0 -31
  204. package/chunks/hunt-scan-W246VWJC.js +0 -40
  205. package/chunks/managed-operation-6R2QPPW5.js +0 -60
  206. package/chunks/orchestrate-OBS37FWQ.js +0 -63
  207. package/chunks/run-MU3MFL2Z.js +0 -28242
  208. package/chunks/service-plugins-5B23PWXC.js +0 -64
  209. package/dashboard/assets/architecture-7GRP2DOG-z5EHYkyH.js +0 -1
  210. package/dashboard/assets/architectureDiagram-5GKGNRK7-ewtXpjR_.js +0 -36
  211. package/dashboard/assets/channel-CuYjfiC5.js +0 -1
  212. package/dashboard/assets/chunk-DU6HZSFF-3M37ulcO.js +0 -127
  213. package/dashboard/assets/classDiagram-ZZMXUADV-DCuOrWUV.js +0 -1
  214. package/dashboard/assets/classDiagram-v2-VYDZK3BY-DCuOrWUV.js +0 -1
  215. package/dashboard/assets/common-C6snVPsk.js +0 -5
  216. package/dashboard/assets/cose-bilkent-JH36ORCC-BLGcaZHk.js +0 -1
  217. package/dashboard/assets/cynefin-OW5HDTMX-DbZMK00I.js +0 -1
  218. package/dashboard/assets/cytoscape.esm-CGd-uY3x.js +0 -321
  219. package/dashboard/assets/dagre-GXQ25YYZ-CRk9qfSG.js +0 -4
  220. package/dashboard/assets/dagre-PrKaheQc.js +0 -1
  221. package/dashboard/assets/eventmodeling-NTZA5JFV-D_3ez4Gv.js +0 -1
  222. package/dashboard/assets/flowDiagram-HODETNUW-D2boyYEd.js +0 -1
  223. package/dashboard/assets/gitGraph-4MIJSDKK-DFOQYwXc.js +0 -1
  224. package/dashboard/assets/info-A6RAGUB7-DeednLoB.js +0 -1
  225. package/dashboard/assets/linear-naZZ1pHk.js +0 -1
  226. package/dashboard/assets/mermaid-parser.core-CPvd4cEx.js +0 -7
  227. package/dashboard/assets/operations-BwCzhVnT.js +0 -130
  228. package/dashboard/assets/operations-QjKT0Hwi.css +0 -1
  229. package/dashboard/assets/packet-AYTQ26CC-DDQbkT9I.js +0 -1
  230. package/dashboard/assets/pie-WAS4IAKB-LpU4ULAs.js +0 -1
  231. package/dashboard/assets/radar-RG4KPBEZ-CcxW3NJm.js +0 -1
  232. package/dashboard/assets/railroad-74A4TZTK-9P5Rl8fP.js +0 -1
  233. package/dashboard/assets/railroad-abnf-HS5TGJTU-CSfpwjna.js +0 -1
  234. package/dashboard/assets/railroad-ebnf-LZEXJU2U-D6R5qzr-.js +0 -1
  235. package/dashboard/assets/railroad-peg-WCYAUIDC-DKEX7ITG.js +0 -1
  236. package/dashboard/assets/sizeCapture-INFHLROL-B0uUizjq.js +0 -1
  237. package/dashboard/assets/src-r61wDjcA.js +0 -1
  238. package/dashboard/assets/stateDiagram-v2-MP3YSRHH-CQb0ZtPr.js +0 -1
  239. package/dashboard/assets/swimlanes-42K2YHIH-CZuDV7V5.js +0 -1
  240. package/dashboard/assets/swimlanesDiagram-VR7AAH4N-BxgWMq8X.js +0 -8
  241. package/dashboard/assets/treeView-Q6P3EWNA-DlRrayjM.js +0 -1
  242. package/dashboard/assets/treemap-WGGIJYW6-C6UqLKfI.js +0 -1
  243. package/dashboard/assets/wardley-WFR3VGLG-thmyHKb0.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-GXXX7AGH.js";
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-YKWARO3T.js";
11
+ } from "./chunk-DJGJECBV.js";
12
12
  import {
13
13
  homeStateDir
14
- } from "./chunk-GXXX7AGH.js";
14
+ } from "./chunk-S3B6HFSM.js";
15
15
  import {
16
16
  external_exports
17
- } from "./chunk-VIT5ALXF.js";
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-ZM6ANQZJ.js";
6
+ } from "./chunk-EEP6GBUO.js";
7
7
  import {
8
8
  SecurityWorkflowStore
9
- } from "./chunk-BMDG6T7D.js";
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-VIT5ALXF.js";
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-GXXX7AGH.js";
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
- spinnerGlyph
6
- } from "./chunk-OOMBOLAF.js";
5
+ presentationEventBus
6
+ } from "./chunk-S4DFH2FJ.js";
7
7
  import {
8
8
  loadLayeredSettings
9
- } from "./chunk-X2IPO5JO.js";
9
+ } from "./chunk-6TA3CWND.js";
10
10
  import {
11
+ createPresentationEvent,
11
12
  homeStateDir
12
- } from "./chunk-GXXX7AGH.js";
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
+ };