@poe-platform/safe-bash 0.1.799 → 0.1.800

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 (847) hide show
  1. package/README.md +32 -17
  2. package/dist/image-ast/index.browser.js +1384 -23
  3. package/dist/image-ast/index.js +1384 -23
  4. package/dist/mp4-ast/types.d.ts +1 -0
  5. package/dist/office-package/zip.d.ts +2 -0
  6. package/dist/office-package/zip.js +1 -1
  7. package/dist/pdf-ast/index.js +1 -1
  8. package/dist/safe-bash/chunks/{chunk-IUTD5FH5.js → chunk-46UISJCK.js} +1 -6
  9. package/dist/safe-bash/chunks/chunk-4SEW2Q6H.js +26 -0
  10. package/dist/safe-bash/chunks/{chunk-AKC46AF6.js → chunk-7YSRXFEG.js} +7 -40
  11. package/dist/safe-bash/chunks/{chunk-KTGR4U57.js → chunk-BHJE5LPZ.js} +1 -2
  12. package/dist/safe-bash/chunks/{chunk-TRVGCN3U.js → chunk-HHW7MGS2.js} +2 -2
  13. package/dist/safe-bash/chunks/{chunk-ZNAFMYIA.js → chunk-I7L3G3NX.js} +1 -1
  14. package/dist/safe-bash/chunks/{chunk-KMH2DF3I.js → chunk-JJSTTIEZ.js} +6 -1
  15. package/dist/safe-bash/chunks/{chunk-6IBTC4YL.js → chunk-JTLSUJ7V.js} +57 -20
  16. package/dist/safe-bash/chunks/chunk-K2VCOJ2B.js +111 -0
  17. package/dist/safe-bash/chunks/chunk-K4YMYFRJ.js +9802 -0
  18. package/dist/safe-bash/chunks/{chunk-SPYL72GN.js → chunk-KW24TAIU.js} +446 -5519
  19. package/dist/safe-bash/chunks/{chunk-ENR3HB2B.js → chunk-NLAW7KDI.js} +0 -1
  20. package/dist/safe-bash/chunks/{chunk-B3DDEDH2.js → chunk-PPYM75Z3.js} +1 -1
  21. package/dist/safe-bash/chunks/{chunk-NX2SQVON.js → chunk-RKKRJ54E.js} +19 -7
  22. package/dist/safe-bash/chunks/{chunk-WUNK5NXJ.js → chunk-RMWLWH7Q.js} +870 -953
  23. package/dist/safe-bash/chunks/{chunk-JSVX4VIA.js → chunk-TFGRKY43.js} +2 -1
  24. package/dist/safe-bash/chunks/{chunk-T5KKDMYB.js → chunk-TYD7EVUJ.js} +6 -0
  25. package/dist/safe-bash/chunks/{csvkit-W2UEKH6P.js → csvkit-QGP3GAOB.js} +1 -1
  26. package/dist/safe-bash/chunks/{ffmpeg-42CGASMV.js → ffmpeg-JTVH26MK.js} +1 -1
  27. package/dist/safe-bash/chunks/{gh-26GYLH6D.js → gh-I7QX7N5C.js} +1 -1
  28. package/dist/safe-bash/chunks/{git-YREKMUVD.js → git-MA7NKYVP.js} +1 -1
  29. package/dist/safe-bash/chunks/{imagemagick-3YIX4XO2.js → imagemagick-Y4NPWX2Q.js} +1 -1
  30. package/dist/safe-bash/chunks/{implementation-E3YMKU3Z.js → implementation-BWDKOVQJ.js} +1 -1
  31. package/dist/safe-bash/chunks/mmdc-44PELHDG.js +118 -0
  32. package/dist/safe-bash/chunks/{pdfimages-UE2UISP2.js → pdfimages-635TRW4Q.js} +1 -1
  33. package/dist/safe-bash/chunks/{pdfinfo-RGARKLI5.js → pdfinfo-FSDAA2KY.js} +3 -11
  34. package/dist/safe-bash/chunks/{pdftk-JY3WVCCC.js → pdftk-GQ5UH3VG.js} +1 -1
  35. package/dist/safe-bash/chunks/{pdftoppm-GPD3BMPY.js → pdftoppm-YTXQCAYT.js} +1 -1
  36. package/dist/safe-bash/chunks/{pdftotext-K7GQ2QJZ.js → pdftotext-CVA2G7FY.js} +1 -1
  37. package/dist/safe-bash/chunks/{qpdf-F4U7WUSU.js → qpdf-HZMIFG4A.js} +1 -1
  38. package/dist/safe-bash/chunks/{sips-RWENS7X5.js → sips-E7UBDP33.js} +1 -1
  39. package/dist/safe-bash/chunks/{soffice-IT6W2C5F.js → soffice-ELASUWUK.js} +1 -1
  40. package/dist/safe-bash/chunks/{wkhtmltopdf-JYNDAHIZ.js → wkhtmltopdf-EPO6YCMG.js} +1 -1
  41. package/dist/safe-bash/command-chunks/chunk-2FGJYFWZ.js +44 -0
  42. package/dist/safe-bash/command-chunks/chunk-2H4JTFIL.js +53 -0
  43. package/dist/safe-bash/command-chunks/{chunk-LLCXZKZ6.js → chunk-2QHG43WJ.js} +2 -2
  44. package/dist/safe-bash/command-chunks/chunk-364TMWBT.js +946 -0
  45. package/dist/safe-bash/command-chunks/{chunk-EIVW3X3N.js → chunk-3DT2YOGW.js} +11 -6
  46. package/dist/safe-bash/command-chunks/chunk-3E2OIS2J.js +7037 -0
  47. package/dist/safe-bash/command-chunks/{chunk-AIRGA2SU.js → chunk-3HXDA5PT.js} +1 -1
  48. package/dist/safe-bash/command-chunks/chunk-3LSOYLNV.js +1091 -0
  49. package/dist/safe-bash/command-chunks/chunk-4B7Y7S6E.js +61 -0
  50. package/dist/safe-bash/command-chunks/{chunk-HRLIAMXC.js → chunk-4C6QI5BQ.js} +3 -2
  51. package/dist/safe-bash/command-chunks/chunk-4ZHMW6F5.js +104 -0
  52. package/dist/safe-bash/command-chunks/{chunk-4ZALPDBV.js → chunk-53P53XFM.js} +2 -2
  53. package/dist/safe-bash/command-chunks/chunk-5LSGEIZY.js +379 -0
  54. package/dist/safe-bash/command-chunks/{chunk-MKQVQMXO.js → chunk-5LU4UCBR.js} +1 -1
  55. package/dist/safe-bash/command-chunks/chunk-5T7CRJHW.js +560 -0
  56. package/dist/safe-bash/command-chunks/chunk-5TBUOBDE.js +346 -0
  57. package/dist/safe-bash/command-chunks/chunk-5XY4DTNG.js +34 -0
  58. package/dist/safe-bash/command-chunks/chunk-5ZMZ573Q.js +140 -0
  59. package/dist/safe-bash/command-chunks/{chunk-OPUJSTHS.js → chunk-67IQF5GC.js} +200 -66
  60. package/dist/safe-bash/command-chunks/chunk-67QKREJK.js +347 -0
  61. package/dist/safe-bash/command-chunks/chunk-6EPHJGGF.js +23 -0
  62. package/dist/safe-bash/command-chunks/chunk-6F4XCVON.js +266 -0
  63. package/dist/safe-bash/command-chunks/{chunk-ESMCX3YV.js → chunk-6HMX4CQS.js} +669 -130
  64. package/dist/safe-bash/command-chunks/chunk-7K6JYKPJ.js +422 -0
  65. package/dist/safe-bash/command-chunks/chunk-7N2LI2KO.js +206 -0
  66. package/dist/safe-bash/command-chunks/chunk-7RGB363W.js +362 -0
  67. package/dist/safe-bash/command-chunks/{pptx-GBPNWNEP-7EQEVXV5.js → chunk-AI5JAXQF.js} +34820 -18029
  68. package/dist/safe-bash/command-chunks/chunk-AMO3THU4.js +105 -0
  69. package/dist/safe-bash/command-chunks/chunk-BAGCY35S.js +231 -0
  70. package/dist/safe-bash/command-chunks/chunk-BAXU7B5Z.js +101 -0
  71. package/dist/safe-bash/command-chunks/{chunk-KMCZ6P4O.js → chunk-BKCNF5U3.js} +68 -7
  72. package/dist/safe-bash/command-chunks/chunk-BNOU5YQS.js +182 -0
  73. package/dist/safe-bash/command-chunks/chunk-C7I25AAL.js +25 -0
  74. package/dist/safe-bash/command-chunks/chunk-CKXV2CLD.js +65 -0
  75. package/dist/safe-bash/command-chunks/chunk-CQ5YGOGB.js +150 -0
  76. package/dist/safe-bash/command-chunks/{chunk-I3K5RYU4.js → chunk-D4OP2BR3.js} +72 -24
  77. package/dist/safe-bash/command-chunks/chunk-DB453IE6.js +122 -0
  78. package/dist/safe-bash/command-chunks/chunk-DOKKNRRM.js +87 -0
  79. package/dist/safe-bash/command-chunks/{chunk-2PX5B7T5.js → chunk-DQAVUDDX.js} +2 -2
  80. package/dist/safe-bash/command-chunks/chunk-DT7BCTWY.js +249 -0
  81. package/dist/safe-bash/command-chunks/chunk-E2LB7FRT.js +42 -0
  82. package/dist/safe-bash/command-chunks/chunk-EK6YNAXT.js +343 -0
  83. package/dist/safe-bash/command-chunks/chunk-EQ4HV54N.js +22 -0
  84. package/dist/safe-bash/command-chunks/chunk-ERYJLO6G.js +293 -0
  85. package/dist/safe-bash/command-chunks/{chunk-4ONEXMD3.js → chunk-EUSPTFAX.js} +1 -1
  86. package/dist/safe-bash/command-chunks/chunk-FKKB5X5V.js +97 -0
  87. package/dist/safe-bash/command-chunks/chunk-FXELCPFX.js +195 -0
  88. package/dist/safe-bash/command-chunks/{chunk-JCNNOMBV.js → chunk-GI4CJED2.js} +3 -2
  89. package/dist/safe-bash/command-chunks/{chunk-CU5RLO62.js → chunk-GLOZX57Y.js} +92 -18
  90. package/dist/safe-bash/command-chunks/chunk-GMIHJYDG.js +331 -0
  91. package/dist/safe-bash/command-chunks/chunk-H622NS6Z.js +11 -0
  92. package/dist/safe-bash/command-chunks/{chunk-UI32HWGS.js → chunk-HMOZ6XVJ.js} +1 -1
  93. package/dist/safe-bash/command-chunks/{chunk-AVSPNLWV.js → chunk-I237SNW5.js} +1 -1
  94. package/dist/safe-bash/command-chunks/{chunk-ZS3QPNUL.js → chunk-IR2BY7EL.js} +21 -6
  95. package/dist/safe-bash/command-chunks/chunk-IYPAQ7PH.js +42 -0
  96. package/dist/safe-bash/command-chunks/chunk-JN7WIP6S.js +94 -0
  97. package/dist/safe-bash/command-chunks/chunk-JNZ3CVAE.js +147 -0
  98. package/dist/safe-bash/command-chunks/{chunk-HLBX5IRS.js → chunk-JQ74HC37.js} +24 -32
  99. package/dist/safe-bash/command-chunks/chunk-KFVV7ZJO.js +216 -0
  100. package/dist/safe-bash/command-chunks/{chunk-G4PNVO6Z.js → chunk-KP7AO66M.js} +1 -1
  101. package/dist/safe-bash/command-chunks/chunk-KWESKQHR.js +25 -0
  102. package/dist/safe-bash/command-chunks/chunk-KYSPGS33.js +41 -0
  103. package/dist/safe-bash/command-chunks/{chunk-C7IHMJEW.js → chunk-KZC5UWFF.js} +2 -2
  104. package/dist/safe-bash/command-chunks/chunk-L6DVEBW3.js +553 -0
  105. package/dist/safe-bash/command-chunks/chunk-LC2MFKT4.js +2489 -0
  106. package/dist/safe-bash/command-chunks/chunk-LE5LZNHE.js +204 -0
  107. package/dist/safe-bash/command-chunks/chunk-MDH5T4OS.js +41 -0
  108. package/dist/safe-bash/command-chunks/chunk-MM6HU6CX.js +20 -0
  109. package/dist/safe-bash/command-chunks/{chunk-MYJAZ3U2.js → chunk-MPL2466A.js} +2 -2
  110. package/dist/safe-bash/command-chunks/{chunk-VZHRZMS7.js → chunk-NAY27PXB.js} +1 -1
  111. package/dist/safe-bash/command-chunks/chunk-NCD7PEWH.js +298 -0
  112. package/dist/safe-bash/command-chunks/chunk-NFGI5IGF.js +266 -0
  113. package/dist/safe-bash/command-chunks/{chunk-KVFCSLKK.js → chunk-NXEQ3ESQ.js} +6 -0
  114. package/dist/safe-bash/command-chunks/{chunk-3VGGYEDH.js → chunk-ORYGZYKW.js} +4 -3
  115. package/dist/safe-bash/command-chunks/{chunk-OLQG7ZCN.js → chunk-PEF7K3UQ.js} +136 -75
  116. package/dist/safe-bash/command-chunks/chunk-PII4YEZW.js +123 -0
  117. package/dist/safe-bash/command-chunks/{chunk-43GSSUAY.js → chunk-PJJUYO3R.js} +5 -5
  118. package/dist/safe-bash/command-chunks/{chunk-ZT4KSS2V.js → chunk-PTT3I223.js} +1 -1
  119. package/dist/safe-bash/command-chunks/chunk-Q3DII3Q7.js +174 -0
  120. package/dist/safe-bash/command-chunks/chunk-Q3EWDEUQ.js +185 -0
  121. package/dist/safe-bash/command-chunks/{chunk-2FUAW6GO.js → chunk-QI7LGHJJ.js} +58 -9
  122. package/dist/safe-bash/command-chunks/{chunk-6BETHLXZ.js → chunk-QJAFJP2G.js} +1 -1
  123. package/dist/safe-bash/command-chunks/chunk-QNIMV57G.js +63 -0
  124. package/dist/safe-bash/command-chunks/{chunk-VVI4Z73I.js → chunk-QP4R6GLA.js} +5 -1
  125. package/dist/safe-bash/command-chunks/{chunk-LPORMIZS.js → chunk-QWIDNAAK.js} +8 -8
  126. package/dist/safe-bash/command-chunks/chunk-RVLO4DYT.js +35 -0
  127. package/dist/safe-bash/command-chunks/{chunk-X2YQLGKS.js → chunk-SAMH7SQE.js} +4 -4
  128. package/dist/safe-bash/command-chunks/chunk-SEM36PG5.js +11 -0
  129. package/dist/safe-bash/command-chunks/chunk-STC3LEWJ.js +634 -0
  130. package/dist/safe-bash/command-chunks/chunk-SVULUDOP.js +331 -0
  131. package/dist/safe-bash/command-chunks/chunk-TEVJJPTC.js +1392 -0
  132. package/dist/safe-bash/command-chunks/{chunk-ZXKW7SJ2.js → chunk-TYCGMRLM.js} +2 -2
  133. package/dist/safe-bash/command-chunks/chunk-UG7SMZFF.js +178 -0
  134. package/dist/safe-bash/command-chunks/{chunk-YZ5SVZFD.js → chunk-UMDIOL3O.js} +3 -3
  135. package/dist/safe-bash/command-chunks/chunk-UXSR5BZH.js +136 -0
  136. package/dist/safe-bash/command-chunks/chunk-V6BEDRMQ.js +112 -0
  137. package/dist/safe-bash/command-chunks/chunk-V6MSPQLA.js +362 -0
  138. package/dist/safe-bash/command-chunks/{chunk-J4PEQWSF.js → chunk-VGG2DL5Q.js} +0 -1
  139. package/dist/safe-bash/command-chunks/{chunk-SG424QWS.js → chunk-VL67NWNS.js} +1 -1
  140. package/dist/safe-bash/command-chunks/chunk-WB5SVIG7.js +1034 -0
  141. package/dist/safe-bash/command-chunks/{src-UJOWAS2S.js → chunk-WD3ERGRY.js} +77 -277
  142. package/dist/safe-bash/command-chunks/{chunk-YFSDDFGV.js → chunk-WH627NJL.js} +446 -53
  143. package/dist/safe-bash/command-chunks/chunk-WNE7FPVR.js +236 -0
  144. package/dist/safe-bash/command-chunks/{chunk-UKS2XJZI.js → chunk-WPYIOKE3.js} +4 -4
  145. package/dist/safe-bash/command-chunks/chunk-XETLEHZP.js +1227 -0
  146. package/dist/safe-bash/command-chunks/chunk-XIIBTGC5.js +580 -0
  147. package/dist/safe-bash/command-chunks/chunk-XJXU3VVH.js +737 -0
  148. package/dist/safe-bash/command-chunks/chunk-Y5INTD6S.js +220 -0
  149. package/dist/safe-bash/command-chunks/{chunk-5ZSM4UFN.js → chunk-YGC6OS5O.js} +3 -56
  150. package/dist/safe-bash/command-chunks/chunk-YJDV76GL.js +262 -0
  151. package/dist/safe-bash/command-chunks/chunk-YOF7R4OY.js +80 -0
  152. package/dist/safe-bash/command-chunks/chunk-Z7RVSD5K.js +594 -0
  153. package/dist/safe-bash/command-chunks/chunk-ZHUWOUWB.js +618 -0
  154. package/dist/safe-bash/command-chunks/{model-store-L35QTZMJ.js → model-store-WPKMRPV4.js} +2 -2
  155. package/dist/safe-bash/command-chunks/pptx-7G52EJ6L-4JACH5FB.js +625 -0
  156. package/dist/safe-bash/command-chunks/python-worker-source-TYOFJMCW.js +4 -0
  157. package/dist/safe-bash/command-chunks/src-ICMQISAA.js +501 -0
  158. package/dist/safe-bash/commands/archive/create.d.ts +1 -17
  159. package/dist/safe-bash/commands/archive/create.js +1 -252
  160. package/dist/safe-bash/commands/archive/extract.d.ts +1 -11
  161. package/dist/safe-bash/commands/archive/extract.js +1 -640
  162. package/dist/safe-bash/commands/archive/format.d.ts +1 -32
  163. package/dist/safe-bash/commands/archive/format.js +1 -225
  164. package/dist/safe-bash/commands/archive/index.d.ts +5 -10
  165. package/dist/safe-bash/commands/archive/index.js +6 -931
  166. package/dist/safe-bash/commands/archive/listing.d.ts +1 -2
  167. package/dist/safe-bash/commands/archive/listing.js +1 -21
  168. package/dist/safe-bash/commands/archive/modes.d.ts +1 -5
  169. package/dist/safe-bash/commands/archive/modes.js +1 -182
  170. package/dist/safe-bash/commands/archive/options.d.ts +1 -53
  171. package/dist/safe-bash/commands/archive/options.js +1 -462
  172. package/dist/safe-bash/commands/archive/stream.d.ts +1 -22
  173. package/dist/safe-bash/commands/archive/stream.js +1 -188
  174. package/dist/safe-bash/commands/archive/transform.d.ts +1 -16
  175. package/dist/safe-bash/commands/archive/transform.js +1 -85
  176. package/dist/safe-bash/commands/archive/unzip/arguments.d.ts +1 -53
  177. package/dist/safe-bash/commands/archive/unzip/arguments.js +1 -322
  178. package/dist/safe-bash/commands/archive/unzip/safety.d.ts +1 -32
  179. package/dist/safe-bash/commands/archive/unzip/safety.js +1 -295
  180. package/dist/safe-bash/commands/archive/unzip.d.ts +1 -3
  181. package/dist/safe-bash/commands/archive/unzip.js +1 -398
  182. package/dist/safe-bash/commands/archive/zip/aes.d.ts +1 -17
  183. package/dist/safe-bash/commands/archive/zip/aes.js +1 -156
  184. package/dist/safe-bash/commands/archive/zip/comments.d.ts +1 -17
  185. package/dist/safe-bash/commands/archive/zip/comments.js +1 -83
  186. package/dist/safe-bash/commands/archive/zip/crc.d.ts +1 -1
  187. package/dist/safe-bash/commands/archive/zip/crc.js +1 -1
  188. package/dist/safe-bash/commands/archive/zip/crypto.d.ts +1 -19
  189. package/dist/safe-bash/commands/archive/zip/crypto.js +1 -118
  190. package/dist/safe-bash/commands/archive/zip/dates.d.ts +1 -4
  191. package/dist/safe-bash/commands/archive/zip/dates.js +1 -66
  192. package/dist/safe-bash/commands/archive/zip/environment.d.ts +1 -2
  193. package/dist/safe-bash/commands/archive/zip/environment.js +1 -62
  194. package/dist/safe-bash/commands/archive/zip/grow.d.ts +1 -3
  195. package/dist/safe-bash/commands/archive/zip/grow.js +1 -2
  196. package/dist/safe-bash/commands/archive/zip/help.d.ts +1 -4
  197. package/dist/safe-bash/commands/archive/zip/help.js +1 -182
  198. package/dist/safe-bash/commands/archive/zip/line-endings.d.ts +1 -2
  199. package/dist/safe-bash/commands/archive/zip/line-endings.js +1 -194
  200. package/dist/safe-bash/commands/archive/zip/log.d.ts +1 -22
  201. package/dist/safe-bash/commands/archive/zip/log.js +1 -159
  202. package/dist/safe-bash/commands/archive/zip/lzma.d.ts +1 -9
  203. package/dist/safe-bash/commands/archive/zip/lzma.js +1 -40
  204. package/dist/safe-bash/commands/archive/zip/move.d.ts +1 -11
  205. package/dist/safe-bash/commands/archive/zip/move.js +1 -59
  206. package/dist/safe-bash/commands/archive/zip/names.d.ts +1 -2
  207. package/dist/safe-bash/commands/archive/zip/names.js +1 -33
  208. package/dist/safe-bash/commands/archive/zip/options.d.ts +1 -13
  209. package/dist/safe-bash/commands/archive/zip/options.js +1 -124
  210. package/dist/safe-bash/commands/archive/zip/repair.d.ts +1 -10
  211. package/dist/safe-bash/commands/archive/zip/repair.js +1 -392
  212. package/dist/safe-bash/commands/archive/zip/safety.d.ts +1 -54
  213. package/dist/safe-bash/commands/archive/zip/safety.js +1 -360
  214. package/dist/safe-bash/commands/archive/zip/sfx.d.ts +1 -4
  215. package/dist/safe-bash/commands/archive/zip/sfx.js +1 -52
  216. package/dist/safe-bash/commands/archive/zip/test-command.d.ts +1 -5
  217. package/dist/safe-bash/commands/archive/zip/test-command.js +1 -101
  218. package/dist/safe-bash/commands/archive/zip/volumes.d.ts +1 -21
  219. package/dist/safe-bash/commands/archive/zip/volumes.js +1 -281
  220. package/dist/safe-bash/commands/archive/zip/zip64.d.ts +1 -30
  221. package/dist/safe-bash/commands/archive/zip/zip64.js +1 -227
  222. package/dist/safe-bash/commands/archive/zip-format.d.ts +1 -68
  223. package/dist/safe-bash/commands/archive/zip-format.js +1 -1075
  224. package/dist/safe-bash/commands/archive/zip.d.ts +1 -3
  225. package/dist/safe-bash/commands/archive/zip.js +1 -1523
  226. package/dist/safe-bash/commands/awk/index.d.ts +2 -0
  227. package/dist/safe-bash/commands/awk/index.js +2 -0
  228. package/dist/safe-bash/commands/bytes/compression/index.js +2 -1
  229. package/dist/safe-bash/commands/curl/index.d.ts +2 -0
  230. package/dist/safe-bash/commands/curl/index.js +2 -0
  231. package/dist/safe-bash/commands/diff/index.d.ts +2 -0
  232. package/dist/safe-bash/commands/diff/index.js +2 -0
  233. package/dist/safe-bash/commands/diff-patch/diff-format.d.ts +1 -10
  234. package/dist/safe-bash/commands/diff-patch/diff-format.js +1 -237
  235. package/dist/safe-bash/commands/diff-patch/diff-options.d.ts +1 -38
  236. package/dist/safe-bash/commands/diff-patch/diff-options.js +1 -261
  237. package/dist/safe-bash/commands/diff-patch/diff-output.d.ts +1 -20
  238. package/dist/safe-bash/commands/diff-patch/diff-output.js +1 -290
  239. package/dist/safe-bash/commands/diff-patch/diff.d.ts +1 -2
  240. package/dist/safe-bash/commands/diff-patch/diff.js +1 -656
  241. package/dist/safe-bash/commands/diff-patch/index.d.ts +4 -5
  242. package/dist/safe-bash/commands/diff-patch/index.js +8 -333
  243. package/dist/safe-bash/commands/diff-patch/patch-envelope.d.ts +1 -2
  244. package/dist/safe-bash/commands/diff-patch/patch-envelope.js +1 -63
  245. package/dist/safe-bash/commands/diff-patch/patch-formats.d.ts +1 -7
  246. package/dist/safe-bash/commands/diff-patch/patch-formats.js +1 -264
  247. package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.d.ts +1 -41
  248. package/dist/safe-bash/commands/diff-patch/patch-gnu-paths.js +1 -263
  249. package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.d.ts +1 -3
  250. package/dist/safe-bash/commands/diff-patch/patch-gnu-reject.js +1 -100
  251. package/dist/safe-bash/commands/diff-patch/patch-path.d.ts +1 -3
  252. package/dist/safe-bash/commands/diff-patch/patch-path.js +1 -91
  253. package/dist/safe-bash/commands/diff-patch/patch-publication.d.ts +1 -13
  254. package/dist/safe-bash/commands/diff-patch/patch-publication.js +1 -107
  255. package/dist/safe-bash/commands/diff-patch/patch.d.ts +1 -2
  256. package/dist/safe-bash/commands/diff-patch/patch.js +1 -653
  257. package/dist/safe-bash/commands/diff-patch/shared.d.ts +1 -53
  258. package/dist/safe-bash/commands/diff-patch/shared.js +1 -267
  259. package/dist/safe-bash/commands/diff-patch/unified.d.ts +1 -52
  260. package/dist/safe-bash/commands/diff-patch/unified.js +1 -385
  261. package/dist/safe-bash/commands/directory-admission.d.ts +1 -3
  262. package/dist/safe-bash/commands/directory-admission.js +1 -26
  263. package/dist/safe-bash/commands/find/index.d.ts +2 -0
  264. package/dist/safe-bash/commands/find/index.js +2 -0
  265. package/dist/safe-bash/commands/find-format.d.ts +1 -20
  266. package/dist/safe-bash/commands/find-format.js +1 -161
  267. package/dist/safe-bash/commands/find.d.ts +2 -18
  268. package/dist/safe-bash/commands/find.js +2 -1236
  269. package/dist/safe-bash/commands/gzip/index.d.ts +2 -0
  270. package/dist/safe-bash/commands/gzip/index.js +2 -0
  271. package/dist/safe-bash/commands/line-endings/index.browser.js +1 -1
  272. package/dist/safe-bash/commands/line-endings/index.d.ts +1 -1
  273. package/dist/safe-bash/commands/line-endings/index.js +1 -262
  274. package/dist/safe-bash/commands/llm/index.browser.js +3 -1
  275. package/dist/safe-bash/commands/mdq/index.browser.js +2 -2
  276. package/dist/safe-bash/commands/metadata/chmod.d.ts +1 -4
  277. package/dist/safe-bash/commands/metadata/chmod.js +2 -63
  278. package/dist/safe-bash/commands/network/aggregate.d.ts +1 -4
  279. package/dist/safe-bash/commands/network/aggregate.js +1 -23
  280. package/dist/safe-bash/commands/network/args.d.ts +1 -68
  281. package/dist/safe-bash/commands/network/args.js +1 -321
  282. package/dist/safe-bash/commands/network/authorizer.d.ts +1 -6
  283. package/dist/safe-bash/commands/network/authorizer.js +1 -33
  284. package/dist/safe-bash/commands/network/body.d.ts +1 -9
  285. package/dist/safe-bash/commands/network/body.js +1 -393
  286. package/dist/safe-bash/commands/network/curl.d.ts +3 -13
  287. package/dist/safe-bash/commands/network/curl.js +6 -693
  288. package/dist/safe-bash/commands/network/deadline.d.ts +1 -2
  289. package/dist/safe-bash/commands/network/deadline.js +1 -14
  290. package/dist/safe-bash/commands/network/decode.d.ts +1 -2
  291. package/dist/safe-bash/commands/network/decode.js +1 -79
  292. package/dist/safe-bash/commands/network/fetch-transport.d.ts +1 -7
  293. package/dist/safe-bash/commands/network/fetch-transport.js +1 -94
  294. package/dist/safe-bash/commands/network/form-content-type.d.ts +1 -5
  295. package/dist/safe-bash/commands/network/form-content-type.js +1 -63
  296. package/dist/safe-bash/commands/network/form-headers.d.ts +1 -2
  297. package/dist/safe-bash/commands/network/form-headers.js +1 -35
  298. package/dist/safe-bash/commands/network/glob.d.ts +1 -7
  299. package/dist/safe-bash/commands/network/glob.js +1 -134
  300. package/dist/safe-bash/commands/network/index.browser.js +2 -10
  301. package/dist/safe-bash/commands/network/input.d.ts +1 -5
  302. package/dist/safe-bash/commands/network/input.js +1 -276
  303. package/dist/safe-bash/commands/network/output.d.ts +1 -6
  304. package/dist/safe-bash/commands/network/output.js +1 -131
  305. package/dist/safe-bash/commands/network/private-address.d.ts +1 -1
  306. package/dist/safe-bash/commands/network/private-address.js +1 -44
  307. package/dist/safe-bash/commands/network/shared.d.ts +1 -14
  308. package/dist/safe-bash/commands/network/shared.js +1 -71
  309. package/dist/safe-bash/commands/network/types.d.ts +1 -37
  310. package/dist/safe-bash/commands/network/types.js +1 -31
  311. package/dist/safe-bash/commands/network/url.d.ts +1 -2
  312. package/dist/safe-bash/commands/network/url.js +1 -30
  313. package/dist/safe-bash/commands/network/wget.d.ts +3 -3
  314. package/dist/safe-bash/commands/network/wget.js +10 -331
  315. package/dist/safe-bash/commands/node/index.browser.js +4 -5
  316. package/dist/safe-bash/commands/node/index.d.ts +3 -3
  317. package/dist/safe-bash/commands/node/index.js +5 -0
  318. package/dist/safe-bash/commands/node/safejs.d.ts +3 -3
  319. package/dist/safe-bash/commands/node/safejs.js +6 -1
  320. package/dist/safe-bash/commands/node/types.d.ts +1 -1
  321. package/dist/safe-bash/commands/node/unconfigured.d.ts +3 -0
  322. package/dist/safe-bash/commands/node/unconfigured.js +10 -0
  323. package/dist/safe-bash/commands/op/index.browser.js +2 -2
  324. package/dist/safe-bash/commands/patch/index.d.ts +2 -0
  325. package/dist/safe-bash/commands/patch/index.js +2 -0
  326. package/dist/safe-bash/commands/pdfinfo/index.js +2 -1
  327. package/dist/safe-bash/commands/predicates.js +3 -4
  328. package/dist/safe-bash/commands/python/index.browser.js +5 -5
  329. package/dist/safe-bash/commands/python/llm-capability.d.ts +1 -0
  330. package/dist/safe-bash/commands/python/llm-capability.js +27 -7
  331. package/dist/safe-bash/commands/python/llm-module.js +11 -0
  332. package/dist/safe-bash/commands/python/manifest.d.ts +1 -0
  333. package/dist/safe-bash/commands/python/manifest.js +9 -5
  334. package/dist/safe-bash/commands/python/provisioning.js +1 -1
  335. package/dist/safe-bash/commands/regex-execution/matching.js +1 -2
  336. package/dist/safe-bash/commands/regex-execution/public.browser.js +5 -5
  337. package/dist/safe-bash/commands/search/index.d.ts +1 -1
  338. package/dist/safe-bash/commands/search/index.js +1 -347
  339. package/dist/safe-bash/commands/search/portable.d.ts +2 -2
  340. package/dist/safe-bash/commands/search/portable.js +3 -2
  341. package/dist/safe-bash/commands/sed/index.d.ts +2 -0
  342. package/dist/safe-bash/commands/sed/index.js +2 -0
  343. package/dist/safe-bash/commands/tar/index.d.ts +2 -0
  344. package/dist/safe-bash/commands/tar/index.js +2 -0
  345. package/dist/safe-bash/commands/text-programs/awk-inspection.d.ts +1 -19
  346. package/dist/safe-bash/commands/text-programs/awk-inspection.js +1 -50
  347. package/dist/safe-bash/commands/text-programs/awk-pipes.d.ts +2 -0
  348. package/dist/safe-bash/commands/text-programs/awk-pipes.js +2 -0
  349. package/dist/safe-bash/commands/text-programs/awk-pretty.d.ts +1 -3
  350. package/dist/safe-bash/commands/text-programs/awk-pretty.js +1 -197
  351. package/dist/safe-bash/commands/text-programs/awk-quote.d.ts +1 -2
  352. package/dist/safe-bash/commands/text-programs/awk-quote.js +1 -15
  353. package/dist/safe-bash/commands/text-programs/awk-reader.d.ts +1 -42
  354. package/dist/safe-bash/commands/text-programs/awk-reader.js +1 -449
  355. package/dist/safe-bash/commands/text-programs/awk-retention.d.ts +1 -13
  356. package/dist/safe-bash/commands/text-programs/awk-retention.js +1 -51
  357. package/dist/safe-bash/commands/text-programs/awk-runtime.d.ts +1 -150
  358. package/dist/safe-bash/commands/text-programs/awk-runtime.js +1 -2627
  359. package/dist/safe-bash/commands/text-programs/awk-syntax.d.ts +1 -142
  360. package/dist/safe-bash/commands/text-programs/awk-syntax.js +1 -509
  361. package/dist/safe-bash/commands/text-programs/awk-values.d.ts +1 -32
  362. package/dist/safe-bash/commands/text-programs/awk-values.js +1 -386
  363. package/dist/safe-bash/commands/text-programs/awk.d.ts +1 -3
  364. package/dist/safe-bash/commands/text-programs/awk.js +1 -361
  365. package/dist/safe-bash/commands/text-programs/inplace.d.ts +1 -16
  366. package/dist/safe-bash/commands/text-programs/inplace.js +1 -155
  367. package/dist/safe-bash/commands/text-programs/sed.d.ts +1 -3
  368. package/dist/safe-bash/commands/text-programs/sed.js +1 -1647
  369. package/dist/safe-bash/commands/unzip/index.d.ts +2 -0
  370. package/dist/safe-bash/commands/unzip/index.js +2 -0
  371. package/dist/safe-bash/commands/wget/index.d.ts +2 -0
  372. package/dist/safe-bash/commands/wget/index.js +2 -0
  373. package/dist/safe-bash/commands/yq/index.browser.js +7 -2
  374. package/dist/safe-bash/commands/yq/index.d.ts +1 -6
  375. package/dist/safe-bash/commands/yq/index.js +1 -36
  376. package/dist/safe-bash/commands/zip/index.d.ts +2 -0
  377. package/dist/safe-bash/commands/zip/index.js +2 -0
  378. package/dist/safe-bash/core.browser.js +1 -1
  379. package/dist/safe-bash/core.d.ts +8 -1
  380. package/dist/safe-bash/core.js +7 -1
  381. package/dist/safe-bash/fs/s3/index.d.ts +2 -2
  382. package/dist/safe-bash/fs/s3/index.js +1 -1
  383. package/dist/safe-bash/full-core.browser.js +254 -223
  384. package/dist/safe-bash/jobs.browser.js +2 -2
  385. package/dist/safe-bash/lazy-mmdc.d.ts +6 -0
  386. package/dist/safe-bash/lazy-mmdc.js +23 -0
  387. package/dist/safe-bash/opt-in/commands/yq/mike.js +6 -13
  388. package/dist/safe-bash/opt-in/commands/yq/native-work.d.ts +1 -0
  389. package/dist/safe-bash/opt-in/commands/yq/native-work.js +17 -0
  390. package/dist/safe-bash/optional-host.browser.js +8 -4
  391. package/dist/safe-bash/optional-host.d.ts +1 -1
  392. package/dist/safe-bash/optional-host.js +1 -1
  393. package/dist/safe-bash/playwright/ability-execution.js +3 -2
  394. package/dist/safe-bash/playwright/adapter.js +1 -1
  395. package/dist/safe-bash/playwright/controller.js +9 -8
  396. package/dist/safe-bash/playwright/modal-capabilities.js +2 -1
  397. package/dist/safe-bash/playwright/native-json-snapshot.js +4 -3
  398. package/dist/safe-bash/playwright/native-snapshot.js +5 -4
  399. package/dist/safe-bash/playwright/open-options.js +3 -3
  400. package/dist/safe-bash/playwright/resource-limit.d.ts +2 -0
  401. package/dist/safe-bash/playwright/resource-limit.js +4 -0
  402. package/dist/safe-bash/playwright/session-configuration.js +8 -3
  403. package/dist/safe-bash/playwright/snapshot.js +8 -7
  404. package/dist/safe-bash/playwright/standard-capabilities.js +5 -4
  405. package/dist/safe-bash/plugins/index.browser.js +14 -16
  406. package/dist/safe-bash/registry-entry.browser.js +14 -16
  407. package/dist/safe-bash/shell/arrays/bindings.d.ts +3 -5
  408. package/dist/safe-bash/shell/arrays/bindings.js +6 -2
  409. package/dist/safe-bash/shell/input.js +16 -14
  410. package/dist/safe-bash/shell/runtime.d.ts +3 -0
  411. package/dist/safe-bash/shell/runtime.js +316 -64
  412. package/dist/safe-bash/shell/types.d.ts +2 -0
  413. package/dist/safe-bash/shell/value-state.js +17 -2
  414. package/dist/safe-bash/shell/worker-limits.js +1 -0
  415. package/dist/safe-bash/shell-entry.browser.js +13 -15
  416. package/dist/safe-bash/trap.browser.d.ts +3 -0
  417. package/dist/safe-bash/trap.browser.js +14 -0
  418. package/dist/safe-bash/worker/host.js +1 -1
  419. package/dist/safe-bash-command-apply-patch/apply.js +2 -2
  420. package/dist/safe-bash-command-apply-patch/index.js +3 -3
  421. package/dist/safe-bash-command-awk/LICENSE +21 -0
  422. package/dist/safe-bash-command-awk/awk-inspection.d.ts +19 -0
  423. package/dist/safe-bash-command-awk/awk-inspection.js +9 -0
  424. package/dist/safe-bash-command-awk/awk-pipes.d.ts +19 -0
  425. package/dist/safe-bash-command-awk/awk-pipes.js +8 -0
  426. package/dist/safe-bash-command-awk/awk-pretty.d.ts +3 -0
  427. package/dist/safe-bash-command-awk/awk-pretty.js +8 -0
  428. package/dist/safe-bash-command-awk/awk-quote.d.ts +2 -0
  429. package/dist/safe-bash-command-awk/awk-quote.js +7 -0
  430. package/dist/safe-bash-command-awk/awk-reader.d.ts +42 -0
  431. package/dist/safe-bash-command-awk/awk-reader.js +9 -0
  432. package/dist/safe-bash-command-awk/awk-retention.d.ts +13 -0
  433. package/dist/safe-bash-command-awk/awk-retention.js +7 -0
  434. package/dist/safe-bash-command-awk/awk-runtime.d.ts +151 -0
  435. package/dist/safe-bash-command-awk/awk-runtime.js +11 -0
  436. package/dist/safe-bash-command-awk/awk-syntax.d.ts +144 -0
  437. package/dist/safe-bash-command-awk/awk-syntax.js +14 -0
  438. package/dist/safe-bash-command-awk/awk-values.d.ts +32 -0
  439. package/dist/safe-bash-command-awk/awk-values.js +35 -0
  440. package/dist/safe-bash-command-awk/awk.d.ts +3 -0
  441. package/dist/safe-bash-command-awk/awk.js +16 -0
  442. package/dist/safe-bash-command-awk/index.d.ts +7 -0
  443. package/dist/safe-bash-command-awk/index.js +36 -0
  444. package/dist/safe-bash-command-bc/index.d.ts +4 -0
  445. package/dist/safe-bash-command-bc/index.js +15 -176
  446. package/dist/safe-bash-command-column/column.js +3 -3
  447. package/dist/safe-bash-command-column/index.js +3 -3
  448. package/dist/safe-bash-command-column/layout.js +2 -2
  449. package/dist/safe-bash-command-csplit/command.js +2 -2
  450. package/dist/safe-bash-command-csplit/index.js +2 -2
  451. package/dist/safe-bash-command-csvkit/contracts.d.ts +1 -0
  452. package/dist/safe-bash-command-csvkit/csvpy-interpreter.d.ts +2 -1
  453. package/dist/safe-bash-command-csvkit/default-csvpy.d.ts +11 -0
  454. package/dist/safe-bash-command-csvkit/errors.js +22 -0
  455. package/dist/safe-bash-command-csvkit/index.d.ts +1 -0
  456. package/dist/safe-bash-command-csvkit/index.js +172 -4
  457. package/dist/safe-bash-command-csvkit/python-worker-browser.d.ts +3 -0
  458. package/dist/safe-bash-command-csvkit/python-worker-browser.js +16 -0
  459. package/dist/safe-bash-command-csvkit/python-worker-contract.d.ts +20 -0
  460. package/dist/safe-bash-command-csvkit/python-worker-node.d.ts +3 -0
  461. package/dist/safe-bash-command-csvkit/python-worker-node.js +9 -0
  462. package/dist/safe-bash-command-csvkit/runtime.d.ts +1 -0
  463. package/dist/safe-bash-command-curl/LICENSE +21 -0
  464. package/dist/safe-bash-command-curl/curl.d.ts +13 -0
  465. package/dist/safe-bash-command-curl/curl.js +9 -0
  466. package/dist/safe-bash-command-curl/index.d.ts +6 -0
  467. package/dist/safe-bash-command-curl/index.js +26 -0
  468. package/dist/safe-bash-command-diff/LICENSE +21 -0
  469. package/dist/safe-bash-command-diff/diff-format.d.ts +10 -0
  470. package/dist/safe-bash-command-diff/diff-format.js +10 -0
  471. package/dist/safe-bash-command-diff/diff-options.d.ts +38 -0
  472. package/dist/safe-bash-command-diff/diff-options.js +7 -0
  473. package/dist/safe-bash-command-diff/diff-output.d.ts +20 -0
  474. package/dist/safe-bash-command-diff/diff-output.js +19 -0
  475. package/dist/safe-bash-command-diff/diff.d.ts +2 -0
  476. package/dist/safe-bash-command-diff/diff.js +10 -0
  477. package/dist/safe-bash-command-diff/index.d.ts +8 -0
  478. package/dist/safe-bash-command-diff/index.js +34 -0
  479. package/dist/safe-bash-command-diff/sync.d.ts +2 -0
  480. package/dist/safe-bash-command-diff/sync.js +9 -0
  481. package/dist/safe-bash-command-diff3/index.js +5 -5
  482. package/dist/safe-bash-command-docx/index.d.ts +4 -4
  483. package/dist/safe-bash-command-docx/index.js +12 -5
  484. package/dist/safe-bash-command-dos2unix/index.d.ts +1 -0
  485. package/dist/safe-bash-command-dos2unix/index.js +225 -1
  486. package/dist/safe-bash-command-dos2unix/sync.d.ts +1 -0
  487. package/dist/safe-bash-command-exiftool/index.js +2 -2
  488. package/dist/safe-bash-command-factor/command.js +2 -2
  489. package/dist/safe-bash-command-factor/index.js +2 -2
  490. package/dist/safe-bash-command-ffmpeg/index.js +86 -94
  491. package/dist/safe-bash-command-file/index.js +3 -3
  492. package/dist/safe-bash-command-find/LICENSE +21 -0
  493. package/dist/safe-bash-command-find/find-format.d.ts +20 -0
  494. package/dist/safe-bash-command-find/find-format.js +9 -0
  495. package/dist/safe-bash-command-find/find.d.ts +18 -0
  496. package/dist/safe-bash-command-find/find.js +10 -0
  497. package/dist/safe-bash-command-find/index.d.ts +13 -0
  498. package/dist/safe-bash-command-find/index.js +45 -0
  499. package/dist/safe-bash-command-fmt/index.js +7 -4
  500. package/dist/safe-bash-command-git/git_rust.wasm +0 -0
  501. package/dist/safe-bash-command-git/index.js +5 -7
  502. package/dist/safe-bash-command-git/wasm.generated.js +1 -1
  503. package/dist/safe-bash-command-gzip/LICENSE +21 -0
  504. package/dist/safe-bash-command-gzip/index.d.ts +11 -0
  505. package/dist/safe-bash-command-gzip/index.js +94 -0
  506. package/dist/safe-bash-command-html-to-markdown/index.js +5 -5
  507. package/dist/safe-bash-command-htmlq/index.js +12 -8
  508. package/dist/safe-bash-command-imagemagick/index.js +22 -30
  509. package/dist/safe-bash-command-jq/index.js +1 -1
  510. package/dist/safe-bash-command-jq/jq.js +1 -1
  511. package/dist/safe-bash-command-llm/command.js +1 -1
  512. package/dist/safe-bash-command-llm/index.d.ts +1 -0
  513. package/dist/safe-bash-command-llm/index.js +16 -14
  514. package/dist/safe-bash-command-llm/openai.js +3 -3
  515. package/dist/safe-bash-command-llm/providers/index.js +3 -3
  516. package/dist/safe-bash-command-llm/providers/openai.js +3 -3
  517. package/dist/safe-bash-command-llm/stored-schema.d.ts +10 -0
  518. package/dist/safe-bash-command-mmdc/index.js +13 -604
  519. package/dist/safe-bash-command-mmdc/settings.d.ts +2 -0
  520. package/dist/safe-bash-command-mmdc/settings.js +7 -0
  521. package/dist/safe-bash-command-pandoc/command.js +4 -3
  522. package/dist/safe-bash-command-pandoc/defaults.d.ts +1 -0
  523. package/dist/safe-bash-command-pandoc/index.js +4 -3
  524. package/dist/safe-bash-command-pandoc/lua-filters.js +1 -1
  525. package/dist/safe-bash-command-pandoc/types.d.ts +3 -1
  526. package/dist/safe-bash-command-patch/LICENSE +21 -0
  527. package/dist/safe-bash-command-patch/index.d.ts +8 -0
  528. package/dist/safe-bash-command-patch/index.js +38 -0
  529. package/dist/safe-bash-command-patch/patch-envelope.d.ts +2 -0
  530. package/dist/safe-bash-command-patch/patch-envelope.js +7 -0
  531. package/dist/safe-bash-command-patch/patch-formats.d.ts +7 -0
  532. package/dist/safe-bash-command-patch/patch-formats.js +9 -0
  533. package/dist/safe-bash-command-patch/patch-gnu-paths.d.ts +41 -0
  534. package/dist/safe-bash-command-patch/patch-gnu-paths.js +26 -0
  535. package/dist/safe-bash-command-patch/patch-gnu-reject.d.ts +3 -0
  536. package/dist/safe-bash-command-patch/patch-gnu-reject.js +7 -0
  537. package/dist/safe-bash-command-patch/patch-path.d.ts +3 -0
  538. package/dist/safe-bash-command-patch/patch-path.js +11 -0
  539. package/dist/safe-bash-command-patch/patch-publication.d.ts +13 -0
  540. package/dist/safe-bash-command-patch/patch-publication.js +7 -0
  541. package/dist/safe-bash-command-patch/patch.d.ts +2 -0
  542. package/dist/safe-bash-command-patch/patch.js +14 -0
  543. package/dist/safe-bash-command-patch/sync.d.ts +2 -0
  544. package/dist/safe-bash-command-patch/sync.js +7 -0
  545. package/dist/safe-bash-command-patch/unified.d.ts +52 -0
  546. package/dist/safe-bash-command-patch/unified.js +16 -0
  547. package/dist/safe-bash-command-pdfimages/index.js +37 -16
  548. package/dist/safe-bash-command-pdfinfo/index.d.ts +0 -23
  549. package/dist/safe-bash-command-pdfinfo/index.js +20 -772
  550. package/dist/safe-bash-command-pdftk/index.js +37 -9
  551. package/dist/safe-bash-command-pdftoppm/index.js +50 -20
  552. package/dist/safe-bash-command-pdftotext/index.js +10 -2
  553. package/dist/safe-bash-command-pptx/index.d.ts +4 -4
  554. package/dist/safe-bash-command-pptx/index.js +11 -5
  555. package/dist/safe-bash-command-pr/command.js +2 -2
  556. package/dist/safe-bash-command-pr/index.js +4 -4
  557. package/dist/safe-bash-command-qpdf/index.js +26 -13
  558. package/dist/safe-bash-command-rg/index.d.ts +1 -0
  559. package/dist/safe-bash-command-rg/index.js +222 -1
  560. package/dist/safe-bash-command-rg/rg-command.js +1 -1
  561. package/dist/safe-bash-command-rg/sync.d.ts +1 -0
  562. package/dist/safe-bash-command-sed/LICENSE +21 -0
  563. package/dist/safe-bash-command-sed/index.d.ts +7 -0
  564. package/dist/safe-bash-command-sed/index.js +28 -0
  565. package/dist/safe-bash-command-sed/inplace.d.ts +16 -0
  566. package/dist/safe-bash-command-sed/inplace.js +9 -0
  567. package/dist/safe-bash-command-sed/sed.d.ts +3 -0
  568. package/dist/safe-bash-command-sed/sed.js +8 -0
  569. package/dist/safe-bash-command-sips/index.js +111 -35
  570. package/dist/safe-bash-command-soffice/index.js +4 -4
  571. package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -2
  572. package/dist/safe-bash-command-sqlite3/index.js +152 -452
  573. package/dist/safe-bash-command-ssconvert/commands.js +1 -1
  574. package/dist/safe-bash-command-ssconvert/formats/ods.js +2 -2
  575. package/dist/safe-bash-command-ssconvert/formats/xlsx.js +3 -3
  576. package/dist/safe-bash-command-ssconvert/index.js +5 -5
  577. package/dist/safe-bash-command-tar/LICENSE +21 -0
  578. package/dist/safe-bash-command-tar/create.d.ts +17 -0
  579. package/dist/safe-bash-command-tar/create.js +14 -0
  580. package/dist/safe-bash-command-tar/extract.d.ts +11 -0
  581. package/dist/safe-bash-command-tar/extract.js +14 -0
  582. package/dist/safe-bash-command-tar/format.d.ts +32 -0
  583. package/dist/safe-bash-command-tar/format.js +19 -0
  584. package/dist/safe-bash-command-tar/index.d.ts +8 -0
  585. package/dist/safe-bash-command-tar/index.js +550 -0
  586. package/dist/safe-bash-command-tar/listing.d.ts +2 -0
  587. package/dist/safe-bash-command-tar/listing.js +7 -0
  588. package/dist/safe-bash-command-tar/modes.d.ts +5 -0
  589. package/dist/safe-bash-command-tar/modes.js +16 -0
  590. package/dist/safe-bash-command-tar/options.d.ts +53 -0
  591. package/dist/safe-bash-command-tar/options.js +10 -0
  592. package/dist/safe-bash-command-tar/stream.d.ts +22 -0
  593. package/dist/safe-bash-command-tar/stream.js +15 -0
  594. package/dist/safe-bash-command-tar/transform.d.ts +16 -0
  595. package/dist/safe-bash-command-tar/transform.js +9 -0
  596. package/dist/safe-bash-command-unzip/LICENSE +21 -0
  597. package/dist/safe-bash-command-unzip/index.d.ts +7 -0
  598. package/dist/safe-bash-command-unzip/index.js +39 -0
  599. package/dist/safe-bash-command-unzip/sync.d.ts +3 -0
  600. package/dist/safe-bash-command-unzip/sync.js +9 -0
  601. package/dist/safe-bash-command-unzip/unzip/safety.d.ts +32 -0
  602. package/dist/safe-bash-command-unzip/unzip/safety.js +7 -0
  603. package/dist/safe-bash-command-unzip/unzip.d.ts +3 -0
  604. package/dist/safe-bash-command-unzip/unzip.js +8 -0
  605. package/dist/safe-bash-command-wget/LICENSE +21 -0
  606. package/dist/safe-bash-command-wget/index.d.ts +6 -0
  607. package/dist/safe-bash-command-wget/index.js +26 -0
  608. package/dist/safe-bash-command-wget/wget.d.ts +3 -0
  609. package/dist/safe-bash-command-wget/wget.js +7 -0
  610. package/dist/safe-bash-command-xan/argv.d.ts +4 -1
  611. package/dist/safe-bash-command-xan/argv.js +1 -1
  612. package/dist/safe-bash-command-xan/commands.js +4 -3
  613. package/dist/safe-bash-command-xan/index.js +15 -14
  614. package/dist/safe-bash-command-xan/io.js +2 -2
  615. package/dist/safe-bash-command-xmllint/index.js +189 -49
  616. package/dist/safe-bash-command-xz/index.js +3 -2
  617. package/dist/safe-bash-command-xz/options.d.ts +9 -1
  618. package/dist/safe-bash-command-xz/options.js +3 -1
  619. package/dist/safe-bash-command-yq/index.d.ts +4 -11
  620. package/dist/safe-bash-command-yq/index.js +3367 -670
  621. package/dist/safe-bash-command-yq/mike.js +6 -13
  622. package/dist/safe-bash-command-yq/native-work.d.ts +1 -0
  623. package/dist/safe-bash-command-yq/native-work.js +17 -0
  624. package/dist/safe-bash-command-yq/query.d.ts +11 -0
  625. package/dist/safe-bash-command-yq/query.js +735 -0
  626. package/dist/safe-bash-command-zip/LICENSE +21 -0
  627. package/dist/safe-bash-command-zip/index.d.ts +7 -0
  628. package/dist/safe-bash-command-zip/index.js +38 -0
  629. package/dist/safe-bash-command-zip/sync.d.ts +3 -0
  630. package/dist/safe-bash-command-zip/sync.js +9 -0
  631. package/dist/safe-bash-command-zip/zip.d.ts +3 -0
  632. package/dist/safe-bash-command-zip/zip.js +7 -0
  633. package/dist/safe-bash-compression-engine/files.js +4 -4
  634. package/dist/safe-bash-compression-engine/index.js +2 -2
  635. package/dist/safe-bash-compression-engine/operand.js +6 -6
  636. package/dist/safe-bash-compression-engine/stream.js +2 -2
  637. package/dist/safe-bash-compression-engine/zstd-decode.js +1 -1
  638. package/dist/safe-bash-contracts/command.js +1 -1
  639. package/dist/safe-bash-contracts/diagnostics.js +4 -4
  640. package/dist/safe-bash-contracts/escaping.js +11 -11
  641. package/dist/safe-bash-contracts/filesystem-descriptor.js +1 -1
  642. package/dist/safe-bash-contracts/filesystem-output.js +8 -8
  643. package/dist/safe-bash-contracts/index.js +34 -34
  644. package/dist/safe-bash-contracts/io.js +2 -2
  645. package/dist/safe-bash-contracts/output.js +3 -3
  646. package/dist/safe-bash-diff-engine/LICENSE +21 -0
  647. package/dist/safe-bash-diff-engine/index.d.ts +1 -0
  648. package/dist/safe-bash-diff-engine/index.js +24 -0
  649. package/dist/safe-bash-diff-engine/shared.d.ts +53 -0
  650. package/dist/safe-bash-diff-engine/shared.js +19 -0
  651. package/dist/safe-bash-io-engine/commands/directory-admission.d.ts +3 -0
  652. package/dist/safe-bash-io-engine/commands/directory-admission.js +34 -0
  653. package/dist/safe-bash-io-engine/commands/mode-change.d.ts +4 -0
  654. package/dist/safe-bash-io-engine/commands/mode-change.js +60 -0
  655. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +20 -31
  656. package/dist/safe-bash-io-engine/shell/pattern.js +7 -12
  657. package/dist/safe-bash-markdown-engine/commonmark-blocks.js +4 -4
  658. package/dist/safe-bash-markdown-engine/commonmark-inlines.js +4 -4
  659. package/dist/safe-bash-markdown-engine/commonmark-syntax.js +2 -2
  660. package/dist/safe-bash-markdown-engine/gfm-syntax.js +3 -3
  661. package/dist/safe-bash-markdown-engine/index.js +7 -7
  662. package/dist/safe-bash-mcp/index.browser.d.ts +6 -0
  663. package/dist/safe-bash-mcp/index.browser.js +1 -0
  664. package/dist/safe-bash-mcp/index.d.ts +12 -0
  665. package/dist/safe-bash-mcp/index.js +1558 -36
  666. package/dist/safe-bash-network-engine/LICENSE +21 -0
  667. package/dist/safe-bash-network-engine/aggregate.d.ts +4 -0
  668. package/dist/safe-bash-network-engine/aggregate.js +37 -0
  669. package/dist/safe-bash-network-engine/args.d.ts +68 -0
  670. package/dist/safe-bash-network-engine/args.js +19 -0
  671. package/dist/safe-bash-network-engine/authorizer.d.ts +6 -0
  672. package/dist/safe-bash-network-engine/authorizer.js +8 -0
  673. package/dist/safe-bash-network-engine/body.d.ts +9 -0
  674. package/dist/safe-bash-network-engine/body.js +374 -0
  675. package/dist/safe-bash-network-engine/deadline.d.ts +2 -0
  676. package/dist/safe-bash-network-engine/deadline.js +7 -0
  677. package/dist/safe-bash-network-engine/decode.d.ts +2 -0
  678. package/dist/safe-bash-network-engine/decode.js +81 -0
  679. package/dist/safe-bash-network-engine/fetch-transport.d.ts +7 -0
  680. package/dist/safe-bash-network-engine/fetch-transport.js +9 -0
  681. package/dist/safe-bash-network-engine/form-content-type.d.ts +5 -0
  682. package/dist/safe-bash-network-engine/form-content-type.js +8 -0
  683. package/dist/safe-bash-network-engine/form-headers.d.ts +2 -0
  684. package/dist/safe-bash-network-engine/form-headers.js +10 -0
  685. package/dist/safe-bash-network-engine/glob.d.ts +7 -0
  686. package/dist/safe-bash-network-engine/glob.js +124 -0
  687. package/dist/safe-bash-network-engine/index.d.ts +3 -0
  688. package/dist/safe-bash-network-engine/index.js +26 -0
  689. package/dist/safe-bash-network-engine/input.d.ts +5 -0
  690. package/dist/safe-bash-network-engine/input.js +255 -0
  691. package/dist/safe-bash-network-engine/output.d.ts +6 -0
  692. package/dist/safe-bash-network-engine/output.js +132 -0
  693. package/dist/safe-bash-network-engine/platform-portable.d.ts +5 -0
  694. package/dist/safe-bash-network-engine/platform-portable.js +19 -0
  695. package/dist/safe-bash-network-engine/private-address.d.ts +1 -0
  696. package/dist/safe-bash-network-engine/private-address.js +7 -0
  697. package/dist/safe-bash-network-engine/shared.d.ts +14 -0
  698. package/dist/safe-bash-network-engine/shared.js +23 -0
  699. package/dist/safe-bash-network-engine/types.d.ts +37 -0
  700. package/dist/safe-bash-network-engine/types.js +11 -0
  701. package/dist/safe-bash-network-engine/url.d.ts +2 -0
  702. package/dist/safe-bash-network-engine/url.js +8 -0
  703. package/dist/safe-bash-query-engine/capture.d.ts +1 -0
  704. package/dist/safe-bash-query-engine/capture.js +9 -7
  705. package/dist/safe-bash-query-engine/dates.d.ts +5 -1
  706. package/dist/safe-bash-query-engine/dates.js +10 -2
  707. package/dist/safe-bash-query-engine/delpaths.js +5 -5
  708. package/dist/safe-bash-query-engine/formats.js +3 -3
  709. package/dist/safe-bash-query-engine/index.js +15 -15
  710. package/dist/safe-bash-query-engine/indices.js +5 -5
  711. package/dist/safe-bash-query-engine/input.d.ts +1 -2
  712. package/dist/safe-bash-query-engine/input.js +2 -4
  713. package/dist/safe-bash-query-engine/interpreter.d.ts +5 -0
  714. package/dist/safe-bash-query-engine/interpreter.js +13 -13
  715. package/dist/safe-bash-query-engine/limits.js +1 -1
  716. package/dist/safe-bash-query-engine/parser.d.ts +8 -1
  717. package/dist/safe-bash-query-engine/parser.js +2 -2
  718. package/dist/safe-bash-query-engine/query-core.js +15 -15
  719. package/dist/safe-bash-query-engine/recurse.js +2 -2
  720. package/dist/safe-bash-query-engine/regex.d.ts +4 -2
  721. package/dist/safe-bash-query-engine/regex.js +10 -5
  722. package/dist/safe-bash-query-engine/split.js +2 -2
  723. package/dist/safe-bash-query-engine/splits.d.ts +1 -1
  724. package/dist/safe-bash-query-engine/splits.js +7 -6
  725. package/dist/safe-bash-query-engine/values.js +4 -4
  726. package/dist/safe-bash-regex-engine/ere/matcher.js +4 -4
  727. package/dist/safe-bash-regex-engine/index.js +2 -2
  728. package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -0
  729. package/dist/safe-bash-regex-engine/text/regex.js +2 -2
  730. package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +12 -2
  731. package/dist/safe-bash-search-engine/ergonomic-regex.js +2 -2
  732. package/dist/safe-bash-search-engine/glob.js +2 -2
  733. package/dist/safe-bash-search-engine/grep.js +2 -2
  734. package/dist/safe-bash-search-engine/matcher.d.ts +6 -2
  735. package/dist/safe-bash-search-engine/matcher.js +30 -8
  736. package/dist/safe-bash-search-engine/options.js +1 -1
  737. package/dist/safe-bash-search-engine/output.d.ts +3 -2
  738. package/dist/safe-bash-search-engine/output.js +111 -30
  739. package/dist/safe-bash-search-engine/shared.d.ts +2 -0
  740. package/dist/safe-bash-search-engine/shared.js +2 -2
  741. package/dist/safe-bash-search-engine/walk.js +11 -10
  742. package/dist/safe-bash-xml-engine/document.d.ts +1 -1
  743. package/dist/safe-bash-xml-engine/document.js +3 -3
  744. package/dist/safe-bash-xml-engine/evaluate.d.ts +1 -0
  745. package/dist/safe-bash-xml-engine/evaluate.js +4 -1
  746. package/dist/safe-bash-xml-engine/index.js +8 -6
  747. package/dist/safe-bash-xml-engine/io.js +1 -1
  748. package/dist/safe-bash-xml-engine/limits.d.ts +2 -0
  749. package/dist/safe-bash-xml-engine/limits.js +1 -1
  750. package/dist/safe-bash-xml-engine/predicate.d.ts +57 -0
  751. package/dist/safe-bash-xml-engine/query.d.ts +3 -15
  752. package/dist/safe-bash-xml-engine/query.js +3 -2
  753. package/dist/safe-bash-zip-engine/LICENSE +21 -0
  754. package/dist/safe-bash-zip-engine/index.d.ts +1 -0
  755. package/dist/safe-bash-zip-engine/index.js +32 -0
  756. package/dist/safe-bash-zip-engine/unzip/arguments.d.ts +53 -0
  757. package/dist/safe-bash-zip-engine/unzip/arguments.js +270 -0
  758. package/dist/safe-bash-zip-engine/zip/aes.d.ts +17 -0
  759. package/dist/safe-bash-zip-engine/zip/aes.js +15 -0
  760. package/dist/safe-bash-zip-engine/zip/comments.d.ts +17 -0
  761. package/dist/safe-bash-zip-engine/zip/comments.js +77 -0
  762. package/dist/safe-bash-zip-engine/zip/crc.d.ts +1 -0
  763. package/dist/safe-bash-zip-engine/zip/crc.js +7 -0
  764. package/dist/safe-bash-zip-engine/zip/crypto.d.ts +19 -0
  765. package/dist/safe-bash-zip-engine/zip/crypto.js +16 -0
  766. package/dist/safe-bash-zip-engine/zip/dates.d.ts +4 -0
  767. package/dist/safe-bash-zip-engine/zip/dates.js +68 -0
  768. package/dist/safe-bash-zip-engine/zip/environment.d.ts +2 -0
  769. package/dist/safe-bash-zip-engine/zip/environment.js +60 -0
  770. package/dist/safe-bash-zip-engine/zip/grow.d.ts +3 -0
  771. package/dist/safe-bash-zip-engine/zip/grow.js +7 -0
  772. package/dist/safe-bash-zip-engine/zip/help.d.ts +4 -0
  773. package/dist/safe-bash-zip-engine/zip/help.js +194 -0
  774. package/dist/safe-bash-zip-engine/zip/line-endings.d.ts +2 -0
  775. package/dist/safe-bash-zip-engine/zip/line-endings.js +165 -0
  776. package/dist/safe-bash-zip-engine/zip/log.d.ts +22 -0
  777. package/dist/safe-bash-zip-engine/zip/log.js +153 -0
  778. package/dist/safe-bash-zip-engine/zip/lzma.d.ts +9 -0
  779. package/dist/safe-bash-zip-engine/zip/lzma.js +7 -0
  780. package/dist/safe-bash-zip-engine/zip/move.d.ts +11 -0
  781. package/dist/safe-bash-zip-engine/zip/move.js +57 -0
  782. package/dist/safe-bash-zip-engine/zip/names.d.ts +2 -0
  783. package/dist/safe-bash-zip-engine/zip/names.js +37 -0
  784. package/dist/safe-bash-zip-engine/zip/options.d.ts +13 -0
  785. package/dist/safe-bash-zip-engine/zip/options.js +23 -0
  786. package/dist/safe-bash-zip-engine/zip/repair.d.ts +10 -0
  787. package/dist/safe-bash-zip-engine/zip/repair.js +348 -0
  788. package/dist/safe-bash-zip-engine/zip/safety.d.ts +54 -0
  789. package/dist/safe-bash-zip-engine/zip/safety.js +19 -0
  790. package/dist/safe-bash-zip-engine/zip/sfx.d.ts +4 -0
  791. package/dist/safe-bash-zip-engine/zip/sfx.js +58 -0
  792. package/dist/safe-bash-zip-engine/zip/test-command.d.ts +5 -0
  793. package/dist/safe-bash-zip-engine/zip/test-command.js +98 -0
  794. package/dist/safe-bash-zip-engine/zip/volumes.d.ts +21 -0
  795. package/dist/safe-bash-zip-engine/zip/volumes.js +255 -0
  796. package/dist/safe-bash-zip-engine/zip/zip64.d.ts +30 -0
  797. package/dist/safe-bash-zip-engine/zip/zip64.js +25 -0
  798. package/dist/safe-bash-zip-engine/zip-format.d.ts +68 -0
  799. package/dist/safe-bash-zip-engine/zip-format.js +27 -0
  800. package/dist/safe-playwright-cloudflare/browser-codegen.generated.d.ts +7 -7
  801. package/dist/safe-playwright-cloudflare/browser-codegen.generated.js +866 -8069
  802. package/dist/safe-playwright-cloudflare/browser-run-code-budget.d.ts +0 -1
  803. package/dist/safe-playwright-cloudflare/browser-run-code-budget.js +0 -2
  804. package/dist/safe-playwright-cloudflare/browser-trace-archive.d.ts +5 -1
  805. package/dist/safe-playwright-cloudflare/browser-trace-archive.js +2 -1
  806. package/dist/safe-playwright-cloudflare/browser-trace-budget.js +2 -2
  807. package/dist/safe-playwright-cloudflare/shell-browser-resource.d.ts +2 -0
  808. package/dist/safe-playwright-cloudflare/shell-browser-resource.js +3 -11
  809. package/dist/safe-playwright-cloudflare/shell-playwright.d.ts +2 -0
  810. package/dist/safe-playwright-cloudflare/shell-playwright.js +1 -1
  811. package/dist/spreadsheet-engine/io/publication.d.ts +1 -0
  812. package/package.json +163 -14
  813. package/dist/safe-bash/chunks/chunk-AZAJJVFX.js +0 -23017
  814. package/dist/safe-bash/chunks/chunk-O4ZUCRGN.js +0 -13
  815. package/dist/safe-bash/chunks/chunk-S264DZO2.js +0 -243
  816. package/dist/safe-bash/chunks/chunk-WVG5SHHQ.js +0 -12
  817. package/dist/safe-bash/chunks/chunk-ZW6K2J7P.js +0 -2652
  818. package/dist/safe-bash/command-chunks/chunk-5MPOQ6V3.js +0 -181
  819. package/dist/safe-bash/command-chunks/chunk-BIXLZ3OG.js +0 -14342
  820. package/dist/safe-bash/command-chunks/chunk-DUYJE2HY.js +0 -14
  821. package/dist/safe-bash/command-chunks/chunk-NETECMOF.js +0 -40
  822. package/dist/safe-bash/command-chunks/chunk-XS3PGJU2.js +0 -343
  823. package/dist/safe-bash/command-chunks/chunk-XTZALMLR.js +0 -488
  824. package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.d.ts +0 -2
  825. package/dist/safe-bash/commands/archive/zip/aes-primitives-unavailable.js +0 -3
  826. package/dist/safe-bash/commands/archive/zip/aes-primitives.d.ts +0 -2
  827. package/dist/safe-bash/commands/archive/zip/aes-primitives.js +0 -3
  828. package/dist/safe-bash/commands/xml/document.d.ts +0 -2
  829. package/dist/safe-bash/commands/xml/document.js +0 -2
  830. package/dist/safe-bash/commands/xml/evaluate.d.ts +0 -2
  831. package/dist/safe-bash/commands/xml/evaluate.js +0 -2
  832. package/dist/safe-bash/commands/xml/json.d.ts +0 -2
  833. package/dist/safe-bash/commands/xml/json.js +0 -2
  834. package/dist/safe-bash/commands/xml/limits.d.ts +0 -2
  835. package/dist/safe-bash/commands/xml/limits.js +0 -2
  836. package/dist/safe-bash/commands/xml/query.d.ts +0 -2
  837. package/dist/safe-bash/commands/xml/query.js +0 -2
  838. package/dist/safe-bash/chunks/{chunk-NHOXKQNE.js → chunk-QVSRRNZT.js} +3 -3
  839. package/dist/safe-bash/command-chunks/{chunk-FIUFIDAO.js → chunk-2JRBIDAD.js} +3 -3
  840. package/dist/safe-bash/command-chunks/{chunk-B5BKA5WH.js → chunk-B5TAOCKD.js} +3 -3
  841. package/dist/safe-bash/command-chunks/{chunk-TYVCKQDH.js → chunk-J5SN3PZ3.js} +3 -3
  842. package/dist/safe-bash/command-chunks/{chunk-2ENZ6JGA.js → chunk-KEV7C3KH.js} +3 -3
  843. package/dist/safe-bash/command-chunks/{chunk-S62HELHU.js → chunk-PL6O4K6W.js} +3 -3
  844. package/dist/safe-bash/command-chunks/{chunk-2WRTLCGK.js → chunk-QZF3SINC.js} +4 -4
  845. package/dist/safe-bash/command-chunks/{chunk-X7TM3AKW.js → chunk-U6G67N23.js} +3 -3
  846. package/dist/safe-bash/command-chunks/{chunk-DDLQ5YDB.js → chunk-YHFXOX6U.js} +9 -9
  847. package/dist/safe-bash/command-chunks/{chunk-DQMOM72Z.js → chunk-ZRRBXU3M.js} +4 -4
