@poe-platform/safe-bash 0.1.800 → 0.1.801

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 (459) hide show
  1. package/README.md +16 -5
  2. package/dist/image-ast/index.browser.js +119 -75
  3. package/dist/image-ast/index.js +119 -75
  4. package/dist/pdf-ast/index.js +4 -3
  5. package/dist/safe-bash/chunks/{chunk-LUOFIVNI.js → chunk-3NDIFSNM.js} +3 -3
  6. package/dist/safe-bash/chunks/{chunk-4SEW2Q6H.js → chunk-3R3AANOR.js} +1 -1
  7. package/dist/safe-bash/chunks/{chunk-HHW7MGS2.js → chunk-45PK3NWI.js} +4 -4
  8. package/dist/safe-bash/chunks/{chunk-KHMGTPD6.js → chunk-46Z5E5EV.js} +2 -2
  9. package/dist/safe-bash/chunks/{chunk-XB3B7KMM.js → chunk-6O77NL2S.js} +1 -1
  10. package/dist/safe-bash/chunks/{chunk-T3JTVIEP.js → chunk-6PAVEFT3.js} +1 -1
  11. package/dist/safe-bash/chunks/{chunk-PYVEAFJM.js → chunk-74GHTNJA.js} +3 -2
  12. package/dist/safe-bash/chunks/{chunk-LQHGH25W.js → chunk-7R5BDCG7.js} +1 -1
  13. package/dist/safe-bash/chunks/{chunk-RMWLWH7Q.js → chunk-7VNF5BFF.js} +300 -737
  14. package/dist/safe-bash/chunks/{chunk-QVSRRNZT.js → chunk-A7XEHALN.js} +4 -4
  15. package/dist/safe-bash/chunks/{chunk-MHZ24KEI.js → chunk-AM5ESLPH.js} +1 -1
  16. package/dist/safe-bash/chunks/{chunk-3L3T6LYV.js → chunk-AUSNDQTJ.js} +1 -1
  17. package/dist/safe-bash/chunks/{chunk-YG5WAHK7.js → chunk-B7TAL7S5.js} +1 -3
  18. package/dist/safe-bash/chunks/{chunk-K7IQZE7D.js → chunk-C5OWC2TL.js} +1 -1
  19. package/dist/safe-bash/chunks/{chunk-F3RV2F72.js → chunk-CHYGPFVM.js} +1 -1
  20. package/dist/safe-bash/chunks/{chunk-M4CFCXHN.js → chunk-CS4MNM6I.js} +1 -1
  21. package/dist/safe-bash/chunks/{chunk-H6JW3E4F.js → chunk-CTVWDACF.js} +1 -1
  22. package/dist/safe-bash/chunks/{chunk-BHJE5LPZ.js → chunk-D3ANYGMC.js} +1 -1
  23. package/dist/safe-bash/chunks/{chunk-NLAW7KDI.js → chunk-E7OYNDGL.js} +1 -1
  24. package/dist/safe-bash/chunks/{chunk-SOZK5JVX.js → chunk-FBUCWVTE.js} +1 -1
  25. package/dist/safe-bash/chunks/{chunk-RKKRJ54E.js → chunk-FNDNHAGE.js} +30 -23
  26. package/dist/safe-bash/chunks/{chunk-KCVSVD65.js → chunk-I5HZ4FGE.js} +1 -1
  27. package/dist/safe-bash/chunks/{chunk-JJSTTIEZ.js → chunk-ICFDYV64.js} +1 -1
  28. package/dist/safe-bash/chunks/{chunk-TYD7EVUJ.js → chunk-IVRQ4BXL.js} +1 -1
  29. package/dist/safe-bash/chunks/{chunk-KV7PKOHV.js → chunk-IWDICZVK.js} +1 -1
  30. package/dist/safe-bash/chunks/{chunk-I4OAEOP6.js → chunk-J42RIHHJ.js} +1 -1
  31. package/dist/safe-bash/chunks/{chunk-K2VCOJ2B.js → chunk-K6VCD7IY.js} +7 -12
  32. package/dist/safe-bash/chunks/{chunk-63FXVDGF.js → chunk-LVOBFF4D.js} +1 -1
  33. package/dist/safe-bash/chunks/{chunk-U5NUZPCC.js → chunk-MHMMRCYC.js} +1 -1
  34. package/dist/safe-bash/chunks/{chunk-6HZYFL3H.js → chunk-NR3EM4LS.js} +1 -1
  35. package/dist/safe-bash/chunks/{chunk-VYZTG3GV.js → chunk-NZQXYWA3.js} +1 -1
  36. package/dist/safe-bash/chunks/{chunk-TFGRKY43.js → chunk-OQRVVGR6.js} +1 -1
  37. package/dist/safe-bash/chunks/{chunk-PPYM75Z3.js → chunk-OV6IHKO6.js} +2 -2
  38. package/dist/safe-bash/chunks/{chunk-KW24TAIU.js → chunk-PQRAK7HU.js} +920 -432
  39. package/dist/safe-bash/chunks/{chunk-K4YMYFRJ.js → chunk-SZH7EJLD.js} +116 -697
  40. package/dist/safe-bash/chunks/{chunk-7YSRXFEG.js → chunk-TFIBK2GI.js} +1 -1
  41. package/dist/safe-bash/chunks/{chunk-I7L3G3NX.js → chunk-UE5KZDEK.js} +2 -2
  42. package/dist/safe-bash/chunks/{chunk-QU3BVQ53.js → chunk-UTBUUFDM.js} +1 -1
  43. package/dist/safe-bash/chunks/{chunk-JTLSUJ7V.js → chunk-VQDD3G76.js} +42 -25
  44. package/dist/safe-bash/chunks/{chunk-46UISJCK.js → chunk-VTH3MLDU.js} +1 -1
  45. package/dist/safe-bash/chunks/{chunk-LLZCZ24K.js → chunk-XVOSKJE2.js} +1 -1
  46. package/dist/safe-bash/chunks/{csvkit-QGP3GAOB.js → csvkit-TACDU7FC.js} +3 -3
  47. package/dist/safe-bash/chunks/{ffmpeg-JTVH26MK.js → ffmpeg-WTC3TEFI.js} +2 -2
  48. package/dist/safe-bash/chunks/{gh-I7QX7N5C.js → gh-6WU6PXL4.js} +2 -2
  49. package/dist/safe-bash/chunks/{git-MA7NKYVP.js → git-EFZIGJW4.js} +2 -2
  50. package/dist/safe-bash/chunks/{imagemagick-Y4NPWX2Q.js → imagemagick-EIEYGWPF.js} +2 -2
  51. package/dist/safe-bash/chunks/{implementation-BWDKOVQJ.js → implementation-MLFHUQ5M.js} +2 -2
  52. package/dist/safe-bash/chunks/{mmdc-44PELHDG.js → mmdc-ROQJT5HQ.js} +2 -2
  53. package/dist/safe-bash/chunks/{pdfimages-635TRW4Q.js → pdfimages-DW7LWXFI.js} +2 -2
  54. package/dist/safe-bash/chunks/{pdfinfo-FSDAA2KY.js → pdfinfo-TIP6XLUQ.js} +2 -2
  55. package/dist/safe-bash/chunks/{pdftk-GQ5UH3VG.js → pdftk-DMG22ITZ.js} +2 -2
  56. package/dist/safe-bash/chunks/{pdftoppm-YTXQCAYT.js → pdftoppm-WNDYR72T.js} +2 -2
  57. package/dist/safe-bash/chunks/{pdftotext-CVA2G7FY.js → pdftotext-5IPZ4NI7.js} +2 -2
  58. package/dist/safe-bash/chunks/{qpdf-HZMIFG4A.js → qpdf-TTX2DIUA.js} +2 -2
  59. package/dist/safe-bash/chunks/{sips-E7UBDP33.js → sips-XYS46JPJ.js} +2 -2
  60. package/dist/safe-bash/chunks/{soffice-ELASUWUK.js → soffice-TU73E5KL.js} +2 -2
  61. package/dist/safe-bash/chunks/{wkhtmltopdf-EPO6YCMG.js → wkhtmltopdf-FSZ2CHGE.js} +2 -2
  62. package/dist/safe-bash/command-chunks/{chunk-QBGA56UH.js → chunk-2ELYGJDD.js} +7 -7
  63. package/dist/safe-bash/command-chunks/{chunk-52PCQXD2.js → chunk-2NHI5F5S.js} +2 -1
  64. package/dist/safe-bash/command-chunks/{chunk-HDKVO47G.js → chunk-2SQEIUGJ.js} +3 -3
  65. package/dist/safe-bash/command-chunks/{chunk-5LSGEIZY.js → chunk-3HHCU5YU.js} +4 -3
  66. package/dist/safe-bash/command-chunks/{chunk-TF6OA2GK.js → chunk-3NV3HYT2.js} +1 -1
  67. package/dist/safe-bash/command-chunks/{chunk-2QHG43WJ.js → chunk-4BB2SWJ5.js} +1 -1
  68. package/dist/safe-bash/command-chunks/{chunk-IEXHHNOF.js → chunk-4J5CZ2DP.js} +2 -7
  69. package/dist/safe-bash/command-chunks/{chunk-WDHI3S6Y.js → chunk-4OOUQTQO.js} +1 -1
  70. package/dist/safe-bash/command-chunks/{chunk-YMONDXET.js → chunk-4ZQWGOZB.js} +2 -2
  71. package/dist/safe-bash/command-chunks/{chunk-L6DVEBW3.js → chunk-5BSTFCXG.js} +2 -2
  72. package/dist/safe-bash/command-chunks/{chunk-Q3DII3Q7.js → chunk-5PWJG2UK.js} +1 -1
  73. package/dist/safe-bash/command-chunks/{chunk-JMPP4TCW.js → chunk-5UBXNSFZ.js} +3 -2
  74. package/dist/safe-bash/command-chunks/{chunk-3NG75MOB.js → chunk-67GQA75T.js} +1 -1
  75. package/dist/safe-bash/command-chunks/{chunk-L6SU4S26.js → chunk-6B7WQIKB.js} +0 -7
  76. package/dist/safe-bash/command-chunks/{chunk-V6MSPQLA.js → chunk-6BNTBWIK.js} +4 -39
  77. package/dist/safe-bash/command-chunks/{chunk-JN7WIP6S.js → chunk-6KJ3LPI2.js} +2 -2
  78. package/dist/safe-bash/command-chunks/{chunk-HLDTOR7M.js → chunk-6ZVI7LUY.js} +1 -1
  79. package/dist/safe-bash/command-chunks/{chunk-X6NJC3IC.js → chunk-75OFBY5R.js} +1 -1
  80. package/dist/safe-bash/command-chunks/{chunk-MRW5HD2D.js → chunk-7O3E4LPT.js} +4 -22
  81. package/dist/safe-bash/command-chunks/{chunk-TEVJJPTC.js → chunk-7U7EXOXX.js} +1 -1
  82. package/dist/safe-bash/command-chunks/{chunk-6CYTRQ24.js → chunk-7VTKQUA5.js} +20 -17
  83. package/dist/safe-bash/command-chunks/{chunk-BZPAWTUL.js → chunk-AEF5BA3D.js} +1 -1
  84. package/dist/safe-bash/command-chunks/{chunk-63R3FEZJ.js → chunk-AIV5BF5W.js} +1 -1
  85. package/dist/safe-bash/command-chunks/{chunk-AYUTO323.js → chunk-AKJG2XD3.js} +2 -18
  86. package/dist/safe-bash/command-chunks/{chunk-J34TZVMW.js → chunk-ALDC4XP4.js} +0 -5
  87. package/dist/safe-bash/command-chunks/{chunk-CKXV2CLD.js → chunk-ARBYOQUZ.js} +1 -1
  88. package/dist/safe-bash/command-chunks/{chunk-44AHAB5O.js → chunk-BDSMROQZ.js} +1 -4
  89. package/dist/safe-bash/command-chunks/{chunk-53P53XFM.js → chunk-BPE5INLI.js} +1 -1
  90. package/dist/safe-bash/command-chunks/{chunk-OT4LZMLB.js → chunk-BR73BIOW.js} +1 -1
  91. package/dist/safe-bash/command-chunks/{chunk-WB5SVIG7.js → chunk-C5YYCQHW.js} +498 -88
  92. package/dist/safe-bash/command-chunks/{chunk-EUSPTFAX.js → chunk-CAP7ZJSY.js} +7 -7
  93. package/dist/safe-bash/command-chunks/{chunk-DWFLVJC6.js → chunk-CCRHMAU5.js} +2 -1
  94. package/dist/safe-bash/command-chunks/{chunk-GI4CJED2.js → chunk-CQTRW45K.js} +1 -1
  95. package/dist/safe-bash/command-chunks/{chunk-N2F74VRO.js → chunk-CZ7EN3JG.js} +1 -1
  96. package/dist/safe-bash/command-chunks/{chunk-KKG4BAFZ.js → chunk-DIEPXUM4.js} +6 -0
  97. package/dist/safe-bash/command-chunks/{chunk-QJAFJP2G.js → chunk-DZCY63VJ.js} +12 -10
  98. package/dist/safe-bash/command-chunks/{chunk-QUENU6GM.js → chunk-E55UKBIE.js} +3 -3
  99. package/dist/safe-bash/command-chunks/{chunk-HLGKIZ25.js → chunk-F6OYH562.js} +2 -0
  100. package/dist/safe-bash/command-chunks/{chunk-MC3VWLIZ.js → chunk-FDBUV4HJ.js} +28 -19
  101. package/dist/safe-bash/command-chunks/{chunk-7FKUC34S.js → chunk-FPVUD6TH.js} +6 -3
  102. package/dist/safe-bash/command-chunks/{chunk-E2LB7FRT.js → chunk-FXOA7RBK.js} +1 -1
  103. package/dist/safe-bash/command-chunks/{chunk-QWIDNAAK.js → chunk-FZTK4MFI.js} +3 -3
  104. package/dist/safe-bash/command-chunks/{chunk-K543PB3I.js → chunk-G66QUHIZ.js} +6 -35
  105. package/dist/safe-bash/command-chunks/{chunk-YJDV76GL.js → chunk-GFQZCKO6.js} +29 -19
  106. package/dist/safe-bash/command-chunks/{chunk-FKKB5X5V.js → chunk-GOB777HR.js} +1 -1
  107. package/dist/safe-bash/command-chunks/{chunk-IYPAQ7PH.js → chunk-GRBWW4SG.js} +6 -0
  108. package/dist/safe-bash/command-chunks/{chunk-PPNBNFAU.js → chunk-GYQ2HAKQ.js} +8 -8
  109. package/dist/safe-bash/command-chunks/{chunk-PJJUYO3R.js → chunk-II77KPZN.js} +2 -2
  110. package/dist/safe-bash/command-chunks/{chunk-VL67NWNS.js → chunk-JDYXY44P.js} +2 -2
  111. package/dist/safe-bash/command-chunks/{chunk-4QJOYXVB.js → chunk-JV7LBUTP.js} +1 -1
  112. package/dist/safe-bash/command-chunks/{chunk-IKS2YXZQ.js → chunk-K67MWWWH.js} +3 -3
  113. package/dist/safe-bash/command-chunks/{chunk-BKCNF5U3.js → chunk-KQLD3AED.js} +2 -2
  114. package/dist/safe-bash/command-chunks/{chunk-UMDIOL3O.js → chunk-KXU3IRUO.js} +1 -1
  115. package/dist/safe-bash/command-chunks/{chunk-QZF3SINC.js → chunk-LAOM65EE.js} +2 -2
  116. package/dist/safe-bash/command-chunks/{chunk-HFII3QYO.js → chunk-LWS62ISU.js} +46 -32
  117. package/dist/safe-bash/command-chunks/{chunk-BZDDAPSV.js → chunk-LWSBAWLT.js} +1 -1
  118. package/dist/safe-bash/command-chunks/{chunk-U6G67N23.js → chunk-MIXBO6U7.js} +18 -5
  119. package/dist/safe-bash/command-chunks/{chunk-JQ74HC37.js → chunk-MQFIPHIQ.js} +23 -50
  120. package/dist/safe-bash/command-chunks/{chunk-ZJBR5Q5I.js → chunk-MSFXC3OC.js} +4 -4
  121. package/dist/safe-bash/command-chunks/{chunk-NI7MKJPN.js → chunk-MTQH74CF.js} +3 -55
  122. package/dist/safe-bash/command-chunks/chunk-MWUZZWXK.js +354 -0
  123. package/dist/safe-bash/command-chunks/{chunk-RVLO4DYT.js → chunk-N4PFUSRM.js} +1 -1
  124. package/dist/safe-bash/command-chunks/{chunk-D4OP2BR3.js → chunk-NKFYQSES.js} +1 -2
  125. package/dist/safe-bash/command-chunks/{chunk-NGWB2YBL.js → chunk-O4JQSB7O.js} +1 -1
  126. package/dist/safe-bash/command-chunks/{chunk-7L24L4UO.js → chunk-OQU6UT6X.js} +2 -20
  127. package/dist/safe-bash/command-chunks/{chunk-TYCGMRLM.js → chunk-OYYV7ZAF.js} +1 -1
  128. package/dist/safe-bash/command-chunks/{chunk-SVULUDOP.js → chunk-P2N33UMN.js} +20 -81
  129. package/dist/safe-bash/command-chunks/{chunk-Q7Q5GM5S.js → chunk-P5APDEFB.js} +2 -2
  130. package/dist/safe-bash/command-chunks/{chunk-SAMH7SQE.js → chunk-PCEFOYA3.js} +237 -145
  131. package/dist/safe-bash/command-chunks/{chunk-3HXDA5PT.js → chunk-PMBFZXTK.js} +1 -1
  132. package/dist/safe-bash/command-chunks/{chunk-4Y3WVMK4.js → chunk-PV66YWHB.js} +1 -0
  133. package/dist/safe-bash/command-chunks/{chunk-AXK3H4PX.js → chunk-QJ33BHI4.js} +1 -1
  134. package/dist/safe-bash/command-chunks/{chunk-3LSOYLNV.js → chunk-QKFSRZGQ.js} +2 -2
  135. package/dist/safe-bash/command-chunks/{chunk-JZSNU2MY.js → chunk-QKJLP53H.js} +2 -2
  136. package/dist/safe-bash/command-chunks/{chunk-LC2MFKT4.js → chunk-RMWQAAO5.js} +24 -25
  137. package/dist/safe-bash/command-chunks/{chunk-QDTBMSBE.js → chunk-RO62EWX6.js} +2 -2
  138. package/dist/safe-bash/command-chunks/{chunk-4C6QI5BQ.js → chunk-RZZI24ZE.js} +4 -4
  139. package/dist/safe-bash/command-chunks/{chunk-PFAADCB5.js → chunk-SDNBCQ3X.js} +10 -24
  140. package/dist/safe-bash/command-chunks/{chunk-36O5OT7E.js → chunk-T35Y7YQD.js} +1 -1
  141. package/dist/safe-bash/command-chunks/{chunk-6HMX4CQS.js → chunk-TGSNCQSR.js} +44 -16
  142. package/dist/safe-bash/command-chunks/{chunk-5T7CRJHW.js → chunk-TIOCQVUQ.js} +4 -7
  143. package/dist/safe-bash/command-chunks/{chunk-T5H5UJQ3.js → chunk-TNOA7FCQ.js} +1 -1
  144. package/dist/safe-bash/command-chunks/{chunk-GN2TKLE7.js → chunk-TS65BJHG.js} +5 -5
  145. package/dist/safe-bash/command-chunks/{chunk-7RGB363W.js → chunk-TSCGT46G.js} +3 -2
  146. package/dist/safe-bash/command-chunks/{chunk-KBEURXFF.js → chunk-UN6WS55J.js} +3 -3
  147. package/dist/safe-bash/command-chunks/{chunk-SX2X3IH4.js → chunk-V2V5OCL3.js} +1 -1
  148. package/dist/safe-bash/command-chunks/{chunk-ERYJLO6G.js → chunk-V7A7DRTU.js} +1 -1
  149. package/dist/safe-bash/command-chunks/{chunk-5SHGJ7NO.js → chunk-VA5ZHYYA.js} +73 -33
  150. package/dist/safe-bash/command-chunks/{chunk-XETLEHZP.js → chunk-VPR5LQYX.js} +3 -2
  151. package/dist/safe-bash/command-chunks/{chunk-3DT2YOGW.js → chunk-VSRGNQCP.js} +3 -3
  152. package/dist/safe-bash/command-chunks/{chunk-J5SN3PZ3.js → chunk-VXSLJH7G.js} +53 -3
  153. package/dist/safe-bash/command-chunks/{chunk-PXYOWWMV.js → chunk-W7RAD4EW.js} +4 -3
  154. package/dist/safe-bash/command-chunks/{chunk-YGC6OS5O.js → chunk-WECIOOQB.js} +5 -8
  155. package/dist/safe-bash/command-chunks/{chunk-HHP343KT.js → chunk-WTECBRU4.js} +1 -1
  156. package/dist/safe-bash/command-chunks/{chunk-AO6Z5EQ7.js → chunk-WVE64WM2.js} +6 -5
  157. package/dist/safe-bash/command-chunks/{chunk-Z7RVSD5K.js → chunk-WVHONVZ4.js} +1 -1
  158. package/dist/safe-bash/command-chunks/{chunk-QNIMV57G.js → chunk-XNLFHHOC.js} +1 -1
  159. package/dist/safe-bash/command-chunks/{chunk-XAFSZDY2.js → chunk-XS72HTMA.js} +11 -0
  160. package/dist/safe-bash/command-chunks/{chunk-KYSPGS33.js → chunk-YIQACGEW.js} +2 -0
  161. package/dist/safe-bash/command-chunks/{chunk-NAY27PXB.js → chunk-YOFC45RK.js} +1 -1
  162. package/dist/safe-bash/command-chunks/{chunk-QI7LGHJJ.js → chunk-Z45N42QC.js} +21 -6
  163. package/dist/safe-bash/command-chunks/{chunk-67IQF5GC.js → chunk-ZYHTWNAE.js} +23 -9
  164. package/dist/safe-bash/command-chunks/{chunk-STC3LEWJ.js → chunk-ZYXH3B66.js} +5 -3
  165. package/dist/safe-bash/commands/bytes/compression/index.js +3 -2
  166. package/dist/safe-bash/commands/copy-preserve.d.ts +1 -0
  167. package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
  168. package/dist/safe-bash/commands/docx/index.browser.js +1 -1
  169. package/dist/safe-bash/commands/execution.js +19 -13
  170. package/dist/safe-bash/commands/factor/index.browser.js +2 -2
  171. package/dist/safe-bash/commands/filesystem.d.ts +1 -1
  172. package/dist/safe-bash/commands/filesystem.js +17 -13
  173. package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
  174. package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
  175. package/dist/safe-bash/commands/htmlq/index.d.ts +1 -1
  176. package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
  177. package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
  178. package/dist/safe-bash/commands/llm/index.browser.js +2 -2
  179. package/dist/safe-bash/commands/llm/providers/index.browser.js +1 -1
  180. package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
  181. package/dist/safe-bash/commands/media/index.browser.js +1 -1
  182. package/dist/safe-bash/commands/network/curl.d.ts +1 -1
  183. package/dist/safe-bash/commands/network/curl.js +1 -3
  184. package/dist/safe-bash/commands/network/index.browser.js +4 -4
  185. package/dist/safe-bash/commands/network/platform-portable.d.ts +1 -5
  186. package/dist/safe-bash/commands/network/platform-portable.js +1 -26
  187. package/dist/safe-bash/commands/network/public.d.ts +2 -2
  188. package/dist/safe-bash/commands/network/public.js +2 -2
  189. package/dist/safe-bash/commands/network/transport.js +2 -2
  190. package/dist/safe-bash/commands/network/wget.d.ts +1 -1
  191. package/dist/safe-bash/commands/network/wget.js +1 -3
  192. package/dist/safe-bash/commands/node/filesystem.js +3 -2
  193. package/dist/safe-bash/commands/node/index.browser.js +8 -8
  194. package/dist/safe-bash/commands/node/types.js +1 -1
  195. package/dist/safe-bash/commands/op/index.browser.js +3 -3
  196. package/dist/safe-bash/commands/pr/index.browser.js +2 -2
  197. package/dist/safe-bash/commands/python/host-capabilities.js +31 -14
  198. package/dist/safe-bash/commands/python/index.browser.js +11 -11
  199. package/dist/safe-bash/commands/python/manifest.d.ts +1 -0
  200. package/dist/safe-bash/commands/python/manifest.js +6 -3
  201. package/dist/safe-bash/commands/python/shell-capability.d.ts +1 -0
  202. package/dist/safe-bash/commands/python/shell-capability.js +3 -2
  203. package/dist/safe-bash/commands/python/worker.browser.js +3 -3
  204. package/dist/safe-bash/commands/regex-execution/public.browser.js +4 -4
  205. package/dist/safe-bash/commands/safejs/runtime.js +16 -7
  206. package/dist/safe-bash/commands/standard.d.ts +1 -0
  207. package/dist/safe-bash/commands/standard.js +2 -1
  208. package/dist/safe-bash/commands/streams.js +6 -24
  209. package/dist/safe-bash/commands/text.js +268 -364
  210. package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
  211. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  212. package/dist/safe-bash/commands/yq/index.browser.js +2 -2
  213. package/dist/safe-bash/core.browser.js +1 -1
  214. package/dist/safe-bash/core.d.ts +6 -1
  215. package/dist/safe-bash/core.js +1 -1
  216. package/dist/safe-bash/full-core.browser.js +108 -104
  217. package/dist/safe-bash/jobs.browser.js +5 -5
  218. package/dist/safe-bash/opt-in/commands/dd/index.js +2 -0
  219. package/dist/safe-bash/opt-in/optional/commands/shuf/options.d.ts +1 -0
  220. package/dist/safe-bash/opt-in/optional/commands/shuf/options.js +2 -4
  221. package/dist/safe-bash/opt-in/optional/commands/shuf/shuf.js +2 -1
  222. package/dist/safe-bash/optional-host.browser.js +11 -11
  223. package/dist/safe-bash/plugins/composition.d.ts +1 -0
  224. package/dist/safe-bash/plugins/composition.js +3 -8
  225. package/dist/safe-bash/plugins/index.browser.js +27 -27
  226. package/dist/safe-bash/registry-entry.browser.js +28 -28
  227. package/dist/safe-bash/shell/arrays/bindings.js +1 -1
  228. package/dist/safe-bash/shell/arrays/state.js +4 -0
  229. package/dist/safe-bash/shell/brace-expansion.js +1 -1
  230. package/dist/safe-bash/shell/dynamic-variables.d.ts +10 -0
  231. package/dist/safe-bash/shell/dynamic-variables.js +25 -0
  232. package/dist/safe-bash/shell/parser.js +8 -1
  233. package/dist/safe-bash/shell/runtime.d.ts +4 -4
  234. package/dist/safe-bash/shell/runtime.js +291 -741
  235. package/dist/safe-bash/shell/shell.js +2 -31
  236. package/dist/safe-bash/shell-entry.browser.js +25 -25
  237. package/dist/safe-bash/trap.browser.js +4 -4
  238. package/dist/safe-bash/yq-browser/index.js +1 -1
  239. package/dist/safe-bash-base-encoding-engine/base.js +2 -2
  240. package/dist/safe-bash-base-encoding-engine/shared.js +1 -1
  241. package/dist/safe-bash-byte-input-engine/index.d.ts +3 -2
  242. package/dist/safe-bash-byte-input-engine/index.js +4 -1
  243. package/dist/safe-bash-checksum-engine/index.js +13 -6
  244. package/dist/safe-bash-command-apply-patch/apply.d.ts +1 -1
  245. package/dist/safe-bash-command-apply-patch/apply.js +4 -3
  246. package/dist/safe-bash-command-apply-patch/index.js +3 -3
  247. package/dist/safe-bash-command-apply-patch/matcher.js +1 -1
  248. package/dist/safe-bash-command-apply-patch/parser.js +1 -1
  249. package/dist/safe-bash-command-awk/awk-inspection.js +2 -2
  250. package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
  251. package/dist/safe-bash-command-awk/awk-syntax.d.ts +1 -1
  252. package/dist/safe-bash-command-awk/awk-syntax.js +2 -2
  253. package/dist/safe-bash-command-awk/awk-values.js +1 -1
  254. package/dist/safe-bash-command-awk/awk.js +5 -5
  255. package/dist/safe-bash-command-awk/index.js +5 -5
  256. package/dist/safe-bash-command-bc/index.d.ts +2 -0
  257. package/dist/safe-bash-command-bc/index.js +123 -92
  258. package/dist/safe-bash-command-column/column.js +5 -5
  259. package/dist/safe-bash-command-column/display.d.ts +1 -1
  260. package/dist/safe-bash-command-column/display.js +1 -1
  261. package/dist/safe-bash-command-column/index.js +5 -5
  262. package/dist/safe-bash-command-column/internal.d.ts +0 -2
  263. package/dist/safe-bash-command-column/internal.js +1 -1
  264. package/dist/safe-bash-command-column/layout.js +4 -4
  265. package/dist/safe-bash-command-column/table.js +2 -2
  266. package/dist/safe-bash-command-comm/comm.js +1 -1
  267. package/dist/safe-bash-command-comm/index.js +1 -1
  268. package/dist/safe-bash-command-csvcut/index.d.ts +1 -0
  269. package/dist/safe-bash-command-csvcut/index.js +1 -0
  270. package/dist/safe-bash-command-csvgrep/index.d.ts +1 -0
  271. package/dist/safe-bash-command-csvgrep/index.js +2 -2
  272. package/dist/safe-bash-command-csvkit/index.js +9 -9
  273. package/dist/safe-bash-command-csvkit/sync-support.js +1 -1
  274. package/dist/safe-bash-command-curl/curl.js +1 -1
  275. package/dist/safe-bash-command-curl/index.js +1 -1
  276. package/dist/safe-bash-command-dd/index.js +2 -0
  277. package/dist/safe-bash-command-diff/diff.js +1 -1
  278. package/dist/safe-bash-command-diff/index.js +1 -1
  279. package/dist/safe-bash-command-exiftool/index.d.ts +1 -0
  280. package/dist/safe-bash-command-fd/index.js +9 -9
  281. package/dist/safe-bash-command-ffmpeg/index.js +31 -8
  282. package/dist/safe-bash-command-file/index.js +1 -1
  283. package/dist/safe-bash-command-file/shared.js +1 -1
  284. package/dist/safe-bash-command-find/find.js +1 -1
  285. package/dist/safe-bash-command-find/index.js +1 -1
  286. package/dist/safe-bash-command-gzip/index.js +3 -2
  287. package/dist/safe-bash-command-hexdump/command.js +4 -4
  288. package/dist/safe-bash-command-hexdump/custom.d.ts +24 -0
  289. package/dist/safe-bash-command-hexdump/index.js +4 -4
  290. package/dist/safe-bash-command-hexdump/internal.d.ts +2 -0
  291. package/dist/safe-bash-command-hexdump/internal.js +1 -1
  292. package/dist/safe-bash-command-hexdump/io.js +2 -2
  293. package/dist/safe-bash-command-hexdump/options.d.ts +3 -0
  294. package/dist/safe-bash-command-hexdump/options.js +2 -2
  295. package/dist/safe-bash-command-hostname/index.js +1 -1
  296. package/dist/safe-bash-command-html-to-markdown/budget.js +1 -1
  297. package/dist/safe-bash-command-html-to-markdown/entities.js +3 -3
  298. package/dist/safe-bash-command-html-to-markdown/index.js +6 -6
  299. package/dist/safe-bash-command-html-to-markdown/input.js +5 -5
  300. package/dist/safe-bash-command-html-to-markdown/parser.d.ts +1 -0
  301. package/dist/safe-bash-command-html-to-markdown/parser.js +4 -4
  302. package/dist/safe-bash-command-html-to-markdown/render.js +5 -5
  303. package/dist/safe-bash-command-html-to-markdown/text.js +2 -2
  304. package/dist/safe-bash-command-htmlq/index.d.ts +1 -0
  305. package/dist/safe-bash-command-htmlq/index.js +27 -9
  306. package/dist/safe-bash-command-iconv/codec.js +1 -1
  307. package/dist/safe-bash-command-iconv/command.js +2 -2
  308. package/dist/safe-bash-command-iconv/index.js +2 -2
  309. package/dist/safe-bash-command-imagemagick/index.js +24 -6
  310. package/dist/safe-bash-command-join/index.js +1 -1
  311. package/dist/safe-bash-command-join/join.js +1 -1
  312. package/dist/safe-bash-command-jq/index.js +1 -1
  313. package/dist/safe-bash-command-jq/jq.js +1 -1
  314. package/dist/safe-bash-command-less/index.js +43 -28
  315. package/dist/safe-bash-command-mmdc/index.d.ts +1 -0
  316. package/dist/safe-bash-command-numfmt/index.js +0 -11
  317. package/dist/safe-bash-command-od/index.js +101 -68
  318. package/dist/safe-bash-command-pandoc/command.js +1 -1
  319. package/dist/safe-bash-command-pandoc/index.js +1 -1
  320. package/dist/safe-bash-command-paste/index.js +1 -1
  321. package/dist/safe-bash-command-paste/paste.js +1 -1
  322. package/dist/safe-bash-command-pathchk/index.js +3 -13
  323. package/dist/safe-bash-command-pdfimages/index.js +27 -11
  324. package/dist/safe-bash-command-pdfinfo/index.js +19 -10
  325. package/dist/safe-bash-command-pdftk/index.js +3 -3
  326. package/dist/safe-bash-command-pdftoppm/index.js +26 -10
  327. package/dist/safe-bash-command-pdftotext/index.js +27 -13
  328. package/dist/safe-bash-command-qpdf/index.js +5 -5
  329. package/dist/safe-bash-command-sed/index.js +1 -1
  330. package/dist/safe-bash-command-sed/sed.js +1 -1
  331. package/dist/safe-bash-command-shuf/options.d.ts +1 -0
  332. package/dist/safe-bash-command-shuf/options.js +2 -4
  333. package/dist/safe-bash-command-shuf/shuf.js +2 -1
  334. package/dist/safe-bash-command-soffice/index.js +20 -16
  335. package/dist/safe-bash-command-split/index.js +3 -3
  336. package/dist/safe-bash-command-split/io.js +1 -1
  337. package/dist/safe-bash-command-split/outputs.js +2 -2
  338. package/dist/safe-bash-command-split/split.js +3 -3
  339. package/dist/safe-bash-command-sqlite3/btree.d.ts +1 -0
  340. package/dist/safe-bash-command-sqlite3/engine.d.ts +6 -0
  341. package/dist/safe-bash-command-sqlite3/index.js +284 -85
  342. package/dist/safe-bash-command-ssconvert/commands.js +9 -9
  343. package/dist/safe-bash-command-ssconvert/core.js +8 -8
  344. package/dist/safe-bash-command-ssconvert/formats/csv.js +9 -9
  345. package/dist/safe-bash-command-ssconvert/formats/ods.js +8 -8
  346. package/dist/safe-bash-command-ssconvert/formats/spreadsheetml.js +2 -2
  347. package/dist/safe-bash-command-ssconvert/formats/xls.js +9 -9
  348. package/dist/safe-bash-command-ssconvert/formats/xlsx.js +8 -8
  349. package/dist/safe-bash-command-ssconvert/index.js +20 -20
  350. package/dist/safe-bash-command-tar/extract.js +1 -1
  351. package/dist/safe-bash-command-tar/index.js +5 -4
  352. package/dist/safe-bash-command-tar/modes.js +2 -2
  353. package/dist/safe-bash-command-tree/arguments.js +3 -3
  354. package/dist/safe-bash-command-tree/charset.js +1 -1
  355. package/dist/safe-bash-command-tree/index.js +4 -4
  356. package/dist/safe-bash-command-tree/io.js +1 -1
  357. package/dist/safe-bash-command-tree/pattern.js +2 -2
  358. package/dist/safe-bash-command-tree/tree.js +4 -4
  359. package/dist/safe-bash-command-unrtf/index.js +14 -7
  360. package/dist/safe-bash-command-unzip/index.js +1 -1
  361. package/dist/safe-bash-command-unzip/unzip.js +1 -1
  362. package/dist/safe-bash-command-wget/index.js +1 -1
  363. package/dist/safe-bash-command-wget/wget.js +1 -1
  364. package/dist/safe-bash-command-xan/argv.d.ts +1 -1
  365. package/dist/safe-bash-command-xan/argv.js +1 -1
  366. package/dist/safe-bash-command-xan/commands.js +5 -3
  367. package/dist/safe-bash-command-xan/csv.d.ts +1 -1
  368. package/dist/safe-bash-command-xan/csv.js +1 -1
  369. package/dist/safe-bash-command-xan/index.js +7 -7
  370. package/dist/safe-bash-command-xan/io.js +3 -3
  371. package/dist/safe-bash-command-xmllint/index.js +1 -1
  372. package/dist/safe-bash-command-xxd/index.js +105 -91
  373. package/dist/safe-bash-command-xz/command.d.ts +2 -0
  374. package/dist/safe-bash-command-xz/index.d.ts +1 -1
  375. package/dist/safe-bash-command-xz/index.js +8 -0
  376. package/dist/safe-bash-command-yq/query.js +1 -1
  377. package/dist/safe-bash-command-zip/index.js +1 -1
  378. package/dist/safe-bash-command-zip/zip.js +1 -1
  379. package/dist/safe-bash-contracts/escaping.js +3 -3
  380. package/dist/safe-bash-contracts/filesystem-output.js +2 -2
  381. package/dist/safe-bash-contracts/index.d.ts +1 -0
  382. package/dist/safe-bash-contracts/index.js +7 -3
  383. package/dist/safe-bash-contracts/io.d.ts +4 -1
  384. package/dist/safe-bash-contracts/io.js +3 -1
  385. package/dist/safe-bash-contracts/managed-abort.d.ts +10 -0
  386. package/dist/safe-bash-contracts/output.js +2 -2
  387. package/dist/safe-bash-diff-engine/index.js +1 -1
  388. package/dist/safe-bash-diff-engine/shared.d.ts +3 -2
  389. package/dist/safe-bash-diff-engine/shared.js +1 -1
  390. package/dist/safe-bash-io-engine/commands/archive/internal.js +5 -23
  391. package/dist/safe-bash-io-engine/commands/search/requirements.js +2 -2
  392. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +33 -44
  393. package/dist/safe-bash-io-engine/internal.js +1 -1
  394. package/dist/safe-bash-io-engine/shell/pattern.js +1 -1
  395. package/dist/safe-bash-io-engine/shell/string-operations.js +1 -1
  396. package/dist/safe-bash-mcp/index.browser.d.ts +155 -35
  397. package/dist/safe-bash-mcp/index.browser.js +416 -0
  398. package/dist/safe-bash-mcp/index.d.ts +54 -2
  399. package/dist/safe-bash-mcp/index.js +283 -89
  400. package/dist/safe-bash-network-engine/aggregate.js +2 -2
  401. package/dist/safe-bash-network-engine/args.js +4 -4
  402. package/dist/safe-bash-network-engine/authorizer.js +1 -1
  403. package/dist/safe-bash-network-engine/body.js +6 -6
  404. package/dist/safe-bash-network-engine/decode.d.ts +1 -1
  405. package/dist/safe-bash-network-engine/decode.js +3 -4
  406. package/dist/safe-bash-network-engine/fetch-transport.js +3 -3
  407. package/dist/safe-bash-network-engine/form-content-type.js +2 -2
  408. package/dist/safe-bash-network-engine/form-headers.js +2 -2
  409. package/dist/safe-bash-network-engine/glob.js +1 -1
  410. package/dist/safe-bash-network-engine/index.js +4 -4
  411. package/dist/safe-bash-network-engine/input.js +6 -6
  412. package/dist/safe-bash-network-engine/output.js +2 -2
  413. package/dist/safe-bash-network-engine/platform-portable.js +3 -3
  414. package/dist/safe-bash-network-engine/shared.js +2 -2
  415. package/dist/safe-bash-network-engine/types.d.ts +7 -2
  416. package/dist/safe-bash-network-engine/types.js +1 -1
  417. package/dist/safe-bash-network-engine/url.js +2 -2
  418. package/dist/safe-bash-query-engine/capture.js +3 -3
  419. package/dist/safe-bash-query-engine/delpaths.js +3 -3
  420. package/dist/safe-bash-query-engine/formats.js +2 -2
  421. package/dist/safe-bash-query-engine/index.js +11 -11
  422. package/dist/safe-bash-query-engine/indices.js +3 -3
  423. package/dist/safe-bash-query-engine/input.js +1 -1
  424. package/dist/safe-bash-query-engine/interpreter.js +9 -9
  425. package/dist/safe-bash-query-engine/parser.js +1 -1
  426. package/dist/safe-bash-query-engine/query-core.js +11 -11
  427. package/dist/safe-bash-query-engine/regex.js +4 -4
  428. package/dist/safe-bash-query-engine/splits.js +5 -5
  429. package/dist/safe-bash-query-engine/values.js +2 -2
  430. package/dist/safe-bash-regex-engine/ere/matcher.js +102 -30
  431. package/dist/safe-bash-regex-engine/execution/bounded-provider.js +55 -67
  432. package/dist/safe-bash-regex-engine/execution/portable.d.ts +0 -1
  433. package/dist/safe-bash-regex-engine/execution/portable.js +6 -10
  434. package/dist/safe-bash-regex-engine/execution/protocol.d.ts +0 -5
  435. package/dist/safe-bash-regex-engine/execution/protocol.js +1 -3
  436. package/dist/safe-bash-regex-engine/index.js +6 -4
  437. package/dist/safe-bash-regex-engine/text/budget.d.ts +1 -0
  438. package/dist/safe-bash-regex-engine/text/budget.js +1 -1
  439. package/dist/safe-bash-regex-engine/text/regex.d.ts +14 -0
  440. package/dist/safe-bash-regex-engine/text/regex.js +6 -4
  441. package/dist/safe-bash-regex-engine/text/replacement-buffer.js +2 -2
  442. package/dist/safe-bash-regex-engine/text/rust-syntax.js +2 -2
  443. package/dist/safe-bash-search-engine/grep.js +189 -227
  444. package/dist/safe-bash-table-text-engine/table-text/internal.d.ts +7 -5
  445. package/dist/safe-bash-table-text-engine/table-text/internal.js +39 -21
  446. package/dist/safe-playwright-cloudflare/browser-trace-budget.js +6 -2
  447. package/dist/spreadsheet-engine/codecs/odf-hyperlinks.js +8 -2
  448. package/dist/spreadsheet-engine/formulas/functions/captured-bessel-phase.js +2 -2
  449. package/dist/spreadsheet-engine/formulas/label-references.js +54 -33
  450. package/dist/spreadsheet-engine/formulas/parser.js +3 -1
  451. package/dist/spreadsheet-engine/formulas/rewriting.js +13 -3
  452. package/dist/spreadsheet-format-xls/biff-data-tables.js +4 -6
  453. package/dist/spreadsheet-format-xls/biff-formulas.js +3 -0
  454. package/dist/spreadsheet-format-xls/biff-label-ranges.js +9 -6
  455. package/dist/spreadsheet-format-xls/biff.js +1 -1
  456. package/dist/xlsx-ast/xlsx.js +8 -5
  457. package/package.json +9 -8
  458. package/dist/safe-bash/command-chunks/chunk-KAGBORIC.js +0 -88
  459. /package/dist/safe-bash/command-chunks/{chunk-BWNXWI33.js → chunk-2LMZVE3I.js} +0 -0
