@poe-platform/safe-bash 0.1.803 → 0.1.804

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 (696) hide show
  1. package/README.md +56 -31
  2. package/dist/image-ast/ast.d.ts +1 -0
  3. package/dist/image-ast/browser/ast.d.ts +1 -0
  4. package/dist/image-ast/browser/codecs/jpeg.d.ts +2 -2
  5. package/dist/image-ast/codecs/jpeg.d.ts +2 -2
  6. package/dist/image-ast/index.browser.js +692 -8364
  7. package/dist/image-ast/index.js +692 -8364
  8. package/dist/mp4-ast/codecs.d.ts +7 -2
  9. package/dist/safe-bash/chunks/{chunk-CHYGPFVM.js → chunk-22SX3F2R.js} +1 -1
  10. package/dist/safe-bash/chunks/{chunk-FBUCWVTE.js → chunk-2IVBJTBD.js} +1 -1
  11. package/dist/safe-bash/chunks/chunk-2POETUMB.js +190 -0
  12. package/dist/safe-bash/chunks/{chunk-XVOSKJE2.js → chunk-47D7WBJK.js} +1 -1
  13. package/dist/safe-bash/chunks/{chunk-VKNVHEX3.js → chunk-4ESI236Y.js} +1 -1
  14. package/dist/safe-bash/chunks/{chunk-74GHTNJA.js → chunk-4KTMKD5W.js} +1 -1
  15. package/dist/safe-bash/chunks/{chunk-55YJASTN.js → chunk-4T53AERN.js} +1 -1
  16. package/dist/safe-bash/chunks/{chunk-DQP3VHSB.js → chunk-5XIFJVOO.js} +1 -1
  17. package/dist/safe-bash/chunks/{chunk-5OHX7C2V.js → chunk-62BOHHJT.js} +1 -1
  18. package/dist/safe-bash/chunks/{chunk-HZAMGT5I.js → chunk-67WIFM3N.js} +17 -6
  19. package/dist/safe-bash/chunks/{chunk-4D4N7IU2.js → chunk-6LNFRPW5.js} +2 -2
  20. package/dist/safe-bash/chunks/{chunk-6O77NL2S.js → chunk-6SMICPI3.js} +1 -1
  21. package/dist/safe-bash/chunks/{chunk-4BSJLKNM.js → chunk-7O76UFQD.js} +1 -1
  22. package/dist/safe-bash/chunks/{chunk-PNBBUWSM.js → chunk-AW5KIT6V.js} +3488 -39
  23. package/dist/safe-bash/chunks/{chunk-JMMEIDPF.js → chunk-B2Z73HTZ.js} +52 -28
  24. package/dist/safe-bash/chunks/chunk-B3ZMOJVM.js +319 -0
  25. package/dist/safe-bash/chunks/{chunk-7ZBU7KYV.js → chunk-CFAWS3O4.js} +1 -1
  26. package/dist/safe-bash/chunks/{chunk-I5HZ4FGE.js → chunk-CL2FCTTO.js} +1 -1
  27. package/dist/safe-bash/chunks/{chunk-2LSAMQER.js → chunk-CTXNARJH.js} +1 -1
  28. package/dist/safe-bash/chunks/{chunk-TFIBK2GI.js → chunk-D5Q7NFWI.js} +1 -1
  29. package/dist/safe-bash/chunks/{chunk-OQRVVGR6.js → chunk-DSOOVZ6Q.js} +1 -1
  30. package/dist/safe-bash/chunks/{chunk-VTH3MLDU.js → chunk-DUTAG6ZD.js} +1 -1
  31. package/dist/safe-bash/chunks/{chunk-XAQMU6OY.js → chunk-EE5YGFIZ.js} +1 -1
  32. package/dist/safe-bash/chunks/{chunk-FZE4HW6G.js → chunk-EJOYT2ME.js} +1 -1
  33. package/dist/safe-bash/chunks/chunk-FAAIR6EJ.js +887 -0
  34. package/dist/safe-bash/chunks/{chunk-OV6IHKO6.js → chunk-FOB2FZR4.js} +2 -2
  35. package/dist/safe-bash/chunks/chunk-G6V4RRSQ.js +14 -0
  36. package/dist/safe-bash/chunks/{chunk-UTBUUFDM.js → chunk-GGQAGQXQ.js} +1 -1
  37. package/dist/safe-bash/chunks/{chunk-K6VCD7IY.js → chunk-HIIYIJ5G.js} +2 -4
  38. package/dist/safe-bash/chunks/{chunk-VBTDHOWC.js → chunk-IOHH2GTI.js} +4 -3
  39. package/dist/safe-bash/chunks/{chunk-CTVWDACF.js → chunk-IQW34XQT.js} +1 -1
  40. package/dist/safe-bash/chunks/{chunk-HZ7BWKQ3.js → chunk-IS572AAT.js} +1 -1
  41. package/dist/safe-bash/chunks/{chunk-AUSNDQTJ.js → chunk-JPSUHHOA.js} +1 -1
  42. package/dist/safe-bash/chunks/{chunk-ZVD5IS4V.js → chunk-KBZ4UB2O.js} +2 -2
  43. package/dist/safe-bash/chunks/{chunk-AM5ESLPH.js → chunk-KU5CVWKA.js} +1 -1
  44. package/dist/safe-bash/chunks/{chunk-RYFQ3LZG.js → chunk-LPOVNKNB.js} +173 -153
  45. package/dist/safe-bash/chunks/{chunk-46Z5E5EV.js → chunk-MBOC3LZ4.js} +1 -1
  46. package/dist/safe-bash/chunks/{chunk-6PAVEFT3.js → chunk-N4BQFD3P.js} +1 -1
  47. package/dist/safe-bash/chunks/{chunk-CS4MNM6I.js → chunk-NGKCVNWS.js} +1 -1
  48. package/dist/safe-bash/chunks/{chunk-7R5BDCG7.js → chunk-OHML2BEU.js} +1 -1
  49. package/dist/safe-bash/chunks/{chunk-C5OWC2TL.js → chunk-OQ3AGYCZ.js} +1 -1
  50. package/dist/safe-bash/chunks/{chunk-B7TAL7S5.js → chunk-PTAEWLSE.js} +0 -2
  51. package/dist/safe-bash/chunks/{chunk-LVOBFF4D.js → chunk-Q4FNLOTI.js} +1 -1
  52. package/dist/safe-bash/chunks/chunk-Q5XO3NAS.js +1036 -0
  53. package/dist/safe-bash/chunks/{chunk-GEG3BWGE.js → chunk-RHFRJIWQ.js} +1 -1
  54. package/dist/safe-bash/chunks/chunk-RUR6J33T.js +11 -0
  55. package/dist/safe-bash/chunks/{chunk-EEEWOYEG.js → chunk-S4RFUUXO.js} +839 -24
  56. package/dist/safe-bash/chunks/{chunk-RRR7AQ24.js → chunk-SD2ISU5L.js} +1 -1
  57. package/dist/safe-bash/chunks/{chunk-3NDIFSNM.js → chunk-SUJ3NTMH.js} +3 -3
  58. package/dist/safe-bash/chunks/{chunk-R3NAKOED.js → chunk-SZRUU5HS.js} +2 -2
  59. package/dist/safe-bash/chunks/{chunk-PH63PLPZ.js → chunk-TC3F4UFF.js} +1 -1
  60. package/dist/safe-bash/chunks/{chunk-3R3AANOR.js → chunk-TCKYOLUE.js} +1 -1
  61. package/dist/safe-bash/chunks/{chunk-D3ANYGMC.js → chunk-UV4X32QU.js} +1 -1
  62. package/dist/safe-bash/chunks/{chunk-E7OYNDGL.js → chunk-V7QT2RWC.js} +1 -1
  63. package/dist/safe-bash/chunks/{chunk-B7PIL77G.js → chunk-W2IYOVHK.js} +804 -1195
  64. package/dist/safe-bash/chunks/{chunk-3HQU4OJO.js → chunk-XNGVOSGI.js} +1 -1
  65. package/dist/safe-bash/chunks/{chunk-J42RIHHJ.js → chunk-XQWCQSRN.js} +1 -1
  66. package/dist/safe-bash/chunks/{chunk-A7XEHALN.js → chunk-Y7FW6GLT.js} +6 -6
  67. package/dist/safe-bash/chunks/{chunk-QGUV42T5.js → chunk-YL3GBUG4.js} +1 -1
  68. package/dist/safe-bash/chunks/chunk-YOXUCJER.js +389 -0
  69. package/dist/safe-bash/chunks/{chunk-HBCN24ZA.js → chunk-Z2AAYYJN.js} +2 -2
  70. package/dist/safe-bash/chunks/chunk-ZKYKJCZZ.js +30 -0
  71. package/dist/safe-bash/chunks/core-IE3AFIDX.js +85806 -0
  72. package/dist/safe-bash/chunks/{ffmpeg-WTC3TEFI.js → ffmpeg-YANDK6HU.js} +2 -2
  73. package/dist/safe-bash/chunks/{gh-6WU6PXL4.js → gh-4MBJ2S5V.js} +2 -2
  74. package/dist/safe-bash/chunks/{git-EFZIGJW4.js → git-2QONJNRQ.js} +2 -2
  75. package/dist/safe-bash/chunks/{imagemagick-EIEYGWPF.js → imagemagick-JLEHGYSN.js} +2 -2
  76. package/dist/safe-bash/chunks/{mmdc-ROQJT5HQ.js → mmdc-6LD7A6ND.js} +2 -2
  77. package/dist/safe-bash/chunks/{pdfimages-DW7LWXFI.js → pdfimages-RSHL7LOP.js} +2 -2
  78. package/dist/safe-bash/chunks/{pdfinfo-TIP6XLUQ.js → pdfinfo-L3SGWPNG.js} +2 -2
  79. package/dist/safe-bash/chunks/{pdftk-DMG22ITZ.js → pdftk-LFBJNU5A.js} +2 -2
  80. package/dist/safe-bash/chunks/{pdftoppm-WNDYR72T.js → pdftoppm-NXXFUIHG.js} +2 -2
  81. package/dist/safe-bash/chunks/{pdftotext-5IPZ4NI7.js → pdftotext-4IHNWT6F.js} +2 -2
  82. package/dist/safe-bash/chunks/{qpdf-TTX2DIUA.js → qpdf-ZEIREV63.js} +2 -2
  83. package/dist/safe-bash/chunks/read-builtin-A4QKAT45.js +9 -0
  84. package/dist/safe-bash/chunks/{sips-XYS46JPJ.js → sips-D5YBG2V3.js} +2 -2
  85. package/dist/safe-bash/chunks/{soffice-TU73E5KL.js → soffice-RAJU3JUT.js} +2 -2
  86. package/dist/safe-bash/chunks/source-files-3XWRRHFA.js +7 -0
  87. package/dist/safe-bash/chunks/{wkhtmltopdf-FSZ2CHGE.js → wkhtmltopdf-7UE4FORZ.js} +2 -2
  88. package/dist/safe-bash/command-chunks/{chunk-7KWZXKY6.js → chunk-26RTBV2I.js} +1 -0
  89. package/dist/safe-bash/command-chunks/{chunk-AQJ2ROJO.js → chunk-2WYNMZR2.js} +10 -8
  90. package/dist/safe-bash/command-chunks/{chunk-BDSMROQZ.js → chunk-36GFRF2N.js} +2 -1
  91. package/dist/safe-bash/command-chunks/{chunk-GC5TJZOF.js → chunk-3VIA2IA7.js} +114 -31
  92. package/dist/safe-bash/command-chunks/{chunk-NKFYQSES.js → chunk-4CTI3ZTX.js} +1 -0
  93. package/dist/safe-bash/command-chunks/{chunk-WH627NJL.js → chunk-4MYP2FX4.js} +2 -1
  94. package/dist/safe-bash/command-chunks/{chunk-ZDN7MJE6.js → chunk-4R5ADJM5.js} +11 -1
  95. package/dist/safe-bash/command-chunks/{chunk-P2N33UMN.js → chunk-5MIKM54M.js} +4 -4
  96. package/dist/safe-bash/command-chunks/{chunk-DB453IE6.js → chunk-6FZQUOSJ.js} +1 -1
  97. package/dist/safe-bash/command-chunks/{chunk-PICVQ6B5.js → chunk-6GKYHPJG.js} +1 -1
  98. package/dist/safe-bash/command-chunks/{chunk-7K6JYKPJ.js → chunk-6M2ELGEN.js} +17 -15
  99. package/dist/safe-bash/command-chunks/{chunk-PXEIT2O4.js → chunk-6UR7V3ET.js} +8 -1
  100. package/dist/safe-bash/command-chunks/{chunk-6KJ3LPI2.js → chunk-6XBS5B46.js} +26 -3
  101. package/dist/safe-bash/command-chunks/{chunk-5PWJG2UK.js → chunk-6YXLZX7L.js} +2 -2
  102. package/dist/safe-bash/command-chunks/{chunk-EK6YNAXT.js → chunk-753YOR54.js} +31 -5
  103. package/dist/safe-bash/command-chunks/{chunk-RMWQAAO5.js → chunk-7IR4NRNE.js} +2 -2
  104. package/dist/safe-bash/command-chunks/{chunk-FZTK4MFI.js → chunk-7NM73SVK.js} +8 -8
  105. package/dist/safe-bash/command-chunks/{chunk-NXEQ3ESQ.js → chunk-7QD5YY4F.js} +6 -11
  106. package/dist/safe-bash/command-chunks/{chunk-EMPU65ZK.js → chunk-A5LBSJGH.js} +1 -0
  107. package/dist/safe-bash/command-chunks/{chunk-4FEVBOL5.js → chunk-ARZMP2L2.js} +2 -2
  108. package/dist/safe-bash/command-chunks/{chunk-NKIELG7Y.js → chunk-BAKFZ477.js} +40 -19
  109. package/dist/safe-bash/command-chunks/{chunk-QRRYN2KO.js → chunk-BC7BK6R6.js} +0 -2424
  110. package/dist/safe-bash/command-chunks/{chunk-CQHP3I66.js → chunk-BOEOJS2Q.js} +1 -1
  111. package/dist/safe-bash/command-chunks/{chunk-XS72HTMA.js → chunk-BWGGLYEB.js} +5 -22
  112. package/dist/safe-bash/command-chunks/{chunk-PMBFZXTK.js → chunk-C5ZZKP7V.js} +1 -1
  113. package/dist/safe-bash/command-chunks/{chunk-LHIOAFWW.js → chunk-C7SEB6WU.js} +1 -1
  114. package/dist/safe-bash/command-chunks/{chunk-XPT2UGBF.js → chunk-CHJKFRT7.js} +1 -1
  115. package/dist/safe-bash/command-chunks/{chunk-TIOCQVUQ.js → chunk-CON26Q2O.js} +1 -1
  116. package/dist/safe-bash/command-chunks/{chunk-E55UKBIE.js → chunk-DBAT3IK2.js} +1 -1
  117. package/dist/safe-bash/command-chunks/{chunk-Z45N42QC.js → chunk-DPAYAVMS.js} +15 -1
  118. package/dist/safe-bash/command-chunks/chunk-DS3NXVUM.js +368 -0
  119. package/dist/safe-bash/command-chunks/{chunk-5ZMZ573Q.js → chunk-DSJ3VRL3.js} +16 -4
  120. package/dist/safe-bash/command-chunks/{chunk-K2GDEMEU.js → chunk-EFRCFWVR.js} +4 -4
  121. package/dist/safe-bash/command-chunks/{chunk-DZCY63VJ.js → chunk-EV6HIJ5H.js} +6 -5
  122. package/dist/safe-bash/command-chunks/{chunk-JDYXY44P.js → chunk-FJURV46Y.js} +3 -3
  123. package/dist/safe-bash/command-chunks/{chunk-TZZ4WUKH.js → chunk-FZAWGKSE.js} +6 -4
  124. package/dist/safe-bash/command-chunks/{chunk-YHFXOX6U.js → chunk-GOCFQ6XV.js} +4 -4
  125. package/dist/safe-bash/command-chunks/{chunk-QVOS4YXL.js → chunk-HH5O7DJI.js} +1 -1
  126. package/dist/safe-bash/command-chunks/{chunk-3HHCU5YU.js → chunk-HK7F5SDC.js} +13 -0
  127. package/dist/safe-bash/command-chunks/{chunk-JNZ3CVAE.js → chunk-HQBXIZC7.js} +8 -3
  128. package/dist/safe-bash/command-chunks/{chunk-V4K2JDYU.js → chunk-I63DBZXZ.js} +2 -2
  129. package/dist/safe-bash/command-chunks/{chunk-WNE7FPVR.js → chunk-I64TLTIW.js} +24 -16
  130. package/dist/safe-bash/command-chunks/{chunk-GFC2NTDG.js → chunk-ICANWOXH.js} +5 -29
  131. package/dist/safe-bash/command-chunks/{chunk-SQRQW3CT.js → chunk-IJ6LGLXM.js} +1 -1
  132. package/dist/safe-bash/command-chunks/{chunk-TGSNCQSR.js → chunk-JT4RYCA6.js} +1771 -1663
  133. package/dist/safe-bash/command-chunks/{chunk-II77KPZN.js → chunk-JWW6FYBN.js} +2 -2
  134. package/dist/safe-bash/command-chunks/{chunk-ZYXH3B66.js → chunk-LCJWKTCJ.js} +250 -203
  135. package/dist/safe-bash/command-chunks/chunk-LU4HBPP2.js +97 -0
  136. package/dist/safe-bash/command-chunks/{chunk-XJXU3VVH.js → chunk-LWOE65OE.js} +20 -5
  137. package/dist/safe-bash/command-chunks/{chunk-GMIHJYDG.js → chunk-M32HFSX7.js} +22 -6
  138. package/dist/safe-bash/command-chunks/{chunk-YG4EPFWC.js → chunk-M3NINRDU.js} +2880 -172
  139. package/dist/safe-bash/command-chunks/chunk-MQREDAL6.js +164 -0
  140. package/dist/safe-bash/command-chunks/{chunk-LWS62ISU.js → chunk-N6DIASO2.js} +1 -1
  141. package/dist/safe-bash/command-chunks/chunk-NGL7YK7O.js +188 -0
  142. package/dist/safe-bash/command-chunks/{chunk-EARHPPPJ.js → chunk-NJYHWKIL.js} +39 -9
  143. package/dist/safe-bash/command-chunks/{chunk-6JSIFWYT.js → chunk-OJQRSCBP.js} +1 -1
  144. package/dist/safe-bash/command-chunks/{chunk-OQU6UT6X.js → chunk-OV3XREFN.js} +11 -0
  145. package/dist/safe-bash/command-chunks/{chunk-MIXBO6U7.js → chunk-PTZLF456.js} +2 -2
  146. package/dist/safe-bash/command-chunks/{chunk-ALDC4XP4.js → chunk-QILLRNES.js} +34 -10
  147. package/dist/safe-bash/command-chunks/{chunk-L22T3H7L.js → chunk-QR25JLKO.js} +1 -1
  148. package/dist/safe-bash/command-chunks/{chunk-NASVPT6F.js → chunk-R7C4MGZ5.js} +17 -224
  149. package/dist/safe-bash/command-chunks/{chunk-LCF3OB7P.js → chunk-RBME3JEH.js} +1 -1
  150. package/dist/safe-bash/command-chunks/{chunk-2KG2QLJE.js → chunk-RFWGYT7G.js} +3 -0
  151. package/dist/safe-bash/command-chunks/{chunk-5TBUOBDE.js → chunk-RZMVRT26.js} +27 -13
  152. package/dist/safe-bash/command-chunks/chunk-TFR6B3WB.js +44 -0
  153. package/dist/safe-bash/command-chunks/chunk-TOH3OF3O.js +179 -0
  154. package/dist/safe-bash/command-chunks/chunk-TT4DAFBT.js +13621 -0
  155. package/dist/safe-bash/command-chunks/{chunk-LWSBAWLT.js → chunk-TXI64OAG.js} +1 -1
  156. package/dist/safe-bash/command-chunks/{chunk-GIRNFXP3.js → chunk-TZRI7BJZ.js} +45 -15
  157. package/dist/safe-bash/command-chunks/{chunk-QOKBZFFD.js → chunk-U3MMODA5.js} +2 -7
  158. package/dist/safe-bash/command-chunks/{chunk-ZYHTWNAE.js → chunk-UAW423ZL.js} +11 -11
  159. package/dist/safe-bash/command-chunks/{chunk-C5YYCQHW.js → chunk-UXEEUGOV.js} +222 -12
  160. package/dist/safe-bash/command-chunks/{chunk-GY3BWK7K.js → chunk-VOZPMJRX.js} +87 -80
  161. package/dist/safe-bash/command-chunks/{chunk-ILX2NOLF.js → chunk-WPANOB4A.js} +20 -20
  162. package/dist/safe-bash/command-chunks/{chunk-Y2WBSJG6.js → chunk-X4QZQI5Q.js} +65 -64
  163. package/dist/safe-bash/command-chunks/{chunk-HDCNKOIX.js → chunk-XGI57GCN.js} +1 -1
  164. package/dist/safe-bash/command-chunks/{chunk-5UBXNSFZ.js → chunk-XUCU7QQT.js} +1281 -1278
  165. package/dist/safe-bash/command-chunks/chunk-Y22VXJBD.js +296 -0
  166. package/dist/safe-bash/command-chunks/{chunk-WVHONVZ4.js → chunk-YMFUUPDX.js} +5 -3
  167. package/dist/safe-bash/command-chunks/{chunk-IR2BY7EL.js → chunk-YYGIBXFZ.js} +2 -2
  168. package/dist/safe-bash/command-chunks/{chunk-MSFXC3OC.js → chunk-Z4FO6OHE.js} +2 -2
  169. package/dist/safe-bash/command-chunks/{chunk-WWIBP2ET.js → chunk-Z5ZZVDUD.js} +143 -22
  170. package/dist/safe-bash/command-chunks/{chunk-LOICUCHG.js → chunk-ZHN3QDCI.js} +1 -1
  171. package/dist/safe-bash/commands/alias/index.d.ts +2 -0
  172. package/dist/safe-bash/commands/alias/index.js +2 -0
  173. package/dist/safe-bash/commands/apply-patch/index.browser.js +2 -3
  174. package/dist/safe-bash/commands/apply-patch/index.d.ts +0 -1
  175. package/dist/safe-bash/commands/apply-patch/index.js +0 -1
  176. package/dist/safe-bash/commands/archive/index.browser.js +2 -3
  177. package/dist/safe-bash/commands/archive/index.d.ts +0 -1
  178. package/dist/safe-bash/commands/archive/index.js +0 -1
  179. package/dist/safe-bash/commands/bytes/index.js +2 -1
  180. package/dist/safe-bash/commands/chmod/index.browser.js +1 -1
  181. package/dist/safe-bash/commands/column/index.browser.js +2 -3
  182. package/dist/safe-bash/commands/column/index.d.ts +0 -1
  183. package/dist/safe-bash/commands/column/index.js +0 -1
  184. package/dist/safe-bash/commands/copy-source.js +1 -0
  185. package/dist/safe-bash/commands/csplit/index.browser.js +2 -2
  186. package/dist/safe-bash/commands/csvkit/index.browser.js +72 -0
  187. package/dist/safe-bash/commands/csvkit/index.d.ts +0 -5
  188. package/dist/safe-bash/commands/csvkit/index.js +0 -50
  189. package/dist/safe-bash/commands/docx/index.browser.js +5 -7
  190. package/dist/safe-bash/commands/du/index.browser.js +2 -3
  191. package/dist/safe-bash/commands/du/index.d.ts +0 -1
  192. package/dist/safe-bash/commands/du/index.js +0 -1
  193. package/dist/safe-bash/commands/expr/index.browser.js +2 -3
  194. package/dist/safe-bash/commands/expr/index.d.ts +0 -1
  195. package/dist/safe-bash/commands/expr/index.js +0 -1
  196. package/dist/safe-bash/commands/factor/index.browser.js +2 -2
  197. package/dist/safe-bash/commands/file/index.browser.js +2 -3
  198. package/dist/safe-bash/commands/file/index.d.ts +0 -1
  199. package/dist/safe-bash/commands/file/index.js +0 -1
  200. package/dist/safe-bash/commands/filesystem.js +1 -1
  201. package/dist/safe-bash/commands/getopt/index.browser.js +2 -2
  202. package/dist/safe-bash/commands/grep-aliases/index.browser.js +3 -3
  203. package/dist/safe-bash/commands/hexdump/index.browser.js +2 -2
  204. package/dist/safe-bash/commands/html-to-markdown/index.browser.js +2 -3
  205. package/dist/safe-bash/commands/html-to-markdown/index.d.ts +0 -1
  206. package/dist/safe-bash/commands/html-to-markdown/index.js +0 -1
  207. package/dist/safe-bash/commands/htmlq/index.d.ts +1 -5
  208. package/dist/safe-bash/commands/htmlq/index.js +1 -143
  209. package/dist/safe-bash/commands/iconv/index.browser.js +2 -2
  210. package/dist/safe-bash/commands/line-endings/index.browser.js +2 -2
  211. package/dist/safe-bash/commands/llm/index.browser.js +2 -2
  212. package/dist/safe-bash/commands/llm/providers/index.browser.js +1 -1
  213. package/dist/safe-bash/commands/mdq/index.browser.js +3 -3
  214. package/dist/safe-bash/commands/media/index.browser.js +4 -16314
  215. package/dist/safe-bash/commands/media/index.d.ts +1 -5
  216. package/dist/safe-bash/commands/media/index.js +1 -3
  217. package/dist/safe-bash/commands/media/plugin.d.ts +1 -18
  218. package/dist/safe-bash/commands/media/plugin.js +1 -90
  219. package/dist/safe-bash/commands/media/remote.d.ts +1 -63
  220. package/dist/safe-bash/commands/media/remote.js +1 -405
  221. package/dist/safe-bash/commands/media/settings.d.ts +1 -4
  222. package/dist/safe-bash/commands/media/settings.js +1 -26
  223. package/dist/safe-bash/commands/metadata/index.browser.js +3 -4
  224. package/dist/safe-bash/commands/metadata/index.d.ts +0 -1
  225. package/dist/safe-bash/commands/metadata/index.js +2 -2
  226. package/dist/safe-bash/commands/mktemp/index.browser.js +1 -1
  227. package/dist/safe-bash/commands/network/curl.js +1 -3
  228. package/dist/safe-bash/commands/network/index.browser.js +3 -4
  229. package/dist/safe-bash/commands/network/public.d.ts +0 -1
  230. package/dist/safe-bash/commands/network/public.js +0 -1
  231. package/dist/safe-bash/commands/network/transport.js +2 -1
  232. package/dist/safe-bash/commands/network/wget.js +1 -3
  233. package/dist/safe-bash/commands/node/browser.d.ts +0 -1
  234. package/dist/safe-bash/commands/node/browser.js +0 -1
  235. package/dist/safe-bash/commands/node/default-runtime.d.ts +3 -0
  236. package/dist/safe-bash/commands/node/default-runtime.js +15 -0
  237. package/dist/safe-bash/commands/node/index.browser.js +7 -8
  238. package/dist/safe-bash/commands/node/index.js +3 -3
  239. package/dist/safe-bash/commands/node/path.js +1 -1
  240. package/dist/safe-bash/commands/node/preload.d.ts +1 -1
  241. package/dist/safe-bash/commands/node/preload.js +4 -1
  242. package/dist/safe-bash/commands/node/quickjs.d.ts +2 -0
  243. package/dist/safe-bash/commands/node/quickjs.js +2 -0
  244. package/dist/safe-bash/commands/node/safejs.js +26 -12
  245. package/dist/safe-bash/commands/op/index.browser.js +2 -3
  246. package/dist/safe-bash/commands/op/index.d.ts +0 -11
  247. package/dist/safe-bash/commands/op/index.js +0 -84
  248. package/dist/safe-bash/commands/pandoc/index.browser.js +44 -0
  249. package/dist/safe-bash/commands/pandoc/index.d.ts +0 -1
  250. package/dist/safe-bash/commands/pandoc/index.js +0 -1
  251. package/dist/safe-bash/commands/pr/index.browser.js +2 -2
  252. package/dist/safe-bash/commands/python/docker-runner.js +4 -3
  253. package/dist/safe-bash/commands/python/docker.d.ts +1 -0
  254. package/dist/safe-bash/commands/python/docker.js +5 -2
  255. package/dist/safe-bash/commands/python/index.browser.js +17 -13
  256. package/dist/safe-bash/commands/python/index.d.ts +2 -1
  257. package/dist/safe-bash/commands/python/index.js +10 -8
  258. package/dist/safe-bash/commands/python/llm-capability.js +65 -2
  259. package/dist/safe-bash/commands/python/llm-dependencies.d.ts +27 -0
  260. package/dist/safe-bash/commands/python/llm-dependencies.js +66 -0
  261. package/dist/safe-bash/commands/python/llm-module.js +6 -4
  262. package/dist/safe-bash/commands/python/llm-reference-module.d.ts +3 -0
  263. package/dist/safe-bash/commands/python/llm-reference-module.js +690 -0
  264. package/dist/safe-bash/commands/python/worker.browser.js +2 -3
  265. package/dist/safe-bash/commands/python/worker.d.ts +0 -1
  266. package/dist/safe-bash/commands/python/worker.js +0 -1
  267. package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.d.ts +1 -1
  268. package/dist/safe-bash/commands/regex-execution/ere/transport/wire-engine.js +3 -3
  269. package/dist/safe-bash/commands/regex-execution/public.browser.js +7 -7
  270. package/dist/safe-bash/commands/safejs/options.js +5 -1
  271. package/dist/safe-bash/commands/safejs/runtime.d.ts +1 -0
  272. package/dist/safe-bash/commands/safejs/runtime.js +1 -1
  273. package/dist/safe-bash/commands/split/index.browser.js +2 -3
  274. package/dist/safe-bash/commands/split/index.d.ts +0 -1
  275. package/dist/safe-bash/commands/split/index.js +0 -1
  276. package/dist/safe-bash/commands/ssconvert/index.browser.js +98 -0
  277. package/dist/safe-bash/commands/stat/index.browser.js +1 -1
  278. package/dist/safe-bash/commands/stream-format/index.browser.js +3 -4
  279. package/dist/safe-bash/commands/stream-format/index.d.ts +0 -1
  280. package/dist/safe-bash/commands/stream-format/index.js +0 -1
  281. package/dist/safe-bash/commands/stream-inspection/index.browser.js +3 -4
  282. package/dist/safe-bash/commands/stream-inspection/index.d.ts +0 -1
  283. package/dist/safe-bash/commands/stream-inspection/index.js +0 -1
  284. package/dist/safe-bash/commands/streams.js +2 -1
  285. package/dist/safe-bash/commands/table-text/index.browser.js +3 -4
  286. package/dist/safe-bash/commands/table-text/index.d.ts +0 -1
  287. package/dist/safe-bash/commands/table-text/index.js +0 -1
  288. package/dist/safe-bash/commands/text.js +28 -24
  289. package/dist/safe-bash/commands/time-env/index.browser.js +3 -4
  290. package/dist/safe-bash/commands/time-env/index.d.ts +0 -1
  291. package/dist/safe-bash/commands/time-env/index.js +0 -1
  292. package/dist/safe-bash/commands/tree/index.browser.js +2 -3
  293. package/dist/safe-bash/commands/tree/index.d.ts +0 -1
  294. package/dist/safe-bash/commands/tree/index.js +0 -1
  295. package/dist/safe-bash/commands/tsort/index.browser.js +2 -2
  296. package/dist/safe-bash/commands/unalias/index.d.ts +2 -0
  297. package/dist/safe-bash/commands/unalias/index.js +2 -0
  298. package/dist/safe-bash/commands/xml/index.browser.js +2 -2
  299. package/dist/safe-bash/commands/yq/index.browser.js +2 -2
  300. package/dist/safe-bash/core.browser.js +2 -2
  301. package/dist/safe-bash/core.d.ts +7 -1
  302. package/dist/safe-bash/core.js +7 -1
  303. package/dist/safe-bash/execution-runtime.js +2 -1
  304. package/dist/safe-bash/fs/s3/http/index.d.ts +2 -2
  305. package/dist/safe-bash/fs/s3/http/index.js +1 -1
  306. package/dist/safe-bash/full-core.browser.js +283 -945
  307. package/dist/safe-bash/internal/op/types.d.ts +1 -0
  308. package/dist/safe-bash/jobs.browser.js +5 -5
  309. package/dist/safe-bash/lazy-optional.d.ts +3 -3
  310. package/dist/safe-bash/lazy-optional.js +1 -1
  311. package/dist/safe-bash/opt-in/commands/cmp/index.js +7 -6
  312. package/dist/safe-bash/opt-in/commands/dd/index.js +1 -1
  313. package/dist/safe-bash/opt-in/commands/dd/io.js +51 -5
  314. package/dist/safe-bash/opt-in/commands/truncate/index.js +2 -2
  315. package/dist/safe-bash/opt-in/commands/yq/native-work.js +2 -0
  316. package/dist/safe-bash/opt-in/optional/commands/shuf/input.js +2 -1
  317. package/dist/safe-bash/opt-in/optional/commands/shuf/shuf.js +4 -2
  318. package/dist/safe-bash/opt-in/optional.d.ts +1 -1
  319. package/dist/safe-bash/opt-in/optional.js +1 -1
  320. package/dist/safe-bash/opt-in/shell/extensions/read/index.js +2 -344
  321. package/dist/safe-bash/optional-host.browser.js +23 -18
  322. package/dist/safe-bash/optional-host.d.ts +1 -0
  323. package/dist/safe-bash/optional-host.js +1 -0
  324. package/dist/safe-bash/playwright/controller.js +41 -3
  325. package/dist/safe-bash/playwright/native-storage-targets.js +4 -2
  326. package/dist/safe-bash/plugins/base.d.ts +1 -1
  327. package/dist/safe-bash/plugins/base.js +3 -3
  328. package/dist/safe-bash/plugins/composition.d.ts +5 -2
  329. package/dist/safe-bash/plugins/composition.js +10 -7
  330. package/dist/safe-bash/plugins/index.browser.js +44 -41
  331. package/dist/safe-bash/plugins/index.js +3 -2
  332. package/dist/safe-bash/plugins/portable-commands.d.ts +3 -0
  333. package/dist/safe-bash/plugins/portable-commands.js +31 -0
  334. package/dist/safe-bash/registry-entry.browser.js +41 -42
  335. package/dist/safe-bash/search.browser.js +32 -33
  336. package/dist/safe-bash/shell/arithmetic.js +19 -6
  337. package/dist/safe-bash/shell/arrays/state.js +1 -1
  338. package/dist/safe-bash/shell/arrays/syntax.js +4 -3
  339. package/dist/safe-bash/shell/index.d.ts +0 -1
  340. package/dist/safe-bash/shell/index.js +0 -1
  341. package/dist/safe-bash/shell/parser.d.ts +2 -2
  342. package/dist/safe-bash/shell/parser.js +268 -64
  343. package/dist/safe-bash/shell/read-builtin.d.ts +3 -0
  344. package/dist/safe-bash/shell/read-builtin.js +344 -0
  345. package/dist/safe-bash/shell/runtime.d.ts +21 -4
  346. package/dist/safe-bash/shell/runtime.js +373 -412
  347. package/dist/safe-bash/shell/session-state.js +25 -0
  348. package/dist/safe-bash/shell/shell.js +76 -154
  349. package/dist/safe-bash/shell/tilde-expansion.d.ts +1 -1
  350. package/dist/safe-bash/shell/tilde-expansion.js +2 -2
  351. package/dist/safe-bash/shell/types.d.ts +5 -0
  352. package/dist/safe-bash/shell/value-state.js +1 -1
  353. package/dist/safe-bash/shell-entry.browser.js +32 -33
  354. package/dist/safe-bash/trap.browser.js +4 -4
  355. package/dist/safe-bash/yq-browser/index.js +1 -1
  356. package/dist/safe-bash-calendar-engine/time-env/calendar.d.ts +1 -1
  357. package/dist/safe-bash-calendar-engine/time-env/calendar.js +1 -1
  358. package/dist/safe-bash-calendar-engine/time-env/format.js +1 -1
  359. package/dist/safe-bash-command-alias/index.d.ts +13 -0
  360. package/dist/safe-bash-command-alias/index.js +88 -0
  361. package/dist/safe-bash-command-apply-patch/apply.js +3 -3
  362. package/dist/safe-bash-command-apply-patch/index.js +3 -3
  363. package/dist/safe-bash-command-apply-patch/matcher.js +1 -1
  364. package/dist/safe-bash-command-apply-patch/parser.js +1 -1
  365. package/dist/safe-bash-command-awk/awk-pipes.js +2 -2
  366. package/dist/safe-bash-command-awk/awk-reader.js +1 -1
  367. package/dist/safe-bash-command-awk/awk-runtime.js +3 -3
  368. package/dist/safe-bash-command-awk/awk.js +5 -5
  369. package/dist/safe-bash-command-awk/index.js +5 -5
  370. package/dist/safe-bash-command-bc/index.js +206 -60
  371. package/dist/safe-bash-command-cmp/index.js +7 -6
  372. package/dist/safe-bash-command-column/column.js +3 -3
  373. package/dist/safe-bash-command-column/index.js +3 -3
  374. package/dist/safe-bash-command-column/layout.js +2 -2
  375. package/dist/safe-bash-command-csvkit/index.d.ts +1 -0
  376. package/dist/safe-bash-command-csvkit/index.js +1505 -7
  377. package/dist/safe-bash-command-csvkit/sync-support.js +2 -7
  378. package/dist/safe-bash-command-curl/curl.js +1 -1
  379. package/dist/safe-bash-command-curl/index.js +1 -1
  380. package/dist/safe-bash-command-date/date.js +1 -1
  381. package/dist/safe-bash-command-date/index.js +1 -1
  382. package/dist/safe-bash-command-dd/index.js +1 -1
  383. package/dist/safe-bash-command-dd/io.js +51 -5
  384. package/dist/safe-bash-command-diff/diff.js +1 -1
  385. package/dist/safe-bash-command-diff/index.js +1 -1
  386. package/dist/safe-bash-command-diff3/index.js +10 -13
  387. package/dist/safe-bash-command-exiftool/index.js +278 -50
  388. package/dist/safe-bash-command-exiftool/registry.d.ts +4 -2
  389. package/dist/safe-bash-command-factor/command.js +2 -2
  390. package/dist/safe-bash-command-factor/index.js +2 -2
  391. package/dist/safe-bash-command-fd/arguments.d.ts +2 -0
  392. package/dist/safe-bash-command-fd/index.js +42 -12
  393. package/dist/safe-bash-command-ffmpeg/index.js +356 -66
  394. package/dist/safe-bash-command-find/find-format.d.ts +3 -0
  395. package/dist/safe-bash-command-find/find-format.js +1 -1
  396. package/dist/safe-bash-command-find/find.js +2 -2
  397. package/dist/safe-bash-command-find/index.js +2 -2
  398. package/dist/safe-bash-command-fmt/index.js +1 -4
  399. package/dist/safe-bash-command-fold/engine.d.ts +1 -1
  400. package/dist/safe-bash-command-fold/family.js +2 -2
  401. package/dist/safe-bash-command-fold/index.js +1 -1
  402. package/dist/safe-bash-command-hexdump/command.js +2 -2
  403. package/dist/safe-bash-command-hexdump/index.js +2 -2
  404. package/dist/safe-bash-command-html-to-markdown/entities.js +1 -1
  405. package/dist/safe-bash-command-html-to-markdown/index.js +4 -4
  406. package/dist/safe-bash-command-html-to-markdown/input.js +3 -3
  407. package/dist/safe-bash-command-html-to-markdown/parser.js +2 -2
  408. package/dist/safe-bash-command-html-to-markdown/render.js +3 -3
  409. package/dist/safe-bash-command-htmlq/contracts.d.ts +5 -2
  410. package/dist/safe-bash-command-htmlq/index.d.ts +2 -1
  411. package/dist/safe-bash-command-htmlq/index.js +175 -49
  412. package/dist/safe-bash-command-htmlq/sync.d.ts +1 -0
  413. package/dist/safe-bash-command-imagemagick/index.js +56 -6
  414. package/dist/safe-bash-command-install/arguments.d.ts +27 -0
  415. package/dist/safe-bash-command-install/arguments.js +224 -0
  416. package/dist/safe-bash-command-install/index.d.ts +7 -0
  417. package/dist/safe-bash-command-install/index.js +942 -0
  418. package/dist/safe-bash-command-install/mode.d.ts +6 -0
  419. package/dist/safe-bash-command-install/mode.js +71 -0
  420. package/dist/safe-bash-command-install/options.d.ts +40 -0
  421. package/dist/safe-bash-command-install/options.js +27 -0
  422. package/dist/safe-bash-command-jq/index.js +1 -1
  423. package/dist/safe-bash-command-jq/jq.js +1 -1
  424. package/dist/safe-bash-command-less/index.js +37 -61
  425. package/dist/safe-bash-command-llm/command.js +1 -1
  426. package/dist/safe-bash-command-llm/elevenlabs.js +2 -2
  427. package/dist/safe-bash-command-llm/index.js +4 -4
  428. package/dist/safe-bash-command-llm/openai.js +2 -2
  429. package/dist/safe-bash-command-llm/providers/elevenlabs.js +2 -2
  430. package/dist/safe-bash-command-llm/providers/index.js +3 -3
  431. package/dist/safe-bash-command-llm/providers/openai.js +2 -2
  432. package/dist/safe-bash-command-llm/providers/shared.js +1 -1
  433. package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.browser.d.ts +463 -46
  434. package/dist/safe-bash-command-mcp/index.browser.js +19308 -0
  435. package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.d.ts +15 -6
  436. package/dist/{safe-bash-mcp → safe-bash-command-mcp}/index.js +2804 -2771
  437. package/dist/safe-bash-command-media/LICENSE +21 -0
  438. package/dist/safe-bash-command-media/index.d.ts +6 -0
  439. package/dist/safe-bash-command-media/index.js +30 -0
  440. package/dist/safe-bash-command-media/plugin.d.ts +18 -0
  441. package/dist/safe-bash-command-media/plugin.js +11 -0
  442. package/dist/safe-bash-command-media/remote.d.ts +63 -0
  443. package/dist/safe-bash-command-media/remote.js +11 -0
  444. package/dist/safe-bash-command-media/settings.d.ts +4 -0
  445. package/dist/safe-bash-command-media/settings.js +41 -0
  446. package/dist/safe-bash-command-mktemp/command.js +1 -1
  447. package/dist/safe-bash-command-mktemp/index.js +1 -1
  448. package/dist/safe-bash-command-mmdc/arguments.d.ts +1 -0
  449. package/dist/safe-bash-command-mmdc/command.d.ts +2 -0
  450. package/dist/safe-bash-command-mmdc/contracts.d.ts +8 -1
  451. package/dist/safe-bash-command-mmdc/index.js +359 -7
  452. package/dist/safe-bash-command-nl/index.js +1 -1
  453. package/dist/safe-bash-command-nl/nl.js +1 -1
  454. package/dist/safe-bash-command-node/LICENSE +21 -0
  455. package/dist/safe-bash-command-node/index.d.ts +17 -0
  456. package/dist/safe-bash-command-node/index.js +328 -0
  457. package/dist/safe-bash-command-numfmt/index.js +1 -0
  458. package/dist/safe-bash-command-od/index.js +10 -6
  459. package/dist/safe-bash-command-op/index.js +39 -32
  460. package/dist/safe-bash-command-op/types.d.ts +1 -0
  461. package/dist/safe-bash-command-pandoc/command.js +3 -3
  462. package/dist/safe-bash-command-pandoc/index.d.ts +1 -0
  463. package/dist/safe-bash-command-pandoc/index.js +5 -3
  464. package/dist/safe-bash-command-pandoc/sync.d.ts +1 -0
  465. package/dist/safe-bash-command-patch/index.js +4 -4
  466. package/dist/safe-bash-command-patch/patch.js +4 -4
  467. package/dist/safe-bash-command-pdfimages/index.js +1 -1
  468. package/dist/safe-bash-command-pdfinfo/index.js +30 -5
  469. package/dist/safe-bash-command-pdftk/index.js +21 -23
  470. package/dist/safe-bash-command-pdftoppm/index.js +17 -4
  471. package/dist/safe-bash-command-pdftotext/index.js +11 -14
  472. package/dist/safe-bash-command-qpdf/index.d.ts +1 -0
  473. package/dist/safe-bash-command-qpdf/index.js +9 -6
  474. package/dist/safe-bash-command-rg/index.js +1 -1
  475. package/dist/safe-bash-command-rg/rg-command.js +1 -1
  476. package/dist/safe-bash-command-sed/index.js +1 -1
  477. package/dist/safe-bash-command-sed/sed.js +1 -1
  478. package/dist/safe-bash-command-shuf/input.d.ts +2 -2
  479. package/dist/safe-bash-command-shuf/input.js +2 -1
  480. package/dist/safe-bash-command-shuf/shuf.js +4 -2
  481. package/dist/safe-bash-command-sips/index.js +2 -2
  482. package/dist/safe-bash-command-soffice/index.js +97 -12
  483. package/dist/safe-bash-command-sponge/index.js +4 -1
  484. package/dist/safe-bash-command-sqlite3/engine.d.ts +1 -0
  485. package/dist/safe-bash-command-sqlite3/index.js +510 -70
  486. package/dist/safe-bash-command-ssconvert/formats/xlsx.js +2 -2
  487. package/dist/safe-bash-command-ssconvert/index.js +44 -22
  488. package/dist/safe-bash-command-stat/command.js +1 -1
  489. package/dist/safe-bash-command-stat/index.js +1 -1
  490. package/dist/safe-bash-command-tar/create.d.ts +1 -0
  491. package/dist/safe-bash-command-tar/create.js +2 -2
  492. package/dist/safe-bash-command-tar/extract.js +2 -2
  493. package/dist/safe-bash-command-tar/index.js +4 -4
  494. package/dist/safe-bash-command-tar/modes.js +4 -4
  495. package/dist/safe-bash-command-tar/options.js +1 -1
  496. package/dist/safe-bash-command-truncate/index.js +2 -2
  497. package/dist/safe-bash-command-tsort/command.js +2 -2
  498. package/dist/safe-bash-command-tsort/index.js +2 -2
  499. package/dist/safe-bash-command-unalias/index.d.ts +12 -0
  500. package/dist/safe-bash-command-unalias/index.js +67 -0
  501. package/dist/safe-bash-command-unrtf/index.js +26 -4
  502. package/dist/safe-bash-command-xan/argv.d.ts +1 -1
  503. package/dist/safe-bash-command-xan/argv.js +2 -2
  504. package/dist/safe-bash-command-xan/budget.d.ts +0 -1
  505. package/dist/safe-bash-command-xan/budget.js +1 -1
  506. package/dist/safe-bash-command-xan/commands.js +6 -6
  507. package/dist/safe-bash-command-xan/csv.js +2 -2
  508. package/dist/safe-bash-command-xan/index.js +8 -9
  509. package/dist/safe-bash-command-xan/io.js +4 -4
  510. package/dist/safe-bash-command-xan/options.js +1 -1
  511. package/dist/safe-bash-command-xan/selector.js +2 -2
  512. package/dist/safe-bash-command-xmllint/index.js +45 -23
  513. package/dist/safe-bash-command-xxd/index.js +41 -10
  514. package/dist/safe-bash-command-yq/accounting.js +1 -1
  515. package/dist/safe-bash-command-yq/index.js +3 -2
  516. package/dist/safe-bash-command-yq/native-work.js +2 -0
  517. package/dist/safe-bash-command-yq/parser.js +2 -2
  518. package/dist/safe-bash-command-yq/query.js +5 -5
  519. package/dist/safe-bash-command-yq/toml.js +2 -2
  520. package/dist/safe-bash-command-zip/index.js +3 -3
  521. package/dist/safe-bash-compression-engine/bounded-codec.js +2 -2
  522. package/dist/safe-bash-compression-engine/codec-loader.js +1 -1
  523. package/dist/safe-bash-compression-engine/files.js +5 -5
  524. package/dist/safe-bash-compression-engine/index.js +4 -4
  525. package/dist/safe-bash-compression-engine/operand.js +5 -5
  526. package/dist/safe-bash-compression-engine/stream.js +4 -4
  527. package/dist/safe-bash-compression-engine/zstd-decode.js +3 -3
  528. package/dist/safe-bash-contracts/command.js +3 -3
  529. package/dist/safe-bash-contracts/default-executor.js +2 -2
  530. package/dist/safe-bash-contracts/diagnostics.js +3 -3
  531. package/dist/safe-bash-contracts/escaping.js +6 -6
  532. package/dist/safe-bash-contracts/filesystem-descriptor.js +3 -3
  533. package/dist/safe-bash-contracts/filesystem-output.js +5 -5
  534. package/dist/safe-bash-contracts/http.d.ts +7 -0
  535. package/dist/safe-bash-contracts/index.js +8 -8
  536. package/dist/safe-bash-contracts/io.js +2 -2
  537. package/dist/safe-bash-contracts/output.js +3 -3
  538. package/dist/safe-bash-contracts/runtime-control.d.ts +2 -2
  539. package/dist/safe-bash-contracts/runtime-control.js +4 -2
  540. package/dist/safe-bash-contracts/signals.d.ts +2 -0
  541. package/dist/safe-bash-contracts/signals.js +3 -1
  542. package/dist/safe-bash-contracts/yield.js +1 -1
  543. package/dist/safe-bash-csv-engine/index.d.ts +2 -1
  544. package/dist/safe-bash-csv-engine/index.js +21 -15
  545. package/dist/safe-bash-io-engine/commands/search/requirements.js +2 -2
  546. package/dist/safe-bash-io-engine/commands/text-programs/shared.js +6 -6
  547. package/dist/safe-bash-io-engine/internal.js +1 -1
  548. package/dist/safe-bash-io-engine/shell/pattern.js +38 -18
  549. package/dist/safe-bash-line-ending-engine/convert.js +9 -204
  550. package/dist/safe-bash-line-ending-engine/encoding.js +9 -42
  551. package/dist/safe-bash-line-ending-engine/index.js +48 -0
  552. package/dist/safe-bash-line-ending-engine/info.js +9 -90
  553. package/dist/safe-bash-line-ending-engine/internal.js +15 -160
  554. package/dist/safe-bash-line-ending-engine/io.js +12 -289
  555. package/dist/safe-bash-line-ending-engine/stage.js +10 -160
  556. package/dist/safe-bash-markdown-engine/index.js +3 -3
  557. package/dist/safe-bash-network-engine/args.d.ts +6 -0
  558. package/dist/safe-bash-network-engine/args.js +4 -2
  559. package/dist/safe-bash-network-engine/body.js +1 -1
  560. package/dist/safe-bash-network-engine/fetch-transport.js +3 -1
  561. package/dist/safe-bash-network-engine/index.js +3 -1
  562. package/dist/safe-bash-network-engine/input.js +2 -2
  563. package/dist/safe-bash-network-engine/platform-portable.js +3 -1
  564. package/dist/safe-bash-query-engine/dates.d.ts +1 -1
  565. package/dist/safe-bash-query-engine/dates.js +1 -1
  566. package/dist/safe-bash-query-engine/index.js +6 -6
  567. package/dist/safe-bash-query-engine/interpreter.js +4 -4
  568. package/dist/safe-bash-query-engine/parser.js +1 -1
  569. package/dist/safe-bash-query-engine/query-core.js +6 -6
  570. package/dist/safe-bash-regex-engine/execution/bounded-provider.js +10 -0
  571. package/dist/safe-bash-regex-engine/index.js +1 -1
  572. package/dist/safe-bash-regex-engine/text/regex.d.ts +1 -1
  573. package/dist/safe-bash-regex-engine/text/regex.js +1 -1
  574. package/dist/safe-bash-search-engine/ergonomic-regex.d.ts +1 -0
  575. package/dist/safe-bash-search-engine/ergonomic-regex.js +1 -1
  576. package/dist/safe-bash-search-engine/grep.js +16 -9
  577. package/dist/safe-bash-search-engine/matcher.d.ts +2 -2
  578. package/dist/safe-bash-search-engine/matcher.js +12 -8
  579. package/dist/safe-bash-search-engine/shared.js +1 -1
  580. package/dist/safe-bash-search-engine/walk.js +13 -1
  581. package/dist/safe-bash-text-stream-engine/stream-format/shared.d.ts +1 -1
  582. package/dist/safe-bash-text-stream-engine/stream-format/shared.js +2 -1
  583. package/dist/safe-bash-xml-engine/document.js +3 -3
  584. package/dist/safe-bash-xml-engine/evaluate.js +2 -2
  585. package/dist/safe-bash-xml-engine/index.js +4 -4
  586. package/dist/safe-bash-xml-engine/io.js +7 -2
  587. package/dist/safe-bash-xml-engine/limits.d.ts +0 -2
  588. package/dist/safe-bash-xml-engine/limits.js +1 -1
  589. package/dist/safe-bash-xml-engine/query.js +3 -3
  590. package/dist/safe-bash-zip-engine/index.js +3 -3
  591. package/dist/safe-bash-zip-engine/zip/repair.js +3 -3
  592. package/dist/safe-bash-zip-engine/zip/safety.js +1 -1
  593. package/dist/safe-bash-zip-engine/zip/sfx.js +3 -3
  594. package/dist/safe-bash-zip-engine/zip/volumes.js +1 -1
  595. package/dist/safe-bash-zip-engine/zip-format.js +3 -3
  596. package/dist/safe-playwright-cloudflare/browser-socket-closure.js +18 -3
  597. package/dist/safe-playwright-cloudflare/shell-browser-resource.js +1 -1
  598. package/dist/xlsx-ast/xlsx.js +6 -5
  599. package/package.json +86 -98
  600. package/dist/media-cli/bytes.d.ts +0 -8
  601. package/dist/media-cli/bytes.js +0 -40
  602. package/dist/media-cli/concat.d.ts +0 -30
  603. package/dist/media-cli/concat.js +0 -197
  604. package/dist/media-cli/content.js +0 -66
  605. package/dist/media-cli/dependency-grammars.d.ts +0 -12
  606. package/dist/media-cli/dependency-grammars.js +0 -557
  607. package/dist/media-cli/discover.js +0 -286
  608. package/dist/media-cli/engine.js +0 -190
  609. package/dist/media-cli/filename-expression.js +0 -147
  610. package/dist/media-cli/filesystem.js +0 -35
  611. package/dist/media-cli/frontend-contract.js +0 -8
  612. package/dist/media-cli/frontend-issues.d.ts +0 -6
  613. package/dist/media-cli/frontend-issues.js +0 -9
  614. package/dist/media-cli/imagemagick-operand.d.ts +0 -42
  615. package/dist/media-cli/imagemagick-operand.js +0 -229
  616. package/dist/media-cli/imagemagick-references.d.ts +0 -7
  617. package/dist/media-cli/imagemagick-references.js +0 -42
  618. package/dist/media-cli/imagemagick.generated.js +0 -3254
  619. package/dist/media-cli/imagemagick.js +0 -615
  620. package/dist/media-cli/index.js +0 -12
  621. package/dist/media-cli/mvg.d.ts +0 -10
  622. package/dist/media-cli/mvg.js +0 -102
  623. package/dist/media-cli/network.js +0 -78
  624. package/dist/media-cli/options.generated.js +0 -3312
  625. package/dist/media-cli/preset.d.ts +0 -11
  626. package/dist/media-cli/preset.js +0 -57
  627. package/dist/media-cli/resolution-path.d.ts +0 -23
  628. package/dist/media-cli/resolution-path.js +0 -217
  629. package/dist/media-cli/resolver.js +0 -494
  630. package/dist/media-cli/resources.d.ts +0 -16
  631. package/dist/media-cli/resources.js +0 -187
  632. package/dist/media-cli/shim.js +0 -52
  633. package/dist/media-cli/tee.d.ts +0 -6
  634. package/dist/media-cli/tee.js +0 -38
  635. package/dist/office-package/zip-sync.js +0 -111
  636. package/dist/remote-execution/binary.js +0 -178
  637. package/dist/remote-execution/callback-result.js +0 -26
  638. package/dist/remote-execution/canonical-capabilities.d.ts +0 -5
  639. package/dist/remote-execution/canonical-capabilities.js +0 -45
  640. package/dist/remote-execution/canonical-metadata.d.ts +0 -4
  641. package/dist/remote-execution/canonical-metadata.js +0 -32
  642. package/dist/remote-execution/client.js +0 -824
  643. package/dist/remote-execution/deployment.js +0 -131
  644. package/dist/remote-execution/descriptors.js +0 -267
  645. package/dist/remote-execution/effects.js +0 -357
  646. package/dist/remote-execution/endpoint.js +0 -224
  647. package/dist/remote-execution/files.js +0 -291
  648. package/dist/remote-execution/hosting-operation.js +0 -26
  649. package/dist/remote-execution/hosting-request.d.ts +0 -4
  650. package/dist/remote-execution/hosting-request.js +0 -12
  651. package/dist/remote-execution/hosting-stream.d.ts +0 -8
  652. package/dist/remote-execution/hosting-stream.js +0 -64
  653. package/dist/remote-execution/index.js +0 -18
  654. package/dist/remote-execution/invocation-admission.d.ts +0 -3
  655. package/dist/remote-execution/invocation-admission.js +0 -17
  656. package/dist/remote-execution/job-binding.js +0 -1269
  657. package/dist/remote-execution/materializations.js +0 -284
  658. package/dist/remote-execution/modal-driver.js +0 -90
  659. package/dist/remote-execution/native-result.d.ts +0 -3
  660. package/dist/remote-execution/native-result.js +0 -16
  661. package/dist/remote-execution/output-freshness.d.ts +0 -4
  662. package/dist/remote-execution/output-freshness.js +0 -19
  663. package/dist/remote-execution/output-retrieval.js +0 -474
  664. package/dist/remote-execution/process-http.js +0 -607
  665. package/dist/remote-execution/process.js +0 -577
  666. package/dist/remote-execution/protocol.js +0 -208
  667. package/dist/remote-execution/relay.js +0 -91
  668. package/dist/remote-execution/rest-driver.js +0 -93
  669. package/dist/remote-execution/upload-descriptor.js +0 -201
  670. package/dist/remote-execution/upload-protocol.js +0 -62
  671. package/dist/remote-execution/uploads.js +0 -324
  672. package/dist/remote-execution/wire-json.d.ts +0 -4
  673. package/dist/remote-execution/wire-json.js +0 -44
  674. package/dist/remote-execution/wire-validation.js +0 -131
  675. package/dist/remote-execution/wire.generated.js +0 -4224
  676. package/dist/safe-bash/chunks/chunk-GDYNCWRV.js +0 -161
  677. package/dist/safe-bash/chunks/chunk-IWDICZVK.js +0 -20
  678. package/dist/safe-bash/chunks/chunk-MHMMRCYC.js +0 -3464
  679. package/dist/safe-bash/chunks/chunk-UE5KZDEK.js +0 -77
  680. package/dist/safe-bash/chunks/csvkit-TACDU7FC.js +0 -1618
  681. package/dist/safe-bash/chunks/implementation-MLFHUQ5M.js +0 -133
  682. package/dist/safe-bash/commands/csvkit/sync.js +0 -1639
  683. package/dist/safe-bash/commands/node/unconfigured.d.ts +0 -3
  684. package/dist/safe-bash/commands/node/unconfigured.js +0 -10
  685. package/dist/safe-bash/commands/pandoc/implementation.d.ts +0 -8
  686. package/dist/safe-bash/commands/pandoc/implementation.js +0 -94
  687. package/dist/safe-bash-mcp/index.browser.js +0 -9167
  688. package/dist/safe-bash/command-chunks/{chunk-ZRRBXU3M.js → chunk-GIN5GUDP.js} +4 -4
  689. package/dist/safe-bash/command-chunks/{chunk-LAOM65EE.js → chunk-IEO4XVN6.js} +3 -3
  690. package/dist/safe-bash/command-chunks/{chunk-BXCXRYVU.js → chunk-JNANXVJV.js} +0 -0
  691. package/dist/safe-bash/command-chunks/{chunk-364TMWBT.js → chunk-MWREVL44.js} +6 -6
  692. package/dist/safe-bash/command-chunks/{chunk-464RVBGB.js → chunk-Q5TDKFHK.js} +3 -3
  693. package/dist/safe-bash/command-chunks/{chunk-AJR3AQYA.js → chunk-UKX3LZHR.js} +0 -0
  694. package/dist/safe-bash/command-chunks/{chunk-XIIBTGC5.js → chunk-XPXEQKRW.js} +9 -9
  695. package/dist/safe-bash/command-chunks/{chunk-FDBUV4HJ.js → chunk-Y4HGTG3E.js} +3 -3
  696. /package/dist/{safe-bash/commands/csvkit → safe-bash-command-csvkit}/sync.d.ts +0 -0