@@ -133,6 +133,7 @@ function hasActiveExtensions(state) {
133
133
  }
134
134
  const memberPatternOperators = ["#", "##", "%", "%%", "/", "//", "/#", "/%", "^", "^^", ",", ",,"];
135
135
  const defaultParameterOperators = ["-", "+", "=", "?", ":-", ":+", ":=", ":?"];
136
+ const printfSlowTargets = new Set([...controlNames, "FUNCNAME", "RANDOM", "SECONDS", "PIPESTATUS", "_"]);
136
137
  async function signedLong(argument, budget, signal) {
137
138
  const checkpoint = async () => {
138
139
  budget.cpuCheckpoint();
@@ -184,6 +185,7 @@ export const defaultLimits = {
184
185
  maxPipelineStages: Infinity,
185
186
  maxLoopIterations: Infinity,
186
187
  maxSubstitutionDepth: Infinity,
188
+ maxFunctionDepth: Infinity,
187
189
  maxSourceBytes: Infinity,
188
190
  maxExpansionFields: Infinity,
189
191
  maxExpansionBytes: Infinity,
@@ -2088,7 +2090,7 @@ async function cloneState(state, signal, scope, inheritLocals = true) {
2088
2090
  const token = await textToken(savedOwner, name, signal);
2089
2091
  const admission = savedOwner.reserve({ slots: 1, metadata: 32, work: 5 });
2090
2092
  binding = typed.binding?.retain();
2091
- typedSavedVariables.set(copied, { owner: savedOwner, binding, tickets, prepared: { name: token, admission }, watch, scalarLegacy: typed.scalarLegacy });
2093
+ typedSavedVariables.set(copied, { owner: savedOwner, binding, tickets, prepared: { ...typed.prepared, name: token, admission }, watch, scalarLegacy: typed.scalarLegacy });
2092
2094
  tickets.cleanup = () => {
2093
2095
  if (typedSavedVariables.delete(copied) && scope)
2094
2096
  releaseBinding = scope.cleanup(async () => { await binding?.release(); });
@@ -3541,6 +3543,10 @@ function resolveSimpleArithOperand(tok, rawState, monitor, activeArrayStore, syn
3541
3543
  return Number(elemVal);
3542
3544
  }
3543
3545
  tok = resolveSyncNameref(rawState, tok);
3546
+ // These values come from execution context or lazy shell bindings, not raw variables.
3547
+ // Decline after resolving namerefs so aliases use the same full evaluator.
3548
+ if (tok === "LINENO" || tok === "_" || tok === "FUNCNAME" || tok === "PIPESTATUS")
3549
+ return undefined;
3544
3550
  if (rawState.nounset || activeArrayStore?.bindings.has(tok) || monitor?.hasOverlay(tok) || activeArrayStore?.watches.has(tok))
3545
3551
  return undefined;
3546
3552
  const raw = rawState.variables[tok];
@@ -3737,6 +3743,7 @@ export class Runtime {
3737
3743
  _syncPendingEvalResume;
3738
3744
  _syncReadOnlyArithRefs;
3739
3745
  _activeSyncLoopAssignedVars;
3746
+ _activeSyncArrayLoopWords;
3740
3747
  _activeSyncLoopHasFileMutations = false;
3741
3748
  _inSyncLoopPreflight = false;
3742
3749
  _activeSyncLoopIO;
@@ -4543,16 +4550,18 @@ export class Runtime {
4543
4550
  const rawSub = this._syncArithRawVars[subVar];
4544
4551
  if (typeof rawSub !== "string" || rawSub.length === 0)
4545
4552
  throw new ArrayFailure("empty var subscript in sync arithmetic");
4546
- resolvedSub = shellValueText(stateMonitor(st)?.values.get(subVar, rawSub) ?? rawSub);
4553
+ resolvedSub = this._syncArithRawWriteOnly && this._syncArithTouched?.has(subVar)
4554
+ ? rawSub
4555
+ : shellValueText(stateMonitor(st)?.values.get(subVar, rawSub) ?? rawSub);
4547
4556
  }
4548
4557
  else if (/^[a-zA-Z_][a-zA-Z_0-9]*$/.test(resolvedSub)) {
4549
4558
  const st = this._syncArithState;
4550
4559
  const binding = arrayStore(st)?.get(variable);
4551
4560
  if (!binding || !binding.associative) {
4552
- if (st.nounset || arrayStore(st)?.get(resolvedSub) || stateMonitor(st)?.hasOverlay(resolvedSub))
4561
+ const index = resolveSimpleArithOperand(resolvedSub, st, stateMonitor(st), arrayStore(st), this._syncArithRawWriteOnly ? this._syncArithTouched : undefined);
4562
+ if (index === undefined)
4553
4563
  throw new ArrayFailure("complex indexed ident subscript in sync arithmetic");
4554
- const rawSub = this._syncArithRawVars[resolvedSub];
4555
- resolvedSub = rawSub === undefined || rawSub === "" ? "0" : shellValueText(stateMonitor(st)?.values.get(resolvedSub, rawSub) ?? rawSub);
4564
+ resolvedSub = String(index);
4556
4565
  }
4557
4566
  }
4558
4567
  else {
@@ -5062,6 +5071,8 @@ export class Runtime {
5062
5071
  return binding.get(binding.associative ? binding.keys.get("30")?.index ?? -1 : 0);
5063
5072
  if (name === "DIRSTACK")
5064
5073
  return state.cwd;
5074
+ if (name === "BASH_SUBSHELL")
5075
+ return state.variables.BASH_SUBSHELL ?? "0";
5065
5076
  if (name === "FUNCNAME" && state.variables.FUNCNAME === undefined)
5066
5077
  return state.functionNames?.[0];
5067
5078
  if (name === "_" && state.variables._ === undefined)
@@ -5193,7 +5204,7 @@ export class Runtime {
5193
5204
  if (!watch.valid())
5194
5205
  throw new ArrayFailure("stale binding");
5195
5206
  binding = scalarLegacy ? undefined : store.get(name)?.retain();
5196
- typedSavedVariables.set(saved, { owner, binding, tickets, prepared: { name: token, admission }, watch, scalarLegacy });
5207
+ typedSavedVariables.set(saved, { owner, binding, tickets, prepared: { name: token, admission, identity: store.bindings.get(name)?.identity }, watch, scalarLegacy });
5197
5208
  tickets.cleanup = () => { typedSavedVariables.delete(saved); };
5198
5209
  }
5199
5210
  catch (error) {
@@ -5889,6 +5900,22 @@ export class Runtime {
5889
5900
  }
5890
5901
  return p0.operator !== undefined ? this.applySyncArrayMemberOperator(out, p0, rawState) : out;
5891
5902
  }
5903
+ syncArraySubscriptWord(index, state) {
5904
+ if (byteLocale(state.variables) || state.depth >= 24)
5905
+ return undefined;
5906
+ const cached = index;
5907
+ const word = index.word ?? (cached._cachedSyntax === state.extensions?.syntax ? cached._cachedWord : undefined);
5908
+ if (word)
5909
+ return word;
5910
+ try {
5911
+ cached._cachedWord = parseArraySubscript(index.source ?? index.decimal, this.budget.parsing, false, state.depth, false, state.extensions?.syntax);
5912
+ cached._cachedSyntax = state.extensions?.syntax;
5913
+ return cached._cachedWord;
5914
+ }
5915
+ catch {
5916
+ return undefined;
5917
+ }
5918
+ }
5892
5919
  tryFastArrayAssignmentSync(assignment, state, io, diagnosticLine, declaration, associative, ignoreYield = false) {
5893
5920
  if (!ignoreYield && hasYieldCheckpoint(this.signal))
5894
5921
  return false;
@@ -6198,20 +6225,9 @@ export class Runtime {
6198
6225
  return false;
6199
6226
  }
6200
6227
  if (assignment.kind === "element" && current?.associative) {
6201
- const cachedIdx = assignment.index;
6202
- let word = assignment.index.word ?? (cachedIdx._cachedSyntax === rawState.extensions?.syntax ? cachedIdx._cachedWord : undefined);
6203
- if (!word) {
6204
- if (byteLocale(rawState.variables) || rawState.depth >= 24)
6205
- return false;
6206
- try {
6207
- word = parseArraySubscript(assignment.index.source ?? assignment.index.decimal, this.budget.parsing, false, rawState.depth, false, rawState.extensions?.syntax);
6208
- cachedIdx._cachedWord = word;
6209
- cachedIdx._cachedSyntax = rawState.extensions?.syntax;
6210
- }
6211
- catch {
6212
- return false;
6213
- }
6214
- }
6228
+ const word = this.syncArraySubscriptWord(assignment.index, rawState);
6229
+ if (!word)
6230
+ return false;
6215
6231
  let keyVal;
6216
6232
  let val;
6217
6233
  try {
@@ -6977,7 +6993,7 @@ export class Runtime {
6977
6993
  if (closed)
6978
6994
  throw new ArrayFailure("indexed writer is closed");
6979
6995
  owner.assertOpen();
6980
- if (arrayStore(state) !== store || store.owner !== owner || identity !== undefined && store.bindings.get(name) !== identity)
6996
+ if (arrayStore(state) !== store || store.owner !== owner || identity !== undefined && store.bindings.get(name)?.identity !== identity)
6981
6997
  throw new ArrayFailure("incremental target identity changed");
6982
6998
  if (localIdentity() !== admittedLocal)
6983
6999
  throw new ArrayFailure("incremental target local identity changed");
@@ -7032,8 +7048,8 @@ export class Runtime {
7032
7048
  await prepared.close();
7033
7049
  }
7034
7050
  }
7035
- identity = store.bindings.get(name);
7036
- if (!identity)
7051
+ identity = store.bindings.get(name)?.identity;
7052
+ if (identity === undefined)
7037
7053
  throw new ArrayFailure("incremental target is not indexed");
7038
7054
  validate();
7039
7055
  }
@@ -9342,7 +9358,7 @@ export class Runtime {
9342
9358
  targetOk = true;
9343
9359
  }
9344
9360
  }
9345
- else if (isShellIdentifier(w2Plain) && !controlNames.has(w2Plain) && !rawState.readonlyVariables?.has(w2Plain) && !rawState.variableAttributes?.get(w2Plain) && !st?.get(w2Plain) && !mon.hasOverlay(w2Plain)) {
9361
+ else if (isShellIdentifier(w2Plain) && !printfSlowTargets.has(w2Plain) && !rawState.readonlyVariables?.has(w2Plain) && !rawState.variableAttributes?.get(w2Plain) && !st?.get(w2Plain) && !mon.hasOverlay(w2Plain)) {
9346
9362
  targetOk = true;
9347
9363
  }
9348
9364
  }
@@ -11260,7 +11276,7 @@ export class Runtime {
11260
11276
  const isSubTarget = openBr > 0 && targetSpec.endsWith("]") && targetSpec.length > openBr + 2;
11261
11277
  const rawTargetVar = isSubTarget ? targetSpec.slice(0, openBr) : targetSpec;
11262
11278
  const targetVar = isShellIdentifier(rawTargetVar) ? resolveSyncNameref(rawState, rawTargetVar) : "";
11263
- if (targetVar && isShellIdentifier(targetVar) && targetVar !== "OPTIND" && targetVar !== "PIPESTATUS" && targetVar !== "_" && !rawState.readonlyVariables?.has(targetVar) && !rawState.variableAttributes?.get(targetVar) && !monitor.hasOverlay(targetVar) && (isSubTarget ? Boolean(store?.get(targetVar)) : !store?.get(targetVar))) {
11279
+ if (targetVar && isShellIdentifier(targetVar) && !printfSlowTargets.has(targetVar) && !rawState.readonlyVariables?.has(targetVar) && !rawState.variableAttributes?.get(targetVar) && !monitor.hasOverlay(targetVar) && (isSubTarget ? Boolean(store?.get(targetVar)) : !store?.get(targetVar))) {
11264
11280
  fastSubScratchArgs.length = 0;
11265
11281
  let allStrings = true;
11266
11282
  try {
@@ -12151,6 +12167,7 @@ export class Runtime {
12151
12167
  let simpleRead = true;
12152
12168
  let readDelim = 10;
12153
12169
  let arrayTarget;
12170
+ let readLastArgument = command.words[command.words.length - 1].plain;
12154
12171
  while (readWordIdx < command.words.length) {
12155
12172
  const p = command.words[readWordIdx].plain;
12156
12173
  if (p === undefined) {
@@ -12184,6 +12201,8 @@ export class Runtime {
12184
12201
  delimStr = undefined;
12185
12202
  }
12186
12203
  }
12204
+ if (readWordIdx === command.words.length - 1)
12205
+ readLastArgument = delimStr;
12187
12206
  }
12188
12207
  if (delimStr !== undefined && delimStr.length >= 1 && delimStr.charCodeAt(0) > 0 && delimStr.charCodeAt(0) < 128) {
12189
12208
  readDelim = delimStr.charCodeAt(0);
@@ -12449,7 +12468,7 @@ export class Runtime {
12449
12468
  rawState.substitutionStatus = 0;
12450
12469
  if (rawState.variables._ !== undefined)
12451
12470
  delete rawState.variables._;
12452
- rawState.lastArgument = command.words[command.words.length - 1].plain;
12471
+ rawState.lastArgument = readLastArgument;
12453
12472
  if (io.assignmentDiagnosticContext)
12454
12473
  io.assignmentDiagnosticContext.name = undefined;
12455
12474
  if (!existing) {
@@ -13156,6 +13175,8 @@ export class Runtime {
13156
13175
  }
13157
13176
  }
13158
13177
  if (canSyncFn) {
13178
+ if (rawState.functionDepth >= this.budget.limits.maxFunctionDepth)
13179
+ this.budget.fail("maxFunctionDepth");
13159
13180
  const prevCommands = this.budget.commands;
13160
13181
  this.budget.tick();
13161
13182
  rawState.substitutionStatus = 0;
@@ -13507,12 +13528,12 @@ export class Runtime {
13507
13528
  return undefined;
13508
13529
  }
13509
13530
  const def = this.commands.get("printf");
13510
- const isPlainTargetId = targetSpec !== undefined && /^[a-zA-Z_][a-zA-Z_0-9]*$/.test(targetSpec) && targetSpec !== "OPTIND" && targetSpec !== "PIPESTATUS";
13531
+ const isPlainTargetId = targetSpec !== undefined && isShellIdentifier(targetSpec) && !printfSlowTargets.has(targetSpec);
13511
13532
  const isScalarTarget = isPlainTargetId && !store?.get(targetSpec);
13512
13533
  const brkIdx = targetSpec !== undefined && !isPlainTargetId && targetSpec.endsWith("]") ? targetSpec.indexOf("[") : -1;
13513
13534
  const arrName = isPlainTargetId && !isScalarTarget ? targetSpec : (brkIdx > 0 ? targetSpec.slice(0, brkIdx) : undefined);
13514
13535
  const subExpr = isPlainTargetId && !isScalarTarget ? "0" : (brkIdx > 0 ? targetSpec.slice(brkIdx + 1, -1) : undefined);
13515
- const isArrayTarget = arrName !== undefined && /^[a-zA-Z_][a-zA-Z_0-9]*$/.test(arrName) && !controlNames.has(arrName) && subExpr !== undefined && subExpr.length > 0 && !subExpr.includes("$") && !subExpr.includes("\x60");
13536
+ const isArrayTarget = arrName !== undefined && isShellIdentifier(arrName) && !printfSlowTargets.has(arrName) && subExpr !== undefined && subExpr.length > 0 && !subExpr.includes("$") && !subExpr.includes("\x60");
13516
13537
  if (def?.execute === printfCommand.execute && (isScalarTarget || isArrayTarget) && command.words.length <= this.budget.maxExpansionFieldsSmi) {
13517
13538
  fastSubScratchArgs.length = 0;
13518
13539
  let allStrings = true;
@@ -13973,7 +13994,201 @@ export class Runtime {
13973
13994
  this._syncLoopInvariantSubMap.set(part, { text: res, outBytes, exitStatus: 0, dynamic: usesInduction });
13974
13995
  return true;
13975
13996
  }
13997
+ admitSyncArrayLoop(command, state) {
13998
+ const monitor = stateMonitor(state);
13999
+ const store = monitor?.store;
14000
+ if (!store || store.watches.size || hasUnpreparedLocals(state) || state.depth >= 24 || byteLocale(state.variables) || state.nounset || hasActiveVariableAttributes(state) || this.budget.limits.maxExpansionBytes !== Infinity || this.budget.limits.maxExpansionFields !== Infinity)
14001
+ return undefined;
14002
+ const initializer = command.expressions[0]?.tree;
14003
+ if (initializer?.kind !== "binary" || initializer.operator !== "=" || initializer.left.kind !== "name")
14004
+ return undefined;
14005
+ const induction = initializer.left.name;
14006
+ const dynamicNames = new Set(["PIPESTATUS", "LINENO", "_", "FUNCNAME", "DIRSTACK", "BASH_SUBSHELL"]);
14007
+ const assignments = [];
14008
+ const appends = new Map();
14009
+ for (const list of command.body.lists) {
14010
+ if (list.terminator || list.pipelines.length !== 1)
14011
+ return undefined;
14012
+ const pipeline = list.pipelines[0];
14013
+ const cmd = pipeline.commands[0];
14014
+ if (pipeline.negate || pipeline.commands.length !== 1 || cmd?.kind !== "simple" || cmd.redirects.length || cmd.words.length !== 1)
14015
+ return undefined;
14016
+ const assignment = getArrayAssignment(cmd.words[0]) ?? this.assignment(cmd.words[0]);
14017
+ if (!assignment || assignment.name === induction || controlNames.has(assignment.name) || dynamicNames.has(assignment.name) || monitor.hasOverlay(assignment.name) || state.readonlyVariables?.has(assignment.name))
14018
+ return undefined;
14019
+ if ("kind" in assignment) {
14020
+ const binding = store.get(assignment.name);
14021
+ if (!binding || binding.references !== 1 || state.exported.has(assignment.name))
14022
+ return undefined;
14023
+ if (assignment.kind === "element") {
14024
+ if (!binding.associative || assignment.append)
14025
+ return undefined;
14026
+ }
14027
+ else {
14028
+ if (binding.associative || !assignment.append || assignment.entries.some(entry => entry.index || entry.append))
14029
+ return undefined;
14030
+ appends.set(assignment.name, (appends.get(assignment.name) ?? 0) + assignment.entries.length);
14031
+ }
14032
+ }
14033
+ else if (assignment.append || store.get(assignment.name) || ["IFS", "LC_ALL", "LC_CTYPE", "LC_COLLATE", "LANG"].includes(assignment.name))
14034
+ return undefined;
14035
+ assignments.push(assignment);
14036
+ }
14037
+ if (assignments.length > 30 || !assignments.some(assignment => "kind" in assignment && assignment.kind === "element"))
14038
+ return undefined;
14039
+ const integer = { min: 1, max: 20, integer: true }; // Signed shell arithmetic is 64 bit.
14040
+ const decimal = (value) => {
14041
+ if (value === "")
14042
+ return true; // Unset/empty arithmetic operands are zero.
14043
+ let i = value[0] === "-" ? 1 : 0;
14044
+ if (i === value.length || value.length > 20 || (value[i] === "0" && i + 1 !== value.length))
14045
+ return false;
14046
+ for (; i < value.length; i++)
14047
+ if (value[i] < "0" || value[i] > "9")
14048
+ return false;
14049
+ return true;
14050
+ };
14051
+ const literalShape = (value) => {
14052
+ if (typeof value !== "string")
14053
+ return undefined;
14054
+ for (let i = 0; i < value.length; i++)
14055
+ if (value.charCodeAt(i) >= 128)
14056
+ return undefined;
14057
+ return { min: value.length, max: value.length, integer: decimal(value) };
14058
+ };
14059
+ const integerArrays = new Set();
14060
+ for (const [name, { binding }] of store.bindings) {
14061
+ if (!binding.associative)
14062
+ continue;
14063
+ if (![...binding.values.values()].every(slot => typeof slot.text.shellValue === "string" && decimal(slot.text.shellValue)))
14064
+ continue;
14065
+ const writesInteger = assignments.every(assignment => {
14066
+ if (assignment.name !== name || !("kind" in assignment) || assignment.kind !== "element")
14067
+ return true;
14068
+ const parts = assignment.value.parts.filter(part => part.kind !== "text" || part.value !== "");
14069
+ return parts.length === 1 && parts[0].kind === "arithmetic" || parts.every(part => part.kind === "text") && decimal(parts.map(part => part.value).join(""));
14070
+ });
14071
+ if (writesInteger)
14072
+ integerArrays.add(name);
14073
+ }
14074
+ const entry = new Map();
14075
+ for (const assignment of assignments) {
14076
+ if ("kind" in assignment)
14077
+ continue;
14078
+ const raw = state.variables[assignment.name];
14079
+ const shape = literalShape(raw === undefined ? "" : monitor.values.get(assignment.name, raw) ?? raw);
14080
+ if (!shape)
14081
+ return undefined;
14082
+ entry.set(assignment.name, shape);
14083
+ }
14084
+ // Find an invariant over successive iterations. Growing strings or unknown
14085
+ // key bounds decline before execution; no speculative writes or replay.
14086
+ for (let pass = 0; pass < 32; pass++) {
14087
+ const values = new Map(entry);
14088
+ values.set(induction, integer);
14089
+ const words = new WeakSet();
14090
+ const integerWords = new WeakSet();
14091
+ const scalar = (name) => {
14092
+ if (!isShellIdentifier(name) || controlNames.has(name) || dynamicNames.has(name) || store.get(name) || monitor.hasOverlay(name) || hasUnpreparedLocal(state, name))
14093
+ return undefined;
14094
+ const known = values.get(name);
14095
+ if (known)
14096
+ return known;
14097
+ const raw = state.variables[name];
14098
+ return literalShape(raw === undefined ? "" : monitor.values.get(name, raw) ?? raw);
14099
+ };
14100
+ const shapeWord = (word, key = false) => {
14101
+ if (!word.parts.length)
14102
+ return undefined;
14103
+ const shapes = [];
14104
+ for (const part of word.parts) {
14105
+ let shape;
14106
+ if (part.kind === "text") {
14107
+ if (part.byteValue || invokedValues.has(part) || !part.quoted && part.value.includes("~"))
14108
+ return undefined;
14109
+ shape = literalShape(part.value);
14110
+ }
14111
+ else if (part.kind === "arithmetic") {
14112
+ const names = new Set();
14113
+ if (!collectPureReadOnlySmiNames(part.expression, names) || [...names].some(name => !scalar(name)?.integer))
14114
+ return undefined;
14115
+ shape = integer;
14116
+ }
14117
+ else if (part.kind === "variable") {
14118
+ if (part.indirect || part.specialParameter || part.prefixNames || part.length || part.substring || part.transform || part.keys || dynamicNames.has(part.name))
14119
+ return undefined;
14120
+ const selector = getArraySelector(part);
14121
+ if (selector) {
14122
+ if (key || selector.kind !== "element" || !store.get(part.name)?.associative || monitor.hasOverlay(part.name) || controlNames.has(part.name))
14123
+ return undefined;
14124
+ const index = this.syncArraySubscriptWord(selector.index, state);
14125
+ if (!index || !shapeWord(index, true))
14126
+ return undefined;
14127
+ shape = { min: 0, max: integerArrays.has(part.name) ? 20 : Infinity, integer: integerArrays.has(part.name) };
14128
+ if (part.operator !== undefined) {
14129
+ if ((part.operator !== "-" && part.operator !== ":-") || !part.alternate || !part.alternate.parts.every(p => p.kind === "text"))
14130
+ return undefined;
14131
+ const alternate = shapeWord(part.alternate);
14132
+ if (!alternate)
14133
+ return undefined;
14134
+ shape = { min: part.operator === ":-" ? Math.min(1, alternate.min) : 0, max: Math.max(shape.max, alternate.max), integer: shape.integer && alternate.integer };
14135
+ }
14136
+ }
14137
+ else {
14138
+ if (part.operator !== undefined)
14139
+ return undefined;
14140
+ shape = scalar(part.name);
14141
+ }
14142
+ }
14143
+ else
14144
+ return undefined;
14145
+ if (!shape)
14146
+ return undefined;
14147
+ shapes.push(shape);
14148
+ }
14149
+ const nonempty = shapes.filter(shape => shape.max !== 0);
14150
+ const result = { min: shapes.reduce((sum, shape) => sum + shape.min, 0), max: shapes.reduce((sum, shape) => sum + shape.max, 0), integer: nonempty.length === 0 || nonempty.length === 1 && nonempty[0].integer };
14151
+ if (key && (result.min === 0 || result.max > 4096))
14152
+ return undefined;
14153
+ words.add(word);
14154
+ if (result.integer)
14155
+ integerWords.add(word);
14156
+ return result;
14157
+ };
14158
+ for (const assignment of assignments) {
14159
+ if ("kind" in assignment && assignment.kind === "compound") {
14160
+ if (assignment.entries.some(entry => !entry.value.parts.every(part => part.quoted) || !shapeWord(entry.value)))
14161
+ return undefined;
14162
+ }
14163
+ else {
14164
+ if ("kind" in assignment) {
14165
+ const index = this.syncArraySubscriptWord(assignment.index, state);
14166
+ if (!index || !shapeWord(index, true))
14167
+ return undefined;
14168
+ }
14169
+ const shape = shapeWord(assignment.value);
14170
+ if (!shape)
14171
+ return undefined;
14172
+ if (!("kind" in assignment))
14173
+ values.set(assignment.name, shape);
14174
+ }
14175
+ }
14176
+ let stable = true;
14177
+ for (const [name, before] of entry) {
14178
+ const after = values.get(name);
14179
+ const merged = { min: Math.min(before.min, after.min), max: Math.max(before.max, after.max), integer: before.integer && after.integer };
14180
+ if (merged.min !== before.min || merged.max !== before.max || merged.integer !== before.integer)
14181
+ stable = false;
14182
+ entry.set(name, merged);
14183
+ }
14184
+ if (stable)
14185
+ return { words, integerWords, appends };
14186
+ }
14187
+ return undefined;
14188
+ }
13976
14189
  isPureSyncValueWord(word, rawState, allowAt = false) {
14190
+ if (this._activeSyncArrayLoopWords?.has(word))
14191
+ return true;
13977
14192
  if (word.parts.length === 0)
13978
14193
  return false;
13979
14194
  for (let i = 0; i < word.parts.length; i++) {
@@ -15080,8 +15295,7 @@ export class Runtime {
15080
15295
  if (!hasActiveVariableAttributes(rawState) &&
15081
15296
  vName !== undefined &&
15082
15297
  isShellIdentifier(vName) &&
15083
- !controlNames.has(vName) &&
15084
- vName !== "OPTIND" &&
15298
+ !printfSlowTargets.has(vName) &&
15085
15299
  !rawState.readonlyVariables?.has(vName) &&
15086
15300
  !rawState.variableAttributes?.get(vName) &&
15087
15301
  !store?.get(vName) &&
@@ -15129,14 +15343,19 @@ export class Runtime {
15129
15343
  if (hasUnpreparedLocals(rawState))
15130
15344
  return false;
15131
15345
  // Eligibility checks must not create bindings: the loop may never run.
15132
- // Element subscripts need the normal arithmetic and relative-index evaluator.
15133
- if (arrAssign.kind === "element")
15134
- return false;
15135
15346
  const curArr = store?.get(arrAssign.name);
15136
15347
  const activeArrStore = store ?? stateMonitor(rawState)?.store;
15137
- if (!curArr || curArr.references !== 1 || activeArrStore?.watches.has(arrAssign.name) || rawState.readonlyVariables?.has(arrAssign.name) || rawState.exported.has(arrAssign.name) || controlNames.has(arrAssign.name)) {
15348
+ if (!curArr || curArr.references !== 1 || activeArrStore?.watches.has(arrAssign.name) || rawState.readonlyVariables?.has(arrAssign.name) || rawState.variableAttributes?.has(arrAssign.name) || rawState.exported.has(arrAssign.name) || controlNames.has(arrAssign.name)) {
15138
15349
  return false;
15139
15350
  }
15351
+ if (arrAssign.kind === "element") {
15352
+ // Only the whole-loop proof can admit associative keys. Indexed
15353
+ // arithmetic and relative subscripts retain normal evaluation.
15354
+ const index = curArr.associative ? this.syncArraySubscriptWord(arrAssign.index, rawState) : undefined;
15355
+ if (!index || !this._activeSyncArrayLoopWords?.has(index) || !this.isPureSyncValueWord(index, rawState) || !this.isPureSyncValueWord(arrAssign.value, rawState))
15356
+ return false;
15357
+ continue;
15358
+ }
15140
15359
  if (arrAssign.kind === "compound" && arrAssign.entries.length <= 16 && arrAssign.entries.every(e => !e.append)) {
15141
15360
  let allEntriesOk = true;
15142
15361
  for (let ei = 0; ei < arrAssign.entries.length; ei++) {
@@ -15554,7 +15773,7 @@ export class Runtime {
15554
15773
  }
15555
15774
  return res;
15556
15775
  }
15557
- syncLoopArithmeticReadsRemainInteger(steps, rawState) {
15776
+ syncLoopArithmeticReadsRemainInteger(steps, rawState, integerWords) {
15558
15777
  const reads = new Set();
15559
15778
  const seen = new WeakSet();
15560
15779
  // Inspect words in commands, conditions, substitutions, and inlined functions.
@@ -15577,7 +15796,7 @@ export class Runtime {
15577
15796
  const safeWrites = (items) => items.every(step => {
15578
15797
  if (step.name && reads.has(step.name)) {
15579
15798
  const literal = step.value?.plain;
15580
- if (step.append || (!this.extractIntLoopStep(step, rawState) && (literal === undefined || !/^-?[0-9]+$/.test(literal))))
15799
+ if (step.append || (!integerWords?.has(step.value) && !this.extractIntLoopStep(step, rawState) && (literal === undefined || !/^-?[0-9]+$/.test(literal))))
15581
15800
  return false;
15582
15801
  }
15583
15802
  if (step.readHereString?.varNames.some(name => reads.has(name)) || (step.readHereString?.arrayTarget && reads.has(step.readHereString.arrayTarget)))
@@ -15736,6 +15955,9 @@ export class Runtime {
15736
15955
  const prevAssignedVars = this._activeSyncLoopAssignedVars;
15737
15956
  const prevLoopIO = this._activeSyncLoopIO;
15738
15957
  const prevInvMap = this._syncLoopInvariantSubMap;
15958
+ const prevArrayWords = this._activeSyncArrayLoopWords;
15959
+ const arrayLoop = command.kind === "arithmetic-for" ? this.admitSyncArrayLoop(command, rawState) : undefined;
15960
+ this._activeSyncArrayLoopWords = arrayLoop?.words;
15739
15961
  this._activePrintfInductionName = printfInductionName;
15740
15962
  this._activeSyncLoopAssignedVars = this.collectSyncLoopAssignedVars(command, rawState);
15741
15963
  this._activeSyncLoopIO = io;
@@ -15750,6 +15972,7 @@ export class Runtime {
15750
15972
  this._activeSyncLoopAssignedVars = prevAssignedVars;
15751
15973
  this._activeSyncLoopIO = prevLoopIO;
15752
15974
  this._syncLoopInvariantSubMap = prevInvMap;
15975
+ this._activeSyncArrayLoopWords = prevArrayWords;
15753
15976
  }
15754
15977
  if (!bodySyncOk) {
15755
15978
  command._skipTrySyncLoop = true;
@@ -15788,7 +16011,7 @@ export class Runtime {
15788
16011
  this._syncLoopInvariantSubMap = localInvMap;
15789
16012
  try {
15790
16013
  const { steps: bodyAssignments, redirectCount } = this.buildSyncLoopBody(command, rawState, io);
15791
- if (bodyAssignments.length > 30 || !this.syncLoopArithmeticReadsRemainInteger(bodyAssignments, rawState))
16014
+ if (bodyAssignments.length > 30 || !this.syncLoopArithmeticReadsRemainInteger(bodyAssignments, rawState, arrayLoop?.integerWords))
15792
16015
  return undefined;
15793
16016
  const touched = this._syncArithRawWriteOnly ? new Set() : sharedSyncLoopTouched;
15794
16017
  touched.clear();
@@ -15940,6 +16163,10 @@ export class Runtime {
15940
16163
  : step.value ? [step.value] : [];
15941
16164
  for (let wIdx = 0; wIdx < wordsToScan.length; wIdx++) {
15942
16165
  const wVal = wordsToScan[wIdx];
16166
+ // The array-loop proof tracks integer values at each statement,
16167
+ // including scalars loaded from arrays earlier in the same iteration.
16168
+ if (arrayLoop?.words.has(wVal))
16169
+ continue;
15943
16170
  for (let i = 0; i < wVal.parts.length; i++) {
15944
16171
  const part = wVal.parts[i];
15945
16172
  if (part.kind === "text" || part.kind === "variable")
@@ -16028,6 +16255,14 @@ export class Runtime {
16028
16255
  return undefined;
16029
16256
  }
16030
16257
  const { e0, e1, e2, iterations, inductionName, startVal, limitVal, isLe, isSimpleLiteralAsc, arithNamesList, intSteps, allIntStepsReady, hasSubIntStep, hasDeferredSteps, deferredMask, touchedIntNamesList, } = plan;
16258
+ if (arrayLoop?.appends.size) {
16259
+ if (!isSimpleLiteralAsc)
16260
+ return undefined;
16261
+ for (const [name, count] of arrayLoop.appends) {
16262
+ if (store.get(name).maximum + iterations * count > 2147483647)
16263
+ return undefined;
16264
+ }
16265
+ }
16031
16266
  if (inductionName === "OPTIND" || controlNames.has(inductionName) || monitor.hasOverlay(inductionName) || hasUnpreparedLocal(rawState, inductionName) || store?.get(inductionName) || rawState.readonlyVariables?.has(inductionName) || rawState.variableAttributes?.get(inductionName))
16032
16267
  return undefined;
16033
16268
  if (!isSimpleLiteralAsc && (!this.canSyncArithmeticWithoutFault(e0.tree, rawState, diagnosticLine) || !this.canSyncArithmeticWithoutFault(e1.tree, rawState, diagnosticLine) || !this.canSyncArithmeticWithoutFault(e2.tree, rawState, diagnosticLine)))
@@ -16035,6 +16270,8 @@ export class Runtime {
16035
16270
  if (arithNamesList.length > 0) {
16036
16271
  for (let a = 0; a < arithNamesList.length; a++) {
16037
16272
  const refName = arithNamesList[a];
16273
+ if (store?.get(refName))
16274
+ return undefined;
16038
16275
  if (refName === inductionName)
16039
16276
  continue;
16040
16277
  const initial = rawState.variables[refName];
@@ -18711,6 +18948,7 @@ export class Runtime {
18711
18948
  signal.throwIfAborted();
18712
18949
  child.extensions = forkExtensions(state.extensions, "subshell");
18713
18950
  child.isolated = true;
18951
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
18714
18952
  child.depth++;
18715
18953
  const allocation = this.budget.values.scope();
18716
18954
  scope.register(() => allocation.close());
@@ -18905,6 +19143,9 @@ export class Runtime {
18905
19143
  })
18906
19144
  : (tryCloneStateSync(state) ?? await cloneState(state, this.signal));
18907
19145
  preparedChild = child;
19146
+ if (child._readOnlyStage)
19147
+ child.variables = { ...child.variables };
19148
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
18908
19149
  if (!child._readOnlyStage) {
18909
19150
  child.extensions = undefined;
18910
19151
  child.extensions = forkExtensions(state.extensions, "pipeline");
@@ -19841,6 +20082,7 @@ export class Runtime {
19841
20082
  try {
19842
20083
  child.extensions = forkExtensions(state.extensions, "subshell");
19843
20084
  child.isolated = true;
20085
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
19844
20086
  child.loopDepth = 0;
19845
20087
  if (state.extensions?.checkpoints.length)
19846
20088
  await this.extensionCheckpoint("child-job-install", state, io);
@@ -21188,6 +21430,8 @@ export class Runtime {
21188
21430
  async dispatchFastFunction(name, body, args, state, io, pendingResume) {
21189
21431
  if (!pendingResume && state.depth >= this.budget.limits.maxSubstitutionDepth)
21190
21432
  this.budget.fail("maxSubstitutionDepth");
21433
+ if (!pendingResume && state.functionDepth >= this.budget.limits.maxFunctionDepth)
21434
+ this.budget.fail("maxFunctionDepth");
21191
21435
  const scope = io[invocationScope].child();
21192
21436
  try {
21193
21437
  const monitor = stateMonitor(state);
@@ -21700,6 +21944,8 @@ export class Runtime {
21700
21944
  ensureRuntimeContext();
21701
21945
  if (state.depth >= this.budget.limits.maxSubstitutionDepth)
21702
21946
  this.budget.fail("maxSubstitutionDepth");
21947
+ if (state.functionDepth >= this.budget.limits.maxFunctionDepth)
21948
+ this.budget.fail("maxFunctionDepth");
21703
21949
  const positional = state.positional;
21704
21950
  const savedPositionals = stateMonitor(state).positionals.clone();
21705
21951
  const positionalSetVersion = state.positionalSetVersion ?? 0;
@@ -22267,13 +22513,20 @@ export class Runtime {
22267
22513
  const option = args.shift();
22268
22514
  if (option === "--" || option === "-")
22269
22515
  break;
22516
+ if (option === "--version") {
22517
+ await writeDiagnostic(context.stdout, "safe-bash (poe-code)\n");
22518
+ return 0;
22519
+ }
22520
+ if (option === "--login" || option === "--norc" || option === "--noprofile" || option === "--posix") {
22521
+ continue;
22522
+ }
22270
22523
  const enabled = option[0] === "-";
22271
22524
  if ((option === "-o" || option === "+o") && Object.hasOwn(options, args[0] ?? "")) {
22272
22525
  options[args.shift()] = enabled;
22273
22526
  continue;
22274
22527
  }
22275
22528
  const flags = option.slice(1);
22276
- if (!flags.length || [...flags].some(flag => !Object.hasOwn(flagsByName, flag) && !(enabled && (flag === "c" || flag === "s")))) {
22529
+ if (!flags.length || [...flags].some(flag => !Object.hasOwn(flagsByName, flag) && !(enabled && (flag === "c" || flag === "s" || flag === "l" || flag === "i")))) {
22277
22530
  await writeDiagnostic(context.stderr, `${context.command}: ${option}: unsupported option; supported flags are -c, -s, +/-a, +/-e, +/-u, +/-n, +/-B, +/-f, +/-C and +/-o ${Object.keys(options).join(", ")}\n`);
22278
22531
  return 2;
22279
22532
  }
@@ -23796,6 +24049,9 @@ export class Runtime {
23796
24049
  await writeDiagnostic(context.stderr, `printf: ${name}: readonly variable\n`);
23797
24050
  return 1;
23798
24051
  }
24052
+ // Bash ignores assignments to its function-stack variable.
24053
+ if (name === "FUNCNAME")
24054
+ return status;
23799
24055
  if (index || arrayStore(state)?.get(name)) {
23800
24056
  const decoder = new TextDecoder("utf-8", { fatal: true, ignoreBOM: true });
23801
24057
  const decode = (bytes) => {
@@ -24722,7 +24978,8 @@ export class Runtime {
24722
24978
  let shadow;
24723
24979
  try {
24724
24980
  const tickets = operation.reserve({ generation: true, version: true, epoch: true, work: 8 });
24725
- shadow = IndexedBinding.create(store.owner);
24981
+ if (enabled.has("I"))
24982
+ shadow = await store.get(name).copy(this.signal);
24726
24983
  this.signal.throwIfAborted();
24727
24984
  if (state.readonlyVariables?.has(name))
24728
24985
  throw new ArrayFailure("readonly binding");
@@ -24731,7 +24988,7 @@ export class Runtime {
24731
24988
  let released;
24732
24989
  stateMonitor(state).publish(tickets, name, () => {
24733
24990
  locals.set(name, saved);
24734
- released = store.publish(name, shadow, tickets);
24991
+ released = shadow ? store.publish(name, shadow, tickets) : store.remove(name, tickets);
24735
24992
  });
24736
24993
  shadow = undefined;
24737
24994
  await released;
@@ -25627,6 +25884,7 @@ export class Runtime {
25627
25884
  const capture = new Capture();
25628
25885
  const child = await cloneState(state, this.signal);
25629
25886
  child.isolated = true;
25887
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
25630
25888
  child.extensions = forkExtensions(state.extensions, "substitution");
25631
25889
  if (state.profile !== "sh")
25632
25890
  child.errexit = false;
@@ -25680,6 +25938,7 @@ export class Runtime {
25680
25938
  }
25681
25939
  const child = await cloneState(state, this.signal);
25682
25940
  child.isolated = true;
25941
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
25683
25942
  child.extensions = forkExtensions(state.extensions, "substitution");
25684
25943
  if (state.profile !== "sh")
25685
25944
  child.errexit = false;
@@ -25733,6 +25992,7 @@ export class Runtime {
25733
25992
  const capture = new Capture();
25734
25993
  const child = await cloneState(state, this.signal);
25735
25994
  child.isolated = true;
25995
+ child.variables.BASH_SUBSHELL = String(Number(state.variables.BASH_SUBSHELL ?? 0) + 1);
25736
25996
  child.extensions = forkExtensions(state.extensions, "substitution");
25737
25997
  if (state.profile !== "sh")
25738
25998
  child.errexit = false;
@@ -25835,7 +26095,7 @@ export class Runtime {
25835
26095
  if (part.length)
25836
26096
  return String(binding?.values.size ?? (part.name === "FUNCNAME" && state.variables.FUNCNAME === undefined ? state.functionNames?.length ?? 0 : state.variables[part.name] === undefined ? 0 : 1));
25837
26097
  const values = await this.arrayMembers(part.name, state, io, selector.kind === "keys" || part.keys === true, part.substring);
25838
- const space = (selector.kind === "keys" || part.keys === true) ? Boolean(hereDocument || (selector.separator === "@" ? !part.quoted && !split || state.variables.IFS === "" : !part.quoted && split && state.variables.IFS === "")) : (!split && selector.separator === "@");
26098
+ const space = (selector.kind === "keys" || part.keys === true) ? Boolean(hereDocument || (selector.separator === "@" ? !part.quoted && !split || state.variables.IFS === "" : !part.quoted && split && state.variables.IFS === "")) : (!split && selector.separator === "@" && (!part.substring || !part.quoted || state.variables.IFS === ""));
25839
26099
  return this.arrayJoin(store.owner, values, space ? " " : this.ifsSeparator(state, io));
25840
26100
  }
25841
26101
  if (part.substring && (part.name === "@" || part.name === "*")) {
@@ -26477,7 +26737,7 @@ export class Runtime {
26477
26737
  }
26478
26738
  if (part.indirect || part.specialParameter)
26479
26739
  return undefined;
26480
- if (part.name === "@" || part.name === "*" || part.name === "PIPESTATUS" || part.name === "LINENO" || part.name === "_" || part.name === "FUNCNAME" || part.name === "DIRSTACK")
26740
+ if (part.name === "@" || part.name === "*" || part.name === "PIPESTATUS" || part.name === "LINENO" || part.name === "BASH_SUBSHELL" || part.name === "_" || part.name === "FUNCNAME" || part.name === "DIRSTACK")
26481
26741
  return undefined;
26482
26742
  if (!isShellIdentifier(part.name))
26483
26743
  return undefined;
@@ -26558,7 +26818,7 @@ export class Runtime {
26558
26818
  }
26559
26819
  const ifsVal = monitor?.values.get("IFS", rawVars.IFS ?? " ") ?? rawVars.IFS ?? " ";
26560
26820
  if (validElemOp && typeof ifsVal === "string" && (ifsVal.length === 0 || ifsVal.charCodeAt(0) < 128)) {
26561
- const sep = selector.separator === "@" && (ifsVal.length === 0 || !isKeys && part.operator === undefined) ? " " : ifsVal.length > 0 ? ifsVal[0] : "";
26821
+ const sep = selector.separator === "@" && (ifsVal.length === 0 || !isKeys && part.operator === undefined && !part.substring) ? " " : ifsVal.length > 0 ? ifsVal[0] : "";
26562
26822
  const parameterLine = part.line ?? overrideDiagnosticLine;
26563
26823
  const evalSliceInt = (w) => {
26564
26824
  if (w.parts.length === 0)
@@ -26673,20 +26933,9 @@ export class Runtime {
26673
26933
  return undefined;
26674
26934
  }
26675
26935
  if (selector.kind === "element") {
26676
- const cachedSub = selector.index;
26677
- let subWord = selector.index.word ?? (cachedSub._cachedSyntax === rawState.extensions?.syntax ? cachedSub._cachedWord : undefined);
26678
- if (!subWord) {
26679
- if (byteLocale(rawVars) || rawState.depth >= 24)
26680
- return undefined;
26681
- try {
26682
- subWord = parseArraySubscript(selector.index.source ?? selector.index.decimal, this.budget.parsing, false, rawState.depth, false, rawState.extensions?.syntax);
26683
- cachedSub._cachedWord = subWord;
26684
- cachedSub._cachedSyntax = rawState.extensions?.syntax;
26685
- }
26686
- catch {
26687
- return undefined;
26688
- }
26689
- }
26936
+ const subWord = this.syncArraySubscriptWord(selector.index, rawState);
26937
+ if (!subWord)
26938
+ return undefined;
26690
26939
  const subVal = this.fastValueWord(subWord, rawState, io, false, false, false, false, undefined, part.line ?? overrideDiagnosticLine);
26691
26940
  if (typeof subVal !== "string")
26692
26941
  return undefined;
@@ -26861,6 +27110,14 @@ export class Runtime {
26861
27110
  if (part.length || part.operator !== undefined || this.budget.limits.maxExpansionBytes !== Infinity || rawState.depth + (io.parameterDepth ?? 0) >= 60 || !part.substring.offset.parts.every(p => p.kind === "text" || p.kind === "arithmetic" || (p.kind === "variable" && !p.operator && !p.substring)) || (part.substring.length && !part.substring.length.parts.every(p => p.kind === "text" || p.kind === "arithmetic" || (p.kind === "variable" && !p.operator && !p.substring))) || ValueScope.prototype.reserve !== defaultValueScopeReserve || String.prototype.codePointAt !== defaultStringCodePointAt || globalThis.Float64Array !== defaultFloat64Array || (!part.substring.offset.parts.length && !part.substring.length)) {
26862
27111
  return undefined;
26863
27112
  }
27113
+ // Resolve the parameter before expanding either arithmetic operand.
27114
+ const raw = rawVars[part.name];
27115
+ this.requireParameter(raw, part.name, state, io, part.line ?? overrideDiagnosticLine);
27116
+ if (raw === undefined) {
27117
+ if (split && !part.quoted)
27118
+ return undefined;
27119
+ continue;
27120
+ }
26864
27121
  const parameterLine = part.line ?? overrideDiagnosticLine;
26865
27122
  const evalSubInt = (w) => {
26866
27123
  if (w.parts.length === 0)
@@ -26886,13 +27143,6 @@ export class Runtime {
26886
27143
  const lenNum = part.substring.length ? evalSubInt(part.substring.length) : undefined;
26887
27144
  if (part.substring.length && lenNum === undefined)
26888
27145
  return undefined;
26889
- const raw = rawVars[part.name];
26890
- this.requireParameter(raw, part.name, state, io, part.line ?? overrideDiagnosticLine);
26891
- if (raw === undefined) {
26892
- if (split && !part.quoted)
26893
- return undefined;
26894
- continue;
26895
- }
26896
27146
  const val = this._syncArithRawWriteOnly && this._syncArithTouched?.has(part.name) ? raw : (monitor?.values.get(part.name, raw) ?? raw);
26897
27147
  if (typeof val !== "string" || val.length > this.budget.limits.maxExpansionBytes)
26898
27148
  return undefined;
@@ -35921,6 +36171,8 @@ export class Runtime {
35921
36171
  if (p.kind === "text")
35922
36172
  continue;
35923
36173
  if (p.kind === "variable") {
36174
+ if (p.name === "BASH_SUBSHELL")
36175
+ return false;
35924
36176
  if (!p.indirect && !p.prefixNames && !p.length && !p.substring && !p.transform && p.operator === undefined && getArraySelector(p) === undefined && (p.name === "?" || p.name === "#" || (p.name.length === 1 && p.name >= "1" && p.name <= "9"))) {
35925
36177
  const activePos = this._fastSubPositional ?? rawState.positional;
35926
36178
  if (rawState.nounset && p.name >= "1" && p.name <= "9" && activePos[p.name.charCodeAt(0) - 49] === undefined)