@@ -34,18 +34,23 @@ function settings(options) {
34
34
  function fail(message) {
35
35
  throw new FsError("EINVAL", { message });
36
36
  }
37
- function command(name, handler) {
37
+ function command(name, limits, handler) {
38
38
  return { name, async execute(context) {
39
39
  context.signal.throwIfAborted();
40
+ let budget;
40
41
  try {
41
42
  const infoPromise = gnuInformation(name, context);
42
43
  if (infoPromise) {
43
44
  const info = await infoPromise;
44
45
  if (info) return info;
45
46
  }
46
- return await handler(context);
47
+ budget = new Budget(context, limits);
48
+ const result = await handler(context, budget);
49
+ await budget.flushOutput();
50
+ return result;
47
51
  } catch (error) {
48
52
  context.signal.throwIfAborted();
53
+ if (budget?.hasPendingOutput()) await budget.flushOutput();
49
54
  await diagnostic(context, error);
50
55
  return { exitCode: 1 };
51
56
  }
@@ -65,13 +70,6 @@ var Budget = class {
65
70
  this.context = context;
66
71
  this.limits = limits;
67
72
  this.outBuf = new Uint8Array(outputChunkBytes);
68
- this.signalAborted = context.signal.aborted;
69
- this.pollBaseSignal = Object.prototype.hasOwnProperty.call(context.signal, "aborted");
70
- if (!this.signalAborted && !this.pollBaseSignal) {
71
- context.signal.addEventListener("abort", () => {
72
- this.signalAborted = true;
73
- }, { once: true });
74
- }
75
73
  this.check(context.args.reduce((size, value) => size + utf8ByteLength(value), 0), limits.maxArgumentBytes, "argument");
76
74
  }
77
75
  context;
@@ -79,13 +77,11 @@ var Budget = class {
79
77
  inputBytes = 0;
80
78
  outputBytes = 0;
81
79
  steps = 0;
82
- signalAborted;
83
- pollBaseSignal;
84
80
  check(value, maximum, label) {
85
81
  if (value > maximum) throw new FsError("EFBIG", { message: `table-text ${label} limit exceeded` });
86
82
  }
87
83
  step() {
88
- if (this.pollBaseSignal ? this.context.signal.aborted : this.signalAborted) this.context.signal.throwIfAborted();
84
+ this.context.signal.throwIfAborted();
89
85
  this.check(++this.steps, this.limits.maxSteps, "step");
90
86
  if (this.steps % 1024 !== 0) return;
91
87
  return yieldTurn(this.context.signal).then(() => {
@@ -95,6 +91,7 @@ var Budget = class {
95
91
  input(size) {
96
92
  this.check(size, this.limits.maxChunkBytes, "chunk");
97
93
  this.inputBytes += size;
94
+ this.context.inputBudget?.check(this.inputBytes);
98
95
  this.check(this.inputBytes, this.limits.maxInputBytes, "input");
99
96
  }
100
97
  admitOutput(size) {
@@ -314,27 +311,48 @@ function argument(args, index, attached, option) {
314
311
  return [value, index + 1];
315
312
  }
316
313
  var OrderCheck = class {
317
- constructor(mode, context) {
314
+ constructor(mode, context, budget) {
318
315
  this.mode = mode;
319
316
  this.context = context;
317
+ this.budget = budget;
320
318
  }
321
319
  mode;
322
320
  context;
321
+ budget;
323
322
  unpaired = false;
324
323
  failed = false;
325
324
  warned = /* @__PURE__ */ new Set();
325
+ // Only the transition into each current row matters when default checking starts.
326
+ pending = /* @__PURE__ */ new Set();
327
+ async markUnpaired() {
328
+ if (this.unpaired) return;
329
+ this.unpaired = true;
330
+ for (const file of this.pending) await this.report(file);
331
+ this.pending.clear();
332
+ }
326
333
  check(previous, next, file, fold = false) {
327
- if (this.mode === "none" || this.mode === "default" && !this.unpaired || this.warned.has(file)) return;
328
- if (previous && next && compare(previous, next, fold) > 0) {
329
- const message = `file ${file} is not in sorted order`;
330
- if (this.mode === "check") fail(message);
331
- this.warned.add(file);
332
- this.failed = true;
333
- return diagnostic(this.context, new PublicDiagnostic(message));
334
+ if (this.mode === "none" || this.warned.has(file)) return;
335
+ const disordered = previous !== void 0 && next !== void 0 && compare(previous, next, fold) > 0;
336
+ if (this.mode === "default" && !this.unpaired) {
337
+ if (disordered) this.pending.add(file);
338
+ else this.pending.delete(file);
339
+ return;
334
340
  }
341
+ if (disordered) return this.report(file);
342
+ }
343
+ async report(file) {
344
+ const message = `file ${file} is not in sorted order`;
345
+ if (this.mode === "check") fail(message);
346
+ this.warned.add(file);
347
+ this.failed = true;
348
+ if (this.budget.hasPendingOutput()) await this.budget.flushOutput();
349
+ await diagnostic(this.context, new PublicDiagnostic(message));
335
350
  }
336
351
  async finish() {
337
- if (this.failed) await diagnostic(this.context, new PublicDiagnostic("input is not in sorted order"));
352
+ if (this.failed) {
353
+ if (this.budget.hasPendingOutput()) await this.budget.flushOutput();
354
+ await diagnostic(this.context, new PublicDiagnostic("input is not in sorted order"));
355
+ }
338
356
  }
339
357
  };
340
358
  export {
@@ -554,8 +554,10 @@ export function prepareBrowserTraceBudget(context, limits, fs) {
554
554
  if (options.mode !== "discard")
555
555
  return recording.run(() => recording.native.stopChunk(progress, options));
556
556
  const result = await recording.stop(() => recording.native.stopChunk(progress, options));
557
- if (recording.failure && active === recording)
557
+ if (recording.failure && active === recording) {
558
+ client._resetStackCounter?.();
558
559
  active = undefined;
560
+ }
559
561
  return result ?? {};
560
562
  };
561
563
  native.stop = async (progress) => {
@@ -563,8 +565,10 @@ export function prepareBrowserTraceBudget(context, limits, fs) {
563
565
  return;
564
566
  const recording = active;
565
567
  await recording.stop(() => recording.native.stop(progress));
566
- if (recording.failure && active === recording)
568
+ if (recording.failure && active === recording) {
569
+ client._resetStackCounter?.();
567
570
  active = undefined;
571
+ }
568
572
  recording.finish();
569
573
  };
570
574
  native.group = (...args) => { if (active) {
@@ -1,9 +1,15 @@
1
1
  import { parseExpression } from "../formulas/parser.js";
2
2
  import { excelGrammar, gnumericGrammar } from "../formulas/conventions.js";
3
- import { quoteNativeSheet, serializeExpression } from "../formulas/serialization.js";
3
+ import { quoteFormulaString, quoteNativeSheet, serializeExpression } from "../formulas/serialization.js";
4
4
  import { foldSheetName } from "../../spreadsheet-ast/case-fold.js";
5
5
  // Calc hyperlink fragments use unbracketed addresses, not OpenFormula syntax.
6
- const linkGrammar = { ...excelGrammar, id: "odf-hyperlink", sheetSeparator: ".", absoluteSheetReferences: true };
6
+ const linkGrammar = { ...excelGrammar, id: "odf-hyperlink", sheetSeparator: ".", absoluteSheetReferences: true,
7
+ quoteSheetName(name) {
8
+ const letter = (c) => c >= "A" && c <= "Z" || c >= "a" && c <= "z" || c === "_";
9
+ return name.length > 0 && letter(name[0]) && [...name].every(c => letter(c) || c >= "0" && c <= "9")
10
+ ? name : quoteFormulaString(name, "'", excelGrammar);
11
+ }
12
+ };
7
13
  // Calc getUTF32/WithCharset decodes valid characters independently, leaving
8
14
  // malformed UTF-8 octets escaped and literal percent characters untouched.
9
15
  function decodeFragment(source, charge) {
@@ -75,9 +75,10 @@ export function besselPhaseDomain(x, order) {
75
75
  export function capturedBesselPhase(x, order, secondKind, host) {
76
76
  let sum = 1, term = 1;
77
77
  const x2 = x * x, n2 = order * order;
78
+ const inverse = divide([1, 0], product(x, x)), square = product(order, order);
78
79
  // The source's paired inverse is NaN after square overflow, and every later
79
80
  // phase term stays NaN. Preserve that result without its 399 wasted steps.
80
- if (!Number.isFinite(x2) || !Number.isFinite(n2)) {
81
+ if (!Number.isFinite(x2) || !Number.isFinite(n2) || !Number.isFinite(inverse[0] + inverse[1]) || !Number.isFinite(square[0] + square[1])) {
81
82
  if (x > 1 / Number.EPSILON)
82
83
  host.diagnostic?.({ code: "numeric-warning", severity: "warning", message: "Reduced accuracy for very large trigonometric arguments" });
83
84
  return NaN;
@@ -93,7 +94,6 @@ export function capturedBesselPhase(x, order, secondKind, host) {
93
94
  break;
94
95
  }
95
96
  const amplitude = Math.sqrt(sum / (x * (Math.PI / 2)));
96
- const inverse = divide([1, 0], product(x, x)), square = product(order, order);
97
97
  const t = [[1, 0]], s = [[1, 0]];
98
98
  let phase = [0, 0], last = Number.MAX_VALUE;
99
99
  for (let n = 1; n < 400; n++) {
@@ -45,11 +45,15 @@ export function resolveLabelReference(book, node, position, read, tick, anchorOn
45
45
  if (coordinate === undefined || coordinate < 0 || coordinate >= (axis === "row" ? size.rows : size.columns))
46
46
  return error("#REF!");
47
47
  }
48
- if (range.firstRow !== range.lastRow && range.firstColumn !== range.lastColumn)
48
+ const rowLabel = range.firstRow === range.lastRow && row === range.firstRow &&
49
+ (column === range.firstColumn - 1 || column === range.lastColumn + 1);
50
+ const columnLabel = range.firstColumn === range.lastColumn && column === range.firstColumn &&
51
+ (row === range.firstRow - 1 || row === range.lastRow + 1);
52
+ if (rowLabel === columnLabel || label.preceding && !columnLabel)
49
53
  return error("#REF!");
50
- if (!label.scalar || range.firstRow === range.lastRow && range.firstColumn === range.lastColumn)
54
+ if (!label.scalar)
51
55
  return { kind: "range", ...range };
52
- if (range.firstRow === range.lastRow)
56
+ if (rowLabel)
53
57
  return position.column < range.firstColumn || position.column > range.lastColumn ? error("#REF!") :
54
58
  { kind: "range", ...range, firstColumn: position.column, lastColumn: position.column };
55
59
  return position.row < range.firstRow || position.row > range.lastRow ? error("#REF!") :
@@ -64,7 +68,7 @@ export function resolveLabelReference(book, node, position, read, tick, anchorOn
64
68
  const columnLabel = label.axis === "column";
65
69
  const maximum = (columnLabel ? size.rows : size.columns) - 1;
66
70
  const ownAxis = columnLabel ? position.row : position.column;
67
- const sameAxis = columnLabel ? position.column === column : position.row === row;
71
+ const sameAxis = position.sheet === sheet.id && (columnLabel ? position.column === column : position.row === row);
68
72
  let start, end;
69
73
  if (!declared && label.semantics === "openformula") {
70
74
  if (!book.automaticLabelLookup)
@@ -130,11 +134,11 @@ export function resolveLabelReference(book, node, position, read, tick, anchorOn
130
134
  const value = read(sheet, row, column);
131
135
  if (value.kind !== "string" && value.kind !== "blank")
132
136
  return error("#NAME?");
133
- start = Math.min((columnLabel ? row : column) + 1, maximum);
137
+ start = (columnLabel ? row : column) + 1;
134
138
  end = maximum;
135
139
  if (sameAxis) {
136
140
  if (ownAxis === start)
137
- start = Math.min(start + 1, maximum);
141
+ start++;
138
142
  else if (ownAxis > start)
139
143
  end = ownAxis - 1;
140
144
  }
@@ -154,44 +158,61 @@ export function resolveLabelReference(book, node, position, read, tick, anchorOn
154
158
  }
155
159
  }
156
160
  }
157
- if (start !== end && label.scalar) {
161
+ if (start > end)
162
+ return error("#REF!");
163
+ if (label.scalar) {
158
164
  if (ownAxis < start || ownAxis > end)
159
165
  return error("#REF!");
160
166
  start = end = ownAxis;
161
167
  }
162
168
  else if (!declared && start !== end) {
163
- // GetDataArea(includeOld=true, onlyDown=false). Scan sparse cells around the
164
- // rectangle perimeter; diagonal cells can extend it. Never enumerate a grid.
169
+ // GetDataArea(includeOld=true, onlyDown=false), preserving the ordered
170
+ // horizontal/vertical perimeter expansion, including diagonal neighbors.
171
+ // Index occupied axes once so each perimeter query is logarithmic rather
172
+ // than scanning every cell at every step. Charge construction and queries.
173
+ const rows = new Map(), columns = new Map();
174
+ for (const cell of sheet.cells) {
175
+ tick();
176
+ if (cell.value.kind === "blank" && !cell.formula)
177
+ continue;
178
+ const rowCells = rows.get(cell.row) ?? [], columnCells = columns.get(cell.column) ?? [];
179
+ rowCells.push(cell.column);
180
+ columnCells.push(cell.row);
181
+ rows.set(cell.row, rowCells);
182
+ columns.set(cell.column, columnCells);
183
+ }
184
+ for (const index of [rows, columns])
185
+ for (const coordinates of index.values()) {
186
+ tick();
187
+ coordinates.sort((a, b) => { tick(); return a - b; });
188
+ }
189
+ const occupied = (index, axis, low, high) => {
190
+ tick();
191
+ const coordinates = index.get(axis);
192
+ if (!coordinates)
193
+ return false;
194
+ let first = 0, last = coordinates.length;
195
+ while (first < last) {
196
+ tick();
197
+ const middle = Math.floor((first + last) / 2);
198
+ if (coordinates[middle] < low)
199
+ first = middle + 1;
200
+ else
201
+ last = middle;
202
+ }
203
+ return first < coordinates.length && coordinates[first] <= high;
204
+ };
165
205
  let left = columnLabel ? column : start, right = left;
166
206
  let top = columnLabel ? start : row, bottom = top;
167
207
  for (;;) {
168
- let extendLeft = false, extendRight = false, extendTop = false, extendBottom = false;
169
- for (const cell of sheet.cells) {
170
- tick();
171
- if (cell.value.kind === "blank" && !cell.formula)
172
- continue;
173
- if (cell.row >= top - 1 && cell.row <= bottom + 1) {
174
- if (cell.column === left - 1)
175
- extendLeft = true;
176
- if (cell.column === right + 1)
177
- extendRight = true;
178
- }
179
- }
208
+ const extendLeft = occupied(columns, left - 1, top - 1, bottom + 1);
209
+ const extendRight = occupied(columns, right + 1, top - 1, bottom + 1);
180
210
  if (extendLeft)
181
211
  left--;
182
212
  if (extendRight)
183
213
  right++;
184
- for (const cell of sheet.cells) {
185
- tick();
186
- if (cell.value.kind === "blank" && !cell.formula)
187
- continue;
188
- if (cell.column >= left && cell.column <= right) {
189
- if (cell.row === top - 1)
190
- extendTop = true;
191
- if (cell.row === bottom + 1)
192
- extendBottom = true;
193
- }
194
- }
214
+ const extendTop = occupied(rows, top - 1, left, right);
215
+ const extendBottom = occupied(rows, bottom + 1, left, right);
195
216
  if (extendTop)
196
217
  top--;
197
218
  if (extendBottom)
@@ -202,7 +223,7 @@ export function resolveLabelReference(book, node, position, read, tick, anchorOn
202
223
  end = Math.min(end, columnLabel ? bottom : right);
203
224
  if (sameAxis && ownAxis >= start && ownAxis <= end) {
204
225
  if (ownAxis === start)
205
- start = Math.min(start + 1, maximum);
226
+ start++;
206
227
  else
207
228
  end = ownAxis - 1;
208
229
  }
@@ -805,13 +805,15 @@ export function parseExpression(source, options) {
805
805
  if (value.kind === "parentheses")
806
806
  return { ...value, child: select(value.child, "other", "other") };
807
807
  if (value.kind === "unary")
808
- return { ...value, child: select(value.child, value.op === "%" ? before : "other", value.op === "%" ? "other" : after) };
808
+ return { ...value, child: select(value.child, value.op === "%" ? before : "binary", value.op === "%" ? "binary" : after) };
809
809
  if (value.kind === "binary") {
810
810
  const neighbor = value.op === "intersection" || value.op === "label-intersection" ? "intersection" : "binary";
811
811
  return { ...value, left: select(value.left, before, neighbor), right: select(value.right, neighbor, after) };
812
812
  }
813
813
  if (value.kind === "call")
814
814
  return { ...value, args: value.args.map(child => select(child, "other", "other")) };
815
+ if (value.kind === "array")
816
+ return { ...value, rows: value.rows.map(row => row.map(child => select(child, "other", "other"))) };
815
817
  return value;
816
818
  };
817
819
  root = select(root, "binary", "binary");
@@ -48,8 +48,11 @@ export function rewriteReferences(document, edit) {
48
48
  return { row: { value: -1, relative: false }, column: { value: 0, relative: false } };
49
49
  next = { ...ref, sheet: document.sheetNames[id] };
50
50
  }
51
- if (edit.translation === "move" && target.sheet !== document.position.sheet && ref.workbook === undefined && ref.sheet === undefined)
52
- next = { ...ref, sheet: document.sheetNames?.[document.position.sheet] ?? document.position.sheet };
51
+ if (edit.translation === "move" && target.sheet !== document.position.sheet && ref.workbook === undefined && ref.sheet === undefined) {
52
+ const { sheetOffset: ignoredOffset, ...anchored } = ref;
53
+ next = { ...anchored, sheet: document.sheetNames?.[document.position.sheet] ?? document.position.sheet,
54
+ ...(ref.sheetRelative === undefined ? {} : { sheetRelative: false }) };
55
+ }
53
56
  const renamed = next.workbook === undefined && next.sheet ? renamedSheet(next.sheet) : undefined;
54
57
  if (renamed !== undefined)
55
58
  next = { ...next, sheet: renamed };
@@ -88,7 +91,14 @@ export function rewriteReferences(document, edit) {
88
91
  unchanged = false;
89
92
  return next;
90
93
  };
91
- const first = rewrite(node.first), last = node.last ? rewrite(node.last) : undefined;
94
+ const first = rewrite(node.first);
95
+ let last = node.last ? rewrite(node.last) : undefined;
96
+ // A newly anchored local ODF range inherits its first endpoint's sheet.
97
+ if (document.grammar.bracketReferences && node.first.sheet === undefined && node.last?.sheet === undefined &&
98
+ first.sheet !== undefined && last?.sheet === first.sheet && last.sheetRelative === first.sheetRelative) {
99
+ const { sheet: ignoredSheet, ...inherited } = last;
100
+ last = inherited;
101
+ }
92
102
  // The parent replacement includes its explicit area's source span.
93
103
  if (node.label?.kind === "radical") {
94
104
  if (node.label.data)
@@ -14,8 +14,6 @@ export function readBiffDataTable(data, revision, opcode) {
14
14
  const input = (offset, deleted) => {
15
15
  const r = data.u16(offset), c = data.u16(offset + 2);
16
16
  if (deleted) {
17
- if (r !== 0xffff || c !== 0xffff)
18
- invalidBiff("invalid deleted data-table input cell");
19
17
  return "#REF!";
20
18
  }
21
19
  if (c >= 256 || r >= (revision === 8 ? 65536 : 16384))
@@ -44,18 +42,18 @@ export function writeBiffDataTable(group, sheet, book, context, maxRows) {
44
42
  let marker = arg;
45
43
  while (marker.kind === "parentheses")
46
44
  marker = marker.child;
47
- if (arg.kind === "omitted" || arg.kind === "literal" && arg.value.kind === "blank")
45
+ if (marker.kind === "omitted" || marker.kind === "literal" && marker.value.kind === "blank")
48
46
  return undefined;
49
47
  if (marker.kind === "literal" && marker.value.kind === "error" && marker.value.value === "#REF!") {
50
48
  if (maxRows < 65536)
51
49
  throw new SsconvertError("unsupported-feature", "Cannot export deleted Excel data table input before BIFF8");
52
50
  return { row: 0xffff, column: 0xffff, deleted: true };
53
51
  }
54
- if (arg.kind !== "reference" || arg.last || !arg.first.row || !arg.first.column)
52
+ if (marker.kind !== "reference" || marker.label || marker.last || !marker.first.row || !marker.first.column)
55
53
  throw new SsconvertError("unsupported-feature", "Cannot export Excel data table input expression");
56
54
  // TABLE evaluates raw coordinates on its own sheet, including qualified inputs.
57
- const row = arg.first.row.value + (arg.first.row.relative ? position.row : 0);
58
- const column = arg.first.column.value + (arg.first.column.relative ? position.column : 0);
55
+ const row = marker.first.row.value + (marker.first.row.relative ? position.row : 0);
56
+ const column = marker.first.column.value + (marker.first.column.relative ? position.column : 0);
59
57
  if (row < 0 || row >= maxRows || column < 0 || column >= 256)
60
58
  throw new SsconvertError("unsupported-feature", "Cannot export Excel data table input outside version limits");
61
59
  return { row, column };
@@ -91,6 +91,9 @@ export function translateBiffFormula(bytes, context) {
91
91
  };
92
92
  while (offset < bytes.length) {
93
93
  const raw = data.u8(offset++), token = raw >= 0x20 ? (raw & 0x1f) | 0x20 : raw;
94
+ // MS-XLS SharedParsedFormula excludes ELF tokens, including radical labels.
95
+ if (context.shared && token === 0x18)
96
+ invalidBiff("ELF label in shared formula");
94
97
  if (binaryOperators[token]) {
95
98
  const [operator, precedence] = binaryOperators[token], right = pop(), left = pop();
96
99
  push(protect(left, precedence) + operator + protect(right, precedence + (token === 4 || token === 6 || token === 7 ? 1 : 0)), precedence);
@@ -27,12 +27,11 @@ export function readBiffLabelRanges(parts, charge) {
27
27
  const pairs = [];
28
28
  for (const axis of ["row", "column"]) {
29
29
  const count = word();
30
- charge(count);
31
30
  for (let i = 0; i < count; i++) {
32
- charge(0);
33
31
  const labels = { startRow: word(), endRow: word(), startColumn: word(), endColumn: word() };
34
32
  if (labels.startRow > labels.endRow || labels.startColumn > labels.endColumn || labels.endColumn >= 256)
35
33
  invalidBiff("invalid LABELRANGES rectangle");
34
+ charge(1);
36
35
  pairs.push({ axis, labels, data: dataRange(labels, axis) });
37
36
  }
38
37
  }
@@ -64,22 +63,26 @@ export function writeBiffLabelRanges(sheet, revision, output, charge) {
64
63
  throw new SsconvertError("unsupported-feature", "Excel BIFF8 label range count exceeds version limits");
65
64
  list.push(labels);
66
65
  }
67
- // Stream words into bounded BIFF records; CONTINUE has no string-width byte.
66
+ // Keep each Ref8U intact; CONTINUE has no string-width byte.
68
67
  let payload = new Uint8Array(output.maximumRecord), offset = 0, opcode = 0x15f;
69
- const word = (value) => {
70
- if (offset === payload.length) {
71
- output.record(opcode, payload);
68
+ const reserve = (length) => {
69
+ if (offset + length > payload.length) {
70
+ output.record(opcode, payload.subarray(0, offset));
72
71
  opcode = 0x3c;
73
72
  payload = new Uint8Array(output.maximumRecord);
74
73
  offset = 0;
75
74
  }
75
+ };
76
+ const word = (value) => {
76
77
  payload[offset++] = value & 255;
77
78
  payload[offset++] = value >> 8;
78
79
  };
79
80
  for (const ranges of [rows, columns]) {
81
+ reserve(2);
80
82
  word(ranges.length);
81
83
  for (const range of ranges) {
82
84
  charge(1);
85
+ reserve(8);
83
86
  word(range.startRow);
84
87
  word(range.endRow);
85
88
  word(range.startColumn);
@@ -301,7 +301,7 @@ export async function readBiff(borrowed, context, encoding) {
301
301
  if (opcode === 0x160 && ver === 8 && scope.type === 5) {
302
302
  if (data.bytes.length !== 2)
303
303
  invalidBiff("invalid USESELFS length");
304
- automaticLabelLookup ||= data.u16(0) !== 0;
304
+ automaticLabelLookup = data.u16(0) !== 0;
305
305
  continue;
306
306
  }
307
307
  if (opcode === 0x15f && ver === 8 && sheet) {
@@ -473,7 +473,7 @@ export async function readXlsx(bytes, context) {
473
473
  const si = attr(f, "si") ?? "0";
474
474
  const existing = shared.get(si);
475
475
  if (f.text) {
476
- expression = readOpenFormula(f)?.source ?? formula(f.text, id, position.row, position.column, context, semantics.arrayStringLiterals);
476
+ expression = readOpenFormula(f)?.source ?? formula(decodeXlsxString(f.text), id, position.row, position.column, context, semantics.arrayStringLiterals);
477
477
  groupId = `shared-${si}`;
478
478
  shared.set(si, { expression, ...position, id: groupId, ...semantics });
479
479
  if (attr(f, "ref"))
@@ -491,14 +491,15 @@ export async function readXlsx(bytes, context) {
491
491
  invalid("shared formula has no preceding definition");
492
492
  }
493
493
  else {
494
- expression = readOpenFormula(f)?.source ?? formula(f.text, id, position.row, position.column, context, semantics.arrayStringLiterals);
494
+ expression = readOpenFormula(f)?.source ?? formula(decodeXlsxString(f.text), id, position.row, position.column, context, semantics.arrayStringLiterals);
495
495
  if (kind === "array") {
496
496
  groupId = `array-${position.row}-${position.column}`;
497
497
  groups.push({ id: groupId, kind: "array", expression, range: range(attr(f, "ref")), ...semantics });
498
498
  }
499
499
  }
500
500
  }
501
- const hasCache = raw !== undefined && (raw !== "" || type === "str");
501
+ const hasCache = type === "inlineStr" ? child(node, "is") !== undefined
502
+ : raw !== undefined && (raw !== "" || type === "str");
502
503
  cells.push({ ...position, value, ...(expression === undefined ? {} : { formula: expression, ...semantics, formulaDirty: !hasCache,
503
504
  ...(hasCache ? { cachedResult: value } : {}) }), ...(groupId ? { formulaGroup: groupId } : {}),
504
505
  ...(style ?? {}), ...(richText ? { richText } : {}) });
@@ -767,6 +768,7 @@ export function createXlsxWriter(edition) {
767
768
  })).join(""));
768
769
  const workbookRelations = [];
769
770
  const shared = [], sharedIds = new Map(), stringCounts = new Map();
771
+ let sharedReferences = 0;
770
772
  let totalCells = 0;
771
773
  for (const sheet of book.sheets)
772
774
  for (const cell of sheet.cells) {
@@ -884,13 +886,14 @@ export function createXlsxWriter(edition) {
884
886
  const array = sheet.formulaGroups?.find(g => g.kind === "array" && g.range.startRow <= cell.row && g.range.endRow >= cell.row && g.range.startColumn <= cell.column && g.range.endColumn >= cell.column);
885
887
  if (cell.formula && (!array || cell.row === array.range.startRow && cell.column === array.range.startColumn))
886
888
  body += xml("f", { ...(array ? { t: "array", ref: rangeText(array.range) } : {}),
887
- ...formulaSemanticsAttributes(array?.arrayStringLiterals ?? cell.arrayStringLiterals, true, cell.formula) }, escapeXlsx(exportXlsxFormula(book, cell.formula, sheet, cell.row, cell.column, context, array?.arrayStringLiterals ?? cell.arrayStringLiterals)));
889
+ ...formulaSemanticsAttributes(array?.arrayStringLiterals ?? cell.arrayStringLiterals, true, cell.formula) }, escapeXlsx(encodeXlsxString(exportXlsxFormula(book, cell.formula, sheet, cell.row, cell.column, context, array?.arrayStringLiterals ?? cell.arrayStringLiterals))));
888
890
  if (value.kind === "string") {
889
891
  if (cell.formula) {
890
892
  type = "str";
891
893
  body += xml("v", {}, escapeXlsx(encodeXlsxString(value.value)));
892
894
  }
893
895
  else if ((stringCounts.get(stringKey) ?? 0) > 1) {
896
+ sharedReferences++;
894
897
  type = "s";
895
898
  let id = sharedIds.get(stringKey);
896
899
  if (id === undefined) {
@@ -981,7 +984,7 @@ export function createXlsxWriter(edition) {
981
984
  sheetNodes.push(xml("sheet", { name: sheet.name, sheetId: index + 1, "r:id": id }));
982
985
  }
983
986
  if (shared.length) {
984
- await add("xl/sharedStrings.xml", xml("sst", { xmlns: namespace, uniqueCount: shared.length, count: shared.length }, shared.map(cell => xml("si", {}, writeRichString(cell.value.kind === "string" ? cell.value.value : "", cell.richText, xml, charge))).join("")), "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml");
987
+ await add("xl/sharedStrings.xml", xml("sst", { xmlns: namespace, uniqueCount: shared.length, count: sharedReferences }, shared.map(cell => xml("si", {}, writeRichString(cell.value.kind === "string" ? cell.value.value : "", cell.richText, xml, charge))).join("")), "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml");
985
988
  workbookRelations.push({ id: `rId${workbookRelations.length + 1}`, type: relationships + "/sharedStrings", target: "sharedStrings.xml" });
986
989
  }
987
990
  await add("xl/styles.xml", styles.serialize(), "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@poe-platform/safe-bash",
3
- "version": "0.1.800",
3
+ "version": "0.1.801",
4
4
  "description": "Extensible virtual shell with pluggable filesystems and streaming commands",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -915,9 +915,10 @@
915
915
  "access": "public"
916
916
  },
917
917
  "dependencies": {
918
- "@poe-platform/safe-fs": "0.1.800",
918
+ "@poe-platform/safe-fs": "0.1.801",
919
919
  "pdf-lib": "1.17.1",
920
920
  "@noble/hashes": "2.4.0",
921
+ "decimal.js": "^10.6.0",
921
922
  "@noble/ciphers": "2.4.0",
922
923
  "pako": "3.0.1",
923
924
  "@types/node": "^25.2.2",
@@ -1533,12 +1534,12 @@
1533
1534
  "./dist/safe-bash-zip-engine/zip/test-command.js",
1534
1535
  "./dist/safe-bash-zip-engine/zip/volumes.js",
1535
1536
  "./dist/safe-bash-zip-engine/zip/zip64.js",
1536
- "./dist/safe-bash/chunks/chunk-JTLSUJ7V.js",
1537
- "./dist/safe-bash/chunks/chunk-K2VCOJ2B.js",
1538
- "./dist/safe-bash/chunks/chunk-K4YMYFRJ.js",
1539
- "./dist/safe-bash/chunks/chunk-KV7PKOHV.js",
1540
- "./dist/safe-bash/chunks/chunk-KW24TAIU.js",
1541
- "./dist/safe-bash/chunks/chunk-RKKRJ54E.js",
1537
+ "./dist/safe-bash/chunks/chunk-FNDNHAGE.js",
1538
+ "./dist/safe-bash/chunks/chunk-IWDICZVK.js",
1539
+ "./dist/safe-bash/chunks/chunk-K6VCD7IY.js",
1540
+ "./dist/safe-bash/chunks/chunk-PQRAK7HU.js",
1541
+ "./dist/safe-bash/chunks/chunk-SZH7EJLD.js",
1542
+ "./dist/safe-bash/chunks/chunk-VQDD3G76.js",
1542
1543
  "./dist/safe-bash/commands/apply-patch/index.js",
1543
1544
  "./dist/safe-bash/commands/archive/index.js",
1544
1545
  "./dist/safe-bash/commands/column/index.js",