@poe-platform/safe-bash 0.1.800 → 0.1.802

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 (502) hide show
  1. package/README.md +16 -5
  2. package/dist/image-ast/index.browser.js +122 -76
  3. package/dist/image-ast/index.js +122 -76
  4. package/dist/pdf-ast/index.js +4 -3
  5. package/dist/safe-bash/chunks/chunk-3HQU4OJO.js +13 -0
  6. package/dist/safe-bash/chunks/{chunk-LUOFIVNI.js → chunk-3NDIFSNM.js} +3 -3
  7. package/dist/safe-bash/chunks/{chunk-4SEW2Q6H.js → chunk-3R3AANOR.js} +1 -1
  8. package/dist/safe-bash/chunks/{chunk-K4YMYFRJ.js → chunk-44ALJ4QG.js} +5809 -7424
  9. package/dist/safe-bash/chunks/{chunk-KHMGTPD6.js → chunk-46Z5E5EV.js} +2 -2
  10. package/dist/safe-bash/chunks/chunk-4BSJLKNM.js +14 -0
  11. package/dist/safe-bash/chunks/chunk-4D4N7IU2.js +47 -0
  12. package/dist/safe-bash/chunks/chunk-55YJASTN.js +14 -0
  13. package/dist/safe-bash/chunks/{chunk-XB3B7KMM.js → chunk-6O77NL2S.js} +1 -1
  14. package/dist/safe-bash/chunks/{chunk-T3JTVIEP.js → chunk-6PAVEFT3.js} +1 -1
  15. package/dist/safe-bash/chunks/{chunk-PYVEAFJM.js → chunk-74GHTNJA.js} +3 -2
  16. package/dist/safe-bash/chunks/{chunk-LQHGH25W.js → chunk-7R5BDCG7.js} +1 -1
  17. package/dist/safe-bash/chunks/chunk-7ZBU7KYV.js +14 -0
  18. package/dist/safe-bash/chunks/{chunk-MHZ24KEI.js → chunk-AM5ESLPH.js} +1 -1
  19. package/dist/safe-bash/chunks/{chunk-3L3T6LYV.js → chunk-AUSNDQTJ.js} +1 -1
  20. package/dist/safe-bash/chunks/{chunk-YG5WAHK7.js → chunk-B7TAL7S5.js} +1 -3
  21. package/dist/safe-bash/chunks/{chunk-QVSRRNZT.js → chunk-BJA5XNP6.js} +6 -6
  22. package/dist/safe-bash/chunks/{chunk-K7IQZE7D.js → chunk-C5OWC2TL.js} +1 -1
  23. package/dist/safe-bash/chunks/{chunk-F3RV2F72.js → chunk-CHYGPFVM.js} +1 -1
  24. package/dist/safe-bash/chunks/{chunk-M4CFCXHN.js → chunk-CS4MNM6I.js} +1 -1
  25. package/dist/safe-bash/chunks/{chunk-H6JW3E4F.js → chunk-CTVWDACF.js} +1 -1
  26. package/dist/safe-bash/chunks/{chunk-BHJE5LPZ.js → chunk-D3ANYGMC.js} +1 -1
  27. package/dist/safe-bash/chunks/chunk-DQP3VHSB.js +15 -0
  28. package/dist/safe-bash/chunks/{chunk-NLAW7KDI.js → chunk-E7OYNDGL.js} +1 -1
  29. package/dist/safe-bash/chunks/{chunk-SOZK5JVX.js → chunk-FBUCWVTE.js} +1 -1
  30. package/dist/safe-bash/chunks/chunk-FZE4HW6G.js +11 -0
  31. package/dist/safe-bash/chunks/chunk-GEG3BWGE.js +14 -0
  32. package/dist/safe-bash/chunks/{chunk-HHW7MGS2.js → chunk-GETUOD5D.js} +4 -4
  33. package/dist/safe-bash/chunks/chunk-HBCN24ZA.js +50 -0
  34. package/dist/safe-bash/chunks/chunk-HZ7BWKQ3.js +13 -0
  35. package/dist/safe-bash/chunks/{chunk-JJSTTIEZ.js → chunk-HZAMGT5I.js} +3 -3
  36. package/dist/safe-bash/chunks/{chunk-KCVSVD65.js → chunk-I5HZ4FGE.js} +1 -1
  37. package/dist/safe-bash/chunks/{chunk-KV7PKOHV.js → chunk-IWDICZVK.js} +1 -1
  38. package/dist/safe-bash/chunks/{chunk-I4OAEOP6.js → chunk-J42RIHHJ.js} +1 -1
  39. package/dist/safe-bash/chunks/{chunk-K2VCOJ2B.js → chunk-K6VCD7IY.js} +7 -12
  40. package/dist/safe-bash/chunks/chunk-KDNSPLII.js +83 -0
  41. package/dist/safe-bash/chunks/{chunk-63FXVDGF.js → chunk-LVOBFF4D.js} +1 -1
  42. package/dist/safe-bash/chunks/{chunk-U5NUZPCC.js → chunk-MHMMRCYC.js} +1 -1
  43. package/dist/safe-bash/chunks/{chunk-KW24TAIU.js → chunk-NQCM3TYR.js} +922 -658
  44. package/dist/safe-bash/chunks/{chunk-VYZTG3GV.js → chunk-NZQXYWA3.js} +1 -1
  45. package/dist/safe-bash/chunks/{chunk-TFGRKY43.js → chunk-OQRVVGR6.js} +1 -1
  46. package/dist/safe-bash/chunks/{chunk-PPYM75Z3.js → chunk-OV6IHKO6.js} +2 -2
  47. package/dist/safe-bash/chunks/{chunk-TYD7EVUJ.js → chunk-PH63PLPZ.js} +8 -8
  48. package/dist/safe-bash/chunks/chunk-QGUV42T5.js +44 -0
  49. package/dist/safe-bash/chunks/chunk-R3NAKOED.js +51 -0
  50. package/dist/safe-bash/chunks/chunk-RRR7AQ24.js +38 -0
  51. package/dist/safe-bash/chunks/{chunk-RKKRJ54E.js → chunk-RSTHLAF3.js} +30 -23
  52. package/dist/safe-bash/chunks/{chunk-RMWLWH7Q.js → chunk-SHEMU2Z7.js} +378 -1148
  53. package/dist/safe-bash/chunks/{chunk-7YSRXFEG.js → chunk-TFIBK2GI.js} +1 -1
  54. package/dist/safe-bash/chunks/{chunk-I7L3G3NX.js → chunk-UE5KZDEK.js} +2 -2
  55. package/dist/safe-bash/chunks/{chunk-QU3BVQ53.js → chunk-UTBUUFDM.js} +1 -1
  56. package/dist/safe-bash/chunks/{chunk-6HZYFL3H.js → chunk-VKNVHEX3.js} +2 -7
  57. package/dist/safe-bash/chunks/chunk-VSAJ4OTM.js +962 -0
  58. package/dist/safe-bash/chunks/{chunk-46UISJCK.js → chunk-VTH3MLDU.js} +1 -1
  59. package/dist/safe-bash/chunks/{chunk-JTLSUJ7V.js → chunk-WDLGKIHD.js} +56 -39
  60. package/dist/safe-bash/chunks/chunk-XAQMU6OY.js +14 -0
  61. package/dist/safe-bash/chunks/{chunk-LLZCZ24K.js → chunk-XVOSKJE2.js} +1 -1
  62. package/dist/safe-bash/chunks/chunk-ZVD5IS4V.js +49 -0
  63. package/dist/safe-bash/chunks/{csvkit-QGP3GAOB.js → csvkit-TACDU7FC.js} +3 -3
  64. package/dist/safe-bash/chunks/{ffmpeg-JTVH26MK.js → ffmpeg-WTC3TEFI.js} +2 -2
  65. package/dist/safe-bash/chunks/{gh-I7QX7N5C.js → gh-6WU6PXL4.js} +2 -2
  66. package/dist/safe-bash/chunks/{git-MA7NKYVP.js → git-EFZIGJW4.js} +2 -2
  67. package/dist/safe-bash/chunks/{imagemagick-Y4NPWX2Q.js → imagemagick-EIEYGWPF.js} +2 -2
  68. package/dist/safe-bash/chunks/{implementation-BWDKOVQJ.js → implementation-MLFHUQ5M.js} +2 -2
  69. package/dist/safe-bash/chunks/{mmdc-44PELHDG.js → mmdc-ROQJT5HQ.js} +2 -2
  70. package/dist/safe-bash/chunks/{pdfimages-635TRW4Q.js → pdfimages-DW7LWXFI.js} +2 -2
  71. package/dist/safe-bash/chunks/{pdfinfo-FSDAA2KY.js → pdfinfo-TIP6XLUQ.js} +2 -2
  72. package/dist/safe-bash/chunks/{pdftk-GQ5UH3VG.js → pdftk-DMG22ITZ.js} +2 -2
  73. package/dist/safe-bash/chunks/{pdftoppm-YTXQCAYT.js → pdftoppm-WNDYR72T.js} +2 -2
  74. package/dist/safe-bash/chunks/{pdftotext-CVA2G7FY.js → pdftotext-5IPZ4NI7.js} +2 -2
  75. package/dist/safe-bash/chunks/{qpdf-HZMIFG4A.js → qpdf-TTX2DIUA.js} +2 -2
  76. package/dist/safe-bash/chunks/{sips-E7UBDP33.js → sips-XYS46JPJ.js} +2 -2
  77. package/dist/safe-bash/chunks/{soffice-ELASUWUK.js → soffice-TU73E5KL.js} +2 -2
  78. package/dist/safe-bash/chunks/{wkhtmltopdf-EPO6YCMG.js → wkhtmltopdf-FSZ2CHGE.js} +2 -2
  79. package/dist/safe-bash/command-chunks/{chunk-QBGA56UH.js → chunk-2ELYGJDD.js} +7 -7
  80. package/dist/safe-bash/command-chunks/{chunk-52PCQXD2.js → chunk-2NHI5F5S.js} +2 -1
  81. package/dist/safe-bash/command-chunks/{chunk-HDKVO47G.js → chunk-2SQEIUGJ.js} +3 -3
  82. package/dist/safe-bash/command-chunks/{chunk-5LSGEIZY.js → chunk-3HHCU5YU.js} +4 -3
  83. package/dist/safe-bash/command-chunks/{chunk-TF6OA2GK.js → chunk-3NV3HYT2.js} +1 -1
  84. package/dist/safe-bash/command-chunks/{chunk-2QHG43WJ.js → chunk-4BB2SWJ5.js} +1 -1
  85. package/dist/safe-bash/command-chunks/{chunk-IEXHHNOF.js → chunk-4J5CZ2DP.js} +2 -7
  86. package/dist/safe-bash/command-chunks/{chunk-WDHI3S6Y.js → chunk-4OOUQTQO.js} +1 -1
  87. package/dist/safe-bash/command-chunks/{chunk-YMONDXET.js → chunk-4ZQWGOZB.js} +2 -2
  88. package/dist/safe-bash/command-chunks/{chunk-L6DVEBW3.js → chunk-5BSTFCXG.js} +2 -2
  89. package/dist/safe-bash/command-chunks/{chunk-Q3DII3Q7.js → chunk-5PWJG2UK.js} +1 -1
  90. package/dist/safe-bash/command-chunks/{chunk-JMPP4TCW.js → chunk-5UBXNSFZ.js} +3 -2
  91. package/dist/safe-bash/command-chunks/{chunk-3NG75MOB.js → chunk-67GQA75T.js} +1 -1
  92. package/dist/safe-bash/command-chunks/{chunk-L6SU4S26.js → chunk-6B7WQIKB.js} +0 -7
  93. package/dist/safe-bash/command-chunks/{chunk-V6MSPQLA.js → chunk-6BNTBWIK.js} +4 -39
  94. package/dist/safe-bash/command-chunks/{chunk-SAMH7SQE.js → chunk-6GWJUQAV.js} +237 -145
  95. package/dist/safe-bash/command-chunks/{chunk-JN7WIP6S.js → chunk-6KJ3LPI2.js} +2 -2
  96. package/dist/safe-bash/command-chunks/{chunk-HLDTOR7M.js → chunk-6ZVI7LUY.js} +1 -1
  97. package/dist/safe-bash/command-chunks/{chunk-X6NJC3IC.js → chunk-75OFBY5R.js} +1 -1
  98. package/dist/safe-bash/command-chunks/{chunk-MRW5HD2D.js → chunk-7O3E4LPT.js} +4 -22
  99. package/dist/safe-bash/command-chunks/{chunk-TEVJJPTC.js → chunk-7U7EXOXX.js} +1 -1
  100. package/dist/safe-bash/command-chunks/{chunk-6CYTRQ24.js → chunk-7VTKQUA5.js} +20 -17
  101. package/dist/safe-bash/command-chunks/{chunk-BZPAWTUL.js → chunk-AEF5BA3D.js} +1 -1
  102. package/dist/safe-bash/command-chunks/{chunk-63R3FEZJ.js → chunk-AIV5BF5W.js} +1 -1
  103. package/dist/safe-bash/command-chunks/{chunk-AYUTO323.js → chunk-AKJG2XD3.js} +2 -18
  104. package/dist/safe-bash/command-chunks/{chunk-J34TZVMW.js → chunk-ALDC4XP4.js} +0 -5
  105. package/dist/safe-bash/command-chunks/{chunk-CKXV2CLD.js → chunk-ARBYOQUZ.js} +1 -1
  106. package/dist/safe-bash/command-chunks/{chunk-44AHAB5O.js → chunk-BDSMROQZ.js} +1 -4
  107. package/dist/safe-bash/command-chunks/{chunk-53P53XFM.js → chunk-BPE5INLI.js} +1 -1
  108. package/dist/safe-bash/command-chunks/{chunk-OT4LZMLB.js → chunk-BR73BIOW.js} +1 -1
  109. package/dist/safe-bash/command-chunks/{chunk-WB5SVIG7.js → chunk-C5YYCQHW.js} +498 -88
  110. package/dist/safe-bash/command-chunks/{chunk-EUSPTFAX.js → chunk-CAP7ZJSY.js} +7 -7
  111. package/dist/safe-bash/command-chunks/{chunk-DWFLVJC6.js → chunk-CCRHMAU5.js} +2 -1
  112. package/dist/safe-bash/command-chunks/{chunk-GI4CJED2.js → chunk-CQTRW45K.js} +1 -1
  113. package/dist/safe-bash/command-chunks/{chunk-KKG4BAFZ.js → chunk-DIEPXUM4.js} +6 -0
  114. package/dist/safe-bash/command-chunks/{chunk-QJAFJP2G.js → chunk-DZCY63VJ.js} +12 -10
  115. package/dist/safe-bash/command-chunks/{chunk-QUENU6GM.js → chunk-E55UKBIE.js} +3 -3
  116. package/dist/safe-bash/command-chunks/{chunk-MC3VWLIZ.js → chunk-FDBUV4HJ.js} +28 -19
  117. package/dist/safe-bash/command-chunks/{chunk-7FKUC34S.js → chunk-FPVUD6TH.js} +6 -3
  118. package/dist/safe-bash/command-chunks/{chunk-E2LB7FRT.js → chunk-FXOA7RBK.js} +1 -1
  119. package/dist/safe-bash/command-chunks/{chunk-QWIDNAAK.js → chunk-FZTK4MFI.js} +3 -3
  120. package/dist/safe-bash/command-chunks/{chunk-K543PB3I.js → chunk-G66QUHIZ.js} +6 -35
  121. package/dist/safe-bash/command-chunks/{chunk-YJDV76GL.js → chunk-GFQZCKO6.js} +29 -19
  122. package/dist/safe-bash/command-chunks/{chunk-FKKB5X5V.js → chunk-GOB777HR.js} +1 -1
  123. package/dist/safe-bash/command-chunks/{chunk-IYPAQ7PH.js → chunk-GRBWW4SG.js} +6 -0
  124. package/dist/safe-bash/command-chunks/{chunk-EFANWIHL.js → chunk-GY3BWK7K.js} +1 -0
  125. package/dist/safe-bash/command-chunks/{chunk-PPNBNFAU.js → chunk-GYQ2HAKQ.js} +8 -8
  126. package/dist/safe-bash/command-chunks/{chunk-PJJUYO3R.js → chunk-II77KPZN.js} +2 -2
  127. package/dist/safe-bash/command-chunks/{chunk-VL67NWNS.js → chunk-JDYXY44P.js} +2 -2
  128. package/dist/safe-bash/command-chunks/{chunk-4QJOYXVB.js → chunk-JV7LBUTP.js} +1 -1
  129. package/dist/safe-bash/command-chunks/{chunk-IKS2YXZQ.js → chunk-K67MWWWH.js} +3 -3
  130. package/dist/safe-bash/command-chunks/{chunk-BKCNF5U3.js → chunk-KQLD3AED.js} +2 -2
  131. package/dist/safe-bash/command-chunks/{chunk-UMDIOL3O.js → chunk-KXU3IRUO.js} +1 -1
  132. package/dist/safe-bash/command-chunks/{chunk-QZF3SINC.js → chunk-LAOM65EE.js} +2 -2
  133. package/dist/safe-bash/command-chunks/{chunk-HFII3QYO.js → chunk-LWS62ISU.js} +46 -32
  134. package/dist/safe-bash/command-chunks/{chunk-BZDDAPSV.js → chunk-LWSBAWLT.js} +1 -1
  135. package/dist/safe-bash/command-chunks/{chunk-U6G67N23.js → chunk-MIXBO6U7.js} +18 -5
  136. package/dist/safe-bash/command-chunks/{chunk-JQ74HC37.js → chunk-MQFIPHIQ.js} +23 -50
  137. package/dist/safe-bash/command-chunks/{chunk-ZJBR5Q5I.js → chunk-MSFXC3OC.js} +4 -4
  138. package/dist/safe-bash/command-chunks/{chunk-NI7MKJPN.js → chunk-MTQH74CF.js} +3 -55
  139. package/dist/safe-bash/command-chunks/chunk-MWUZZWXK.js +354 -0
  140. package/dist/safe-bash/command-chunks/{chunk-RVLO4DYT.js → chunk-N4PFUSRM.js} +1 -1
  141. package/dist/safe-bash/command-chunks/{chunk-WBNZ4PRE.js → chunk-NGG2XL56.js} +7 -4
  142. package/dist/safe-bash/command-chunks/{chunk-D4OP2BR3.js → chunk-NKFYQSES.js} +1 -2
  143. package/dist/safe-bash/command-chunks/{chunk-NGWB2YBL.js → chunk-O4JQSB7O.js} +1 -1
  144. package/dist/safe-bash/command-chunks/{chunk-GLOZX57Y.js → chunk-OQKC5ZU2.js} +23 -114
  145. package/dist/safe-bash/command-chunks/{chunk-7L24L4UO.js → chunk-OQU6UT6X.js} +2 -20
  146. package/dist/safe-bash/command-chunks/{chunk-TYCGMRLM.js → chunk-OYYV7ZAF.js} +1 -1
  147. package/dist/safe-bash/command-chunks/{chunk-SVULUDOP.js → chunk-P2N33UMN.js} +20 -81
  148. package/dist/safe-bash/command-chunks/{chunk-Q7Q5GM5S.js → chunk-P5APDEFB.js} +2 -2
  149. package/dist/safe-bash/command-chunks/{chunk-3HXDA5PT.js → chunk-PMBFZXTK.js} +1 -1
  150. package/dist/safe-bash/command-chunks/{chunk-4Y3WVMK4.js → chunk-PV66YWHB.js} +1 -0
  151. package/dist/safe-bash/command-chunks/{chunk-AXK3H4PX.js → chunk-QJ33BHI4.js} +1 -1
  152. package/dist/safe-bash/command-chunks/{chunk-3LSOYLNV.js → chunk-QKFSRZGQ.js} +2 -2
  153. package/dist/safe-bash/command-chunks/{chunk-JZSNU2MY.js → chunk-QKJLP53H.js} +2 -2
  154. package/dist/safe-bash/command-chunks/{chunk-LC2MFKT4.js → chunk-RMWQAAO5.js} +24 -25
  155. package/dist/safe-bash/command-chunks/{chunk-QDTBMSBE.js → chunk-RO62EWX6.js} +2 -2
  156. package/dist/safe-bash/command-chunks/{chunk-4C6QI5BQ.js → chunk-RZZI24ZE.js} +4 -4
  157. package/dist/safe-bash/command-chunks/{chunk-PFAADCB5.js → chunk-SDNBCQ3X.js} +10 -24
  158. package/dist/safe-bash/command-chunks/{chunk-36O5OT7E.js → chunk-T35Y7YQD.js} +1 -1
  159. package/dist/safe-bash/command-chunks/{chunk-6HMX4CQS.js → chunk-TGSNCQSR.js} +44 -16
  160. package/dist/safe-bash/command-chunks/{chunk-5T7CRJHW.js → chunk-TIOCQVUQ.js} +4 -7
  161. package/dist/safe-bash/command-chunks/{chunk-GN2TKLE7.js → chunk-TS65BJHG.js} +5 -5
  162. package/dist/safe-bash/command-chunks/{chunk-7RGB363W.js → chunk-TSCGT46G.js} +3 -2
  163. package/dist/safe-bash/command-chunks/{chunk-KBEURXFF.js → chunk-UN6WS55J.js} +3 -3
  164. package/dist/safe-bash/command-chunks/{chunk-SX2X3IH4.js → chunk-V2V5OCL3.js} +1 -1
  165. package/dist/safe-bash/command-chunks/{chunk-ERYJLO6G.js → chunk-V7A7DRTU.js} +1 -1
  166. package/dist/safe-bash/command-chunks/{chunk-5SHGJ7NO.js → chunk-VA5ZHYYA.js} +73 -33
  167. package/dist/safe-bash/command-chunks/{chunk-XETLEHZP.js → chunk-VPR5LQYX.js} +3 -2
  168. package/dist/safe-bash/command-chunks/{chunk-3DT2YOGW.js → chunk-VSRGNQCP.js} +3 -3
  169. package/dist/safe-bash/command-chunks/{chunk-N2F74VRO.js → chunk-VT6MJBEI.js} +1 -1
  170. package/dist/safe-bash/command-chunks/{chunk-J5SN3PZ3.js → chunk-VXSLJH7G.js} +53 -3
  171. package/dist/safe-bash/command-chunks/{chunk-PXYOWWMV.js → chunk-W7RAD4EW.js} +4 -3
  172. package/dist/safe-bash/command-chunks/{chunk-YGC6OS5O.js → chunk-WECIOOQB.js} +5 -8
  173. package/dist/safe-bash/command-chunks/{chunk-HHP343KT.js → chunk-WTECBRU4.js} +1 -1
  174. package/dist/safe-bash/command-chunks/{chunk-AO6Z5EQ7.js → chunk-WVE64WM2.js} +6 -5
  175. package/dist/safe-bash/command-chunks/{chunk-Z7RVSD5K.js → chunk-WVHONVZ4.js} +1 -1
  176. package/dist/safe-bash/command-chunks/{chunk-HLGKIZ25.js → chunk-X54L3DBL.js} +6 -9
  177. package/dist/safe-bash/command-chunks/{chunk-QNIMV57G.js → chunk-XNLFHHOC.js} +1 -1
  178. package/dist/safe-bash/command-chunks/{chunk-XAFSZDY2.js → chunk-XS72HTMA.js} +11 -0
  179. package/dist/safe-bash/command-chunks/{chunk-KYSPGS33.js → chunk-YIQACGEW.js} +2 -0
  180. package/dist/safe-bash/command-chunks/{chunk-NAY27PXB.js → chunk-YOFC45RK.js} +1 -1
  181. package/dist/safe-bash/command-chunks/{chunk-T5H5UJQ3.js → chunk-YVNGTIJO.js} +1 -1
  182. package/dist/safe-bash/command-chunks/{chunk-QI7LGHJJ.js → chunk-Z45N42QC.js} +21 -6
  183. package/dist/safe-bash/command-chunks/{chunk-67IQF5GC.js → chunk-ZYHTWNAE.js} +23 -9
  184. package/dist/safe-bash/command-chunks/{chunk-STC3LEWJ.js → chunk-ZYXH3B66.js} +5 -3
  185. package/dist/safe-bash/commands/apply-patch/index.browser.js +14 -0
  186. package/dist/safe-bash/commands/archive/index.browser.js +36 -0
  187. package/dist/safe-bash/commands/bytes/compression/index.js +3 -2
  188. package/dist/safe-bash/commands/column/index.browser.js +12 -0
  189. package/dist/safe-bash/commands/copy-preserve.d.ts +1 -0
  190. package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
  191. package/dist/safe-bash/commands/docx/index.browser.js +1 -1
  192. package/dist/safe-bash/commands/du/index.browser.js +14 -0
  193. package/dist/safe-bash/commands/execution.js +19 -13
  194. package/dist/safe-bash/commands/expr/index.browser.js +12 -0
  195. package/dist/safe-bash/commands/factor/index.browser.js +2 -2
  196. package/dist/safe-bash/commands/file/index.browser.js +14 -0
  197. package/dist/safe-bash/commands/filesystem.d.ts +1 -1
  198. package/dist/safe-bash/commands/filesystem.js +26 -15
  199. package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
  200. package/dist/safe-bash/commands/grep-aliases/index.browser.js +14 -0
  201. package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
  202. package/dist/safe-bash/commands/html-to-markdown/index.browser.js +16 -0
  203. package/dist/safe-bash/commands/htmlq/index.d.ts +1 -1
  204. package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
  205. package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
  206. package/dist/safe-bash/commands/llm/index.browser.js +2 -2
  207. package/dist/safe-bash/commands/llm/providers/index.browser.js +1 -1
  208. package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
  209. package/dist/safe-bash/commands/media/index.browser.js +1 -1
  210. package/dist/safe-bash/commands/metadata/index.browser.js +21 -0
  211. package/dist/safe-bash/commands/network/curl.d.ts +1 -1
  212. package/dist/safe-bash/commands/network/curl.js +1 -3
  213. package/dist/safe-bash/commands/network/index.browser.js +4 -4
  214. package/dist/safe-bash/commands/network/platform-portable.d.ts +1 -5
  215. package/dist/safe-bash/commands/network/platform-portable.js +1 -26
  216. package/dist/safe-bash/commands/network/public.d.ts +2 -2
  217. package/dist/safe-bash/commands/network/public.js +2 -2
  218. package/dist/safe-bash/commands/network/transport.js +2 -2
  219. package/dist/safe-bash/commands/network/wget.d.ts +1 -1
  220. package/dist/safe-bash/commands/network/wget.js +1 -3
  221. package/dist/safe-bash/commands/node/filesystem.js +3 -2
  222. package/dist/safe-bash/commands/node/index.browser.js +8 -8
  223. package/dist/safe-bash/commands/node/types.js +1 -1
  224. package/dist/safe-bash/commands/op/index.browser.js +3 -3
  225. package/dist/safe-bash/commands/pr/index.browser.js +2 -2
  226. package/dist/safe-bash/commands/python/host-capabilities.js +31 -14
  227. package/dist/safe-bash/commands/python/index.browser.js +11 -11
  228. package/dist/safe-bash/commands/python/manifest.d.ts +1 -0
  229. package/dist/safe-bash/commands/python/manifest.js +6 -3
  230. package/dist/safe-bash/commands/python/shell-capability.d.ts +1 -0
  231. package/dist/safe-bash/commands/python/shell-capability.js +3 -2
  232. package/dist/safe-bash/commands/python/worker.browser.js +3 -3
  233. package/dist/safe-bash/commands/regex-execution/public.browser.js +8 -6
  234. package/dist/safe-bash/commands/safejs/runtime.js +16 -7
  235. package/dist/safe-bash/commands/split/index.browser.js +14 -0
  236. package/dist/safe-bash/commands/standard.d.ts +1 -0
  237. package/dist/safe-bash/commands/standard.js +2 -1
  238. package/dist/safe-bash/commands/stream-format/index.browser.js +11 -0
  239. package/dist/safe-bash/commands/stream-inspection/index.browser.js +11 -0
  240. package/dist/safe-bash/commands/streams.js +11 -29
  241. package/dist/safe-bash/commands/table-text/index.browser.js +11 -0
  242. package/dist/safe-bash/commands/text.js +269 -496
  243. package/dist/safe-bash/commands/time-env/index.browser.js +15 -0
  244. package/dist/safe-bash/commands/tree/index.browser.js +14 -0
  245. package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
  246. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  247. package/dist/safe-bash/commands/yq/index.browser.js +2 -2
  248. package/dist/safe-bash/core.browser.js +1 -1
  249. package/dist/safe-bash/core.d.ts +6 -1
  250. package/dist/safe-bash/core.js +1 -1
  251. package/dist/safe-bash/full-core.browser.js +308 -295
  252. package/dist/safe-bash/jobs.browser.js +5 -5
  253. package/dist/safe-bash/opt-in/commands/dd/index.js +2 -0
  254. package/dist/safe-bash/opt-in/optional/commands/shuf/options.d.ts +1 -0
  255. package/dist/safe-bash/opt-in/optional/commands/shuf/options.js +2 -4
  256. package/dist/safe-bash/opt-in/optional/commands/shuf/shuf.js +2 -1
  257. package/dist/safe-bash/optional-host.browser.js +15 -15
  258. package/dist/safe-bash/plugins/composition.d.ts +1 -0
  259. package/dist/safe-bash/plugins/composition.js +3 -8
  260. package/dist/safe-bash/plugins/index.browser.js +41 -27
  261. package/dist/safe-bash/registry-entry.browser.js +42 -28
  262. package/dist/safe-bash/search.browser.js +48 -0
  263. package/dist/safe-bash/shell/arrays/bindings.js +1 -1
  264. package/dist/safe-bash/shell/arrays/state.js +4 -0
  265. package/dist/safe-bash/shell/brace-expansion.js +1 -1
  266. package/dist/safe-bash/shell/dynamic-variables.d.ts +10 -0
  267. package/dist/safe-bash/shell/dynamic-variables.js +25 -0
  268. package/dist/safe-bash/shell/parser.js +8 -1
  269. package/dist/safe-bash/shell/runtime.d.ts +4 -13
  270. package/dist/safe-bash/shell/runtime.js +334 -1049
  271. package/dist/safe-bash/shell/shell.js +2 -54
  272. package/dist/safe-bash/shell-entry.browser.js +35 -26
  273. package/dist/safe-bash/trap.browser.js +4 -4
  274. package/dist/safe-bash/yq-browser/index.js +1 -1
  275. package/dist/safe-bash-base-encoding-engine/base.js +2 -2
  276. package/dist/safe-bash-base-encoding-engine/shared.js +1 -1
  277. package/dist/safe-bash-byte-input-engine/index.d.ts +3 -2
  278. package/dist/safe-bash-byte-input-engine/index.js +4 -1
  279. package/dist/safe-bash-checksum-engine/index.js +13 -6
  280. package/dist/safe-bash-command-apply-patch/apply.d.ts +1 -1
  281. package/dist/safe-bash-command-apply-patch/apply.js +4 -3
  282. package/dist/safe-bash-command-apply-patch/index.js +3 -3
  283. package/dist/safe-bash-command-apply-patch/matcher.js +1 -1
  284. package/dist/safe-bash-command-apply-patch/parser.js +1 -1
  285. package/dist/safe-bash-command-awk/awk-inspection.js +2 -2
  286. package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
  287. package/dist/safe-bash-command-awk/awk-syntax.d.ts +1 -1
  288. package/dist/safe-bash-command-awk/awk-syntax.js +2 -2
  289. package/dist/safe-bash-command-awk/awk-values.js +1 -1
  290. package/dist/safe-bash-command-awk/awk.js +5 -5
  291. package/dist/safe-bash-command-awk/index.js +5 -5
  292. package/dist/safe-bash-command-bc/index.d.ts +2 -0
  293. package/dist/safe-bash-command-bc/index.js +123 -92
  294. package/dist/safe-bash-command-column/column.js +5 -5
  295. package/dist/safe-bash-command-column/display.d.ts +1 -1
  296. package/dist/safe-bash-command-column/display.js +1 -1
  297. package/dist/safe-bash-command-column/index.js +5 -5
  298. package/dist/safe-bash-command-column/internal.d.ts +0 -2
  299. package/dist/safe-bash-command-column/internal.js +1 -1
  300. package/dist/safe-bash-command-column/layout.js +4 -4
  301. package/dist/safe-bash-command-column/table.js +2 -2
  302. package/dist/safe-bash-command-comm/comm.js +1 -1
  303. package/dist/safe-bash-command-comm/index.js +1 -1
  304. package/dist/safe-bash-command-csvcut/index.d.ts +1 -0
  305. package/dist/safe-bash-command-csvcut/index.js +1 -0
  306. package/dist/safe-bash-command-csvgrep/index.d.ts +1 -0
  307. package/dist/safe-bash-command-csvgrep/index.js +2 -2
  308. package/dist/safe-bash-command-csvkit/index.js +9 -9
  309. package/dist/safe-bash-command-csvkit/sync-support.js +1 -1
  310. package/dist/safe-bash-command-curl/curl.js +1 -1
  311. package/dist/safe-bash-command-curl/index.js +1 -1
  312. package/dist/safe-bash-command-dd/index.js +2 -0
  313. package/dist/safe-bash-command-diff/diff.js +1 -1
  314. package/dist/safe-bash-command-diff/index.js +1 -1
  315. package/dist/safe-bash-command-exiftool/index.d.ts +1 -0
  316. package/dist/safe-bash-command-fd/index.js +9 -9
  317. package/dist/safe-bash-command-ffmpeg/index.js +31 -8
  318. package/dist/safe-bash-command-file/index.js +1 -1
  319. package/dist/safe-bash-command-file/shared.js +1 -1
  320. package/dist/safe-bash-command-find/find.js +1 -1
  321. package/dist/safe-bash-command-find/index.js +1 -1
  322. package/dist/safe-bash-command-gzip/index.js +3 -2
  323. package/dist/safe-bash-command-hexdump/command.js +4 -4
  324. package/dist/safe-bash-command-hexdump/custom.d.ts +24 -0
  325. package/dist/safe-bash-command-hexdump/index.js +4 -4
  326. package/dist/safe-bash-command-hexdump/internal.d.ts +2 -0
  327. package/dist/safe-bash-command-hexdump/internal.js +1 -1
  328. package/dist/safe-bash-command-hexdump/io.js +2 -2
  329. package/dist/safe-bash-command-hexdump/options.d.ts +3 -0
  330. package/dist/safe-bash-command-hexdump/options.js +2 -2
  331. package/dist/safe-bash-command-hostname/index.js +1 -1
  332. package/dist/safe-bash-command-html-to-markdown/budget.js +1 -1
  333. package/dist/safe-bash-command-html-to-markdown/entities.js +3 -3
  334. package/dist/safe-bash-command-html-to-markdown/index.js +6 -6
  335. package/dist/safe-bash-command-html-to-markdown/input.js +5 -5
  336. package/dist/safe-bash-command-html-to-markdown/parser.d.ts +1 -0
  337. package/dist/safe-bash-command-html-to-markdown/parser.js +4 -4
  338. package/dist/safe-bash-command-html-to-markdown/render.js +5 -5
  339. package/dist/safe-bash-command-html-to-markdown/text.js +2 -2
  340. package/dist/safe-bash-command-htmlq/index.d.ts +1 -0
  341. package/dist/safe-bash-command-htmlq/index.js +27 -9
  342. package/dist/safe-bash-command-iconv/codec.js +1 -1
  343. package/dist/safe-bash-command-iconv/command.js +2 -2
  344. package/dist/safe-bash-command-iconv/index.js +2 -2
  345. package/dist/safe-bash-command-imagemagick/index.js +24 -6
  346. package/dist/safe-bash-command-join/index.js +1 -1
  347. package/dist/safe-bash-command-join/join.js +1 -1
  348. package/dist/safe-bash-command-jq/index.js +1 -1
  349. package/dist/safe-bash-command-jq/jq.js +1 -1
  350. package/dist/safe-bash-command-less/index.js +43 -28
  351. package/dist/safe-bash-command-mmdc/index.d.ts +1 -0
  352. package/dist/safe-bash-command-nl/index.js +1 -1
  353. package/dist/safe-bash-command-nl/nl.js +1 -1
  354. package/dist/safe-bash-command-numfmt/index.js +0 -11
  355. package/dist/safe-bash-command-od/index.js +101 -68
  356. package/dist/safe-bash-command-pandoc/command.js +1 -1
  357. package/dist/safe-bash-command-pandoc/index.js +1 -1
  358. package/dist/safe-bash-command-paste/index.js +1 -1
  359. package/dist/safe-bash-command-paste/paste.js +1 -1
  360. package/dist/safe-bash-command-pathchk/index.js +3 -13
  361. package/dist/safe-bash-command-pdfimages/index.js +27 -11
  362. package/dist/safe-bash-command-pdfinfo/index.js +19 -10
  363. package/dist/safe-bash-command-pdftk/index.js +3 -3
  364. package/dist/safe-bash-command-pdftoppm/index.js +26 -10
  365. package/dist/safe-bash-command-pdftotext/index.js +27 -13
  366. package/dist/safe-bash-command-qpdf/index.js +5 -5
  367. package/dist/safe-bash-command-rg/index.js +1 -1
  368. package/dist/safe-bash-command-rg/rg-command.d.ts +0 -1
  369. package/dist/safe-bash-command-rg/rg-command.js +3 -5
  370. package/dist/safe-bash-command-sed/index.js +1 -1
  371. package/dist/safe-bash-command-sed/sed.js +1 -1
  372. package/dist/safe-bash-command-shuf/options.d.ts +1 -0
  373. package/dist/safe-bash-command-shuf/options.js +2 -4
  374. package/dist/safe-bash-command-shuf/shuf.js +2 -1
  375. package/dist/safe-bash-command-soffice/index.js +20 -16
  376. package/dist/safe-bash-command-split/index.js +3 -3
  377. package/dist/safe-bash-command-split/io.js +1 -1
  378. package/dist/safe-bash-command-split/outputs.js +2 -2
  379. package/dist/safe-bash-command-split/split.js +3 -3
  380. package/dist/safe-bash-command-sqlite3/btree.d.ts +1 -0
  381. package/dist/safe-bash-command-sqlite3/engine.d.ts +6 -0
  382. package/dist/safe-bash-command-sqlite3/index.js +284 -85
  383. package/dist/safe-bash-command-ssconvert/commands.js +9 -9
  384. package/dist/safe-bash-command-ssconvert/core.js +8 -8
  385. package/dist/safe-bash-command-ssconvert/formats/csv.js +9 -9
  386. package/dist/safe-bash-command-ssconvert/formats/ods.js +8 -8
  387. package/dist/safe-bash-command-ssconvert/formats/spreadsheetml.js +2 -2
  388. package/dist/safe-bash-command-ssconvert/formats/xls.js +9 -9
  389. package/dist/safe-bash-command-ssconvert/formats/xlsx.js +8 -8
  390. package/dist/safe-bash-command-ssconvert/index.js +20 -20
  391. package/dist/safe-bash-command-tar/extract.js +1 -1
  392. package/dist/safe-bash-command-tar/index.js +5 -4
  393. package/dist/safe-bash-command-tar/modes.js +2 -2
  394. package/dist/safe-bash-command-tree/arguments.js +3 -3
  395. package/dist/safe-bash-command-tree/charset.js +1 -1
  396. package/dist/safe-bash-command-tree/index.js +4 -4
  397. package/dist/safe-bash-command-tree/io.js +1 -1
  398. package/dist/safe-bash-command-tree/pattern.js +2 -2
  399. package/dist/safe-bash-command-tree/tree.js +4 -4
  400. package/dist/safe-bash-command-unexpand/index.js +1 -1
  401. package/dist/safe-bash-command-unexpand/unexpand.js +1 -1
  402. package/dist/safe-bash-command-unrtf/index.js +14 -7
  403. package/dist/safe-bash-command-unzip/index.js +1 -1
  404. package/dist/safe-bash-command-unzip/unzip.js +1 -1
  405. package/dist/safe-bash-command-wget/index.js +1 -1
  406. package/dist/safe-bash-command-wget/wget.js +1 -1
  407. package/dist/safe-bash-command-xan/argv.d.ts +1 -1
  408. package/dist/safe-bash-command-xan/argv.js +1 -1
  409. package/dist/safe-bash-command-xan/commands.js +5 -3
  410. package/dist/safe-bash-command-xan/csv.d.ts +1 -1
  411. package/dist/safe-bash-command-xan/csv.js +1 -1
  412. package/dist/safe-bash-command-xan/index.js +7 -7
  413. package/dist/safe-bash-command-xan/io.js +3 -3
  414. package/dist/safe-bash-command-xmllint/index.js +1 -1
  415. package/dist/safe-bash-command-xxd/index.js +105 -91
  416. package/dist/safe-bash-command-xz/command.d.ts +2 -0
  417. package/dist/safe-bash-command-xz/index.d.ts +1 -1
  418. package/dist/safe-bash-command-xz/index.js +8 -0
  419. package/dist/safe-bash-command-yq/query.js +1 -1
  420. package/dist/safe-bash-command-zip/index.js +1 -1
  421. package/dist/safe-bash-command-zip/zip.js +1 -1
  422. package/dist/safe-bash-contracts/escaping.js +3 -3
  423. package/dist/safe-bash-contracts/filesystem-output.js +2 -2
  424. package/dist/safe-bash-contracts/index.d.ts +1 -0
  425. package/dist/safe-bash-contracts/index.js +7 -3
  426. package/dist/safe-bash-contracts/io.d.ts +4 -1
  427. package/dist/safe-bash-contracts/io.js +3 -1
  428. package/dist/safe-bash-contracts/managed-abort.d.ts +10 -0
  429. package/dist/safe-bash-contracts/output.js +2 -2
  430. package/dist/safe-bash-diff-engine/index.js +1 -1
  431. package/dist/safe-bash-diff-engine/shared.d.ts +3 -2
  432. package/dist/safe-bash-diff-engine/shared.js +1 -1
  433. package/dist/safe-bash-io-engine/commands/archive/internal.js +5 -23
  434. package/dist/safe-bash-io-engine/commands/search/requirements.js +2 -2
  435. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +33 -44
  436. package/dist/safe-bash-io-engine/internal.js +1 -1
  437. package/dist/safe-bash-io-engine/shell/pattern.js +1 -1
  438. package/dist/safe-bash-io-engine/shell/string-operations.js +1 -1
  439. package/dist/safe-bash-mcp/index.browser.d.ts +155 -35
  440. package/dist/safe-bash-mcp/index.browser.js +416 -0
  441. package/dist/safe-bash-mcp/index.d.ts +54 -2
  442. package/dist/safe-bash-mcp/index.js +286 -90
  443. package/dist/safe-bash-network-engine/aggregate.js +2 -2
  444. package/dist/safe-bash-network-engine/args.js +4 -4
  445. package/dist/safe-bash-network-engine/authorizer.js +1 -1
  446. package/dist/safe-bash-network-engine/body.js +6 -6
  447. package/dist/safe-bash-network-engine/decode.d.ts +1 -1
  448. package/dist/safe-bash-network-engine/decode.js +3 -4
  449. package/dist/safe-bash-network-engine/fetch-transport.js +3 -3
  450. package/dist/safe-bash-network-engine/form-content-type.js +2 -2
  451. package/dist/safe-bash-network-engine/form-headers.js +2 -2
  452. package/dist/safe-bash-network-engine/glob.js +1 -1
  453. package/dist/safe-bash-network-engine/index.js +4 -4
  454. package/dist/safe-bash-network-engine/input.js +6 -6
  455. package/dist/safe-bash-network-engine/output.js +2 -2
  456. package/dist/safe-bash-network-engine/platform-portable.js +3 -3
  457. package/dist/safe-bash-network-engine/shared.js +2 -2
  458. package/dist/safe-bash-network-engine/types.d.ts +7 -2
  459. package/dist/safe-bash-network-engine/types.js +1 -1
  460. package/dist/safe-bash-network-engine/url.js +2 -2
  461. package/dist/safe-bash-query-engine/capture.js +3 -3
  462. package/dist/safe-bash-query-engine/delpaths.js +3 -3
  463. package/dist/safe-bash-query-engine/formats.js +2 -2
  464. package/dist/safe-bash-query-engine/index.js +11 -11
  465. package/dist/safe-bash-query-engine/indices.js +3 -3
  466. package/dist/safe-bash-query-engine/input.js +1 -1
  467. package/dist/safe-bash-query-engine/interpreter.js +9 -9
  468. package/dist/safe-bash-query-engine/parser.js +1 -1
  469. package/dist/safe-bash-query-engine/query-core.js +11 -11
  470. package/dist/safe-bash-query-engine/regex.js +4 -4
  471. package/dist/safe-bash-query-engine/splits.js +5 -5
  472. package/dist/safe-bash-query-engine/values.js +2 -2
  473. package/dist/safe-bash-regex-engine/ere/matcher.js +102 -30
  474. package/dist/safe-bash-regex-engine/execution/bounded-provider.js +55 -67
  475. package/dist/safe-bash-regex-engine/execution/portable.d.ts +0 -1
  476. package/dist/safe-bash-regex-engine/execution/portable.js +6 -10
  477. package/dist/safe-bash-regex-engine/execution/protocol.d.ts +0 -5
  478. package/dist/safe-bash-regex-engine/execution/protocol.js +1 -3
  479. package/dist/safe-bash-regex-engine/index.js +6 -4
  480. package/dist/safe-bash-regex-engine/text/budget.d.ts +1 -1
  481. package/dist/safe-bash-regex-engine/text/budget.js +1 -1
  482. package/dist/safe-bash-regex-engine/text/regex.d.ts +14 -0
  483. package/dist/safe-bash-regex-engine/text/regex.js +6 -4
  484. package/dist/safe-bash-regex-engine/text/replacement-buffer.js +2 -2
  485. package/dist/safe-bash-regex-engine/text/rust-syntax.js +2 -2
  486. package/dist/safe-bash-search-engine/grep.js +189 -227
  487. package/dist/safe-bash-table-text-engine/table-text/internal.d.ts +7 -5
  488. package/dist/safe-bash-table-text-engine/table-text/internal.js +39 -21
  489. package/dist/safe-playwright-cloudflare/browser-trace-budget.js +6 -2
  490. package/dist/spreadsheet-engine/codecs/odf-hyperlinks.js +8 -2
  491. package/dist/spreadsheet-engine/formulas/functions/captured-bessel-phase.js +2 -2
  492. package/dist/spreadsheet-engine/formulas/label-references.js +54 -33
  493. package/dist/spreadsheet-engine/formulas/parser.js +3 -1
  494. package/dist/spreadsheet-engine/formulas/rewriting.js +13 -3
  495. package/dist/spreadsheet-format-xls/biff-data-tables.js +4 -6
  496. package/dist/spreadsheet-format-xls/biff-formulas.js +3 -0
  497. package/dist/spreadsheet-format-xls/biff-label-ranges.js +9 -6
  498. package/dist/spreadsheet-format-xls/biff.js +1 -1
  499. package/dist/xlsx-ast/xlsx.js +8 -5
  500. package/package.json +68 -12
  501. package/dist/safe-bash/command-chunks/chunk-KAGBORIC.js +0 -88
  502. /package/dist/safe-bash/command-chunks/{chunk-BWNXWI33.js → chunk-2LMZVE3I.js} +0 -0