@@ -1,4 +1,4 @@
1
- import "../safe-bash/command-chunks/chunk-AJR3AQYA.js";
1
+ import "../safe-bash/command-chunks/chunk-UKX3LZHR.js";
2
2
  import {
3
3
  decodeImage,
4
4
  encodeImage,
@@ -10,7 +10,7 @@ import {
10
10
  negateImage,
11
11
  resizeImage,
12
12
  rotateImage
13
- } from "../safe-bash/command-chunks/chunk-YG4EPFWC.js";
13
+ } from "../safe-bash/command-chunks/chunk-M3NINRDU.js";
14
14
  import {
15
15
  init_buffer
16
16
  } from "../safe-bash/command-chunks/chunk-HX3SHTCE.js";
@@ -1385,7 +1385,7 @@ function buildH264SpsPps(width, height, fps = 30) {
1385
1385
  pps.set(ppsRbsp, 1);
1386
1386
  return { sps, pps };
1387
1387
  }
1388
- function encodeH264IdrFrame(rgba, width, height, frameIndex = 0) {
1388
+ function encodeH264IdrFrame(rgba, width, height, frameIndex = 0, refBuffer) {
1389
1389
  const mbWidth = Math.max(1, Math.ceil(width / 16));
1390
1390
  const mbHeight = Math.max(1, Math.ceil(height / 16));
1391
1391
  const paddedWidth = mbWidth * 16;
@@ -1408,6 +1408,96 @@ function encodeH264IdrFrame(rgba, width, height, frameIndex = 0) {
1408
1408
  }
1409
1409
  const { y: yPlane, u: uPlane, v: vPlane } = rgbaToYuv420p(paddedRgba, paddedWidth, paddedHeight);
1410
1410
  const uvWidth = paddedWidth >>> 1;
1411
+ const gopPos = frameIndex % 24;
1412
+ if (refBuffer && gopPos !== 0 && refBuffer.y?.byteLength === yPlane.byteLength && refBuffer.u?.byteLength === uPlane.byteLength && refBuffer.v?.byteLength === vPlane.byteLength) {
1413
+ const refY = refBuffer.y;
1414
+ const refU = refBuffer.u;
1415
+ const refV = refBuffer.v;
1416
+ const pBits = new BitWriter();
1417
+ pBits.writeUE(0);
1418
+ pBits.writeUE(5);
1419
+ pBits.writeUE(0);
1420
+ pBits.writeBits(gopPos & 15, 4);
1421
+ pBits.writeBits(gopPos * 2 & 15, 4);
1422
+ pBits.writeBit(0);
1423
+ pBits.writeBit(0);
1424
+ pBits.writeBit(0);
1425
+ pBits.writeSE(0);
1426
+ pBits.writeUE(1);
1427
+ let skipRun = 0;
1428
+ for (let mbY = 0; mbY < mbHeight; mbY++) {
1429
+ for (let mbX = 0; mbX < mbWidth; mbX++) {
1430
+ const lumaBaseY = mbY * 16;
1431
+ const lumaBaseX = mbX * 16;
1432
+ const chromaBaseY = mbY * 8;
1433
+ const chromaBaseX = mbX * 8;
1434
+ let unchanged = true;
1435
+ for (let dy = 0; dy < 16 && unchanged; dy++) {
1436
+ const ro = (lumaBaseY + dy) * paddedWidth + lumaBaseX;
1437
+ for (let dx = 0; dx < 16; dx++) {
1438
+ if (yPlane[ro + dx] !== refY[ro + dx]) {
1439
+ unchanged = false;
1440
+ break;
1441
+ }
1442
+ }
1443
+ }
1444
+ for (let dy = 0; dy < 8 && unchanged; dy++) {
1445
+ const ro = (chromaBaseY + dy) * uvWidth + chromaBaseX;
1446
+ for (let dx = 0; dx < 8; dx++) {
1447
+ if (uPlane[ro + dx] !== refU[ro + dx] || vPlane[ro + dx] !== refV[ro + dx]) {
1448
+ unchanged = false;
1449
+ break;
1450
+ }
1451
+ }
1452
+ }
1453
+ if (unchanged) {
1454
+ skipRun++;
1455
+ } else {
1456
+ pBits.writeUE(skipRun);
1457
+ skipRun = 0;
1458
+ pBits.writeUE(30);
1459
+ pBits.alignWithZeroBits();
1460
+ for (let dy = 0; dy < 16; dy++) {
1461
+ const ro = (lumaBaseY + dy) * paddedWidth + lumaBaseX;
1462
+ for (let dx = 0; dx < 16; dx++) {
1463
+ pBits.writeBits(yPlane[ro + dx], 8);
1464
+ }
1465
+ }
1466
+ for (let dy = 0; dy < 8; dy++) {
1467
+ const ro = (chromaBaseY + dy) * uvWidth + chromaBaseX;
1468
+ for (let dx = 0; dx < 8; dx++) {
1469
+ pBits.writeBits(uPlane[ro + dx], 8);
1470
+ }
1471
+ }
1472
+ for (let dy = 0; dy < 8; dy++) {
1473
+ const ro = (chromaBaseY + dy) * uvWidth + chromaBaseX;
1474
+ for (let dx = 0; dx < 8; dx++) {
1475
+ pBits.writeBits(vPlane[ro + dx], 8);
1476
+ }
1477
+ }
1478
+ }
1479
+ }
1480
+ }
1481
+ if (skipRun > 0) {
1482
+ pBits.writeUE(skipRun);
1483
+ }
1484
+ pBits.writeRbspTrailingBits();
1485
+ const pEscaped = escapeRbsp(pBits.toUint8Array());
1486
+ const pLen = 1 + pEscaped.byteLength;
1487
+ const pAvcc = new Uint8Array(4 + pLen);
1488
+ new DataView(pAvcc.buffer).setUint32(0, pLen, false);
1489
+ pAvcc[4] = 97;
1490
+ pAvcc.set(pEscaped, 5);
1491
+ refBuffer.y = yPlane;
1492
+ refBuffer.u = uPlane;
1493
+ refBuffer.v = vPlane;
1494
+ return pAvcc;
1495
+ }
1496
+ if (refBuffer) {
1497
+ refBuffer.y = yPlane;
1498
+ refBuffer.u = uPlane;
1499
+ refBuffer.v = vPlane;
1500
+ }
1411
1501
  const bits = new BitWriter();
1412
1502
  bits.writeUE(0);
1413
1503
  bits.writeUE(7);
@@ -1457,7 +1547,7 @@ function encodeH264IdrFrame(rgba, width, height, frameIndex = 0) {
1457
1547
  avcc.set(escapedRbsp, 5);
1458
1548
  return avcc;
1459
1549
  }
1460
- function decodeH264FrameToRgba(sampleData, width, height, lengthSize = 4) {
1550
+ function decodeH264FrameToRgba(sampleData, width, height, lengthSize = 4, refBuffer) {
1461
1551
  const mbWidth = Math.max(1, Math.ceil(width / 16));
1462
1552
  const mbHeight = Math.max(1, Math.ceil(height / 16));
1463
1553
  const paddedWidth = mbWidth * 16;
@@ -1487,9 +1577,18 @@ function decodeH264FrameToRgba(sampleData, width, height, lengthSize = 4) {
1487
1577
  return decodeH264FrameToRgba(converted.avccData, width, height, 4);
1488
1578
  }
1489
1579
  }
1490
- const yPlane = new Uint8Array(paddedWidth * paddedHeight).fill(16);
1491
- const uPlane = new Uint8Array(uvWidth * uvHeight).fill(128);
1492
- const vPlane = new Uint8Array(uvWidth * uvHeight).fill(128);
1580
+ const yPlane = new Uint8Array(paddedWidth * paddedHeight);
1581
+ const uPlane = new Uint8Array(uvWidth * uvHeight);
1582
+ const vPlane = new Uint8Array(uvWidth * uvHeight);
1583
+ if (refBuffer && refBuffer.y?.byteLength === yPlane.byteLength && refBuffer.u?.byteLength === uPlane.byteLength && refBuffer.v?.byteLength === vPlane.byteLength) {
1584
+ yPlane.set(refBuffer.y);
1585
+ uPlane.set(refBuffer.u);
1586
+ vPlane.set(refBuffer.v);
1587
+ } else {
1588
+ yPlane.fill(16);
1589
+ uPlane.fill(128);
1590
+ vPlane.fill(128);
1591
+ }
1493
1592
  if (sliceNalu && sliceNalu.byteLength > 1) {
1494
1593
  const nalType = sliceNalu[0] & 31;
1495
1594
  const nalRefIdc = sliceNalu[0] >>> 5 & 3;
@@ -1503,6 +1602,16 @@ function decodeH264FrameToRgba(sampleData, width, height, lengthSize = 4) {
1503
1602
  bits.readUE();
1504
1603
  }
1505
1604
  bits.readBits(4);
1605
+ if (sliceType === 0 || sliceType === 5) {
1606
+ const numRefOverride = bits.readBit();
1607
+ if (numRefOverride) bits.readUE();
1608
+ const refPicListMod = bits.readBit();
1609
+ if (refPicListMod) {
1610
+ while (bits.bitsRemaining > 0 && bits.readUE() !== 3) {
1611
+ bits.readUE();
1612
+ }
1613
+ }
1614
+ }
1506
1615
  if (nalType === 5) {
1507
1616
  bits.readBit();
1508
1617
  bits.readBit();
@@ -1551,6 +1660,52 @@ function decodeH264FrameToRgba(sampleData, width, height, lengthSize = 4) {
1551
1660
  }
1552
1661
  }
1553
1662
  }
1663
+ } else if (firstMb === 0 && (sliceType === 0 || sliceType === 5)) {
1664
+ const totalMbs = mbWidth * mbHeight;
1665
+ let mbAddr = 0;
1666
+ while (mbAddr < totalMbs && bits.bitsRemaining > 0) {
1667
+ const skipRun = bits.readUE();
1668
+ mbAddr += skipRun;
1669
+ decodedMbs += skipRun;
1670
+ if (mbAddr >= totalMbs || bits.bitsRemaining < 8) break;
1671
+ const mbType = bits.readUE();
1672
+ if (mbType === 30) {
1673
+ bits.alignToByte();
1674
+ const mbY = Math.floor(mbAddr / mbWidth);
1675
+ const mbX = mbAddr % mbWidth;
1676
+ const lumaBaseY = mbY * 16;
1677
+ const lumaBaseX = mbX * 16;
1678
+ for (let dy = 0; dy < 16; dy++) {
1679
+ const rowOffset = (lumaBaseY + dy) * paddedWidth + lumaBaseX;
1680
+ for (let dx = 0; dx < 16; dx++) {
1681
+ yPlane[rowOffset + dx] = bits.readBits(8);
1682
+ }
1683
+ }
1684
+ const chromaBaseY = mbY * 8;
1685
+ const chromaBaseX = mbX * 8;
1686
+ for (let dy = 0; dy < 8; dy++) {
1687
+ const rowOffset = (chromaBaseY + dy) * uvWidth + chromaBaseX;
1688
+ for (let dx = 0; dx < 8; dx++) {
1689
+ uPlane[rowOffset + dx] = bits.readBits(8);
1690
+ }
1691
+ }
1692
+ for (let dy = 0; dy < 8; dy++) {
1693
+ const rowOffset = (chromaBaseY + dy) * uvWidth + chromaBaseX;
1694
+ for (let dx = 0; dx < 8; dx++) {
1695
+ vPlane[rowOffset + dx] = bits.readBits(8);
1696
+ }
1697
+ }
1698
+ mbAddr++;
1699
+ decodedMbs++;
1700
+ } else {
1701
+ break;
1702
+ }
1703
+ }
1704
+ }
1705
+ if (refBuffer && decodedMbs > 0) {
1706
+ refBuffer.y = yPlane;
1707
+ refBuffer.u = uPlane;
1708
+ refBuffer.v = vPlane;
1554
1709
  }
1555
1710
  if (decodedMbs === 0) {
1556
1711
  for (let mbY = 0; mbY < mbHeight; mbY++) {
@@ -2401,9 +2556,10 @@ function parseMp4(bytes, options = {}) {
2401
2556
  if (options.decodeFrames && type === "video" && width && height) {
2402
2557
  const lengthSize = (firstCodec?.avcC?.lengthSizeMinusOne ?? 3) + 1;
2403
2558
  decodedVideoFrames = [];
2559
+ const refBuffer = {};
2404
2560
  for (const sample of samples) {
2405
2561
  budget.recordFrame(width, height);
2406
- const rgba = decodeH264FrameToRgba(sample.data, width, height, lengthSize);
2562
+ const rgba = decodeH264FrameToRgba(sample.data, width, height, lengthSize, refBuffer);
2407
2563
  decodedVideoFrames.push({
2408
2564
  width,
2409
2565
  height,
@@ -2676,10 +2832,11 @@ function materializeTrackSamples(track) {
2676
2832
  const avcC = parseAvcC(avcCBytes);
2677
2833
  const samples = [];
2678
2834
  let dts = 0;
2835
+ const refBuffer = {};
2679
2836
  for (let i = 0; i < track.decodedVideoFrames.length; i++) {
2680
2837
  const frame = track.decodedVideoFrames[i];
2681
2838
  const duration = Math.max(1, Math.round(frame.durationSeconds * timescale));
2682
- const encoded = encodeH264IdrFrame(frame.data, width, height, i);
2839
+ const encoded = encodeH264IdrFrame(frame.data, width, height, i, refBuffer);
2683
2840
  samples.push({
2684
2841
  data: encoded,
2685
2842
  dts,
@@ -2692,36 +2849,42 @@ function materializeTrackSamples(track) {
2692
2849
  });
2693
2850
  dts += duration;
2694
2851
  }
2852
+ const codecDescriptions = [
2853
+ {
2854
+ formatFourCC: "avc1",
2855
+ codecName: "h264",
2856
+ profile: "Constrained Baseline",
2857
+ level: 31,
2858
+ width,
2859
+ height,
2860
+ pixFmt: "yuv420p",
2861
+ avcC
2862
+ }
2863
+ ];
2864
+ const mutableTrack = track;
2865
+ mutableTrack.samples = samples;
2866
+ mutableTrack.codecDescriptions = codecDescriptions;
2867
+ mutableTrack.dirtyVideoEncode = false;
2868
+ mutableTrack.decodedVideoFrames = void 0;
2695
2869
  return {
2696
2870
  samples,
2697
- codecDescriptions: [
2698
- {
2699
- formatFourCC: "avc1",
2700
- codecName: "h264",
2701
- profile: "Constrained Baseline",
2702
- level: 31,
2703
- width,
2704
- height,
2705
- pixFmt: "yuv420p",
2706
- avcC
2707
- }
2708
- ]
2871
+ codecDescriptions
2709
2872
  };
2710
2873
  }
2711
2874
  if (track.type === "audio" && track.decodedAudio) {
2712
2875
  const sampleRate = track.decodedAudio.sampleRate || 44100;
2713
2876
  const channels = track.decodedAudio.channels || 2;
2714
- const totalSamples = track.decodedAudio.channelData[0]?.length ?? 1024;
2715
- const numFrames = Math.max(1, Math.ceil(totalSamples / 1024));
2877
+ const totalSamples = track.decodedAudio.channelData[0]?.length ?? 0;
2878
+ const numFrames = Math.ceil(totalSamples / 1024);
2716
2879
  const silentAac = createSilentAacFrame(channels);
2717
2880
  const samples = [];
2718
2881
  for (let i = 0; i < numFrames; i++) {
2719
2882
  samples.push({
2720
2883
  data: silentAac,
2721
- dts: i * 1024,
2722
- pts: i * 1024,
2884
+ dts: Math.round(i * 1024 * track.timescale / sampleRate),
2885
+ pts: Math.round(i * 1024 * track.timescale / sampleRate),
2723
2886
  cts: 0,
2724
- duration: 1024,
2887
+ duration: Math.round(Math.min(totalSamples, (i + 1) * 1024) * track.timescale / sampleRate) - Math.round(i * 1024 * track.timescale / sampleRate),
2725
2888
  size: silentAac.byteLength,
2726
2889
  isKeyframe: true,
2727
2890
  sampleDescriptionIndex: 1
@@ -3139,6 +3302,8 @@ function concatMp4(docs, options = {}) {
3139
3302
  const mergedSamples = trackSlots.map(() => []);
3140
3303
  const mergedDecodedFrames = trackSlots.map(() => []);
3141
3304
  const runningTicksPerSlot = trackSlots.map(() => 0);
3305
+ const audioSegments = trackSlots.map(() => []);
3306
+ const encodedAudioSlots = /* @__PURE__ */ new Set();
3142
3307
  for (let docIdx = 0; docIdx < docs.length; docIdx++) {
3143
3308
  budget.checkCpu();
3144
3309
  const doc = docs[docIdx];
@@ -3180,6 +3345,13 @@ function concatMp4(docs, options = {}) {
3180
3345
  }
3181
3346
  }
3182
3347
  let currentTick = runningTicksPerSlot[slotIdx];
3348
+ if (trk.type === "audio") {
3349
+ if (trk.decodedAudio) {
3350
+ audioSegments[slotIdx].push({ audio: trk.decodedAudio, offsetSeconds: currentTick / targetTimescale });
3351
+ } else if (materialized.samples.length > 0) {
3352
+ encodedAudioSlots.add(slotIdx);
3353
+ }
3354
+ }
3183
3355
  for (const s of materialized.samples) {
3184
3356
  const scaledDur = Math.max(1, Math.round(s.duration * scaleRatio));
3185
3357
  const scaledCts = Math.round(s.cts * scaleRatio);
@@ -3230,9 +3402,49 @@ function concatMp4(docs, options = {}) {
3230
3402
  const timescale = slotTimescales[idx];
3231
3403
  const samples = mergedSamples[idx];
3232
3404
  const duration = samples.reduce((acc, s) => acc + s.duration, 0);
3405
+ const segments = audioSegments[idx];
3406
+ let decodedAudio;
3407
+ if (segments.length > 0) {
3408
+ if (encodedAudioSlots.has(idx)) {
3409
+ throw new Error("concatMp4 requires all segments in a decoded audio track to be decoded");
3410
+ }
3411
+ const { sampleRate, channels } = segments[0].audio;
3412
+ const length = Math.round(duration / timescale * sampleRate);
3413
+ budget.allocateMemory(length * channels * Float32Array.BYTES_PER_ELEMENT);
3414
+ const channelData = Array.from({ length: channels }, () => new Float32Array(length));
3415
+ for (const { audio, offsetSeconds } of segments) {
3416
+ const offset = Math.round(offsetSeconds * sampleRate);
3417
+ const sourceLength = audio.channelData[0]?.length ?? 0;
3418
+ const count = Math.min(length - offset, Math.round(sourceLength * sampleRate / audio.sampleRate));
3419
+ for (let channel = 0; channel < channels; channel++) {
3420
+ const sources = channels === 1 ? audio.channelData : [audio.channelData[channel % audio.channels]];
3421
+ const output = channelData[channel];
3422
+ if (audio.sampleRate === sampleRate && sources.length === 1) {
3423
+ budget.checkCpu();
3424
+ output.set(sources[0].subarray(0, count), offset);
3425
+ continue;
3426
+ }
3427
+ for (let i = 0; i < count; i++) {
3428
+ if (i % 4096 === 0) budget.checkCpu();
3429
+ const position = i * audio.sampleRate / sampleRate;
3430
+ const left = Math.floor(position);
3431
+ const fraction = position - left;
3432
+ let value = 0;
3433
+ for (const source of sources) {
3434
+ const a = source[left] ?? 0;
3435
+ const b = source[Math.min(left + 1, source.length - 1)] ?? 0;
3436
+ value += a + (b - a) * fraction;
3437
+ }
3438
+ output[offset + i] = value / sources.length;
3439
+ }
3440
+ }
3441
+ }
3442
+ decodedAudio = { sampleRate, channels, channelData };
3443
+ }
3233
3444
  return {
3234
3445
  ...slot.template,
3235
3446
  id: idx + 1,
3447
+ decodedAudio,
3236
3448
  timescale,
3237
3449
  duration,
3238
3450
  codecDescriptions: mergedCodecDescriptions[idx],
@@ -3264,11 +3476,11 @@ function* sliceMp4Steps(doc, options = {}) {
3264
3476
  let work = 0;
3265
3477
  const startSec = Math.max(0, options.startSeconds ?? 0);
3266
3478
  const endSec = options.endSeconds !== void 0 ? options.endSeconds : options.durationSeconds !== void 0 ? startSec + options.durationSeconds : doc.durationSeconds;
3267
- const useEditList = options.useEditList ?? true;
3268
3479
  const movieTimescale = doc.timescale || 1e3;
3269
3480
  const slicedTracks = [];
3270
3481
  for (const track of doc.tracks) {
3271
3482
  if (++work % 256 === 0) yield;
3483
+ const useEditList = (options.useEditList ?? true) && !track.decodedAudio;
3272
3484
  const materialized = materializeTrackSamples(track);
3273
3485
  const ts = track.timescale || 1e3;
3274
3486
  const sourceOrigin = Math.max(0, track.editList?.[0]?.mediaTime ?? 0);
@@ -3295,14 +3507,37 @@ function* sliceMp4Steps(doc, options = {}) {
3295
3507
  }
3296
3508
  const slicedSamples = [];
3297
3509
  let runningDts = 0;
3510
+ let promotedFirstSampleData;
3511
+ if (track.type === "video" && actualStartIdx < materialized.samples.length && materialized.samples[actualStartIdx].data.byteLength > 5 && (materialized.samples[actualStartIdx].data[4] & 31) === 1) {
3512
+ let keyIdx = actualStartIdx;
3513
+ while (keyIdx > 0 && (materialized.samples[keyIdx].data[4] & 31) !== 5) {
3514
+ keyIdx--;
3515
+ }
3516
+ const w = track.width ?? materialized.codecDescriptions[0]?.width ?? 64;
3517
+ const h = track.height ?? materialized.codecDescriptions[0]?.height ?? 64;
3518
+ const lengthSize = (materialized.codecDescriptions[0]?.avcC?.lengthSizeMinusOne ?? 3) + 1;
3519
+ const refBuf = {};
3520
+ let rgba;
3521
+ for (let k = keyIdx; k <= actualStartIdx; k++) {
3522
+ rgba = decodeH264FrameToRgba(materialized.samples[k].data, w, h, lengthSize, refBuf);
3523
+ }
3524
+ if (rgba) {
3525
+ promotedFirstSampleData = encodeH264IdrFrame(rgba, w, h, 0);
3526
+ }
3527
+ }
3298
3528
  for (let i = actualStartIdx; i < materialized.samples.length; i++) {
3299
3529
  if (++work % 256 === 0) yield;
3300
3530
  const s = materialized.samples[i];
3301
3531
  if (s.dts >= endTick) break;
3302
3532
  const sampleStart = useEditList ? s.dts : Math.max(startTick, s.dts);
3303
3533
  const clippedDuration = Math.max(0, Math.min(s.dts + s.duration, endTick) - sampleStart);
3534
+ const isPromotedFirst = i === actualStartIdx && promotedFirstSampleData !== void 0;
3535
+ const sampleData = isPromotedFirst ? promotedFirstSampleData : s.data;
3304
3536
  slicedSamples.push({
3305
3537
  ...s,
3538
+ data: sampleData,
3539
+ size: sampleData.byteLength,
3540
+ isKeyframe: isPromotedFirst ? true : s.isKeyframe,
3306
3541
  dts: runningDts,
3307
3542
  pts: runningDts + s.cts,
3308
3543
  duration: clippedDuration
@@ -3329,8 +3564,18 @@ function* sliceMp4Steps(doc, options = {}) {
3329
3564
  ptsSeconds: Math.max(0, f.ptsSeconds - startSec)
3330
3565
  }));
3331
3566
  }
3567
+ const decodedAudio = track.decodedAudio && {
3568
+ ...track.decodedAudio,
3569
+ channelData: track.decodedAudio.channelData.map(
3570
+ (channel) => channel.slice(Math.round(startSec * track.decodedAudio.sampleRate), Math.max(0, Math.round(endSec * track.decodedAudio.sampleRate)))
3571
+ )
3572
+ };
3573
+ if (decodedAudio) {
3574
+ runningDts = Math.round((decodedAudio.channelData[0]?.length ?? 0) * ts / decodedAudio.sampleRate);
3575
+ }
3332
3576
  slicedTracks.push({
3333
3577
  ...track,
3578
+ decodedAudio,
3334
3579
  duration: editList ? Math.round(editList[0].segmentDuration * ts / movieTimescale) : runningDts,
3335
3580
  codecDescriptions: materialized.codecDescriptions,
3336
3581
  editList,
@@ -5922,7 +6167,7 @@ function flvAst() {
5922
6167
 
5923
6168
  // packages/mp4-ast/src/containers/adapters.ts
5924
6169
  init_buffer();
5925
- function extractVideoFramesFromDoc(doc) {
6170
+ function extractVideoFramesFromDoc(doc, maxFrames) {
5926
6171
  const vTrack = doc.tracks.find((t) => t.type === "video");
5927
6172
  if (!vTrack) {
5928
6173
  return { frames: [], width: 64, height: 64, fps: 10 };
@@ -5940,10 +6185,12 @@ function extractVideoFramesFromDoc(doc) {
5940
6185
  }
5941
6186
  const ts = vTrack.timescale || 9e4;
5942
6187
  const lengthSize = (vTrack.codecDescriptions[0]?.avcC?.lengthSizeMinusOne ?? 3) + 1;
5943
- const frames = vTrack.samples.map((s) => ({
6188
+ const refBuffer = {};
6189
+ const targetSamples = maxFrames !== void 0 ? vTrack.samples.slice(0, maxFrames) : vTrack.samples;
6190
+ const frames = targetSamples.map((s) => ({
5944
6191
  width,
5945
6192
  height,
5946
- data: decodeH264FrameToRgba(s.data, width, height, lengthSize),
6193
+ data: decodeH264FrameToRgba(s.data, width, height, lengthSize, refBuffer),
5947
6194
  ptsSeconds: s.pts / ts,
5948
6195
  durationSeconds: s.duration / ts,
5949
6196
  keyframe: s.isKeyframe
@@ -6938,7 +7185,7 @@ function image2Ast() {
6938
7185
  };
6939
7186
  },
6940
7187
  serialize(doc, options) {
6941
- const { frames, width, height } = extractVideoFramesFromDoc(doc);
7188
+ const { frames, width, height } = extractVideoFramesFromDoc(doc, 1);
6942
7189
  const first = frames[0]?.data ?? new Uint8Array(width * height * 4);
6943
7190
  const fmt = options?.format?.toLowerCase() ?? "png";
6944
7191
  const imgFmt = fmt === "jpg" || fmt === "jpeg" || fmt === "mjpeg" ? "jpeg" : fmt === "webp" ? "webp" : fmt === "gif" ? "gif" : fmt === "bmp" ? "bmp" : fmt === "tiff" || fmt === "tif" ? "tiff" : fmt === "ppm" ? "ppm" : "png";
@@ -7498,10 +7745,37 @@ function createMediaAstRegistry(plugins) {
7498
7745
  }
7499
7746
 
7500
7747
  // packages/safe-bash-command-ffmpeg/src/index.ts
7501
- async function readStdinAll(context) {
7748
+ function isStdin(path) {
7749
+ return ["-", "pipe:", "pipe:0", "/dev/stdin", "/dev/fd/0"].includes(path);
7750
+ }
7751
+ function isStdout(path) {
7752
+ return ["-", "pipe:", "pipe:1", "/dev/stdout", "/dev/fd/1"].includes(path);
7753
+ }
7754
+ function rethrowRuntimeError(context, error) {
7755
+ context.signal.throwIfAborted();
7756
+ if (error instanceof Error && (error.name === "BudgetExceededError" || error.name === "AbortError")) throw error;
7757
+ if (typeof error === "object" && error !== null && "code" in error && error.code === "EPIPE") throw error;
7758
+ }
7759
+ function createInputReader(context, budget) {
7760
+ let total = 0;
7761
+ const account = (bytes) => {
7762
+ context.signal.throwIfAborted();
7763
+ total += bytes.byteLength;
7764
+ context.inputBudget?.check(total);
7765
+ budget.checkInputBytes(total);
7766
+ };
7767
+ return async (path) => {
7768
+ if (isStdin(path)) return readStdinAll(context, account);
7769
+ const bytes = await context.fs.readFile(resolvePath(context.cwd, path), { signal: context.signal });
7770
+ account(bytes);
7771
+ return bytes;
7772
+ };
7773
+ }
7774
+ async function readStdinAll(context, account) {
7502
7775
  const chunks = [];
7503
7776
  let total = 0;
7504
7777
  for await (const chunk of readBytes(context.stdin, context.signal)) {
7778
+ account(chunk);
7505
7779
  chunks.push(chunk);
7506
7780
  total += chunk.byteLength;
7507
7781
  }
@@ -7689,9 +7963,11 @@ function* lavfiSteps(spec, budget, durationOverride) {
7689
7963
  [0, 0, 255]
7690
7964
  ];
7691
7965
  const [r, g, b] = palette[bar % 7];
7692
- rgba[idx] = r + i * 12 & 255;
7693
- rgba[idx + 1] = g;
7694
- rgba[idx + 2] = b;
7966
+ const scanY = i * 16 % Math.max(16, height);
7967
+ const inScanBar = y >= scanY && y < scanY + 16;
7968
+ rgba[idx] = inScanBar ? r ^ 128 : r;
7969
+ rgba[idx + 1] = inScanBar ? g ^ 128 : g;
7970
+ rgba[idx + 2] = inScanBar ? b ^ 128 : b;
7695
7971
  rgba[idx + 3] = 255;
7696
7972
  } else {
7697
7973
  rgba[idx] = color[0];
@@ -7715,15 +7991,17 @@ function* lavfiSteps(spec, budget, durationOverride) {
7715
7991
  width,
7716
7992
  height,
7717
7993
  fps,
7718
- frameCount,
7994
+ frameCount: 1,
7719
7995
  color: [color[0], color[1], color[2]],
7720
7996
  includeAudio: false
7721
7997
  });
7722
7998
  const parsed = parseMp4(mp4Bytes);
7723
7999
  return {
7724
8000
  ...parsed,
8001
+ duration: Math.round(frameCount / fps * parsed.timescale),
8002
+ durationSeconds: frameCount / fps,
7725
8003
  tracks: parsed.tracks.map(
7726
- (t) => t.type === "video" ? { ...t, decodedVideoFrames: frames } : t
8004
+ (t) => t.type === "video" ? { ...t, duration: Math.round(frameCount / fps * t.timescale), samples: [], decodedVideoFrames: frames } : t
7727
8005
  )
7728
8006
  };
7729
8007
  }
@@ -7735,12 +8013,13 @@ async function ensureDecodedFrames(track, budget, signal) {
7735
8013
  const height = track.height ?? track.codecDescriptions[0]?.height ?? 64;
7736
8014
  const ts = track.timescale || 9e4;
7737
8015
  const lengthSize = (track.codecDescriptions[0]?.avcC?.lengthSizeMinusOne ?? 3) + 1;
8016
+ const refBuffer = {};
7738
8017
  return await mapWork(track.samples, async (s) => {
7739
8018
  budget.recordFrame(width, height);
7740
8019
  return {
7741
8020
  width,
7742
8021
  height,
7743
- data: decodeH264FrameToRgba(s.data, width, height, lengthSize),
8022
+ data: decodeH264FrameToRgba(s.data, width, height, lengthSize, refBuffer),
7744
8023
  ptsSeconds: s.pts / ts,
7745
8024
  durationSeconds: s.duration / ts,
7746
8025
  keyframe: s.isKeyframe
@@ -8682,7 +8961,7 @@ function evalSyncFfmpeg(inBytesOrArgs, maybeArgs, readFileSync, writeFileSync) {
8682
8961
  if (inp.format === "lavfi") {
8683
8962
  return void 0;
8684
8963
  } else {
8685
- const rawBytes = inp.path === "-" || inp.path === "pipe:" || inp.path === "pipe:0" ? inBytes : readFileSync?.(inp.path);
8964
+ const rawBytes = isStdin(inp.path) ? inBytes : readFileSync?.(inp.path);
8686
8965
  if (!rawBytes || rawBytes.byteLength > 262144) return void 0;
8687
8966
  budget.checkInputBytes(rawBytes.byteLength);
8688
8967
  const plugin = registry.detect(rawBytes, inp.path, inp.format);
@@ -8756,7 +9035,7 @@ function evalSyncFfmpeg(inBytesOrArgs, maybeArgs, readFileSync, writeFileSync) {
8756
9035
  if (!outPlugin || !outPlugin.canMux) return void 0;
8757
9036
  const outExt = outputTarget.split(".").pop()?.toLowerCase();
8758
9037
  const serializedBytes = outPlugin.serialize(workingDoc, { format: outputFormat ?? outExt, faststart, fragmented, metadata: metaTags, budget });
8759
- if (outputTarget === "-" || outputTarget === "pipe:" || outputTarget === "pipe:1") return void 0;
9038
+ if (isStdout(outputTarget)) return void 0;
8760
9039
  if (!writeFileSync(outputTarget, serializedBytes)) return void 0;
8761
9040
  return "";
8762
9041
  } catch {
@@ -8829,7 +9108,7 @@ function evalSyncFfprobe(inBytes, args, readFileSync) {
8829
9108
  if (!inputTarget) return void 0;
8830
9109
  try {
8831
9110
  let bytes;
8832
- if (inputTarget === "-" || inputTarget === "pipe:" || inputTarget === "pipe:0") {
9111
+ if (isStdin(inputTarget)) {
8833
9112
  bytes = inBytes;
8834
9113
  } else {
8835
9114
  bytes = readFileSync?.(inputTarget);
@@ -8871,6 +9150,7 @@ function createFfprobeCommand(options = {}) {
8871
9150
  description: "Multimedia stream analyzer powered by pluggable ASTs",
8872
9151
  async execute(context) {
8873
9152
  const budget = new MediaBudgetTracker(options.limits);
9153
+ const readInput = createInputReader(context, budget);
8874
9154
  const argsObj = getCommandArguments(context);
8875
9155
  const args = argsObj.args;
8876
9156
  if (args.length === 0) {
@@ -8952,14 +9232,7 @@ function createFfprobeCommand(options = {}) {
8952
9232
  return { exitCode: 1 };
8953
9233
  }
8954
9234
  try {
8955
- let bytes;
8956
- if (inputTarget === "-" || inputTarget === "pipe:" || inputTarget === "pipe:0") {
8957
- bytes = await readStdinAll(context);
8958
- } else {
8959
- const fullPath = resolvePath(context.cwd, inputTarget);
8960
- bytes = await context.fs.readFile(fullPath, { signal: context.signal });
8961
- }
8962
- budget.checkInputBytes(bytes.byteLength);
9235
+ const bytes = await readInput(inputTarget);
8963
9236
  const plugin = registry.detect(bytes, inputTarget, explicitFormat);
8964
9237
  if (!plugin || !plugin.canDemux) {
8965
9238
  const msg = explicitFormat ? `ffprobe: Unknown input format: '${explicitFormat}' (AST not registered)
@@ -8992,6 +9265,7 @@ function createFfprobeCommand(options = {}) {
8992
9265
  options.onMetrics?.(budget.getStats());
8993
9266
  return { exitCode: 0 };
8994
9267
  } catch (err) {
9268
+ rethrowRuntimeError(context, err);
8995
9269
  const msg = err instanceof Error ? err.message : String(err);
8996
9270
  await writeBytes(context.stderr, encodeUtf8(`ffprobe: ${msg}
8997
9271
  `), context.signal);
@@ -9010,6 +9284,7 @@ function createFfmpegCommand(options = {}) {
9010
9284
  description: "Multimedia converter, merger, and stream processor powered by pluggable ASTs",
9011
9285
  async execute(context) {
9012
9286
  const budget = new MediaBudgetTracker(options.limits);
9287
+ const readInput = createInputReader(context, budget);
9013
9288
  const argsObj = getCommandArguments(context);
9014
9289
  const args = argsObj.args;
9015
9290
  if (args.length === 0) {
@@ -9229,7 +9504,7 @@ function createFfmpegCommand(options = {}) {
9229
9504
  return { exitCode: 1 };
9230
9505
  }
9231
9506
  try {
9232
- if (noOverwrite && outputTarget !== "-" && outputTarget !== "pipe:" && outputTarget !== "pipe:1" && outputFormat !== "null") {
9507
+ if (noOverwrite && !isStdout(outputTarget) && outputFormat !== "null") {
9233
9508
  const outFull = resolvePath(context.cwd, outputTarget);
9234
9509
  try {
9235
9510
  await context.fs.stat(outFull, { signal: context.signal });
@@ -9240,7 +9515,9 @@ function createFfmpegCommand(options = {}) {
9240
9515
  context.signal
9241
9516
  );
9242
9517
  return { exitCode: 1 };
9243
- } catch {
9518
+ } catch (error) {
9519
+ rethrowRuntimeError(context, error);
9520
+ if (error.code !== "ENOENT") throw error;
9244
9521
  }
9245
9522
  }
9246
9523
  const loadSingleDocument = async (filePath, explicitFormat, fpsHint, input) => {
@@ -9259,7 +9536,7 @@ function createFfmpegCommand(options = {}) {
9259
9536
  }
9260
9537
  if (/\.m3u8?$/i.test(filePath) || explicitFormat === "hls") {
9261
9538
  const m3uResolved = resolvePath(context.cwd, filePath);
9262
- const m3uBytes = await context.fs.readFile(m3uResolved, { signal: context.signal });
9539
+ const m3uBytes = await readInput(filePath);
9263
9540
  const m3uText = decodeUtf8(m3uBytes).replace(/\r\n/g, "\n");
9264
9541
  const baseDir = m3uResolved.includes("/") ? m3uResolved.slice(0, m3uResolved.lastIndexOf("/")) || "/" : "/";
9265
9542
  const segDocs = [];
@@ -9270,7 +9547,9 @@ function createFfmpegCommand(options = {}) {
9270
9547
  try {
9271
9548
  const segDoc = await loadSingleDocument(segPath);
9272
9549
  segDocs.push(segDoc);
9273
- } catch {
9550
+ } catch (error) {
9551
+ rethrowRuntimeError(context, error);
9552
+ if (error.code !== "ENOENT") throw error;
9274
9553
  }
9275
9554
  }
9276
9555
  if (segDocs.length > 0) {
@@ -9299,8 +9578,9 @@ function createFfmpegCommand(options = {}) {
9299
9578
  const resolved = resolvePath(context.cwd, formatted);
9300
9579
  let imgBytes;
9301
9580
  try {
9302
- imgBytes = await context.fs.readFile(resolved, { signal: context.signal });
9581
+ imgBytes = await readInput(resolved);
9303
9582
  } catch (error) {
9583
+ rethrowRuntimeError(context, error);
9304
9584
  if (error.code !== "ENOENT") throw error;
9305
9585
  if (idx === 0 && input?.startNumber === void 0) continue;
9306
9586
  break;
@@ -9326,25 +9606,18 @@ function createFfmpegCommand(options = {}) {
9326
9606
  width: first.width,
9327
9607
  height: first.height,
9328
9608
  fps,
9329
- frameCount: frames.length,
9609
+ frameCount: 1,
9330
9610
  includeAudio: false
9331
9611
  }));
9332
9612
  const base = parseMp4(synthBytes);
9333
9613
  return {
9334
9614
  ...base,
9335
9615
  tracks: base.tracks.map(
9336
- (t) => t.type === "video" ? { ...t, decodedVideoFrames: frames } : t
9616
+ (t) => t.type === "video" ? { ...t, samples: [], decodedVideoFrames: frames } : t
9337
9617
  )
9338
9618
  };
9339
9619
  }
9340
- let rawBytes;
9341
- if (filePath === "-" || filePath === "pipe:" || filePath === "pipe:0") {
9342
- rawBytes = await readStdinAll(context);
9343
- } else {
9344
- const fullPath = resolvePath(context.cwd, filePath);
9345
- rawBytes = await context.fs.readFile(fullPath, { signal: context.signal });
9346
- }
9347
- budget.checkInputBytes(rawBytes.byteLength);
9620
+ const rawBytes = await readInput(filePath);
9348
9621
  if (explicitFormat === "concat") {
9349
9622
  const listText = new TextDecoder().decode(rawBytes);
9350
9623
  const listDir = filePath === "-" ? context.cwd : dirnameOf(resolvePath(context.cwd, filePath));
@@ -9686,6 +9959,22 @@ function createFfmpegCommand(options = {}) {
9686
9959
  if (outputFps && videoCodec !== "copy") {
9687
9960
  vfFilters.push(`fps=${outputFps}`);
9688
9961
  }
9962
+ if (maxVideoFrames !== void 0 && !vfFilters.some((f) => /\b(fps|select|reverse|trim|tile|setpts)\b/i.test(f))) {
9963
+ workingDoc = {
9964
+ ...workingDoc,
9965
+ tracks: workingDoc.tracks.map((t) => {
9966
+ if (t.type !== "video") return t;
9967
+ if (t.decodedVideoFrames && t.decodedVideoFrames.length > maxVideoFrames) {
9968
+ return { ...t, samples: [], decodedVideoFrames: t.decodedVideoFrames.slice(0, maxVideoFrames) };
9969
+ }
9970
+ if (t.samples.length > maxVideoFrames) {
9971
+ const slicedSamples = t.samples.slice(0, maxVideoFrames);
9972
+ return { ...t, duration: slicedSamples.reduce((acc, s) => acc + s.duration, 0), samples: slicedSamples };
9973
+ }
9974
+ return t;
9975
+ })
9976
+ };
9977
+ }
9689
9978
  if (vfFilters.length > 0) {
9690
9979
  if (features.videoTranscode === false || features.filterGraph === false) {
9691
9980
  throw new Error("Video transcoding / filtergraph is disabled by consumer feature configuration");
@@ -9695,7 +9984,7 @@ function createFfmpegCommand(options = {}) {
9695
9984
  const subMatch = /subtitles=(?:filename=)?['"]?([^:'",]+)['"]?/.exec(combinedChain);
9696
9985
  if (subMatch?.[1]) {
9697
9986
  const subPath = resolvePath(context.cwd, subMatch[1]);
9698
- const subBytes = await context.fs.readFile(subPath, { signal: context.signal });
9987
+ const subBytes = await readInput(subPath);
9699
9988
  const subFmt = subPath.toLowerCase().endsWith(".vtt") ? "webvtt" : "srt";
9700
9989
  const subDoc = parseSubtitleDocument(subBytes, subFmt);
9701
9990
  const st = subDoc.tracks.find((t) => t.type === "subtitle");
@@ -9962,7 +10251,7 @@ function createFfmpegCommand(options = {}) {
9962
10251
  budget
9963
10252
  });
9964
10253
  budget.checkOutputBytes(serializedBytes.byteLength);
9965
- if (outputTarget === "-" || outputTarget === "pipe:" || outputTarget === "pipe:1") {
10254
+ if (isStdout(outputTarget)) {
9966
10255
  await writeBytes(context.stdout, serializedBytes, context.signal);
9967
10256
  } else {
9968
10257
  const fullOutPath = resolvePath(context.cwd, outputTarget);
@@ -9971,6 +10260,7 @@ function createFfmpegCommand(options = {}) {
9971
10260
  options.onMetrics?.(budget.getStats());
9972
10261
  return { exitCode: 0 };
9973
10262
  } catch (err) {
10263
+ rethrowRuntimeError(context, err);
9974
10264
  const msg = err instanceof Error ? err.message : String(err);
9975
10265
  await writeBytes(context.stderr, encodeUtf8(`ffmpeg: ${msg}
9976
10266
  `), context.signal);