@@ -0,0 +1,962 @@
1
+ import {
2
+ byteLength
3
+ } from "./chunk-D3ANYGMC.js";
4
+ import {
5
+ FsError
6
+ } from "./chunk-VTH3MLDU.js";
7
+ import {
8
+ validatePath,
9
+ yieldTurn
10
+ } from "./chunk-NZQXYWA3.js";
11
+ import {
12
+ writeBytes
13
+ } from "./chunk-74GHTNJA.js";
14
+ import {
15
+ UsageError,
16
+ codeOf,
17
+ diagnostic,
18
+ options,
19
+ pathOf,
20
+ registerDefaultExecutors,
21
+ requireOperands,
22
+ syncCommandEvaluators,
23
+ value
24
+ } from "./chunk-E7OYNDGL.js";
25
+ import {
26
+ init_platform
27
+ } from "./chunk-B7TAL7S5.js";
28
+
29
+ // packages/safe-bash/src/commands/metadata/index.ts
30
+ init_platform();
31
+
32
+ // packages/safe-bash/src/commands/metadata/chmod.ts
33
+ init_platform();
34
+ import { modeChange } from "../../safe-bash-io-engine/commands/mode-change.js";
35
+ import { modeChange as modeChange2 } from "../../safe-bash-io-engine/commands/mode-change.js";
36
+ import { bindConditionalMutation } from "@poe-platform/safe-fs/core";
37
+
38
+ // packages/safe-bash/src/fs/creation-mask.ts
39
+ init_platform();
40
+ import { abortManagedController, addAbortSignalWaiter, builtInDirectContextExecutors, chargeRuntimeFileSystemOperation, combineManagedSignals, createManagedControlController, creationUmask, getRuntimeBackingFileSystem, interruptible, isManagedAbortSignal, isManagedControlSignal, isSyncResolved, notifyAbortSignalWaiters, registerManagedAbortSignal, registerRuntimeBackingFileSystem, removeAbortSignalWaiter, syncCommandEvaluators as syncCommandEvaluators2, toNativeAbortSignal } from "../../safe-bash-contracts/runtime-control.js";
41
+
42
+ // packages/safe-bash/src/commands/gnu-information.ts
43
+ init_platform();
44
+ import { gnuInformation, gnuInformationSync } from "../../safe-bash-io-engine/gnu-information.js";
45
+
46
+ // packages/safe-bash/src/commands/metadata/internal.ts
47
+ init_platform();
48
+ function settings(options2 = {}) {
49
+ const limits = { maxEntries: Infinity, maxDepth: Infinity, maxOutputBytes: Infinity, maxArgumentBytes: Infinity, maxAttempts: Infinity, maxArguments: Infinity, ...options2.limits };
50
+ for (const [key, value2] of Object.entries(limits)) {
51
+ if (value2 !== Infinity && (!Number.isSafeInteger(value2) || value2 < (key === "maxDepth" ? 0 : 1))) throw new RangeError(`Invalid metadata limit: ${key}`);
52
+ }
53
+ const umask = options2.umask ?? 18;
54
+ if (!Number.isInteger(umask) || umask < 0 || umask > 511) throw new RangeError("Invalid metadata umask");
55
+ return { limits, umask };
56
+ }
57
+ var MetadataBudget = class {
58
+ constructor(context, limits) {
59
+ this.context = context;
60
+ this.limits = limits;
61
+ if (context.args.reduce((size, argument) => size + byteLength(argument), 0) > limits.maxArgumentBytes) throw new FsError("EFBIG", { message: "metadata argument limit exceeded" });
62
+ }
63
+ context;
64
+ limits;
65
+ entries = 0;
66
+ outputBytes = 0;
67
+ get remainingEntries() {
68
+ return this.limits.maxEntries - this.entries;
69
+ }
70
+ async step(depth = 0) {
71
+ this.context.signal.throwIfAborted();
72
+ if (++this.entries > this.limits.maxEntries || depth > this.limits.maxDepth) throw new FsError("EFBIG", { message: "metadata traversal limit exceeded" });
73
+ if (this.entries % 128 === 0) await yieldTurn();
74
+ this.context.signal.throwIfAborted();
75
+ }
76
+ async output(text) {
77
+ const bytes = typeof text === "string" ? new TextEncoder().encode(text) : text;
78
+ if (bytes.byteLength > this.limits.maxOutputBytes - this.outputBytes) throw new FsError("EFBIG", { message: "metadata output limit exceeded" });
79
+ this.outputBytes += bytes.byteLength;
80
+ await writeBytes(this.context.stdout, bytes, this.context.signal);
81
+ }
82
+ };
83
+ function metadataCommand(name, handler) {
84
+ return { name, async execute(context) {
85
+ context.signal.throwIfAborted();
86
+ try {
87
+ const infoPromise = gnuInformation(name, context);
88
+ if (infoPromise) {
89
+ const info = await infoPromise;
90
+ if (info) return info;
91
+ }
92
+ return await handler(context);
93
+ } catch (error) {
94
+ context.signal.throwIfAborted();
95
+ await diagnostic(context, error);
96
+ return { exitCode: 1 };
97
+ }
98
+ } };
99
+ }
100
+ function permissionString(mode, type) {
101
+ let text = type === "directory" ? "d" : type === "symlink" ? "l" : type === "character" ? "c" : "-";
102
+ for (const [read, write, execute, special, lower, upper] of [
103
+ [256, 128, 64, 2048, "s", "S"],
104
+ [32, 16, 8, 1024, "s", "S"],
105
+ [4, 2, 1, 512, "t", "T"]
106
+ ]) {
107
+ text += mode & read ? "r" : "-";
108
+ text += mode & write ? "w" : "-";
109
+ text += mode & special ? mode & execute ? lower : upper : mode & execute ? "x" : "-";
110
+ }
111
+ return text;
112
+ }
113
+
114
+ // packages/safe-bash/src/commands/metadata/chmod.ts
115
+ function createChmodCommand(configuration = {}) {
116
+ const configured = settings(configuration);
117
+ const configuredUmask = configuration.umask === void 0 ? void 0 : configured.umask;
118
+ return metadataCommand("chmod", async (context) => {
119
+ const budget = new MetadataBudget(context, configured.limits);
120
+ const modeOptions = [];
121
+ let ended = false, referenceValue = false;
122
+ const args = context.args.flatMap((argument) => {
123
+ if (referenceValue) {
124
+ referenceValue = false;
125
+ return [argument];
126
+ }
127
+ if (argument === "--") ended = true;
128
+ if (ended) return [argument];
129
+ if (argument === "--reference") referenceValue = true;
130
+ if (argument.startsWith("-") && argument.length > 1 && "rwxXstugo01234567".includes(argument[1])) {
131
+ modeOptions.push(argument);
132
+ return [];
133
+ }
134
+ return [argument];
135
+ });
136
+ const parsed = options(args, "Rvcf", { recursive: "R", verbose: "v", changes: "c", silent: "f", quiet: "f", reference: "reference:" });
137
+ const reference = value(parsed, "reference");
138
+ if (reference !== void 0 && modeOptions.length) throw new UsageError("cannot combine mode and --reference options");
139
+ requireOperands(parsed.operands, reference === void 0 && !modeOptions.length ? 2 : 1);
140
+ const mode = modeOptions.length ? modeOptions.join(",") : reference === void 0 ? parsed.operands.shift() : void 0;
141
+ const mask = configuredUmask ?? Reflect.get(context.fs, creationUmask);
142
+ const activeUmask = typeof mask === "number" ? mask : configured.umask;
143
+ const change = mode === void 0 ? void 0 : modeChange(mode, activeUmask);
144
+ const paths = parsed.operands;
145
+ if (context.fs.capabilities.readOnly) throw new FsError("EROFS", { syscall: "chmod" });
146
+ if (!context.fs.chmod || context.fs.capabilities.permissions === false) throw new FsError("ENOTSUP", { syscall: "chmod" });
147
+ const referenceMode = reference === void 0 ? void 0 : (await context.fs.stat(pathOf(context, reference), { signal: context.signal })).mode & 4095;
148
+ let exitCode = 0;
149
+ const visit = async (path, display, depth, top) => {
150
+ await budget.step(depth);
151
+ const link = await context.fs.lstat(path, { signal: context.signal });
152
+ if (link.type === "symlink" && !top) return;
153
+ const target = link.type === "symlink" ? await context.fs.realpath(path, { signal: context.signal }) : path;
154
+ const stat = link.type === "symlink" ? await context.fs.stat(target, { signal: context.signal }) : link;
155
+ const mode2 = referenceMode ?? change(stat);
156
+ if (parsed.flags.has("R") && stat.type === "directory" && await context.fs.realpath(target, { signal: context.signal }) === "/") throw new FsError("EBUSY", { syscall: "chmod", path, message: "refusing recursive mode changes at virtual root" });
157
+ const canonicalTarget = await context.fs.realpath(target, { signal: context.signal });
158
+ const apply = async () => {
159
+ context.signal.throwIfAborted();
160
+ const currentCanonical = await context.fs.realpath(target, { signal: context.signal });
161
+ if (currentCanonical !== canonicalTarget) throw new FsError("EIO", { syscall: "chmod", path, message: "path changed during permission update" });
162
+ const fresh = await context.fs.lstat(canonicalTarget, { signal: context.signal });
163
+ if (fresh.type === "symlink" || fresh.type !== stat.type || stat.ino !== void 0 && fresh.ino !== stat.ino || stat.dev !== void 0 && fresh.dev !== stat.dev) throw new FsError("EIO", { syscall: "chmod", path, message: "path changed during permission update" });
164
+ const capabilities = await context.fs.capabilitiesFor?.(canonicalTarget, { signal: context.signal, conditionalChmod: true }) ?? context.fs.capabilities;
165
+ context.signal.throwIfAborted();
166
+ if (capabilities.conditionalChmod !== true) throw new FsError("ENOTSUP", { syscall: "chmod", path, message: "conditional permission updates are not supported" });
167
+ const parentPath = canonicalTarget.slice(0, canonicalTarget.lastIndexOf("/")) || "/";
168
+ const ancestorPaths = ["/"];
169
+ if (parentPath !== "/") {
170
+ let prefix = "";
171
+ for (const part of parentPath.split("/").filter(Boolean)) {
172
+ prefix += `/${part}`;
173
+ ancestorPaths.push(prefix);
174
+ }
175
+ }
176
+ const ancestors = await Promise.all(ancestorPaths.map(async (entryPath) => ({
177
+ path: entryPath,
178
+ stat: await context.fs.lstat(entryPath, { signal: context.signal })
179
+ })));
180
+ const parentStat = ancestors.at(-1).stat;
181
+ const mutation = { signal: context.signal, parent: parentStat, expected: fresh, ancestors };
182
+ await bindConditionalMutation(
183
+ fresh.identityScope,
184
+ { path: canonicalTarget, parent: parentStat, expected: fresh, ancestors },
185
+ () => context.fs.chmod(canonicalTarget, mode2, mutation)
186
+ );
187
+ if (parsed.flags.has("v") || parsed.flags.has("c") && mode2 !== (stat.mode & 4095)) {
188
+ await budget.output(`mode of '${display}' ${mode2 === (stat.mode & 4095) ? "retained as" : "changed from " + (stat.mode & 4095).toString(8).padStart(4, "0") + " (" + permissionString(stat.mode, stat.type).slice(1) + ") to"} ${mode2.toString(8).padStart(4, "0")} (${permissionString(mode2, stat.type).slice(1)})
189
+ `);
190
+ }
191
+ };
192
+ const deferred = stat.type === "directory" && parsed.flags.has("R") && (stat.mode & 511 & ~mode2) !== 0;
193
+ if (!deferred) await apply();
194
+ if (stat.type === "directory" && parsed.flags.has("R")) {
195
+ const entries = await context.fs.readdir(target, {
196
+ signal: context.signal,
197
+ ...Number.isFinite(budget.remainingEntries) ? { maxEntries: budget.remainingEntries } : {}
198
+ });
199
+ if (entries.length > budget.remainingEntries) throw new FsError("EFBIG", { message: "metadata traversal limit exceeded" });
200
+ for (const entry of entries) {
201
+ if (!entry.name || entry.name === "." || entry.name === ".." || entry.name.includes("/") || entry.name.includes("\0")) throw new FsError("EIO", { message: "invalid directory entry" });
202
+ try {
203
+ await visit(`${target.replace(/\/$/u, "")}/${entry.name}`, `${display.replace(/\/$/u, "")}/${entry.name}`, depth + 1, false);
204
+ } catch (error) {
205
+ context.signal.throwIfAborted();
206
+ if (codeOf(error) === "EFBIG") throw error;
207
+ exitCode = 1;
208
+ if (!parsed.flags.has("f")) await diagnostic(context, error);
209
+ }
210
+ }
211
+ }
212
+ if (deferred) await apply();
213
+ };
214
+ for (const operand of paths) {
215
+ try {
216
+ await visit(pathOf(context, operand), operand, 0, true);
217
+ } catch (error) {
218
+ context.signal.throwIfAborted();
219
+ if (codeOf(error) === "EFBIG") throw error;
220
+ exitCode = 1;
221
+ if (!parsed.flags.has("f")) await diagnostic(context, error);
222
+ }
223
+ }
224
+ return { exitCode };
225
+ });
226
+ }
227
+ function evalSyncChmod(opArgs, umask, chmodNodeSync) {
228
+ const gnuInfo = gnuInformationSync("chmod", opArgs);
229
+ if (gnuInfo !== void 0) return gnuInfo;
230
+ if (!chmodNodeSync) return void 0;
231
+ try {
232
+ const modeOptions = [];
233
+ let ended = false;
234
+ let referenceValue = false;
235
+ const args = [];
236
+ for (const argument of opArgs) {
237
+ if (referenceValue) {
238
+ referenceValue = false;
239
+ args.push(argument);
240
+ continue;
241
+ }
242
+ if (argument === "--") {
243
+ ended = true;
244
+ args.push(argument);
245
+ continue;
246
+ }
247
+ if (!ended && argument === "--reference") {
248
+ referenceValue = true;
249
+ args.push(argument);
250
+ continue;
251
+ }
252
+ if (!ended && argument.startsWith("-") && argument.length > 1 && "rwxXstugo01234567".includes(argument[1])) {
253
+ modeOptions.push(argument);
254
+ continue;
255
+ }
256
+ args.push(argument);
257
+ }
258
+ const parsed = options(args, "vcf", { verbose: "v", changes: "c", silent: "f", quiet: "f", reference: "reference:" });
259
+ const reference = value(parsed, "reference");
260
+ if (reference !== void 0 && modeOptions.length) return void 0;
261
+ const minOps = reference !== void 0 || modeOptions.length ? 1 : 2;
262
+ if (parsed.operands.length < minOps) return void 0;
263
+ let referenceMode;
264
+ if (reference !== void 0) {
265
+ if (!chmodNodeSync(reference, (stat) => {
266
+ referenceMode = stat.mode & 4095;
267
+ return stat.mode;
268
+ }) || referenceMode === void 0) {
269
+ return void 0;
270
+ }
271
+ }
272
+ const mode = modeOptions.length ? modeOptions.join(",") : reference === void 0 ? parsed.operands.shift() : void 0;
273
+ const change = mode === void 0 ? void 0 : modeChange(mode, umask);
274
+ let out = "";
275
+ for (const op of parsed.operands) {
276
+ let line = "";
277
+ const ok = chmodNodeSync(op, (stat) => {
278
+ const oldMode = stat.mode & 4095;
279
+ const nextMode = (referenceMode ?? change(stat)) & 4095;
280
+ if (parsed.flags.has("v") || parsed.flags.has("c") && nextMode !== oldMode) {
281
+ line = `mode of '${op}' ${nextMode === oldMode ? "retained as" : "changed from " + oldMode.toString(8).padStart(4, "0") + " (" + permissionString(oldMode, stat.type).slice(1) + ") to"} ${nextMode.toString(8).padStart(4, "0")} (${permissionString(nextMode, stat.type).slice(1)})
282
+ `;
283
+ }
284
+ return nextMode;
285
+ });
286
+ if (!ok) return void 0;
287
+ out += line;
288
+ }
289
+ return out;
290
+ } catch {
291
+ return void 0;
292
+ }
293
+ }
294
+ syncCommandEvaluators.evalSyncChmod = evalSyncChmod;
295
+
296
+ // packages/safe-bash/src/commands/metadata/stat.ts
297
+ init_platform();
298
+ var syncStatEncoder = new TextEncoder();
299
+ function concatBytes(chunks) {
300
+ if (chunks.length === 0) return new Uint8Array(0);
301
+ if (chunks.length === 1) return chunks[0];
302
+ let total = 0;
303
+ for (let i = 0; i < chunks.length; i++) total += chunks[i].byteLength;
304
+ const out = new Uint8Array(total);
305
+ let offset = 0;
306
+ for (let i = 0; i < chunks.length; i++) {
307
+ const c = chunks[i];
308
+ out.set(c, offset);
309
+ offset += c.byteLength;
310
+ }
311
+ return out;
312
+ }
313
+ function allocSpaces(length) {
314
+ const out = new Uint8Array(length);
315
+ out.fill(32);
316
+ return out;
317
+ }
318
+ function parse(args) {
319
+ let follow = false;
320
+ let filesystem = false;
321
+ let terse = false;
322
+ let format;
323
+ let printf = false;
324
+ let literal = false;
325
+ const paths = [];
326
+ for (let index = 0; index < args.length; index++) {
327
+ const argument = args[index];
328
+ if (literal || argument === "-" || !argument.startsWith("-")) paths.push(argument);
329
+ else if (argument === "--") literal = true;
330
+ else if (argument === "--dereference") follow = true;
331
+ else if (argument === "--cached=default" || argument === "--cached=never" || argument === "--cached=always") continue;
332
+ else if (argument === "--file-system") filesystem = true;
333
+ else if (argument === "--terse") terse = true;
334
+ else if (argument === "--format" || argument.startsWith("--format=") || argument === "--printf" || argument.startsWith("--printf=")) {
335
+ printf = argument.startsWith("--printf");
336
+ format = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : args[++index];
337
+ if (format === void 0) throw new UsageError(`missing format for '${argument}'`);
338
+ } else if (!argument.startsWith("--")) {
339
+ for (let offset = 1; offset < argument.length; offset++) {
340
+ if (argument[offset] === "L") follow = true;
341
+ else if (argument[offset] === "f") filesystem = true;
342
+ else if (argument[offset] === "t") terse = true;
343
+ else if (argument[offset] === "c") {
344
+ format = argument.slice(offset + 1) || args[++index];
345
+ if (format === void 0) throw new UsageError("missing format for '-c'");
346
+ printf = false;
347
+ break;
348
+ } else throw new UsageError(`unrecognized option '${argument}'`);
349
+ }
350
+ } else throw new UsageError(`unrecognized option '${argument}'`);
351
+ }
352
+ requireOperands(paths);
353
+ return { follow, filesystem, terse, format, printf, paths };
354
+ }
355
+ function quoted(text, style) {
356
+ if (style === "literal") return text;
357
+ if (style && !["shell-escape-always", "shell-always"].includes(style)) throw new FsError("ENOTSUP", { message: `unsupported QUOTING_STYLE: ${style}` });
358
+ if (style !== "shell-always" && /[\x00-\x1f\x7f]/u.test(text)) {
359
+ return "$'" + text.replace(/[\\'\x00-\x1f\x7f]/gu, (character) => {
360
+ if (character === "\\" || character === "'") return `\\${character}`;
361
+ if (character === "\n") return "\\n";
362
+ if (character === "\r") return "\\r";
363
+ if (character === " ") return "\\t";
364
+ return `\\${character.charCodeAt(0).toString(8).padStart(3, "0")}`;
365
+ }) + "'";
366
+ }
367
+ return `'${text.replace(/'/gu, "'\\''")}'`;
368
+ }
369
+ function available(value2, field) {
370
+ if (value2 === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: `filesystem does not expose ${field}` });
371
+ if (!Number.isFinite(value2)) throw new FsError("EIO", { syscall: "stat", message: `invalid ${field}` });
372
+ return value2;
373
+ }
374
+ function timestamp(milliseconds) {
375
+ const value2 = available(milliseconds, "timestamp");
376
+ if (Math.abs(value2) > 864e13) throw new FsError("EIO", { message: "invalid filesystem timestamp" });
377
+ const [coefficient = "0", exponent = "0"] = Math.abs(value2).toString().split("e");
378
+ const [integer = "0", fraction = ""] = coefficient.split(".");
379
+ const digits = BigInt(integer + fraction);
380
+ const power = Number(exponent) - fraction.length + 6;
381
+ const divisor = power < 0 ? 10n ** BigInt(-power) : 1n;
382
+ const magnitude = power < 0 ? (digits + divisor / 2n) / divisor : digits * 10n ** BigInt(power);
383
+ const nanoseconds = value2 < 0 ? -magnitude : magnitude;
384
+ const remainder = (nanoseconds % 1000000000n + 1000000000n) % 1000000000n;
385
+ const seconds = (nanoseconds - remainder) / 1000000000n;
386
+ const date = new Date(Number(seconds * 1000n));
387
+ if (Number.isNaN(date.getTime())) throw new FsError("EIO", { message: "invalid filesystem timestamp" });
388
+ return `${date.toISOString().replace("T", " ").replace(/\.\d{3}Z$/u, `.${remainder.toString().padStart(9, "0")}`)} +0000`;
389
+ }
390
+ function epoch(milliseconds, precision) {
391
+ const value2 = available(milliseconds, "timestamp");
392
+ const [coefficient = "0", exponent = "0"] = Math.abs(value2).toString().split("e");
393
+ const [integer = "0", decimal = ""] = coefficient.split(".");
394
+ const digits = BigInt(integer + decimal);
395
+ const places = Math.min(precision, 9);
396
+ const scale = 10n ** BigInt(places);
397
+ const power = Number(exponent) - decimal.length - 3 + places;
398
+ const absolute = power < 0 ? digits / 10n ** BigInt(-power) : digits * 10n ** BigInt(power);
399
+ const fraction = absolute % scale;
400
+ const seconds = value2 < 0 && fraction === 0n ? -Math.floor(value2 / 1e3) : absolute / scale;
401
+ const suffix = precision ? "." + fraction.toString().padStart(places, "0") + "0".repeat(precision - places) : "";
402
+ return `${value2 < 0 ? "-" : ""}${seconds}${suffix}`;
403
+ }
404
+ function directive(format, start) {
405
+ let index = start + 1;
406
+ const flagsStart = index;
407
+ while (index < format.length && "-+ #0".includes(format[index])) index++;
408
+ const flags = format.slice(flagsStart, index);
409
+ const widthStart = index;
410
+ while (index < format.length && format[index] >= "0" && format[index] <= "9") index++;
411
+ const width = format.slice(widthStart, index);
412
+ let precision;
413
+ if (format[index] === ".") {
414
+ const precisionStart = ++index;
415
+ while (index < format.length && format[index] >= "0" && format[index] <= "9") index++;
416
+ precision = format.slice(precisionStart, index);
417
+ }
418
+ const code = format[index];
419
+ if (code === void 0) throw new UsageError("invalid stat format directive");
420
+ const codePoint = code.charCodeAt(0);
421
+ if (code !== "%" && !(codePoint >= 65 && codePoint <= 90) && !(codePoint >= 97 && codePoint <= 122)) {
422
+ throw new UsageError("invalid stat format directive");
423
+ }
424
+ return { code, flags, length: index + 1 - start, precision, width };
425
+ }
426
+ function formatField(text, code, flags, width, precision, numeric, epoch2) {
427
+ if (numeric) {
428
+ const nonzero = !/^0+$/u.test(text);
429
+ if (!epoch2 && precision !== void 0) text = precision === 0 && !nonzero ? "" : text.padStart(precision, "0");
430
+ if (flags.includes("#")) text = code === "a" ? text.startsWith("0") ? text : `0${text}` : (code === "f" || code === "D") && nonzero ? `0x${text}` : text;
431
+ if (epoch2 && !text.startsWith("-") && (flags.includes("+") || flags.includes(" "))) text = `${flags.includes("+") ? "+" : " "}${text}`;
432
+ }
433
+ if (epoch2 && precision) {
434
+ const decimal = text.indexOf(".");
435
+ const integerWidth = width > precision + 2 && !flags.includes("-") ? width - precision - 1 : 0;
436
+ const integer = formatField(text.slice(0, decimal), code, flags, integerWidth, void 0, true, false);
437
+ const trailingWidth = integer.length < width && 1 < width - integer.length ? Math.abs(width - integer.length - 1 - precision) : 0;
438
+ return concatBytes([integer, syncStatEncoder.encode(text.slice(decimal)), allocSpaces(trailingWidth)]);
439
+ }
440
+ const encoded = syncStatEncoder.encode(text);
441
+ const bytes = !numeric && precision !== void 0 ? encoded.subarray(0, precision) : encoded;
442
+ const padding = Math.max(0, width - bytes.length);
443
+ if (flags.includes("-")) return concatBytes([bytes, allocSpaces(padding)]);
444
+ if (numeric && flags.includes("0") && (epoch2 || precision === void 0) && padding) {
445
+ const prefix = /^[+ -]|^0x/u.exec(text)?.[0] ?? "";
446
+ return syncStatEncoder.encode(prefix + "0".repeat(padding) + text.slice(prefix.length));
447
+ }
448
+ return concatBytes([allocSpaces(padding), bytes]);
449
+ }
450
+ async function render(context, path, name, stat, format, escapes, limit, filesystem, terse) {
451
+ const chunks = [];
452
+ let bytes = 0;
453
+ const append = (text) => {
454
+ const chunk = typeof text === "string" ? new TextEncoder().encode(text) : text;
455
+ bytes += chunk.byteLength;
456
+ if (bytes > limit) throw new FsError("EFBIG", { message: "stat format output limit exceeded" });
457
+ chunks.push(chunk);
458
+ };
459
+ for (let index = 0; index < format.length; ) {
460
+ context.signal.throwIfAborted();
461
+ if (escapes && format[index] === "\\") {
462
+ const named = { a: "\x07", b: "\b", e: "\x1B", f: "\f", n: "\n", r: "\r", t: " ", v: "\v", "\\": "\\", '"': '"' };
463
+ const code2 = format[index + 1] ?? "";
464
+ if (Object.hasOwn(named, code2)) {
465
+ append(named[code2]);
466
+ index += 2;
467
+ continue;
468
+ }
469
+ const radix = code2 === "x" ? 16 : 8;
470
+ const start = index + (radix === 16 ? 2 : 1);
471
+ const end = Math.min(format.length, start + (radix === 16 ? 2 : 3));
472
+ let offset = start;
473
+ let value2 = 0;
474
+ while (offset < end) {
475
+ const digit = "0123456789abcdef".indexOf(format[offset].toLowerCase());
476
+ if (digit < 0 || digit >= radix) break;
477
+ value2 = value2 * radix + digit;
478
+ offset++;
479
+ }
480
+ if (offset === start) {
481
+ append(format[index++]);
482
+ continue;
483
+ }
484
+ append(Uint8Array.of(value2));
485
+ index = offset;
486
+ continue;
487
+ }
488
+ if (format[index] !== "%") {
489
+ const point = String.fromCodePoint(format.codePointAt(index));
490
+ append(point);
491
+ index += point.length;
492
+ continue;
493
+ }
494
+ const parsed = directive(format, index);
495
+ index += parsed.length;
496
+ const { code, flags } = parsed;
497
+ const width = Number(parsed.width || 0);
498
+ if (!Number.isSafeInteger(width) || width > limit) throw new FsError("EFBIG", { message: "stat format width limit exceeded" });
499
+ const epochCode = !filesystem && ["X", "Y", "Z", "W"].includes(code);
500
+ const precision = parsed.precision === void 0 ? void 0 : Number(parsed.precision || (epochCode ? 9 : 0));
501
+ if (precision !== void 0 && (!Number.isSafeInteger(precision) || precision > limit)) throw new FsError("EFBIG", { message: "stat format precision limit exceeded" });
502
+ if (code === "%" && parsed.length !== 2) throw new UsageError("invalid stat format directive");
503
+ if (filesystem) {
504
+ let text2;
505
+ if (code === "n") text2 = name;
506
+ else if (code === "%") text2 = "%";
507
+ else if (code === "T") {
508
+ if (stat.filesystemType === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: "filesystem does not expose its type" });
509
+ if (typeof stat.filesystemType !== "string" || stat.filesystemType.length === 0) throw new FsError("EIO", { syscall: "stat", message: "invalid filesystem type" });
510
+ text2 = stat.filesystemType;
511
+ } else throw new FsError("ENOTSUP", { message: `unsupported filesystem stat format: %${code}` });
512
+ append(formatField(text2, code, flags, width, precision, false, false));
513
+ continue;
514
+ }
515
+ let text;
516
+ let linkText;
517
+ let numeric = false;
518
+ if (["a", "A", "f"].includes(code)) available(stat.mode, "mode");
519
+ const times = { X: stat.atimeMs, Y: stat.mtimeMs, Z: stat.ctimeMs, W: stat.birthtimeMs };
520
+ if (Object.hasOwn(times, code)) {
521
+ text = terse && times[code] === void 0 ? "?" : epoch(available(times[code], code), precision ?? 0);
522
+ numeric = text !== "?";
523
+ } else if (code === "n") text = name;
524
+ else if (code === "N") {
525
+ text = quoted(name, context.env.QUOTING_STYLE);
526
+ if (stat.type === "symlink") {
527
+ if (!context.fs.readlink) throw new FsError("ENOTSUP", { syscall: "readlink", path });
528
+ linkText = quoted(await context.fs.readlink(path, { signal: context.signal }), context.env.QUOTING_STYLE);
529
+ }
530
+ } else if (code === "%") text = "%";
531
+ else if (code === "A") text = permissionString(stat.mode, stat.type);
532
+ else if (code === "U") text = available(stat.uid, "u") === 0 ? "root" : String(stat.uid);
533
+ else if (code === "G") text = available(stat.gid, "g") === 0 ? "root" : String(stat.gid);
534
+ else if (code === "m") text = "/";
535
+ else if (code === "F") text = stat.type === "directory" ? "directory" : stat.type === "symlink" ? "symbolic link" : stat.type === "character" ? "character special file" : stat.size === 0 ? "regular empty file" : "regular file";
536
+ else if (["x", "y", "z", "w"].includes(code)) {
537
+ const value2 = times[code.toUpperCase()];
538
+ text = code === "w" && value2 === void 0 ? "-" : timestamp(available(value2, code));
539
+ } else {
540
+ const fields = {
541
+ s: stat.size,
542
+ a: stat.mode & 4095,
543
+ f: stat.mode,
544
+ i: stat.ino,
545
+ h: stat.nlink,
546
+ u: stat.uid,
547
+ g: stat.gid,
548
+ d: stat.dev,
549
+ D: stat.dev,
550
+ B: 512,
551
+ b: stat.allocatedBytes === void 0 ? void 0 : Math.ceil(stat.allocatedBytes / 512),
552
+ o: stat.ioBlockSize,
553
+ t: stat.rdevMajor,
554
+ T: stat.rdevMinor
555
+ };
556
+ if (!Object.hasOwn(fields, code)) throw new FsError("ENOTSUP", { message: `unsupported stat format: %${code}` });
557
+ const value2 = fields[code];
558
+ text = terse && value2 === void 0 ? "?" : available(value2, code).toString(code === "a" ? 8 : ["f", "D", "t", "T"].includes(code) ? 16 : 10);
559
+ numeric = text !== "?";
560
+ }
561
+ append(formatField(text, code, flags, width, precision, numeric, epochCode));
562
+ if (linkText !== void 0) {
563
+ append(" -> ");
564
+ append(formatField(linkText, code, flags, width, precision, false, false));
565
+ }
566
+ }
567
+ return concatBytes(chunks);
568
+ }
569
+ function createStatCommand(configuration = {}) {
570
+ const configured = settings(configuration);
571
+ return metadataCommand("stat", async (context) => {
572
+ const budget = new MetadataBudget(context, configured.limits);
573
+ const parsed = parse(context.args);
574
+ let exitCode = 0;
575
+ for (const name of parsed.paths) {
576
+ await budget.step();
577
+ try {
578
+ const path = pathOf(context, name);
579
+ const stat = await context.fs[parsed.follow || parsed.filesystem ? "stat" : "lstat"](path, { signal: context.signal });
580
+ const terse = parsed.terse && parsed.format === void 0;
581
+ if (terse && parsed.filesystem) throw new FsError("ENOTSUP", { message: "filesystem terse stat is unsupported" });
582
+ const format = parsed.format ?? (parsed.filesystem ? " File: %n\n Type: %T" : terse ? "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" : " File: %N\n Size: %s Type: %F\n Mode: %a (%A)\nAccess: %x\nModify: %y\nChange: %z\n Birth: %w");
583
+ const text = await render(context, path, name, stat, format, parsed.printf, configured.limits.maxOutputBytes, parsed.filesystem, terse);
584
+ await budget.output(parsed.printf ? text : concatBytes([text, Uint8Array.of(10)]));
585
+ } catch (error) {
586
+ context.signal.throwIfAborted();
587
+ if (codeOf(error) === "EFBIG") throw error;
588
+ await diagnostic(context, error);
589
+ exitCode = 1;
590
+ }
591
+ }
592
+ return { exitCode };
593
+ });
594
+ }
595
+ var syncStatDecoder = new TextDecoder("utf-8", { fatal: false });
596
+ function renderSync(path, name, stat, format, escapes, limit, filesystem, terse, quotingStyle) {
597
+ const chunks = [];
598
+ let bytes = 0;
599
+ const append = (text) => {
600
+ const chunk = typeof text === "string" ? new TextEncoder().encode(text) : text;
601
+ bytes += chunk.byteLength;
602
+ if (bytes > limit) throw new FsError("EFBIG", { message: "stat format output limit exceeded" });
603
+ chunks.push(chunk);
604
+ };
605
+ for (let index = 0; index < format.length; ) {
606
+ if (escapes && format[index] === "\\") {
607
+ const named = { a: "\x07", b: "\b", e: "\x1B", f: "\f", n: "\n", r: "\r", t: " ", v: "\v", "\\": "\\", '"': '"' };
608
+ const code2 = format[index + 1] ?? "";
609
+ if (Object.hasOwn(named, code2)) {
610
+ append(named[code2]);
611
+ index += 2;
612
+ continue;
613
+ }
614
+ const radix = code2 === "x" ? 16 : 8;
615
+ const start = index + (radix === 16 ? 2 : 1);
616
+ const end = Math.min(format.length, start + (radix === 16 ? 2 : 3));
617
+ let offset = start;
618
+ let value2 = 0;
619
+ while (offset < end) {
620
+ const digit = "0123456789abcdef".indexOf(format[offset].toLowerCase());
621
+ if (digit < 0 || digit >= radix) break;
622
+ value2 = value2 * radix + digit;
623
+ offset++;
624
+ }
625
+ if (offset === start) {
626
+ append(format[index++]);
627
+ continue;
628
+ }
629
+ append(Uint8Array.of(value2));
630
+ index = offset;
631
+ continue;
632
+ }
633
+ if (format[index] !== "%") {
634
+ const point = String.fromCodePoint(format.codePointAt(index));
635
+ append(point);
636
+ index += point.length;
637
+ continue;
638
+ }
639
+ const parsed = directive(format, index);
640
+ index += parsed.length;
641
+ const { code, flags } = parsed;
642
+ const width = Number(parsed.width || 0);
643
+ if (!Number.isSafeInteger(width) || width > limit) throw new FsError("EFBIG", { message: "stat format width limit exceeded" });
644
+ const epochCode = !filesystem && ["X", "Y", "Z", "W"].includes(code);
645
+ const precision = parsed.precision === void 0 ? void 0 : Number(parsed.precision || (epochCode ? 9 : 0));
646
+ if (precision !== void 0 && (!Number.isSafeInteger(precision) || precision > limit)) throw new FsError("EFBIG", { message: "stat format precision limit exceeded" });
647
+ if (code === "%" && parsed.length !== 2) throw new UsageError("invalid stat format directive");
648
+ if (filesystem) {
649
+ let text2;
650
+ if (code === "n") text2 = name;
651
+ else if (code === "%") text2 = "%";
652
+ else if (code === "T") {
653
+ if (stat.filesystemType === void 0) throw new FsError("ENOTSUP", { syscall: "stat", message: "filesystem does not expose its type" });
654
+ if (typeof stat.filesystemType !== "string" || stat.filesystemType.length === 0) throw new FsError("EIO", { syscall: "stat", message: "invalid filesystem type" });
655
+ text2 = stat.filesystemType;
656
+ } else throw new FsError("ENOTSUP", { message: `unsupported filesystem stat format: %${code}` });
657
+ append(formatField(text2, code, flags, width, precision, false, false));
658
+ continue;
659
+ }
660
+ let text;
661
+ let linkText;
662
+ let numeric = false;
663
+ if (["a", "A", "f"].includes(code)) available(stat.mode, "mode");
664
+ const times = { X: stat.atimeMs, Y: stat.mtimeMs, Z: stat.ctimeMs, W: stat.birthtimeMs };
665
+ if (Object.hasOwn(times, code)) {
666
+ text = terse && times[code] === void 0 ? "?" : epoch(available(times[code], code), precision ?? 0);
667
+ numeric = text !== "?";
668
+ } else if (code === "n") text = name;
669
+ else if (code === "N") {
670
+ text = quoted(name, quotingStyle);
671
+ if (stat.type === "symlink") {
672
+ if (stat.target === void 0) throw new FsError("ENOTSUP", { syscall: "readlink", path });
673
+ linkText = quoted(stat.target, quotingStyle);
674
+ }
675
+ } else if (code === "%") text = "%";
676
+ else if (code === "A") text = permissionString(stat.mode, stat.type);
677
+ else if (code === "U") text = available(stat.uid, "u") === 0 ? "root" : String(stat.uid);
678
+ else if (code === "G") text = available(stat.gid, "g") === 0 ? "root" : String(stat.gid);
679
+ else if (code === "m") text = "/";
680
+ else if (code === "F") text = stat.type === "directory" ? "directory" : stat.type === "symlink" ? "symbolic link" : stat.type === "character" ? "character special file" : stat.size === 0 ? "regular empty file" : "regular file";
681
+ else if (["x", "y", "z", "w"].includes(code)) {
682
+ const value2 = times[code.toUpperCase()];
683
+ text = code === "w" && value2 === void 0 ? "-" : timestamp(available(value2, code));
684
+ } else {
685
+ const fields = {
686
+ s: stat.size,
687
+ a: stat.mode & 4095,
688
+ f: stat.mode,
689
+ i: stat.ino,
690
+ h: stat.nlink,
691
+ u: stat.uid,
692
+ g: stat.gid,
693
+ d: stat.dev,
694
+ D: stat.dev,
695
+ B: 512,
696
+ b: stat.allocatedBytes === void 0 ? void 0 : Math.ceil(stat.allocatedBytes / 512),
697
+ o: stat.ioBlockSize,
698
+ t: stat.rdevMajor,
699
+ T: stat.rdevMinor
700
+ };
701
+ if (!Object.hasOwn(fields, code)) throw new FsError("ENOTSUP", { message: `unsupported stat format: %${code}` });
702
+ const value2 = fields[code];
703
+ text = terse && value2 === void 0 ? "?" : available(value2, code).toString(code === "a" ? 8 : ["f", "D", "t", "T"].includes(code) ? 16 : 10);
704
+ numeric = text !== "?";
705
+ }
706
+ append(formatField(text, code, flags, width, precision, numeric, epochCode));
707
+ if (linkText !== void 0) {
708
+ append(" -> ");
709
+ append(formatField(linkText, code, flags, width, precision, false, false));
710
+ }
711
+ }
712
+ return concatBytes(chunks);
713
+ }
714
+ function resolveSyncStatPath(cwd, target) {
715
+ const raw = target.startsWith("/") ? target : cwd.endsWith("/") ? cwd + target : `${cwd}/${target}`;
716
+ const parts = raw.split("/");
717
+ const stack = [];
718
+ for (const part of parts) {
719
+ if (!part || part === ".") continue;
720
+ if (part === "..") stack.pop();
721
+ else stack.push(part);
722
+ }
723
+ return "/" + stack.join("/");
724
+ }
725
+ function evalSyncStat(args, cwd, quotingStyle, inspectStat) {
726
+ let parsed;
727
+ try {
728
+ parsed = parse(args);
729
+ } catch {
730
+ return void 0;
731
+ }
732
+ const outChunks = [];
733
+ for (const name of parsed.paths) {
734
+ if (!name) return void 0;
735
+ const abs = resolveSyncStatPath(cwd, name);
736
+ const stat = inspectStat(abs, parsed.follow || parsed.filesystem);
737
+ if (!stat) return void 0;
738
+ const terse = parsed.terse && parsed.format === void 0;
739
+ if (terse && parsed.filesystem) return void 0;
740
+ const format = parsed.format ?? (parsed.filesystem ? " File: %n\n Type: %T" : terse ? "%n %s %b %f %u %g %D %i %h %t %T %X %Y %Z %W %o" : " File: %N\n Size: %s Type: %F\n Mode: %a (%A)\nAccess: %x\nModify: %y\nChange: %z\n Birth: %w");
741
+ try {
742
+ const rendered = renderSync(abs, name, stat, format, parsed.printf, 262144, parsed.filesystem, terse, quotingStyle);
743
+ outChunks.push(parsed.printf ? rendered : concatBytes([rendered, Uint8Array.of(10)]));
744
+ } catch {
745
+ return void 0;
746
+ }
747
+ }
748
+ return syncStatDecoder.decode(concatBytes(outChunks));
749
+ }
750
+
751
+ // packages/safe-bash/src/commands/metadata/mktemp.ts
752
+ init_platform();
753
+
754
+ // packages/safe-bash/src/commands/portable-random.ts
755
+ init_platform();
756
+ function randomInteger(maximum) {
757
+ const range = 4294967296;
758
+ if (!Number.isSafeInteger(maximum) || maximum < 1 || maximum > range) {
759
+ throw new RangeError("Random integer maximum must be an integer from 1 to 2^32");
760
+ }
761
+ const limit = Math.floor(range / maximum) * maximum;
762
+ const sample = new Uint32Array(1);
763
+ do {
764
+ globalThis.crypto.getRandomValues(sample);
765
+ } while (sample[0] >= limit);
766
+ return sample[0] % maximum;
767
+ }
768
+
769
+ // packages/safe-bash/src/commands/metadata/mktemp.ts
770
+ var mktempEncoder = new TextEncoder();
771
+ function parse2(args) {
772
+ let directory = false;
773
+ let dryRun = false;
774
+ let quiet = false;
775
+ let useTmpdir = false;
776
+ let deprecatedTmpdir = false;
777
+ let tmpdir;
778
+ let suffix;
779
+ let literal = false;
780
+ const operands = [];
781
+ for (let index = 0; index < args.length; index++) {
782
+ const argument = args[index];
783
+ if (literal || argument === "-" || !argument.startsWith("-")) operands.push(argument);
784
+ else if (argument === "--") literal = true;
785
+ else if (argument === "--directory") directory = true;
786
+ else if (argument === "--dry-run") dryRun = true;
787
+ else if (argument === "--quiet") quiet = true;
788
+ else if (argument === "--tmpdir" || argument.startsWith("--tmpdir=")) {
789
+ useTmpdir = true;
790
+ tmpdir = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : "";
791
+ } else if (argument === "--suffix" || argument.startsWith("--suffix=")) {
792
+ suffix = argument.includes("=") ? argument.slice(argument.indexOf("=") + 1) : args[++index];
793
+ if (suffix === void 0) throw new UsageError("--suffix requires an argument");
794
+ } else if (!argument.startsWith("--")) {
795
+ for (let offset = 1; offset < argument.length; offset++) {
796
+ const option = argument[offset];
797
+ if (option === "d") directory = true;
798
+ else if (option === "u") dryRun = true;
799
+ else if (option === "q") quiet = true;
800
+ else if (option === "t") {
801
+ useTmpdir = true;
802
+ deprecatedTmpdir = true;
803
+ } else if (option === "p") {
804
+ tmpdir = argument.slice(offset + 1) || args[++index];
805
+ if (tmpdir === void 0) throw new UsageError("-p requires an argument");
806
+ useTmpdir = true;
807
+ break;
808
+ } else throw new UsageError(`unrecognized option '${argument}'`);
809
+ }
810
+ } else throw new UsageError(`unrecognized option '${argument}'`);
811
+ }
812
+ if (operands.length > 1) throw new UsageError("too many templates");
813
+ const template = operands[0] ?? "tmp.XXXXXXXXXX";
814
+ if (operands.length === 0) useTmpdir = true;
815
+ validatePath(template);
816
+ if (deprecatedTmpdir && template.includes("/")) throw new UsageError("template contains directory separator");
817
+ validatePath(suffix ?? "");
818
+ if (suffix?.includes("/") || suffix !== void 0 && !template.endsWith("X")) throw new UsageError("suffix requires a template ending in X and cannot contain '/'");
819
+ const name = template.slice(template.lastIndexOf("/") + 1);
820
+ if (name.length + (suffix?.length ?? 0) > 255 || mktempEncoder.encode(name).byteLength + mktempEncoder.encode(suffix ?? "").byteLength > 255) throw new FsError("ENAMETOOLONG", { path: template });
821
+ const end = name.lastIndexOf("X") + 1;
822
+ let start = end;
823
+ while (start > 0 && name[start - 1] === "X") start--;
824
+ if (end - start < 3) throw new UsageError("template must contain at least three consecutive X characters in its last component");
825
+ if (useTmpdir && template.startsWith("/")) throw new UsageError("template must be relative with --tmpdir/-p");
826
+ const tail = suffix ?? name.slice(end);
827
+ return { directory, dryRun, quiet, useTmpdir, deprecatedTmpdir, tmpdir, template, prefix: template.slice(0, template.length - name.length + start), count: end - start, tail };
828
+ }
829
+ var alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
830
+ function sampleTemplateChars(count) {
831
+ let out = "";
832
+ for (let index = 0; index < count; index++) out += alphabet[randomInteger(alphabet.length)];
833
+ return out;
834
+ }
835
+ function evalSyncMktemp(opArgs, env, statTypeSync, writeFileSync, mkdirSync) {
836
+ const gnuInfo = gnuInformationSync("mktemp", opArgs);
837
+ if (gnuInfo !== void 0) return gnuInfo;
838
+ try {
839
+ const parsed = parse2(opArgs);
840
+ const parent = parsed.deprecatedTmpdir && env.TMPDIR || parsed.tmpdir || env.TMPDIR || "/tmp";
841
+ validatePath(parent);
842
+ if (!statTypeSync) return void 0;
843
+ if (parsed.useTmpdir && !parsed.dryRun && statTypeSync(parent || ".") !== "directory") return void 0;
844
+ for (let attempt = 0; attempt < 32; attempt++) {
845
+ const random = sampleTemplateChars(parsed.count);
846
+ const generated = `${parsed.prefix}${random}${parsed.tail}`;
847
+ const display = parsed.useTmpdir ? `${parent.replace(/\/+$/u, "")}/${generated}` : generated;
848
+ const st = statTypeSync(display);
849
+ if (st !== "missing") continue;
850
+ if (!parsed.dryRun) {
851
+ if (parsed.directory) {
852
+ if (!mkdirSync || !mkdirSync(display)) return void 0;
853
+ } else {
854
+ if (!writeFileSync || !writeFileSync(display, new Uint8Array(0))) return void 0;
855
+ }
856
+ }
857
+ return `${display}
858
+ `;
859
+ }
860
+ return void 0;
861
+ } catch {
862
+ return void 0;
863
+ }
864
+ }
865
+ syncCommandEvaluators.evalSyncMktemp = evalSyncMktemp;
866
+ function createMktempCommand(configuration = {}) {
867
+ const configured = settings(configuration);
868
+ const configuredUmask = configuration.umask === void 0 ? void 0 : configured.umask;
869
+ return metadataCommand("mktemp", async (context) => {
870
+ const budget = new MetadataBudget(context, configured.limits);
871
+ const parsed = parse2(context.args);
872
+ const parent = parsed.deprecatedTmpdir && context.env.TMPDIR || parsed.tmpdir || context.env.TMPDIR || "/tmp";
873
+ validatePath(parent);
874
+ try {
875
+ if (!parsed.dryRun) {
876
+ if (context.fs.capabilities.readOnly) throw new FsError("EROFS", { syscall: "mktemp" });
877
+ }
878
+ for (let attempt = 0; attempt < configured.limits.maxAttempts; attempt++) {
879
+ await budget.step();
880
+ const random = sampleTemplateChars(parsed.count);
881
+ const generated = `${parsed.prefix}${random}${parsed.tail}`;
882
+ const display = parsed.useTmpdir ? `${parent.replace(/\/+$/u, "")}/${generated}` : generated;
883
+ const path = pathOf(context, display);
884
+ if (mktempEncoder.encode(display).byteLength + 1 > configured.limits.maxOutputBytes) throw new FsError("EFBIG", { message: "temporary pathname output exceeds limit" });
885
+ if (parsed.dryRun) {
886
+ try {
887
+ await context.fs.lstat(path, { signal: context.signal });
888
+ continue;
889
+ } catch (error) {
890
+ context.signal.throwIfAborted();
891
+ if (codeOf(error) !== "ENOENT") throw error;
892
+ }
893
+ } else {
894
+ const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;
895
+ if (capabilities.readOnly === true) throw new FsError("EROFS", { syscall: "mktemp" });
896
+ if (capabilities.permissions !== true) throw new FsError("ENOTSUP", { syscall: "mktemp", message: "private temporary creation requires declared permission support" });
897
+ try {
898
+ const mask = configuredUmask ?? Reflect.get(context.fs, creationUmask);
899
+ const activeUmask = typeof mask === "number" ? mask : configured.umask;
900
+ const mode = (parsed.directory ? 448 : 384) & ~activeUmask;
901
+ if (parsed.directory) await context.fs.mkdir(path, { mode, recursive: false, signal: context.signal });
902
+ else await context.fs.writeFile(path, new Uint8Array(), { mode, flag: "wx", signal: context.signal });
903
+ } catch (error) {
904
+ context.signal.throwIfAborted();
905
+ if (codeOf(error) !== "EEXIST") throw error;
906
+ continue;
907
+ }
908
+ }
909
+ await budget.output(`${display}
910
+ `);
911
+ return { exitCode: 0 };
912
+ }
913
+ throw new FsError("EEXIST", { syscall: "mktemp", message: "temporary name collision limit exceeded" });
914
+ } catch (error) {
915
+ context.signal.throwIfAborted();
916
+ if (!parsed.quiet) await diagnostic(context, error);
917
+ return { exitCode: 1 };
918
+ }
919
+ });
920
+ }
921
+
922
+ // packages/safe-bash/src/commands/truncate.ts
923
+ init_platform();
924
+ import {} from "../../safe-bash-command-truncate/index.js";
925
+ import { createTruncateCommand, createTruncateCommands, truncateCommand, truncateCommands, evalSyncTruncate } from "../../safe-bash-command-truncate/index.js";
926
+
927
+ // packages/safe-bash/src/commands/metadata/index.ts
928
+ import { evalSyncTruncate as evalSyncTruncate2 } from "../../safe-bash-command-truncate/index.js";
929
+ function createMetadataCommands(options2 = {}) {
930
+ settings(options2);
931
+ return registerDefaultExecutors([createChmodCommand(options2), createStatCommand(options2), createMktempCommand(options2), truncateCommand(options2)], options2);
932
+ }
933
+ function metadataCommands(options2 = {}) {
934
+ const commands = createMetadataCommands(options2);
935
+ return { name: "metadata-commands", setup(host) {
936
+ if (!options2.replace) {
937
+ for (const command of commands) if (host.commands.has(command.name)) throw new Error(`Command already registered: ${command.name}`);
938
+ }
939
+ for (const command of commands) host.commands.register(command, { replace: options2.replace ?? false });
940
+ } };
941
+ }
942
+
943
+ export {
944
+ abortManagedController,
945
+ addAbortSignalWaiter,
946
+ combineManagedSignals,
947
+ createManagedControlController,
948
+ creationUmask,
949
+ getRuntimeBackingFileSystem,
950
+ interruptible,
951
+ isManagedAbortSignal,
952
+ isSyncResolved,
953
+ registerManagedAbortSignal,
954
+ removeAbortSignalWaiter,
955
+ gnuInformationSync,
956
+ modeChange2 as modeChange,
957
+ evalSyncStat,
958
+ evalSyncMktemp,
959
+ createMetadataCommands,
960
+ metadataCommands,
961
+ evalSyncTruncate2 as evalSyncTruncate
962
+ };