@keystrokehq/keystroke 0.1.2 → 0.1.3
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.
- package/dist/agent.cjs +7 -27
- package/dist/agent.cjs.map +1 -1
- package/dist/agent.d.cts +1 -1
- package/dist/agent.d.mts +1 -1
- package/dist/agent.mjs +7 -27
- package/dist/agent.mjs.map +1 -1
- package/dist/awk2-LA3USKJP-B_MQeyOu.cjs +13 -0
- package/dist/awk2-LA3USKJP-B_MQeyOu.cjs.map +1 -0
- package/dist/awk2-LA3USKJP-CO8ofcav.mjs +14 -0
- package/dist/awk2-LA3USKJP-CO8ofcav.mjs.map +1 -0
- package/dist/base64-C2AIWVNC-10NNJOyM.mjs +12 -0
- package/dist/base64-C2AIWVNC-10NNJOyM.mjs.map +1 -0
- package/dist/base64-C2AIWVNC-GdDHiwWg.cjs +11 -0
- package/dist/base64-C2AIWVNC-GdDHiwWg.cjs.map +1 -0
- package/dist/bash-YZ33HQZQ-DsPVMREc.cjs +11 -0
- package/dist/bash-YZ33HQZQ-DsPVMREc.cjs.map +1 -0
- package/dist/bash-YZ33HQZQ-njjD-iux.mjs +11 -0
- package/dist/bash-YZ33HQZQ-njjD-iux.mjs.map +1 -0
- package/dist/cat-TSFMZVYS-DJ-oJ26m.cjs +12 -0
- package/dist/cat-TSFMZVYS-DJ-oJ26m.cjs.map +1 -0
- package/dist/cat-TSFMZVYS-G9JadP6p.mjs +13 -0
- package/dist/cat-TSFMZVYS-G9JadP6p.mjs.map +1 -0
- package/dist/chunk-2JIPICV3-CvNMHhit.cjs +110 -0
- package/dist/chunk-2JIPICV3-CvNMHhit.cjs.map +1 -0
- package/dist/chunk-2JIPICV3-xTZ3Qmkg.mjs +100 -0
- package/dist/chunk-2JIPICV3-xTZ3Qmkg.mjs.map +1 -0
- package/dist/chunk-2VDTE5BV-CpN165Qq.cjs +121 -0
- package/dist/chunk-2VDTE5BV-CpN165Qq.cjs.map +1 -0
- package/dist/chunk-2VDTE5BV-DSLVlpAp.mjs +111 -0
- package/dist/chunk-2VDTE5BV-DSLVlpAp.mjs.map +1 -0
- package/dist/chunk-46RN27KI-BrGn0TNz.cjs +1752 -0
- package/dist/chunk-46RN27KI-BrGn0TNz.cjs.map +1 -0
- package/dist/chunk-46RN27KI-keFDrTLF.mjs +1742 -0
- package/dist/chunk-46RN27KI-keFDrTLF.mjs.map +1 -0
- package/dist/chunk-4JLVZKHC-CGLZDrpd.cjs +137 -0
- package/dist/chunk-4JLVZKHC-CGLZDrpd.cjs.map +1 -0
- package/dist/chunk-4JLVZKHC-Drg-G5u_.mjs +127 -0
- package/dist/chunk-4JLVZKHC-Drg-G5u_.mjs.map +1 -0
- package/dist/chunk-4N6J7B5P-B1pMvbPy.cjs +101 -0
- package/dist/chunk-4N6J7B5P-B1pMvbPy.cjs.map +1 -0
- package/dist/chunk-4N6J7B5P-DBRxI0wR.mjs +91 -0
- package/dist/chunk-4N6J7B5P-DBRxI0wR.mjs.map +1 -0
- package/dist/chunk-5H5SCKJM-CPIlD525.mjs +601 -0
- package/dist/chunk-5H5SCKJM-CPIlD525.mjs.map +1 -0
- package/dist/chunk-5H5SCKJM-XJmobNCn.cjs +611 -0
- package/dist/chunk-5H5SCKJM-XJmobNCn.cjs.map +1 -0
- package/dist/chunk-6LASZU3O-BWeNL959.cjs +148 -0
- package/dist/chunk-6LASZU3O-BWeNL959.cjs.map +1 -0
- package/dist/chunk-6LASZU3O-Bz6Vnyze.mjs +138 -0
- package/dist/chunk-6LASZU3O-Bz6Vnyze.mjs.map +1 -0
- package/dist/chunk-6VAT5Z2D-Dhs_v4cn.cjs +118 -0
- package/dist/chunk-6VAT5Z2D-Dhs_v4cn.cjs.map +1 -0
- package/dist/chunk-6VAT5Z2D-DrIZzRGh.mjs +108 -0
- package/dist/chunk-6VAT5Z2D-DrIZzRGh.mjs.map +1 -0
- package/dist/chunk-7JHM3L42-BZUUeIOd.cjs +148 -0
- package/dist/chunk-7JHM3L42-BZUUeIOd.cjs.map +1 -0
- package/dist/chunk-7JHM3L42-CMCdk239.mjs +138 -0
- package/dist/chunk-7JHM3L42-CMCdk239.mjs.map +1 -0
- package/dist/chunk-A4R2GWRF-D83rIsET.mjs +126 -0
- package/dist/chunk-A4R2GWRF-D83rIsET.mjs.map +1 -0
- package/dist/chunk-A4R2GWRF-pGgd96Fp.cjs +148 -0
- package/dist/chunk-A4R2GWRF-pGgd96Fp.cjs.map +1 -0
- package/dist/chunk-ACSZB4FE-CnudKR0J.mjs +162 -0
- package/dist/chunk-ACSZB4FE-CnudKR0J.mjs.map +1 -0
- package/dist/chunk-ACSZB4FE-DfnBAjVW.cjs +172 -0
- package/dist/chunk-ACSZB4FE-DfnBAjVW.cjs.map +1 -0
- package/dist/chunk-BVKWRAS6-DiEmSuyG.cjs +139 -0
- package/dist/chunk-BVKWRAS6-DiEmSuyG.cjs.map +1 -0
- package/dist/chunk-BVKWRAS6-yLF4Ey7b.mjs +129 -0
- package/dist/chunk-BVKWRAS6-yLF4Ey7b.mjs.map +1 -0
- package/dist/chunk-CBJVD2XA-D0nJiMSw.cjs +783 -0
- package/dist/chunk-CBJVD2XA-D0nJiMSw.cjs.map +1 -0
- package/dist/chunk-CBJVD2XA-Q0WB1zn4.mjs +772 -0
- package/dist/chunk-CBJVD2XA-Q0WB1zn4.mjs.map +1 -0
- package/dist/chunk-EBAPSGAO-BW8OLcHz.cjs +250 -0
- package/dist/chunk-EBAPSGAO-BW8OLcHz.cjs.map +1 -0
- package/dist/chunk-EBAPSGAO-BuXfYqW7.mjs +246 -0
- package/dist/chunk-EBAPSGAO-BuXfYqW7.mjs.map +1 -0
- package/dist/chunk-FAXLQUCQ-C7WbApZX.mjs +65 -0
- package/dist/chunk-FAXLQUCQ-C7WbApZX.mjs.map +1 -0
- package/dist/chunk-FAXLQUCQ-K19s_nH0.cjs +75 -0
- package/dist/chunk-FAXLQUCQ-K19s_nH0.cjs.map +1 -0
- package/dist/chunk-FJK43EBQ-B52Hvc2e.mjs +238 -0
- package/dist/chunk-FJK43EBQ-B52Hvc2e.mjs.map +1 -0
- package/dist/chunk-FJK43EBQ-_tWKXnlk.cjs +248 -0
- package/dist/chunk-FJK43EBQ-_tWKXnlk.cjs.map +1 -0
- package/dist/chunk-FW54FHZR-BgTzXAnA.mjs +16 -0
- package/dist/chunk-FW54FHZR-BgTzXAnA.mjs.map +1 -0
- package/dist/chunk-FW54FHZR-DPUEqll9.cjs +26 -0
- package/dist/chunk-FW54FHZR-DPUEqll9.cjs.map +1 -0
- package/dist/chunk-FX7KQCEA-BE5RUuXQ.mjs +1629 -0
- package/dist/chunk-FX7KQCEA-BE5RUuXQ.mjs.map +1 -0
- package/dist/chunk-FX7KQCEA-D0nGizr2.cjs +1640 -0
- package/dist/chunk-FX7KQCEA-D0nGizr2.cjs.map +1 -0
- package/dist/chunk-FZRQOL3C-DUM5aJVa.mjs +121 -0
- package/dist/chunk-FZRQOL3C-DUM5aJVa.mjs.map +1 -0
- package/dist/chunk-FZRQOL3C-DuQxHNn9.cjs +131 -0
- package/dist/chunk-FZRQOL3C-DuQxHNn9.cjs.map +1 -0
- package/dist/chunk-GGC5NEPZ-BSsHKXbG.cjs +131 -0
- package/dist/chunk-GGC5NEPZ-BSsHKXbG.cjs.map +1 -0
- package/dist/chunk-GGC5NEPZ-DFJqq215.mjs +121 -0
- package/dist/chunk-GGC5NEPZ-DFJqq215.mjs.map +1 -0
- package/dist/chunk-GIUR5SNU-8kkFynau.mjs +885 -0
- package/dist/chunk-GIUR5SNU-8kkFynau.mjs.map +1 -0
- package/dist/chunk-GIUR5SNU-CiOdnwmY.cjs +896 -0
- package/dist/chunk-GIUR5SNU-CiOdnwmY.cjs.map +1 -0
- package/dist/chunk-GJC3WVOW-BpOt40s-.cjs +26 -0
- package/dist/chunk-GJC3WVOW-BpOt40s-.cjs.map +1 -0
- package/dist/chunk-GJC3WVOW-C_1MttiL.mjs +16 -0
- package/dist/chunk-GJC3WVOW-C_1MttiL.mjs.map +1 -0
- package/dist/chunk-GSPYNYZA-B6_u3KyU.mjs +129 -0
- package/dist/chunk-GSPYNYZA-B6_u3KyU.mjs.map +1 -0
- package/dist/chunk-GSPYNYZA-D8PlGvI5.cjs +151 -0
- package/dist/chunk-GSPYNYZA-D8PlGvI5.cjs.map +1 -0
- package/dist/chunk-GTQIUQM6-4emc5Ma8.cjs +163 -0
- package/dist/chunk-GTQIUQM6-4emc5Ma8.cjs.map +1 -0
- package/dist/chunk-GTQIUQM6-Clv0QtOi.mjs +153 -0
- package/dist/chunk-GTQIUQM6-Clv0QtOi.mjs.map +1 -0
- package/dist/chunk-HJBTD7PY-CkyAzYQD.cjs +193 -0
- package/dist/chunk-HJBTD7PY-CkyAzYQD.cjs.map +1 -0
- package/dist/chunk-HJBTD7PY-gjdD_uYt.mjs +183 -0
- package/dist/chunk-HJBTD7PY-gjdD_uYt.mjs.map +1 -0
- package/dist/chunk-ICIEVHY5-C15Gy_zV.cjs +2894 -0
- package/dist/chunk-ICIEVHY5-C15Gy_zV.cjs.map +1 -0
- package/dist/chunk-ICIEVHY5-DR42pp-d.mjs +2875 -0
- package/dist/chunk-ICIEVHY5-DR42pp-d.mjs.map +1 -0
- package/dist/chunk-KD3KENL6-Bshgjm6A.cjs +162 -0
- package/dist/chunk-KD3KENL6-Bshgjm6A.cjs.map +1 -0
- package/dist/chunk-KD3KENL6-SrXFNZym.mjs +152 -0
- package/dist/chunk-KD3KENL6-SrXFNZym.mjs.map +1 -0
- package/dist/chunk-LEKBROJD-BE03O1ba.cjs +3121 -0
- package/dist/chunk-LEKBROJD-BE03O1ba.cjs.map +1 -0
- package/dist/chunk-LEKBROJD-DawDw8Hd.mjs +3111 -0
- package/dist/chunk-LEKBROJD-DawDw8Hd.mjs.map +1 -0
- package/dist/chunk-LNBPBRV4-BO_LaS-d.mjs +2744 -0
- package/dist/chunk-LNBPBRV4-BO_LaS-d.mjs.map +1 -0
- package/dist/chunk-LNBPBRV4-BuHPFDe4.cjs +2754 -0
- package/dist/chunk-LNBPBRV4-BuHPFDe4.cjs.map +1 -0
- package/dist/chunk-LPJEKUCB-BTF-f7a2.mjs +95 -0
- package/dist/chunk-LPJEKUCB-BTF-f7a2.mjs.map +1 -0
- package/dist/chunk-LPJEKUCB-Dk6rrZt9.cjs +105 -0
- package/dist/chunk-LPJEKUCB-Dk6rrZt9.cjs.map +1 -0
- package/dist/chunk-MLIO3BK2-Bhz1EXjI.mjs +61 -0
- package/dist/chunk-MLIO3BK2-Bhz1EXjI.mjs.map +1 -0
- package/dist/chunk-MLIO3BK2-C4GopS0H.cjs +71 -0
- package/dist/chunk-MLIO3BK2-C4GopS0H.cjs.map +1 -0
- package/dist/chunk-MQKGGNPS-DJEGh2iU.mjs +121 -0
- package/dist/chunk-MQKGGNPS-DJEGh2iU.mjs.map +1 -0
- package/dist/chunk-MQKGGNPS-D_CxzvGD.cjs +131 -0
- package/dist/chunk-MQKGGNPS-D_CxzvGD.cjs.map +1 -0
- package/dist/chunk-N6DXJ2JN-C6YwmzZT.mjs +8630 -0
- package/dist/chunk-N6DXJ2JN-C6YwmzZT.mjs.map +1 -0
- package/dist/chunk-N6DXJ2JN-P6dEILvp.cjs +8640 -0
- package/dist/chunk-N6DXJ2JN-P6dEILvp.cjs.map +1 -0
- package/dist/chunk-OVGANXCG-DMNgT9oY.cjs +177 -0
- package/dist/chunk-OVGANXCG-DMNgT9oY.cjs.map +1 -0
- package/dist/chunk-OVGANXCG-DsRuEzEA.mjs +167 -0
- package/dist/chunk-OVGANXCG-DsRuEzEA.mjs.map +1 -0
- package/dist/chunk-Q7H5W7YE-CJDlH59R.mjs +2941 -0
- package/dist/chunk-Q7H5W7YE-CJDlH59R.mjs.map +1 -0
- package/dist/chunk-Q7H5W7YE-CtU5ndmk.cjs +2964 -0
- package/dist/chunk-Q7H5W7YE-CtU5ndmk.cjs.map +1 -0
- package/dist/chunk-R74UQCKX-Cw9VnZHk.cjs +15903 -0
- package/dist/chunk-R74UQCKX-Cw9VnZHk.cjs.map +1 -0
- package/dist/chunk-R74UQCKX-tLPZm2yg.mjs +15889 -0
- package/dist/chunk-R74UQCKX-tLPZm2yg.mjs.map +1 -0
- package/dist/chunk-S3LEJEPP-C8nzA4AH.cjs +26 -0
- package/dist/chunk-S3LEJEPP-C8nzA4AH.cjs.map +1 -0
- package/dist/chunk-S3LEJEPP-DWikSYWW.mjs +16 -0
- package/dist/chunk-S3LEJEPP-DWikSYWW.mjs.map +1 -0
- package/dist/chunk-S443BAN4-CVAyUhB9.cjs +76 -0
- package/dist/chunk-S443BAN4-CVAyUhB9.cjs.map +1 -0
- package/dist/chunk-S443BAN4-m8dBpAph.mjs +66 -0
- package/dist/chunk-S443BAN4-m8dBpAph.mjs.map +1 -0
- package/dist/chunk-SJYEXC2Z-C7GpsM0C.cjs +147 -0
- package/dist/chunk-SJYEXC2Z-C7GpsM0C.cjs.map +1 -0
- package/dist/chunk-SJYEXC2Z-COKg13zH.mjs +137 -0
- package/dist/chunk-SJYEXC2Z-COKg13zH.mjs.map +1 -0
- package/dist/chunk-T4TFLF3R-7pRFbmRq.mjs +379 -0
- package/dist/chunk-T4TFLF3R-7pRFbmRq.mjs.map +1 -0
- package/dist/chunk-T4TFLF3R-BWfvL6gu.cjs +389 -0
- package/dist/chunk-T4TFLF3R-BWfvL6gu.cjs.map +1 -0
- package/dist/chunk-U73A73IE-BqyJNU15.cjs +249 -0
- package/dist/chunk-U73A73IE-BqyJNU15.cjs.map +1 -0
- package/dist/chunk-U73A73IE-jYPdjObQ.mjs +239 -0
- package/dist/chunk-U73A73IE-jYPdjObQ.mjs.map +1 -0
- package/dist/chunk-UP6MSJGD-DYQGzsJN.mjs +272 -0
- package/dist/chunk-UP6MSJGD-DYQGzsJN.mjs.map +1 -0
- package/dist/chunk-UP6MSJGD-Re0u87b4.cjs +282 -0
- package/dist/chunk-UP6MSJGD-Re0u87b4.cjs.map +1 -0
- package/dist/chunk-VLCHOJWK-0iTpWJ5B.cjs +138 -0
- package/dist/chunk-VLCHOJWK-0iTpWJ5B.cjs.map +1 -0
- package/dist/chunk-VLCHOJWK-DVMYvSPw.mjs +128 -0
- package/dist/chunk-VLCHOJWK-DVMYvSPw.mjs.map +1 -0
- package/dist/chunk-XCQWV4AU-DMnMI37o.mjs +152 -0
- package/dist/chunk-XCQWV4AU-DMnMI37o.mjs.map +1 -0
- package/dist/chunk-XCQWV4AU-LYLraxsq.cjs +162 -0
- package/dist/chunk-XCQWV4AU-LYLraxsq.cjs.map +1 -0
- package/dist/chunk-XDGLKIHR-B_XHqmwP.cjs +464 -0
- package/dist/chunk-XDGLKIHR-B_XHqmwP.cjs.map +1 -0
- package/dist/chunk-XDGLKIHR-DsGC7Dnm.mjs +430 -0
- package/dist/chunk-XDGLKIHR-DsGC7Dnm.mjs.map +1 -0
- package/dist/chunk-XHLMAZX2-9Spcf0Fo.mjs +93 -0
- package/dist/chunk-XHLMAZX2-9Spcf0Fo.mjs.map +1 -0
- package/dist/chunk-XHLMAZX2-BV71Yhf3.cjs +103 -0
- package/dist/chunk-XHLMAZX2-BV71Yhf3.cjs.map +1 -0
- package/dist/chunk-XYXUMFSU-6UPS5Rns.mjs +285 -0
- package/dist/chunk-XYXUMFSU-6UPS5Rns.mjs.map +1 -0
- package/dist/chunk-XYXUMFSU-CS6Bd_ko.cjs +295 -0
- package/dist/chunk-XYXUMFSU-CS6Bd_ko.cjs.map +1 -0
- package/dist/chunk-YCLFEX4T-BcznQP2V.mjs +76 -0
- package/dist/chunk-YCLFEX4T-BcznQP2V.mjs.map +1 -0
- package/dist/chunk-YCLFEX4T-DptOeNSU.cjs +86 -0
- package/dist/chunk-YCLFEX4T-DptOeNSU.cjs.map +1 -0
- package/dist/chunk-YS4NUBYX-BF-tX_Tp.mjs +118 -0
- package/dist/chunk-YS4NUBYX-BF-tX_Tp.mjs.map +1 -0
- package/dist/chunk-YS4NUBYX-CcYM25jr.cjs +128 -0
- package/dist/chunk-YS4NUBYX-CcYM25jr.cjs.map +1 -0
- package/dist/chunk-ZDIT6ST5-0TYOvYGa.mjs +106 -0
- package/dist/chunk-ZDIT6ST5-0TYOvYGa.mjs.map +1 -0
- package/dist/chunk-ZDIT6ST5-CwDw8SK8.cjs +116 -0
- package/dist/chunk-ZDIT6ST5-CwDw8SK8.cjs.map +1 -0
- package/dist/chunk-ZZKH2ELC-B_egdswm.cjs +1380 -0
- package/dist/chunk-ZZKH2ELC-B_egdswm.cjs.map +1 -0
- package/dist/chunk-ZZKH2ELC-QZVLh7Me.mjs +1370 -0
- package/dist/chunk-ZZKH2ELC-QZVLh7Me.mjs.map +1 -0
- package/dist/column-XT6UFXNQ-PUApf5BX.cjs +11 -0
- package/dist/column-XT6UFXNQ-PUApf5BX.cjs.map +1 -0
- package/dist/column-XT6UFXNQ-mYbWNRYM.mjs +12 -0
- package/dist/column-XT6UFXNQ-mYbWNRYM.mjs.map +1 -0
- package/dist/comm-VV2LDX2J-B4H8R4Kt.cjs +10 -0
- package/dist/comm-VV2LDX2J-B4H8R4Kt.cjs.map +1 -0
- package/dist/comm-VV2LDX2J-nUo-RMN0.mjs +11 -0
- package/dist/comm-VV2LDX2J-nUo-RMN0.mjs.map +1 -0
- package/dist/cp-BISAAS7A-C9WuySex.mjs +12 -0
- package/dist/cp-BISAAS7A-C9WuySex.mjs.map +1 -0
- package/dist/cp-BISAAS7A-DS22_uZK.cjs +11 -0
- package/dist/cp-BISAAS7A-DS22_uZK.cjs.map +1 -0
- package/dist/curl-LV5Y3AMS-DsxeWmMU.cjs +364 -0
- package/dist/curl-LV5Y3AMS-DsxeWmMU.cjs.map +1 -0
- package/dist/curl-LV5Y3AMS-DtRDARWR.mjs +365 -0
- package/dist/curl-LV5Y3AMS-DtRDARWR.mjs.map +1 -0
- package/dist/cut-OKARJCCV-BPOR_0b0.mjs +12 -0
- package/dist/cut-OKARJCCV-BPOR_0b0.mjs.map +1 -0
- package/dist/cut-OKARJCCV-DKmAL26l.cjs +11 -0
- package/dist/cut-OKARJCCV-DKmAL26l.cjs.map +1 -0
- package/dist/diff-MWJFIG7X-BRAGfg4v.cjs +11 -0
- package/dist/diff-MWJFIG7X-BRAGfg4v.cjs.map +1 -0
- package/dist/diff-MWJFIG7X-cCQoVt48.mjs +12 -0
- package/dist/diff-MWJFIG7X-cCQoVt48.mjs.map +1 -0
- package/dist/dist-4Azf1J7b.mjs +21838 -0
- package/dist/dist-4Azf1J7b.mjs.map +1 -0
- package/dist/dist-BuTzRCXC.mjs +543 -0
- package/dist/dist-BuTzRCXC.mjs.map +1 -0
- package/dist/dist-BuwXJpOO.cjs +596 -0
- package/dist/dist-BuwXJpOO.cjs.map +1 -0
- package/dist/dist-DCVQ-aa6.cjs +22725 -0
- package/dist/dist-DCVQ-aa6.cjs.map +1 -0
- package/dist/du-572XNP42-BdQE7zzz.mjs +12 -0
- package/dist/du-572XNP42-BdQE7zzz.mjs.map +1 -0
- package/dist/du-572XNP42-C0VgeXYG.cjs +11 -0
- package/dist/du-572XNP42-C0VgeXYG.cjs.map +1 -0
- package/dist/env-36M5BO7M-CA-zIaGe.cjs +11 -0
- package/dist/env-36M5BO7M-CA-zIaGe.cjs.map +1 -0
- package/dist/env-36M5BO7M-DoLSjSPU.mjs +11 -0
- package/dist/env-36M5BO7M-DoLSjSPU.mjs.map +1 -0
- package/dist/expand-JSPG6VOP-Bx5FcaYk.mjs +11 -0
- package/dist/expand-JSPG6VOP-Bx5FcaYk.mjs.map +1 -0
- package/dist/expand-JSPG6VOP-DdVE2gdR.cjs +10 -0
- package/dist/expand-JSPG6VOP-DdVE2gdR.cjs.map +1 -0
- package/dist/expansion-R25BK4W3--F1HdVtj.mjs +11 -0
- package/dist/expansion-R25BK4W3--F1HdVtj.mjs.map +1 -0
- package/dist/expansion-R25BK4W3-DCtbEdGv.cjs +10 -0
- package/dist/expansion-R25BK4W3-DCtbEdGv.cjs.map +1 -0
- package/dist/expr-5JAACS4X-BZ8GYHao.mjs +11 -0
- package/dist/expr-5JAACS4X-BZ8GYHao.mjs.map +1 -0
- package/dist/expr-5JAACS4X-CGqAMUTe.cjs +10 -0
- package/dist/expr-5JAACS4X-CGqAMUTe.cjs.map +1 -0
- package/dist/find-INTH3OLC-CPG4WaDK.cjs +14 -0
- package/dist/find-INTH3OLC-CPG4WaDK.cjs.map +1 -0
- package/dist/find-INTH3OLC-kQlzhqfe.mjs +15 -0
- package/dist/find-INTH3OLC-kQlzhqfe.mjs.map +1 -0
- package/dist/flag-coverage-XWSYNE72-BMORjgPf.cjs +193 -0
- package/dist/flag-coverage-XWSYNE72-BMORjgPf.cjs.map +1 -0
- package/dist/flag-coverage-XWSYNE72-DBytTY0B.mjs +194 -0
- package/dist/flag-coverage-XWSYNE72-DBytTY0B.mjs.map +1 -0
- package/dist/fold-4TQNYMSW-BUaHHhZM.mjs +11 -0
- package/dist/fold-4TQNYMSW-BUaHHhZM.mjs.map +1 -0
- package/dist/fold-4TQNYMSW-IFoVNWV0.cjs +10 -0
- package/dist/fold-4TQNYMSW-IFoVNWV0.cjs.map +1 -0
- package/dist/grep-V3LQVMRQ-Dt6XrmRO.mjs +14 -0
- package/dist/grep-V3LQVMRQ-Dt6XrmRO.mjs.map +1 -0
- package/dist/grep-V3LQVMRQ-YNhmS_BZ.cjs +15 -0
- package/dist/grep-V3LQVMRQ-YNhmS_BZ.cjs.map +1 -0
- package/dist/gzip-O5ASJAFY-DifN944v.cjs +13 -0
- package/dist/gzip-O5ASJAFY-DifN944v.cjs.map +1 -0
- package/dist/gzip-O5ASJAFY-DrA3bmzW.mjs +12 -0
- package/dist/gzip-O5ASJAFY-DrA3bmzW.mjs.map +1 -0
- package/dist/head-442HYESI-CL6gH9h2.cjs +11 -0
- package/dist/head-442HYESI-CL6gH9h2.cjs.map +1 -0
- package/dist/head-442HYESI-DimgU-8_.mjs +12 -0
- package/dist/head-442HYESI-DimgU-8_.mjs.map +1 -0
- package/dist/help-HZ6M2CKN-CzL2jZ4V.cjs +9 -0
- package/dist/help-HZ6M2CKN-CzL2jZ4V.cjs.map +1 -0
- package/dist/help-HZ6M2CKN-LYWFUOvi.mjs +10 -0
- package/dist/help-HZ6M2CKN-LYWFUOvi.mjs.map +1 -0
- package/dist/html-to-markdown-JW4MSQZO-BLBb5Bbg.cjs +10 -0
- package/dist/html-to-markdown-JW4MSQZO-BLBb5Bbg.cjs.map +1 -0
- package/dist/html-to-markdown-JW4MSQZO-D1YpJRDv.mjs +11 -0
- package/dist/html-to-markdown-JW4MSQZO-D1YpJRDv.mjs.map +1 -0
- package/dist/index-Bh0mXEIa.d.cts +338 -0
- package/dist/index-Bh0mXEIa.d.cts.map +1 -0
- package/dist/index-BoaJy29Y.d.mts +339 -0
- package/dist/index-BoaJy29Y.d.mts.map +1 -0
- package/dist/index-CPQ-S4eV.d.mts +232 -0
- package/dist/index-CPQ-S4eV.d.mts.map +1 -0
- package/dist/index-CjeJiiZy.d.cts +232 -0
- package/dist/index-CjeJiiZy.d.cts.map +1 -0
- package/dist/join-TBRGI3LQ-CQP6DB4k.cjs +10 -0
- package/dist/join-TBRGI3LQ-CQP6DB4k.cjs.map +1 -0
- package/dist/join-TBRGI3LQ-CasWplkH.mjs +11 -0
- package/dist/join-TBRGI3LQ-CasWplkH.mjs.map +1 -0
- package/dist/jq-4XLYLOS5-DZzEhWxY.cjs +16 -0
- package/dist/jq-4XLYLOS5-DZzEhWxY.cjs.map +1 -0
- package/dist/jq-4XLYLOS5-XPRx_fEK.mjs +17 -0
- package/dist/jq-4XLYLOS5-XPRx_fEK.mjs.map +1 -0
- package/dist/js-exec-N5KEZBH7-6uOVZ2CN.mjs +325 -0
- package/dist/js-exec-N5KEZBH7-6uOVZ2CN.mjs.map +1 -0
- package/dist/js-exec-N5KEZBH7-y4jzijOx.cjs +326 -0
- package/dist/js-exec-N5KEZBH7-y4jzijOx.cjs.map +1 -0
- package/dist/ln-4LGSXXGD-BBbd3LiM.mjs +11 -0
- package/dist/ln-4LGSXXGD-BBbd3LiM.mjs.map +1 -0
- package/dist/ln-4LGSXXGD-DxNdx7lY.cjs +10 -0
- package/dist/ln-4LGSXXGD-DxNdx7lY.cjs.map +1 -0
- package/dist/ls-ZJGQER7M-B8DKT8aQ.mjs +12 -0
- package/dist/ls-ZJGQER7M-B8DKT8aQ.mjs.map +1 -0
- package/dist/ls-ZJGQER7M-BDpSZdMV.cjs +11 -0
- package/dist/ls-ZJGQER7M-BDpSZdMV.cjs.map +1 -0
- package/dist/md5sum-SPU24VSG-DBYIOJ8S.mjs +12 -0
- package/dist/md5sum-SPU24VSG-DBYIOJ8S.mjs.map +1 -0
- package/dist/md5sum-SPU24VSG-t3Tgq5-S.cjs +11 -0
- package/dist/md5sum-SPU24VSG-t3Tgq5-S.cjs.map +1 -0
- package/dist/microsandbox-kL031wZw-DiSyhHQv.mjs +1662 -0
- package/dist/microsandbox-kL031wZw-DiSyhHQv.mjs.map +1 -0
- package/dist/microsandbox-kL031wZw-WOyY5ZG4.cjs +1662 -0
- package/dist/microsandbox-kL031wZw-WOyY5ZG4.cjs.map +1 -0
- package/dist/mkdir-MEPGZOB6-BW3evm1i.cjs +11 -0
- package/dist/mkdir-MEPGZOB6-BW3evm1i.cjs.map +1 -0
- package/dist/mkdir-MEPGZOB6-C9dbX0sq.mjs +12 -0
- package/dist/mkdir-MEPGZOB6-C9dbX0sq.mjs.map +1 -0
- package/dist/mv-W5BIQ646-BV7ucc6I.cjs +11 -0
- package/dist/mv-W5BIQ646-BV7ucc6I.cjs.map +1 -0
- package/dist/mv-W5BIQ646-BpteNR98.mjs +12 -0
- package/dist/mv-W5BIQ646-BpteNR98.mjs.map +1 -0
- package/dist/nl-WSDW7I4O-CO-NoPdG.mjs +11 -0
- package/dist/nl-WSDW7I4O-CO-NoPdG.mjs.map +1 -0
- package/dist/nl-WSDW7I4O-CU-_GpfD.cjs +10 -0
- package/dist/nl-WSDW7I4O-CU-_GpfD.cjs.map +1 -0
- package/dist/od-WOKFDJTP-CjU6m0pz.cjs +9 -0
- package/dist/od-WOKFDJTP-CjU6m0pz.cjs.map +1 -0
- package/dist/od-WOKFDJTP-DHTvDueV.mjs +10 -0
- package/dist/od-WOKFDJTP-DHTvDueV.mjs.map +1 -0
- package/dist/paste-7JC6S4DX-BEDt_RVc.mjs +12 -0
- package/dist/paste-7JC6S4DX-BEDt_RVc.mjs.map +1 -0
- package/dist/paste-7JC6S4DX-BaqALQ8x.cjs +11 -0
- package/dist/paste-7JC6S4DX-BaqALQ8x.cjs.map +1 -0
- package/dist/printf-TWGXF445-C7v1K0dJ.cjs +12 -0
- package/dist/printf-TWGXF445-C7v1K0dJ.cjs.map +1 -0
- package/dist/printf-TWGXF445-CV51Emgy.mjs +13 -0
- package/dist/printf-TWGXF445-CV51Emgy.mjs.map +1 -0
- package/dist/python3-POMOR4OA-Ba5FNfMw.mjs +290 -0
- package/dist/python3-POMOR4OA-Ba5FNfMw.mjs.map +1 -0
- package/dist/python3-POMOR4OA-BsCFMU8Y.cjs +291 -0
- package/dist/python3-POMOR4OA-BsCFMU8Y.cjs.map +1 -0
- package/dist/rev-5EHFX4EJ-DHCqMkgr.mjs +11 -0
- package/dist/rev-5EHFX4EJ-DHCqMkgr.mjs.map +1 -0
- package/dist/rev-5EHFX4EJ-bLwTM4Gb.cjs +10 -0
- package/dist/rev-5EHFX4EJ-bLwTM4Gb.cjs.map +1 -0
- package/dist/rg-S4FXYXWB-Bc5-H-kD.mjs +14 -0
- package/dist/rg-S4FXYXWB-Bc5-H-kD.mjs.map +1 -0
- package/dist/rg-S4FXYXWB-BlBbwg6R.cjs +13 -0
- package/dist/rg-S4FXYXWB-BlBbwg6R.cjs.map +1 -0
- package/dist/rm-SSGETQVQ-DHldc5G5.cjs +11 -0
- package/dist/rm-SSGETQVQ-DHldc5G5.cjs.map +1 -0
- package/dist/rm-SSGETQVQ-Dgchm5kE.mjs +12 -0
- package/dist/rm-SSGETQVQ-Dgchm5kE.mjs.map +1 -0
- package/dist/rmdir-OC4ZLPYA-CynZZXNO.cjs +11 -0
- package/dist/rmdir-OC4ZLPYA-CynZZXNO.cjs.map +1 -0
- package/dist/rmdir-OC4ZLPYA-D8PysP3f.mjs +12 -0
- package/dist/rmdir-OC4ZLPYA-D8PysP3f.mjs.map +1 -0
- package/dist/sandbox.cjs +1 -3
- package/dist/sandbox.d.cts +2 -2
- package/dist/sandbox.d.mts +2 -2
- package/dist/sandbox.mjs +2 -2
- package/dist/sed-S5UIK574-BViIburV.cjs +13 -0
- package/dist/sed-S5UIK574-BViIburV.cjs.map +1 -0
- package/dist/sed-S5UIK574-CabhqONh.mjs +14 -0
- package/dist/sed-S5UIK574-CabhqONh.mjs.map +1 -0
- package/dist/sha1sum-2PTOAFR6-BdOZI_tJ.mjs +12 -0
- package/dist/sha1sum-2PTOAFR6-BdOZI_tJ.mjs.map +1 -0
- package/dist/sha1sum-2PTOAFR6-hivp9Qrk.cjs +11 -0
- package/dist/sha1sum-2PTOAFR6-hivp9Qrk.cjs.map +1 -0
- package/dist/sha256sum-NS7D3IXX-B0rnQTsn.mjs +12 -0
- package/dist/sha256sum-NS7D3IXX-B0rnQTsn.mjs.map +1 -0
- package/dist/sha256sum-NS7D3IXX-DdjIhp5w.cjs +11 -0
- package/dist/sha256sum-NS7D3IXX-DdjIhp5w.cjs.map +1 -0
- package/dist/sleep-X22JJINO-CCHRK5fw.cjs +12 -0
- package/dist/sleep-X22JJINO-CCHRK5fw.cjs.map +1 -0
- package/dist/sleep-X22JJINO-CEYAdHQ9.mjs +13 -0
- package/dist/sleep-X22JJINO-CEYAdHQ9.mjs.map +1 -0
- package/dist/sort-SW2YEO5B-BCNifmp_.mjs +12 -0
- package/dist/sort-SW2YEO5B-BCNifmp_.mjs.map +1 -0
- package/dist/sort-SW2YEO5B-CABdtgov.cjs +11 -0
- package/dist/sort-SW2YEO5B-CABdtgov.cjs.map +1 -0
- package/dist/split-4KKZZXXE-BcW0PHnp.mjs +11 -0
- package/dist/split-4KKZZXXE-BcW0PHnp.mjs.map +1 -0
- package/dist/split-4KKZZXXE-BzYozgA_.cjs +10 -0
- package/dist/split-4KKZZXXE-BzYozgA_.cjs.map +1 -0
- package/dist/sqlite3-CGOEFJAO-lxlbU0La.cjs +11 -0
- package/dist/sqlite3-CGOEFJAO-lxlbU0La.cjs.map +1 -0
- package/dist/sqlite3-CGOEFJAO-xdDRJMQj.mjs +12 -0
- package/dist/sqlite3-CGOEFJAO-xdDRJMQj.mjs.map +1 -0
- package/dist/strings-6WDHLGMX-BNvlj8K_.mjs +11 -0
- package/dist/strings-6WDHLGMX-BNvlj8K_.mjs.map +1 -0
- package/dist/strings-6WDHLGMX-CLxM2-1s.cjs +10 -0
- package/dist/strings-6WDHLGMX-CLxM2-1s.cjs.map +1 -0
- package/dist/tac-2STMMJYW-BGa8qTHj.cjs +9 -0
- package/dist/tac-2STMMJYW-BGa8qTHj.cjs.map +1 -0
- package/dist/tac-2STMMJYW-KWDkCccR.mjs +10 -0
- package/dist/tac-2STMMJYW-KWDkCccR.mjs.map +1 -0
- package/dist/tail-R4PCA2C4-DlaVaNNN.mjs +12 -0
- package/dist/tail-R4PCA2C4-DlaVaNNN.mjs.map +1 -0
- package/dist/tail-R4PCA2C4-Qo0_59iv.cjs +11 -0
- package/dist/tail-R4PCA2C4-Qo0_59iv.cjs.map +1 -0
- package/dist/tar-STHHZTZ6-BIp4q1j1.mjs +14 -0
- package/dist/tar-STHHZTZ6-BIp4q1j1.mjs.map +1 -0
- package/dist/tar-STHHZTZ6-DR2FanAW.cjs +13 -0
- package/dist/tar-STHHZTZ6-DR2FanAW.cjs.map +1 -0
- package/dist/tee-YUZ2FKCJ-BK810CEQ.cjs +11 -0
- package/dist/tee-YUZ2FKCJ-BK810CEQ.cjs.map +1 -0
- package/dist/tee-YUZ2FKCJ-ChJh_m1m.mjs +12 -0
- package/dist/tee-YUZ2FKCJ-ChJh_m1m.mjs.map +1 -0
- package/dist/time-D4LNBSWX-Cc46u54X.mjs +10 -0
- package/dist/time-D4LNBSWX-Cc46u54X.mjs.map +1 -0
- package/dist/time-D4LNBSWX-DZtFhDiZ.cjs +9 -0
- package/dist/time-D4LNBSWX-DZtFhDiZ.cjs.map +1 -0
- package/dist/timeout-YDCRSLPQ-DNhmRPSL.cjs +12 -0
- package/dist/timeout-YDCRSLPQ-DNhmRPSL.cjs.map +1 -0
- package/dist/timeout-YDCRSLPQ-PrIPy8-8.mjs +13 -0
- package/dist/timeout-YDCRSLPQ-PrIPy8-8.mjs.map +1 -0
- package/dist/touch-UA33VN3N-C9eUmCrX.cjs +10 -0
- package/dist/touch-UA33VN3N-C9eUmCrX.cjs.map +1 -0
- package/dist/touch-UA33VN3N-CyMixBsZ.mjs +11 -0
- package/dist/touch-UA33VN3N-CyMixBsZ.mjs.map +1 -0
- package/dist/tr-36LHWFRQ-Bn4JXY0e.cjs +11 -0
- package/dist/tr-36LHWFRQ-Bn4JXY0e.cjs.map +1 -0
- package/dist/tr-36LHWFRQ-DWSvg34U.mjs +12 -0
- package/dist/tr-36LHWFRQ-DWSvg34U.mjs.map +1 -0
- package/dist/tree-YLD52CNT-DUfV5ZfS.cjs +11 -0
- package/dist/tree-YLD52CNT-DUfV5ZfS.cjs.map +1 -0
- package/dist/tree-YLD52CNT-qtx6ms74.mjs +12 -0
- package/dist/tree-YLD52CNT-qtx6ms74.mjs.map +1 -0
- package/dist/trigger.cjs +1 -1
- package/dist/trigger.d.cts +1 -1
- package/dist/trigger.d.mts +1 -1
- package/dist/trigger.mjs +1 -1
- package/dist/unexpand-CADSA4VO-CCe6qgxw.cjs +10 -0
- package/dist/unexpand-CADSA4VO-CCe6qgxw.cjs.map +1 -0
- package/dist/unexpand-CADSA4VO-Dol-sQLZ.mjs +11 -0
- package/dist/unexpand-CADSA4VO-Dol-sQLZ.mjs.map +1 -0
- package/dist/uniq-XSIZR6PB-DGQy5gOW.cjs +12 -0
- package/dist/uniq-XSIZR6PB-DGQy5gOW.cjs.map +1 -0
- package/dist/uniq-XSIZR6PB-SujADEzH.mjs +13 -0
- package/dist/uniq-XSIZR6PB-SujADEzH.mjs.map +1 -0
- package/dist/wc-LF7NU4LA-5rZQeaaE.mjs +13 -0
- package/dist/wc-LF7NU4LA-5rZQeaaE.mjs.map +1 -0
- package/dist/wc-LF7NU4LA-bJ-LMRGB.cjs +12 -0
- package/dist/wc-LF7NU4LA-bJ-LMRGB.cjs.map +1 -0
- package/dist/workflow.cjs +1 -1
- package/dist/workflow.mjs +1 -1
- package/dist/xan-Y6WF3IRG-Bou99oPf.cjs +17 -0
- package/dist/xan-Y6WF3IRG-Bou99oPf.cjs.map +1 -0
- package/dist/xan-Y6WF3IRG-CPi9Sw2n.mjs +18 -0
- package/dist/xan-Y6WF3IRG-CPi9Sw2n.mjs.map +1 -0
- package/dist/xan-view-HDVKHFC2-BMZnMNcy.cjs +10 -0
- package/dist/xan-view-HDVKHFC2-BMZnMNcy.cjs.map +1 -0
- package/dist/xan-view-HDVKHFC2-hvY0v2Y8.mjs +11 -0
- package/dist/xan-view-HDVKHFC2-hvY0v2Y8.mjs.map +1 -0
- package/dist/xargs-MGZPH7AX-C3SZiIHq.mjs +11 -0
- package/dist/xargs-MGZPH7AX-C3SZiIHq.mjs.map +1 -0
- package/dist/xargs-MGZPH7AX-wDFBioxY.cjs +10 -0
- package/dist/xargs-MGZPH7AX-wDFBioxY.cjs.map +1 -0
- package/dist/yq-4QJW3EQG-5F7WsSNw.mjs +17 -0
- package/dist/yq-4QJW3EQG-5F7WsSNw.mjs.map +1 -0
- package/dist/yq-4QJW3EQG-CdZMHPdX.cjs +16 -0
- package/dist/yq-4QJW3EQG-CdZMHPdX.cjs.map +1 -0
- package/package.json +3 -3
- package/dist/awk2-LA3USKJP-C8bP7BzV.mjs +0 -14
- package/dist/awk2-LA3USKJP-C8bP7BzV.mjs.map +0 -1
- package/dist/awk2-LA3USKJP-DrIxeg83.cjs +0 -13
- package/dist/awk2-LA3USKJP-DrIxeg83.cjs.map +0 -1
- package/dist/base64-C2AIWVNC-Ch7S0PzZ.mjs +0 -12
- package/dist/base64-C2AIWVNC-Ch7S0PzZ.mjs.map +0 -1
- package/dist/base64-C2AIWVNC-D9z0ThUv.cjs +0 -11
- package/dist/base64-C2AIWVNC-D9z0ThUv.cjs.map +0 -1
- package/dist/bash-YZ33HQZQ-CZ4F4gn7.cjs +0 -11
- package/dist/bash-YZ33HQZQ-CZ4F4gn7.cjs.map +0 -1
- package/dist/bash-YZ33HQZQ-DPzzGYT7.mjs +0 -11
- package/dist/bash-YZ33HQZQ-DPzzGYT7.mjs.map +0 -1
- package/dist/cat-TSFMZVYS-DolsS88m.mjs +0 -13
- package/dist/cat-TSFMZVYS-DolsS88m.mjs.map +0 -1
- package/dist/cat-TSFMZVYS-l7PCirBW.cjs +0 -12
- package/dist/cat-TSFMZVYS-l7PCirBW.cjs.map +0 -1
- package/dist/chunk-2JIPICV3-CHH3NcT0.mjs +0 -100
- package/dist/chunk-2JIPICV3-CHH3NcT0.mjs.map +0 -1
- package/dist/chunk-2JIPICV3-CZkKDmfr.cjs +0 -110
- package/dist/chunk-2JIPICV3-CZkKDmfr.cjs.map +0 -1
- package/dist/chunk-2VDTE5BV-Btp95fhd.mjs +0 -111
- package/dist/chunk-2VDTE5BV-Btp95fhd.mjs.map +0 -1
- package/dist/chunk-2VDTE5BV-Mgsos41a.cjs +0 -121
- package/dist/chunk-2VDTE5BV-Mgsos41a.cjs.map +0 -1
- package/dist/chunk-46RN27KI-C8T1Jjg9.cjs +0 -1752
- package/dist/chunk-46RN27KI-C8T1Jjg9.cjs.map +0 -1
- package/dist/chunk-46RN27KI-DGI1Ogcp.mjs +0 -1742
- package/dist/chunk-46RN27KI-DGI1Ogcp.mjs.map +0 -1
- package/dist/chunk-4JLVZKHC-C52nlhC5.mjs +0 -127
- package/dist/chunk-4JLVZKHC-C52nlhC5.mjs.map +0 -1
- package/dist/chunk-4JLVZKHC-CaWIkDPx.cjs +0 -137
- package/dist/chunk-4JLVZKHC-CaWIkDPx.cjs.map +0 -1
- package/dist/chunk-4N6J7B5P-CeO1Eopo.mjs +0 -91
- package/dist/chunk-4N6J7B5P-CeO1Eopo.mjs.map +0 -1
- package/dist/chunk-4N6J7B5P-DRIv7kgO.cjs +0 -101
- package/dist/chunk-4N6J7B5P-DRIv7kgO.cjs.map +0 -1
- package/dist/chunk-5H5SCKJM--Svwhf0K.mjs +0 -601
- package/dist/chunk-5H5SCKJM--Svwhf0K.mjs.map +0 -1
- package/dist/chunk-5H5SCKJM-i1HIdPgY.cjs +0 -611
- package/dist/chunk-5H5SCKJM-i1HIdPgY.cjs.map +0 -1
- package/dist/chunk-6LASZU3O-CyMF3oIM.cjs +0 -148
- package/dist/chunk-6LASZU3O-CyMF3oIM.cjs.map +0 -1
- package/dist/chunk-6LASZU3O-DSXgEowe.mjs +0 -138
- package/dist/chunk-6LASZU3O-DSXgEowe.mjs.map +0 -1
- package/dist/chunk-6VAT5Z2D-BfDTR-XN.mjs +0 -108
- package/dist/chunk-6VAT5Z2D-BfDTR-XN.mjs.map +0 -1
- package/dist/chunk-6VAT5Z2D-Bv2jght3.cjs +0 -118
- package/dist/chunk-6VAT5Z2D-Bv2jght3.cjs.map +0 -1
- package/dist/chunk-7JHM3L42-COhcuD5q.mjs +0 -138
- package/dist/chunk-7JHM3L42-COhcuD5q.mjs.map +0 -1
- package/dist/chunk-7JHM3L42-b4znlkKq.cjs +0 -148
- package/dist/chunk-7JHM3L42-b4znlkKq.cjs.map +0 -1
- package/dist/chunk-A4R2GWRF-DOO164y3.cjs +0 -148
- package/dist/chunk-A4R2GWRF-DOO164y3.cjs.map +0 -1
- package/dist/chunk-A4R2GWRF-IUFq2L6l.mjs +0 -126
- package/dist/chunk-A4R2GWRF-IUFq2L6l.mjs.map +0 -1
- package/dist/chunk-ACSZB4FE-C9gI1Xs_.mjs +0 -162
- package/dist/chunk-ACSZB4FE-C9gI1Xs_.mjs.map +0 -1
- package/dist/chunk-ACSZB4FE-D_GR2oDo.cjs +0 -172
- package/dist/chunk-ACSZB4FE-D_GR2oDo.cjs.map +0 -1
- package/dist/chunk-BVKWRAS6-C21JT-S8.cjs +0 -139
- package/dist/chunk-BVKWRAS6-C21JT-S8.cjs.map +0 -1
- package/dist/chunk-BVKWRAS6-Ci2bU70q.mjs +0 -129
- package/dist/chunk-BVKWRAS6-Ci2bU70q.mjs.map +0 -1
- package/dist/chunk-CBJVD2XA-5lk0XnUE.cjs +0 -783
- package/dist/chunk-CBJVD2XA-5lk0XnUE.cjs.map +0 -1
- package/dist/chunk-CBJVD2XA-Cq0jUNg2.mjs +0 -772
- package/dist/chunk-CBJVD2XA-Cq0jUNg2.mjs.map +0 -1
- package/dist/chunk-EBAPSGAO-BxMVRYwd.mjs +0 -246
- package/dist/chunk-EBAPSGAO-BxMVRYwd.mjs.map +0 -1
- package/dist/chunk-EBAPSGAO-YMezXuwx.cjs +0 -250
- package/dist/chunk-EBAPSGAO-YMezXuwx.cjs.map +0 -1
- package/dist/chunk-FAXLQUCQ-BmMkY4Yk.mjs +0 -65
- package/dist/chunk-FAXLQUCQ-BmMkY4Yk.mjs.map +0 -1
- package/dist/chunk-FAXLQUCQ-D1VqxYOH.cjs +0 -75
- package/dist/chunk-FAXLQUCQ-D1VqxYOH.cjs.map +0 -1
- package/dist/chunk-FJK43EBQ-BNsBAOsE.mjs +0 -238
- package/dist/chunk-FJK43EBQ-BNsBAOsE.mjs.map +0 -1
- package/dist/chunk-FJK43EBQ-C8isMz6c.cjs +0 -248
- package/dist/chunk-FJK43EBQ-C8isMz6c.cjs.map +0 -1
- package/dist/chunk-FW54FHZR-BYNV2vcs.cjs +0 -26
- package/dist/chunk-FW54FHZR-BYNV2vcs.cjs.map +0 -1
- package/dist/chunk-FW54FHZR-DAKsqBoC.mjs +0 -16
- package/dist/chunk-FW54FHZR-DAKsqBoC.mjs.map +0 -1
- package/dist/chunk-FX7KQCEA-DjaknAfL.cjs +0 -1640
- package/dist/chunk-FX7KQCEA-DjaknAfL.cjs.map +0 -1
- package/dist/chunk-FX7KQCEA-NvNey_m4.mjs +0 -1629
- package/dist/chunk-FX7KQCEA-NvNey_m4.mjs.map +0 -1
- package/dist/chunk-FZRQOL3C-BJ5kahvz.mjs +0 -121
- package/dist/chunk-FZRQOL3C-BJ5kahvz.mjs.map +0 -1
- package/dist/chunk-FZRQOL3C-Btx-NCUK.cjs +0 -131
- package/dist/chunk-FZRQOL3C-Btx-NCUK.cjs.map +0 -1
- package/dist/chunk-GGC5NEPZ-B81h5dp7.cjs +0 -131
- package/dist/chunk-GGC5NEPZ-B81h5dp7.cjs.map +0 -1
- package/dist/chunk-GGC5NEPZ-D48MHako.mjs +0 -121
- package/dist/chunk-GGC5NEPZ-D48MHako.mjs.map +0 -1
- package/dist/chunk-GIUR5SNU-D9f7dPaX.cjs +0 -896
- package/dist/chunk-GIUR5SNU-D9f7dPaX.cjs.map +0 -1
- package/dist/chunk-GIUR5SNU-VyiGjJQc.mjs +0 -885
- package/dist/chunk-GIUR5SNU-VyiGjJQc.mjs.map +0 -1
- package/dist/chunk-GJC3WVOW-DXxo5XCU.cjs +0 -26
- package/dist/chunk-GJC3WVOW-DXxo5XCU.cjs.map +0 -1
- package/dist/chunk-GJC3WVOW-Q-Es6_Od.mjs +0 -16
- package/dist/chunk-GJC3WVOW-Q-Es6_Od.mjs.map +0 -1
- package/dist/chunk-GSPYNYZA-4V0RLQLs.mjs +0 -129
- package/dist/chunk-GSPYNYZA-4V0RLQLs.mjs.map +0 -1
- package/dist/chunk-GSPYNYZA-M-vemA8q.cjs +0 -151
- package/dist/chunk-GSPYNYZA-M-vemA8q.cjs.map +0 -1
- package/dist/chunk-GTQIUQM6-CbBNb3of.mjs +0 -153
- package/dist/chunk-GTQIUQM6-CbBNb3of.mjs.map +0 -1
- package/dist/chunk-GTQIUQM6-q-XBZzbD.cjs +0 -163
- package/dist/chunk-GTQIUQM6-q-XBZzbD.cjs.map +0 -1
- package/dist/chunk-HJBTD7PY-DlqTvLcj.mjs +0 -183
- package/dist/chunk-HJBTD7PY-DlqTvLcj.mjs.map +0 -1
- package/dist/chunk-HJBTD7PY-DmAtAPzF.cjs +0 -193
- package/dist/chunk-HJBTD7PY-DmAtAPzF.cjs.map +0 -1
- package/dist/chunk-ICIEVHY5-BYZ86Hcr.mjs +0 -2875
- package/dist/chunk-ICIEVHY5-BYZ86Hcr.mjs.map +0 -1
- package/dist/chunk-ICIEVHY5-Ml1pglBK.cjs +0 -2894
- package/dist/chunk-ICIEVHY5-Ml1pglBK.cjs.map +0 -1
- package/dist/chunk-KD3KENL6-B1uaP5B7.mjs +0 -152
- package/dist/chunk-KD3KENL6-B1uaP5B7.mjs.map +0 -1
- package/dist/chunk-KD3KENL6-D30ivwb8.cjs +0 -162
- package/dist/chunk-KD3KENL6-D30ivwb8.cjs.map +0 -1
- package/dist/chunk-LEKBROJD-3THGt3C-.cjs +0 -3121
- package/dist/chunk-LEKBROJD-3THGt3C-.cjs.map +0 -1
- package/dist/chunk-LEKBROJD-CIgEa5OZ.mjs +0 -3111
- package/dist/chunk-LEKBROJD-CIgEa5OZ.mjs.map +0 -1
- package/dist/chunk-LNBPBRV4-CDwS-K_T.mjs +0 -2744
- package/dist/chunk-LNBPBRV4-CDwS-K_T.mjs.map +0 -1
- package/dist/chunk-LNBPBRV4-CMLBIQME.cjs +0 -2754
- package/dist/chunk-LNBPBRV4-CMLBIQME.cjs.map +0 -1
- package/dist/chunk-LPJEKUCB-CzA8IIuJ.cjs +0 -105
- package/dist/chunk-LPJEKUCB-CzA8IIuJ.cjs.map +0 -1
- package/dist/chunk-LPJEKUCB-b2KGax2f.mjs +0 -95
- package/dist/chunk-LPJEKUCB-b2KGax2f.mjs.map +0 -1
- package/dist/chunk-MLIO3BK2-BfY4f622.cjs +0 -71
- package/dist/chunk-MLIO3BK2-BfY4f622.cjs.map +0 -1
- package/dist/chunk-MLIO3BK2-dsxuPBUI.mjs +0 -61
- package/dist/chunk-MLIO3BK2-dsxuPBUI.mjs.map +0 -1
- package/dist/chunk-MQKGGNPS-CbfFGKUj.cjs +0 -131
- package/dist/chunk-MQKGGNPS-CbfFGKUj.cjs.map +0 -1
- package/dist/chunk-MQKGGNPS-DkLckM18.mjs +0 -121
- package/dist/chunk-MQKGGNPS-DkLckM18.mjs.map +0 -1
- package/dist/chunk-N6DXJ2JN-B6bwYMR7.mjs +0 -8630
- package/dist/chunk-N6DXJ2JN-B6bwYMR7.mjs.map +0 -1
- package/dist/chunk-N6DXJ2JN-GG_PTJIv.cjs +0 -8640
- package/dist/chunk-N6DXJ2JN-GG_PTJIv.cjs.map +0 -1
- package/dist/chunk-OVGANXCG-BCUBhpZh.mjs +0 -167
- package/dist/chunk-OVGANXCG-BCUBhpZh.mjs.map +0 -1
- package/dist/chunk-OVGANXCG-D1A7__hb.cjs +0 -177
- package/dist/chunk-OVGANXCG-D1A7__hb.cjs.map +0 -1
- package/dist/chunk-Q7H5W7YE-BjkuYxij.cjs +0 -2964
- package/dist/chunk-Q7H5W7YE-BjkuYxij.cjs.map +0 -1
- package/dist/chunk-Q7H5W7YE-DrXoa13v.mjs +0 -2941
- package/dist/chunk-Q7H5W7YE-DrXoa13v.mjs.map +0 -1
- package/dist/chunk-R74UQCKX-B4K7K_v3.cjs +0 -15903
- package/dist/chunk-R74UQCKX-B4K7K_v3.cjs.map +0 -1
- package/dist/chunk-R74UQCKX-dC-hn6RP.mjs +0 -15889
- package/dist/chunk-R74UQCKX-dC-hn6RP.mjs.map +0 -1
- package/dist/chunk-S3LEJEPP-DpAEaDn4.cjs +0 -26
- package/dist/chunk-S3LEJEPP-DpAEaDn4.cjs.map +0 -1
- package/dist/chunk-S3LEJEPP-M-Q4v0Jt.mjs +0 -16
- package/dist/chunk-S3LEJEPP-M-Q4v0Jt.mjs.map +0 -1
- package/dist/chunk-S443BAN4-BL3Y-b3Y.mjs +0 -66
- package/dist/chunk-S443BAN4-BL3Y-b3Y.mjs.map +0 -1
- package/dist/chunk-S443BAN4-CRpX0dpw.cjs +0 -76
- package/dist/chunk-S443BAN4-CRpX0dpw.cjs.map +0 -1
- package/dist/chunk-SJYEXC2Z-TMBVhCuG.cjs +0 -147
- package/dist/chunk-SJYEXC2Z-TMBVhCuG.cjs.map +0 -1
- package/dist/chunk-SJYEXC2Z-UsOnLfd5.mjs +0 -137
- package/dist/chunk-SJYEXC2Z-UsOnLfd5.mjs.map +0 -1
- package/dist/chunk-T4TFLF3R-IBO4P9wl.mjs +0 -379
- package/dist/chunk-T4TFLF3R-IBO4P9wl.mjs.map +0 -1
- package/dist/chunk-T4TFLF3R-egdmMeUw.cjs +0 -389
- package/dist/chunk-T4TFLF3R-egdmMeUw.cjs.map +0 -1
- package/dist/chunk-U73A73IE-DUAreJ_d.cjs +0 -249
- package/dist/chunk-U73A73IE-DUAreJ_d.cjs.map +0 -1
- package/dist/chunk-U73A73IE-DmDzzAtV.mjs +0 -239
- package/dist/chunk-U73A73IE-DmDzzAtV.mjs.map +0 -1
- package/dist/chunk-UP6MSJGD-C-SSejAf.mjs +0 -272
- package/dist/chunk-UP6MSJGD-C-SSejAf.mjs.map +0 -1
- package/dist/chunk-UP6MSJGD-CVEYfYq_.cjs +0 -282
- package/dist/chunk-UP6MSJGD-CVEYfYq_.cjs.map +0 -1
- package/dist/chunk-VLCHOJWK-BjtRJMI8.cjs +0 -138
- package/dist/chunk-VLCHOJWK-BjtRJMI8.cjs.map +0 -1
- package/dist/chunk-VLCHOJWK-DFxWXl_6.mjs +0 -128
- package/dist/chunk-VLCHOJWK-DFxWXl_6.mjs.map +0 -1
- package/dist/chunk-XCQWV4AU-CZ3_EoO5.cjs +0 -162
- package/dist/chunk-XCQWV4AU-CZ3_EoO5.cjs.map +0 -1
- package/dist/chunk-XCQWV4AU-Fe-Foh0s.mjs +0 -152
- package/dist/chunk-XCQWV4AU-Fe-Foh0s.mjs.map +0 -1
- package/dist/chunk-XDGLKIHR-BIOh-Y4j.cjs +0 -464
- package/dist/chunk-XDGLKIHR-BIOh-Y4j.cjs.map +0 -1
- package/dist/chunk-XDGLKIHR-CUuGZ_BZ.mjs +0 -430
- package/dist/chunk-XDGLKIHR-CUuGZ_BZ.mjs.map +0 -1
- package/dist/chunk-XHLMAZX2-C-vwkgrL.mjs +0 -93
- package/dist/chunk-XHLMAZX2-C-vwkgrL.mjs.map +0 -1
- package/dist/chunk-XHLMAZX2-CARpKDFL.cjs +0 -103
- package/dist/chunk-XHLMAZX2-CARpKDFL.cjs.map +0 -1
- package/dist/chunk-XYXUMFSU-C2VYMzAI.cjs +0 -295
- package/dist/chunk-XYXUMFSU-C2VYMzAI.cjs.map +0 -1
- package/dist/chunk-XYXUMFSU-CXWWotq5.mjs +0 -285
- package/dist/chunk-XYXUMFSU-CXWWotq5.mjs.map +0 -1
- package/dist/chunk-YCLFEX4T-DLrG8xg-.mjs +0 -76
- package/dist/chunk-YCLFEX4T-DLrG8xg-.mjs.map +0 -1
- package/dist/chunk-YCLFEX4T-NH7dGiBW.cjs +0 -86
- package/dist/chunk-YCLFEX4T-NH7dGiBW.cjs.map +0 -1
- package/dist/chunk-YS4NUBYX-Dp_mEH1D.cjs +0 -128
- package/dist/chunk-YS4NUBYX-Dp_mEH1D.cjs.map +0 -1
- package/dist/chunk-YS4NUBYX-DqBmwv__.mjs +0 -118
- package/dist/chunk-YS4NUBYX-DqBmwv__.mjs.map +0 -1
- package/dist/chunk-ZDIT6ST5-DRDp90LA.cjs +0 -116
- package/dist/chunk-ZDIT6ST5-DRDp90LA.cjs.map +0 -1
- package/dist/chunk-ZDIT6ST5-D_exCsN0.mjs +0 -106
- package/dist/chunk-ZDIT6ST5-D_exCsN0.mjs.map +0 -1
- package/dist/chunk-ZZKH2ELC-D3XAEpL_.cjs +0 -1380
- package/dist/chunk-ZZKH2ELC-D3XAEpL_.cjs.map +0 -1
- package/dist/chunk-ZZKH2ELC-X6L9kk3U.mjs +0 -1370
- package/dist/chunk-ZZKH2ELC-X6L9kk3U.mjs.map +0 -1
- package/dist/column-XT6UFXNQ-B15pLT73.cjs +0 -11
- package/dist/column-XT6UFXNQ-B15pLT73.cjs.map +0 -1
- package/dist/column-XT6UFXNQ-B8bW7aps.mjs +0 -12
- package/dist/column-XT6UFXNQ-B8bW7aps.mjs.map +0 -1
- package/dist/comm-VV2LDX2J-CtOvs47v.mjs +0 -11
- package/dist/comm-VV2LDX2J-CtOvs47v.mjs.map +0 -1
- package/dist/comm-VV2LDX2J-iUz7elUp.cjs +0 -10
- package/dist/comm-VV2LDX2J-iUz7elUp.cjs.map +0 -1
- package/dist/cp-BISAAS7A-CCuXW1nf.mjs +0 -12
- package/dist/cp-BISAAS7A-CCuXW1nf.mjs.map +0 -1
- package/dist/cp-BISAAS7A-CWQ8nbfr.cjs +0 -11
- package/dist/cp-BISAAS7A-CWQ8nbfr.cjs.map +0 -1
- package/dist/curl-LV5Y3AMS-DbUd-OPv.mjs +0 -365
- package/dist/curl-LV5Y3AMS-DbUd-OPv.mjs.map +0 -1
- package/dist/curl-LV5Y3AMS-hQOtVYnK.cjs +0 -364
- package/dist/curl-LV5Y3AMS-hQOtVYnK.cjs.map +0 -1
- package/dist/cut-OKARJCCV-BUOGNdZx.mjs +0 -12
- package/dist/cut-OKARJCCV-BUOGNdZx.mjs.map +0 -1
- package/dist/cut-OKARJCCV-Bp_VKRpO.cjs +0 -11
- package/dist/cut-OKARJCCV-Bp_VKRpO.cjs.map +0 -1
- package/dist/diff-MWJFIG7X-BSzOn0GC.mjs +0 -12
- package/dist/diff-MWJFIG7X-BSzOn0GC.mjs.map +0 -1
- package/dist/diff-MWJFIG7X-CoMO3gwI.cjs +0 -11
- package/dist/diff-MWJFIG7X-CoMO3gwI.cjs.map +0 -1
- package/dist/dist-6vEGKZ97.mjs +0 -21849
- package/dist/dist-6vEGKZ97.mjs.map +0 -1
- package/dist/dist-Ba4-7i0D.mjs +0 -543
- package/dist/dist-Ba4-7i0D.mjs.map +0 -1
- package/dist/dist-DCMRCBXO.cjs +0 -22748
- package/dist/dist-DCMRCBXO.cjs.map +0 -1
- package/dist/dist-Dq8RX178.cjs +0 -596
- package/dist/dist-Dq8RX178.cjs.map +0 -1
- package/dist/du-572XNP42-ByHjuQ0S.mjs +0 -12
- package/dist/du-572XNP42-ByHjuQ0S.mjs.map +0 -1
- package/dist/du-572XNP42-CfLYCzkP.cjs +0 -11
- package/dist/du-572XNP42-CfLYCzkP.cjs.map +0 -1
- package/dist/env-36M5BO7M-Cfl0AgXx.cjs +0 -11
- package/dist/env-36M5BO7M-Cfl0AgXx.cjs.map +0 -1
- package/dist/env-36M5BO7M-Co47jOap.mjs +0 -11
- package/dist/env-36M5BO7M-Co47jOap.mjs.map +0 -1
- package/dist/expand-JSPG6VOP-MOgE1mDw.cjs +0 -10
- package/dist/expand-JSPG6VOP-MOgE1mDw.cjs.map +0 -1
- package/dist/expand-JSPG6VOP-rNpYjvPR.mjs +0 -11
- package/dist/expand-JSPG6VOP-rNpYjvPR.mjs.map +0 -1
- package/dist/expansion-R25BK4W3-BfFkU-EA.mjs +0 -11
- package/dist/expansion-R25BK4W3-BfFkU-EA.mjs.map +0 -1
- package/dist/expansion-R25BK4W3-VTH0RCVI.cjs +0 -10
- package/dist/expansion-R25BK4W3-VTH0RCVI.cjs.map +0 -1
- package/dist/expr-5JAACS4X-C1ART8wD.cjs +0 -10
- package/dist/expr-5JAACS4X-C1ART8wD.cjs.map +0 -1
- package/dist/expr-5JAACS4X-D81ddmvQ.mjs +0 -11
- package/dist/expr-5JAACS4X-D81ddmvQ.mjs.map +0 -1
- package/dist/find-INTH3OLC-DU_1HSAr.cjs +0 -14
- package/dist/find-INTH3OLC-DU_1HSAr.cjs.map +0 -1
- package/dist/find-INTH3OLC-Dx-8KKvy.mjs +0 -15
- package/dist/find-INTH3OLC-Dx-8KKvy.mjs.map +0 -1
- package/dist/flag-coverage-XWSYNE72-BJI_9nKa.cjs +0 -193
- package/dist/flag-coverage-XWSYNE72-BJI_9nKa.cjs.map +0 -1
- package/dist/flag-coverage-XWSYNE72-kutzfOBS.mjs +0 -194
- package/dist/flag-coverage-XWSYNE72-kutzfOBS.mjs.map +0 -1
- package/dist/fold-4TQNYMSW-CC0-ViJj.cjs +0 -10
- package/dist/fold-4TQNYMSW-CC0-ViJj.cjs.map +0 -1
- package/dist/fold-4TQNYMSW-DGwk5dlG.mjs +0 -11
- package/dist/fold-4TQNYMSW-DGwk5dlG.mjs.map +0 -1
- package/dist/grep-V3LQVMRQ-KOfwAtK0.mjs +0 -14
- package/dist/grep-V3LQVMRQ-KOfwAtK0.mjs.map +0 -1
- package/dist/grep-V3LQVMRQ-nBijbKqc.cjs +0 -15
- package/dist/grep-V3LQVMRQ-nBijbKqc.cjs.map +0 -1
- package/dist/gzip-O5ASJAFY-BiH9VyXj.cjs +0 -13
- package/dist/gzip-O5ASJAFY-BiH9VyXj.cjs.map +0 -1
- package/dist/gzip-O5ASJAFY-DOrtkXjl.mjs +0 -12
- package/dist/gzip-O5ASJAFY-DOrtkXjl.mjs.map +0 -1
- package/dist/head-442HYESI-D80Apczp.mjs +0 -12
- package/dist/head-442HYESI-D80Apczp.mjs.map +0 -1
- package/dist/head-442HYESI-DhZxgFdN.cjs +0 -11
- package/dist/head-442HYESI-DhZxgFdN.cjs.map +0 -1
- package/dist/help-HZ6M2CKN-OBs6IkMe.mjs +0 -10
- package/dist/help-HZ6M2CKN-OBs6IkMe.mjs.map +0 -1
- package/dist/help-HZ6M2CKN-sCLW0mLh.cjs +0 -9
- package/dist/help-HZ6M2CKN-sCLW0mLh.cjs.map +0 -1
- package/dist/html-to-markdown-JW4MSQZO-DHGo6DUK.mjs +0 -11
- package/dist/html-to-markdown-JW4MSQZO-DHGo6DUK.mjs.map +0 -1
- package/dist/html-to-markdown-JW4MSQZO-DmJXSkMH.cjs +0 -10
- package/dist/html-to-markdown-JW4MSQZO-DmJXSkMH.cjs.map +0 -1
- package/dist/index-43S9La1Z.d.mts +0 -330
- package/dist/index-43S9La1Z.d.mts.map +0 -1
- package/dist/index-C2elOsN_.d.mts +0 -218
- package/dist/index-C2elOsN_.d.mts.map +0 -1
- package/dist/index-CNr7odE_.d.cts +0 -218
- package/dist/index-CNr7odE_.d.cts.map +0 -1
- package/dist/index-rXODimou.d.cts +0 -329
- package/dist/index-rXODimou.d.cts.map +0 -1
- package/dist/join-TBRGI3LQ-Bf9OzDOx.cjs +0 -10
- package/dist/join-TBRGI3LQ-Bf9OzDOx.cjs.map +0 -1
- package/dist/join-TBRGI3LQ-CbKgQ-Qw.mjs +0 -11
- package/dist/join-TBRGI3LQ-CbKgQ-Qw.mjs.map +0 -1
- package/dist/jq-4XLYLOS5-DBfI1DsI.cjs +0 -16
- package/dist/jq-4XLYLOS5-DBfI1DsI.cjs.map +0 -1
- package/dist/jq-4XLYLOS5-DxvU7NWh.mjs +0 -17
- package/dist/jq-4XLYLOS5-DxvU7NWh.mjs.map +0 -1
- package/dist/js-exec-N5KEZBH7-DOELZmRC.cjs +0 -326
- package/dist/js-exec-N5KEZBH7-DOELZmRC.cjs.map +0 -1
- package/dist/js-exec-N5KEZBH7-vTwkjLCa.mjs +0 -325
- package/dist/js-exec-N5KEZBH7-vTwkjLCa.mjs.map +0 -1
- package/dist/ln-4LGSXXGD-DL4EyOUb.mjs +0 -11
- package/dist/ln-4LGSXXGD-DL4EyOUb.mjs.map +0 -1
- package/dist/ln-4LGSXXGD-DLs1x1cY.cjs +0 -10
- package/dist/ln-4LGSXXGD-DLs1x1cY.cjs.map +0 -1
- package/dist/ls-ZJGQER7M-CcmIbsRg.mjs +0 -12
- package/dist/ls-ZJGQER7M-CcmIbsRg.mjs.map +0 -1
- package/dist/ls-ZJGQER7M-D-jqfc5m.cjs +0 -11
- package/dist/ls-ZJGQER7M-D-jqfc5m.cjs.map +0 -1
- package/dist/md5sum-SPU24VSG-D5jW6Oha.mjs +0 -12
- package/dist/md5sum-SPU24VSG-D5jW6Oha.mjs.map +0 -1
- package/dist/md5sum-SPU24VSG-DoFib1Cj.cjs +0 -11
- package/dist/md5sum-SPU24VSG-DoFib1Cj.cjs.map +0 -1
- package/dist/microsandbox-kL031wZw-DnkvZsHR.cjs +0 -1662
- package/dist/microsandbox-kL031wZw-DnkvZsHR.cjs.map +0 -1
- package/dist/microsandbox-kL031wZw-aOdFreiM.mjs +0 -1662
- package/dist/microsandbox-kL031wZw-aOdFreiM.mjs.map +0 -1
- package/dist/mkdir-MEPGZOB6-DAFMT6c7.mjs +0 -12
- package/dist/mkdir-MEPGZOB6-DAFMT6c7.mjs.map +0 -1
- package/dist/mkdir-MEPGZOB6-DeN_QsVp.cjs +0 -11
- package/dist/mkdir-MEPGZOB6-DeN_QsVp.cjs.map +0 -1
- package/dist/mv-W5BIQ646-B1Ea0CS2.cjs +0 -11
- package/dist/mv-W5BIQ646-B1Ea0CS2.cjs.map +0 -1
- package/dist/mv-W5BIQ646-Cs3JtFoT.mjs +0 -12
- package/dist/mv-W5BIQ646-Cs3JtFoT.mjs.map +0 -1
- package/dist/nl-WSDW7I4O-CXjhzHRp.mjs +0 -11
- package/dist/nl-WSDW7I4O-CXjhzHRp.mjs.map +0 -1
- package/dist/nl-WSDW7I4O-DGV7CopA.cjs +0 -10
- package/dist/nl-WSDW7I4O-DGV7CopA.cjs.map +0 -1
- package/dist/od-WOKFDJTP-DMNVKz7a.mjs +0 -10
- package/dist/od-WOKFDJTP-DMNVKz7a.mjs.map +0 -1
- package/dist/od-WOKFDJTP-DmZWe0HT.cjs +0 -9
- package/dist/od-WOKFDJTP-DmZWe0HT.cjs.map +0 -1
- package/dist/paste-7JC6S4DX-PW0W9-P2.cjs +0 -11
- package/dist/paste-7JC6S4DX-PW0W9-P2.cjs.map +0 -1
- package/dist/paste-7JC6S4DX-d1d3j9Je.mjs +0 -12
- package/dist/paste-7JC6S4DX-d1d3j9Je.mjs.map +0 -1
- package/dist/printf-TWGXF445-DuLQjdrD.mjs +0 -13
- package/dist/printf-TWGXF445-DuLQjdrD.mjs.map +0 -1
- package/dist/printf-TWGXF445-vhn3uL2w.cjs +0 -12
- package/dist/printf-TWGXF445-vhn3uL2w.cjs.map +0 -1
- package/dist/python3-POMOR4OA-BRtbmo0A.cjs +0 -291
- package/dist/python3-POMOR4OA-BRtbmo0A.cjs.map +0 -1
- package/dist/python3-POMOR4OA-CXS-IhCW.mjs +0 -290
- package/dist/python3-POMOR4OA-CXS-IhCW.mjs.map +0 -1
- package/dist/rev-5EHFX4EJ-Bh-xUkIO.cjs +0 -10
- package/dist/rev-5EHFX4EJ-Bh-xUkIO.cjs.map +0 -1
- package/dist/rev-5EHFX4EJ-CBjjQe2g.mjs +0 -11
- package/dist/rev-5EHFX4EJ-CBjjQe2g.mjs.map +0 -1
- package/dist/rg-S4FXYXWB-Cuz4p0-L.cjs +0 -13
- package/dist/rg-S4FXYXWB-Cuz4p0-L.cjs.map +0 -1
- package/dist/rg-S4FXYXWB-DSHTJtVs.mjs +0 -14
- package/dist/rg-S4FXYXWB-DSHTJtVs.mjs.map +0 -1
- package/dist/rm-SSGETQVQ-CKT9QAp_.cjs +0 -11
- package/dist/rm-SSGETQVQ-CKT9QAp_.cjs.map +0 -1
- package/dist/rm-SSGETQVQ-DPAHhKKC.mjs +0 -12
- package/dist/rm-SSGETQVQ-DPAHhKKC.mjs.map +0 -1
- package/dist/rmdir-OC4ZLPYA-BdR-0OJW.cjs +0 -11
- package/dist/rmdir-OC4ZLPYA-BdR-0OJW.cjs.map +0 -1
- package/dist/rmdir-OC4ZLPYA-DVmKHosn.mjs +0 -12
- package/dist/rmdir-OC4ZLPYA-DVmKHosn.mjs.map +0 -1
- package/dist/sed-S5UIK574-CzKq_JiZ.mjs +0 -14
- package/dist/sed-S5UIK574-CzKq_JiZ.mjs.map +0 -1
- package/dist/sed-S5UIK574-Ma0LbW8C.cjs +0 -13
- package/dist/sed-S5UIK574-Ma0LbW8C.cjs.map +0 -1
- package/dist/sha1sum-2PTOAFR6-Cb2toJqk.cjs +0 -11
- package/dist/sha1sum-2PTOAFR6-Cb2toJqk.cjs.map +0 -1
- package/dist/sha1sum-2PTOAFR6-DJf0qrAA.mjs +0 -12
- package/dist/sha1sum-2PTOAFR6-DJf0qrAA.mjs.map +0 -1
- package/dist/sha256sum-NS7D3IXX-DQN9XGrn.cjs +0 -11
- package/dist/sha256sum-NS7D3IXX-DQN9XGrn.cjs.map +0 -1
- package/dist/sha256sum-NS7D3IXX-wIDE-Rav.mjs +0 -12
- package/dist/sha256sum-NS7D3IXX-wIDE-Rav.mjs.map +0 -1
- package/dist/sleep-X22JJINO-CBoQ-NC_.mjs +0 -13
- package/dist/sleep-X22JJINO-CBoQ-NC_.mjs.map +0 -1
- package/dist/sleep-X22JJINO-DV0D2y9D.cjs +0 -12
- package/dist/sleep-X22JJINO-DV0D2y9D.cjs.map +0 -1
- package/dist/sort-SW2YEO5B-BBHiJj4T.cjs +0 -11
- package/dist/sort-SW2YEO5B-BBHiJj4T.cjs.map +0 -1
- package/dist/sort-SW2YEO5B-Cov86xbO.mjs +0 -12
- package/dist/sort-SW2YEO5B-Cov86xbO.mjs.map +0 -1
- package/dist/split-4KKZZXXE-C3V39DEn.mjs +0 -11
- package/dist/split-4KKZZXXE-C3V39DEn.mjs.map +0 -1
- package/dist/split-4KKZZXXE-VAzFkiuf.cjs +0 -10
- package/dist/split-4KKZZXXE-VAzFkiuf.cjs.map +0 -1
- package/dist/sqlite3-CGOEFJAO-BevG9Xjm.mjs +0 -12
- package/dist/sqlite3-CGOEFJAO-BevG9Xjm.mjs.map +0 -1
- package/dist/sqlite3-CGOEFJAO-D5fuxPKa.cjs +0 -11
- package/dist/sqlite3-CGOEFJAO-D5fuxPKa.cjs.map +0 -1
- package/dist/strings-6WDHLGMX-BcvAg4pW.cjs +0 -10
- package/dist/strings-6WDHLGMX-BcvAg4pW.cjs.map +0 -1
- package/dist/strings-6WDHLGMX-pJSpgf_1.mjs +0 -11
- package/dist/strings-6WDHLGMX-pJSpgf_1.mjs.map +0 -1
- package/dist/tac-2STMMJYW-CxPPWR7L.cjs +0 -9
- package/dist/tac-2STMMJYW-CxPPWR7L.cjs.map +0 -1
- package/dist/tac-2STMMJYW-DfXNzWUJ.mjs +0 -10
- package/dist/tac-2STMMJYW-DfXNzWUJ.mjs.map +0 -1
- package/dist/tail-R4PCA2C4-Ces2bVGU.mjs +0 -12
- package/dist/tail-R4PCA2C4-Ces2bVGU.mjs.map +0 -1
- package/dist/tail-R4PCA2C4-NASyt_BH.cjs +0 -11
- package/dist/tail-R4PCA2C4-NASyt_BH.cjs.map +0 -1
- package/dist/tar-STHHZTZ6-CLk0_GDe.cjs +0 -13
- package/dist/tar-STHHZTZ6-CLk0_GDe.cjs.map +0 -1
- package/dist/tar-STHHZTZ6-ZYf9oY-4.mjs +0 -14
- package/dist/tar-STHHZTZ6-ZYf9oY-4.mjs.map +0 -1
- package/dist/tee-YUZ2FKCJ-TMJa6j2Y.mjs +0 -12
- package/dist/tee-YUZ2FKCJ-TMJa6j2Y.mjs.map +0 -1
- package/dist/tee-YUZ2FKCJ-cD9VTYKy.cjs +0 -11
- package/dist/tee-YUZ2FKCJ-cD9VTYKy.cjs.map +0 -1
- package/dist/time-D4LNBSWX-CfILZXGI.cjs +0 -9
- package/dist/time-D4LNBSWX-CfILZXGI.cjs.map +0 -1
- package/dist/time-D4LNBSWX-D66Obn1J.mjs +0 -10
- package/dist/time-D4LNBSWX-D66Obn1J.mjs.map +0 -1
- package/dist/timeout-YDCRSLPQ-BZzxtjw9.mjs +0 -13
- package/dist/timeout-YDCRSLPQ-BZzxtjw9.mjs.map +0 -1
- package/dist/timeout-YDCRSLPQ-CnIsxSbM.cjs +0 -12
- package/dist/timeout-YDCRSLPQ-CnIsxSbM.cjs.map +0 -1
- package/dist/touch-UA33VN3N-CN1Q6PWw.mjs +0 -11
- package/dist/touch-UA33VN3N-CN1Q6PWw.mjs.map +0 -1
- package/dist/touch-UA33VN3N-DMVvZxuf.cjs +0 -10
- package/dist/touch-UA33VN3N-DMVvZxuf.cjs.map +0 -1
- package/dist/tr-36LHWFRQ-CpzPDWFB.mjs +0 -12
- package/dist/tr-36LHWFRQ-CpzPDWFB.mjs.map +0 -1
- package/dist/tr-36LHWFRQ-D9oiMAFm.cjs +0 -11
- package/dist/tr-36LHWFRQ-D9oiMAFm.cjs.map +0 -1
- package/dist/tree-YLD52CNT-DBO2TG7b.cjs +0 -11
- package/dist/tree-YLD52CNT-DBO2TG7b.cjs.map +0 -1
- package/dist/tree-YLD52CNT-DbvNyKnW.mjs +0 -12
- package/dist/tree-YLD52CNT-DbvNyKnW.mjs.map +0 -1
- package/dist/unexpand-CADSA4VO-DjQtv3c1.mjs +0 -11
- package/dist/unexpand-CADSA4VO-DjQtv3c1.mjs.map +0 -1
- package/dist/unexpand-CADSA4VO-xkh85f45.cjs +0 -10
- package/dist/unexpand-CADSA4VO-xkh85f45.cjs.map +0 -1
- package/dist/uniq-XSIZR6PB-go_hTfK9.mjs +0 -13
- package/dist/uniq-XSIZR6PB-go_hTfK9.mjs.map +0 -1
- package/dist/uniq-XSIZR6PB-pgEV_7N_.cjs +0 -12
- package/dist/uniq-XSIZR6PB-pgEV_7N_.cjs.map +0 -1
- package/dist/wc-LF7NU4LA-Bmq-bilx.cjs +0 -12
- package/dist/wc-LF7NU4LA-Bmq-bilx.cjs.map +0 -1
- package/dist/wc-LF7NU4LA-DBsNfj-4.mjs +0 -13
- package/dist/wc-LF7NU4LA-DBsNfj-4.mjs.map +0 -1
- package/dist/xan-Y6WF3IRG-BBe75stI.mjs +0 -18
- package/dist/xan-Y6WF3IRG-BBe75stI.mjs.map +0 -1
- package/dist/xan-Y6WF3IRG-ClZQxJ9_.cjs +0 -17
- package/dist/xan-Y6WF3IRG-ClZQxJ9_.cjs.map +0 -1
- package/dist/xan-view-HDVKHFC2-gzmdVNXu.cjs +0 -10
- package/dist/xan-view-HDVKHFC2-gzmdVNXu.cjs.map +0 -1
- package/dist/xan-view-HDVKHFC2-wemeRzl6.mjs +0 -11
- package/dist/xan-view-HDVKHFC2-wemeRzl6.mjs.map +0 -1
- package/dist/xargs-MGZPH7AX-BTx-e444.mjs +0 -11
- package/dist/xargs-MGZPH7AX-BTx-e444.mjs.map +0 -1
- package/dist/xargs-MGZPH7AX-XkKSvA5e.cjs +0 -10
- package/dist/xargs-MGZPH7AX-XkKSvA5e.cjs.map +0 -1
- package/dist/yq-4QJW3EQG-B6gxYoXs.cjs +0 -16
- package/dist/yq-4QJW3EQG-B6gxYoXs.cjs.map +0 -1
- package/dist/yq-4QJW3EQG-DSyVGtGg.mjs +0 -17
- package/dist/yq-4QJW3EQG-DSyVGtGg.mjs.map +0 -1
|
@@ -0,0 +1,1662 @@
|
|
|
1
|
+
const require_dist = require("./dist-DCVQ-aa6.cjs");
|
|
2
|
+
let node_fs = require("node:fs");
|
|
3
|
+
let node_module = require("node:module");
|
|
4
|
+
let node_crypto = require("node:crypto");
|
|
5
|
+
let node_path = require("node:path");
|
|
6
|
+
let node_url = require("node:url");
|
|
7
|
+
let node_fs_promises = require("node:fs/promises");
|
|
8
|
+
//#region ../sandbox/dist/microsandbox-kL031wZw.mjs
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __exportAll = (all, no_symbols) => {
|
|
11
|
+
let target = {};
|
|
12
|
+
for (var name in all) __defProp(target, name, {
|
|
13
|
+
get: all[name],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
17
|
+
return target;
|
|
18
|
+
};
|
|
19
|
+
var MicrosandboxError = class extends Error {
|
|
20
|
+
code;
|
|
21
|
+
constructor(code, message, options) {
|
|
22
|
+
super(message, options);
|
|
23
|
+
this.code = code;
|
|
24
|
+
this.name = new.target.name;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var IoError = class extends MicrosandboxError {
|
|
28
|
+
constructor(message, options) {
|
|
29
|
+
super("io", message, options);
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
var HttpError = class extends MicrosandboxError {
|
|
33
|
+
constructor(message, options) {
|
|
34
|
+
super("http", message, options);
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
var LibkrunfwNotFoundError = class extends MicrosandboxError {
|
|
38
|
+
constructor(message, options) {
|
|
39
|
+
super("libkrunfwNotFound", message, options);
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
var DatabaseError = class extends MicrosandboxError {
|
|
43
|
+
constructor(message, options) {
|
|
44
|
+
super("database", message, options);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
var InvalidConfigError = class extends MicrosandboxError {
|
|
48
|
+
constructor(message, options) {
|
|
49
|
+
super("invalidConfig", message, options);
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
var SandboxNotFoundError = class extends MicrosandboxError {
|
|
53
|
+
constructor(message, options) {
|
|
54
|
+
super("sandboxNotFound", message, options);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
var SandboxStillRunningError = class extends MicrosandboxError {
|
|
58
|
+
constructor(message, options) {
|
|
59
|
+
super("sandboxStillRunning", message, options);
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
var RuntimeError = class extends MicrosandboxError {
|
|
63
|
+
constructor(message, options) {
|
|
64
|
+
super("runtime", message, options);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
var JsonError = class extends MicrosandboxError {
|
|
68
|
+
constructor(message, options) {
|
|
69
|
+
super("json", message, options);
|
|
70
|
+
}
|
|
71
|
+
};
|
|
72
|
+
var ProtocolError = class extends MicrosandboxError {
|
|
73
|
+
constructor(message, options) {
|
|
74
|
+
super("protocol", message, options);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
var NixError = class extends MicrosandboxError {
|
|
78
|
+
constructor(message, options) {
|
|
79
|
+
super("nix", message, options);
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
var ExecTimeoutError = class extends MicrosandboxError {
|
|
83
|
+
timeoutMs;
|
|
84
|
+
constructor(message, timeoutMs = null, options) {
|
|
85
|
+
super("execTimeout", message, options);
|
|
86
|
+
this.timeoutMs = timeoutMs;
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
var TerminalError = class extends MicrosandboxError {
|
|
90
|
+
constructor(message, options) {
|
|
91
|
+
super("terminal", message, options);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
var SandboxFsError = class extends MicrosandboxError {
|
|
95
|
+
constructor(message, options) {
|
|
96
|
+
super("sandboxFs", message, options);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
var ImageNotFoundError = class extends MicrosandboxError {
|
|
100
|
+
constructor(message, options) {
|
|
101
|
+
super("imageNotFound", message, options);
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
var ImageInUseError = class extends MicrosandboxError {
|
|
105
|
+
constructor(message, options) {
|
|
106
|
+
super("imageInUse", message, options);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
var VolumeNotFoundError = class extends MicrosandboxError {
|
|
110
|
+
constructor(message, options) {
|
|
111
|
+
super("volumeNotFound", message, options);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
var VolumeAlreadyExistsError = class extends MicrosandboxError {
|
|
115
|
+
constructor(message, options) {
|
|
116
|
+
super("volumeAlreadyExists", message, options);
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
var ImageError = class extends MicrosandboxError {
|
|
120
|
+
constructor(message, options) {
|
|
121
|
+
super("image", message, options);
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
var PatchFailedError = class extends MicrosandboxError {
|
|
125
|
+
constructor(message, options) {
|
|
126
|
+
super("patchFailed", message, options);
|
|
127
|
+
}
|
|
128
|
+
};
|
|
129
|
+
var MetricsDisabledError = class extends MicrosandboxError {
|
|
130
|
+
constructor(message, options) {
|
|
131
|
+
super("metricsDisabled", message, options);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
var CustomError = class extends MicrosandboxError {
|
|
135
|
+
constructor(message, options) {
|
|
136
|
+
super("custom", message, options);
|
|
137
|
+
}
|
|
138
|
+
};
|
|
139
|
+
const PATTERN = /^\[(\w+)\] ([\s\S]*)$/;
|
|
140
|
+
const CTORS = new Map([
|
|
141
|
+
["Io", (m, c) => new IoError(m, { cause: c })],
|
|
142
|
+
["Http", (m, c) => new HttpError(m, { cause: c })],
|
|
143
|
+
["LibkrunfwNotFound", (m, c) => new LibkrunfwNotFoundError(m, { cause: c })],
|
|
144
|
+
["Database", (m, c) => new DatabaseError(m, { cause: c })],
|
|
145
|
+
["InvalidConfig", (m, c) => new InvalidConfigError(m, { cause: c })],
|
|
146
|
+
["SandboxNotFound", (m, c) => new SandboxNotFoundError(m, { cause: c })],
|
|
147
|
+
["SandboxStillRunning", (m, c) => new SandboxStillRunningError(m, { cause: c })],
|
|
148
|
+
["Runtime", (m, c) => new RuntimeError(m, { cause: c })],
|
|
149
|
+
["Json", (m, c) => new JsonError(m, { cause: c })],
|
|
150
|
+
["Protocol", (m, c) => new ProtocolError(m, { cause: c })],
|
|
151
|
+
["Nix", (m, c) => new NixError(m, { cause: c })],
|
|
152
|
+
["ExecTimeout", (m, c) => new ExecTimeoutError(m, parseTimeoutMs(m), { cause: c })],
|
|
153
|
+
["Terminal", (m, c) => new TerminalError(m, { cause: c })],
|
|
154
|
+
["SandboxFs", (m, c) => new SandboxFsError(m, { cause: c })],
|
|
155
|
+
["ImageNotFound", (m, c) => new ImageNotFoundError(m, { cause: c })],
|
|
156
|
+
["ImageInUse", (m, c) => new ImageInUseError(m, { cause: c })],
|
|
157
|
+
["VolumeNotFound", (m, c) => new VolumeNotFoundError(m, { cause: c })],
|
|
158
|
+
["VolumeAlreadyExists", (m, c) => new VolumeAlreadyExistsError(m, { cause: c })],
|
|
159
|
+
["Image", (m, c) => new ImageError(m, { cause: c })],
|
|
160
|
+
["PatchFailed", (m, c) => new PatchFailedError(m, { cause: c })],
|
|
161
|
+
["MetricsDisabled", (m, c) => new MetricsDisabledError(m, { cause: c })],
|
|
162
|
+
["Custom", (m, c) => new CustomError(m, { cause: c })]
|
|
163
|
+
]);
|
|
164
|
+
function parseTimeoutMs(message) {
|
|
165
|
+
const m = /(\d+(?:\.\d+)?)\s*(ms|s|m|h)\b/.exec(message);
|
|
166
|
+
if (!m) return null;
|
|
167
|
+
const n = Number(m[1]);
|
|
168
|
+
switch (m[2]) {
|
|
169
|
+
case "ms": return n;
|
|
170
|
+
case "s": return n * 1e3;
|
|
171
|
+
case "m": return n * 6e4;
|
|
172
|
+
case "h": return n * 36e5;
|
|
173
|
+
default: return null;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
function mapNapiError(err) {
|
|
177
|
+
if (!(err instanceof Error)) return err;
|
|
178
|
+
const m = PATTERN.exec(err.message);
|
|
179
|
+
if (!m) return err;
|
|
180
|
+
const ctor = CTORS.get(m[1]);
|
|
181
|
+
if (!ctor) return err;
|
|
182
|
+
return ctor(m[2], err);
|
|
183
|
+
}
|
|
184
|
+
async function withMappedErrors(fn) {
|
|
185
|
+
try {
|
|
186
|
+
return await fn();
|
|
187
|
+
} catch (e) {
|
|
188
|
+
throw mapNapiError(e);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
function detectTriple() {
|
|
192
|
+
const p = process.platform;
|
|
193
|
+
const a = process.arch;
|
|
194
|
+
if (p === "darwin" && a === "arm64") return "darwin-arm64";
|
|
195
|
+
if (p === "linux" && a === "x64") return "linux-x64-gnu";
|
|
196
|
+
if (p === "linux" && a === "arm64") return "linux-arm64-gnu";
|
|
197
|
+
throw new Error(`microsandbox: unsupported platform ${p}-${a}`);
|
|
198
|
+
}
|
|
199
|
+
function resolutionBases() {
|
|
200
|
+
const bases = /* @__PURE__ */ new Set();
|
|
201
|
+
bases.add(require("url").pathToFileURL(__filename).href);
|
|
202
|
+
if (process.argv[1]) bases.add(`file://${process.argv[1]}`);
|
|
203
|
+
bases.add(`file://${process.cwd()}/`);
|
|
204
|
+
return Array.from(bases);
|
|
205
|
+
}
|
|
206
|
+
function resolvePlatformRoot() {
|
|
207
|
+
const triple = detectTriple();
|
|
208
|
+
for (const base of resolutionBases()) try {
|
|
209
|
+
const root = (0, node_path.dirname)((0, node_module.createRequire)(base).resolve(`@superradcompany/microsandbox-${triple}/package.json`));
|
|
210
|
+
if ((0, node_fs.existsSync)((0, node_path.join)(root, "bin", "msb"))) return root;
|
|
211
|
+
} catch {}
|
|
212
|
+
return null;
|
|
213
|
+
}
|
|
214
|
+
let cachedBinDir = null;
|
|
215
|
+
function resolveBinDir() {
|
|
216
|
+
if (cachedBinDir) return cachedBinDir;
|
|
217
|
+
const root = resolvePlatformRoot();
|
|
218
|
+
if (root) {
|
|
219
|
+
cachedBinDir = (0, node_path.join)(root, "bin");
|
|
220
|
+
return cachedBinDir;
|
|
221
|
+
}
|
|
222
|
+
cachedBinDir = (0, node_path.join)(process.env.HOME ?? "", ".microsandbox", "bin");
|
|
223
|
+
return cachedBinDir;
|
|
224
|
+
}
|
|
225
|
+
/** Path to the bundled `msb` binary, or null if not yet installed. */
|
|
226
|
+
function msbPath() {
|
|
227
|
+
const explicit = process.env.MSB_PATH;
|
|
228
|
+
if (explicit) return (0, node_fs.existsSync)(explicit) ? explicit : null;
|
|
229
|
+
const p = (0, node_path.join)(resolveBinDir(), "msb");
|
|
230
|
+
return (0, node_fs.existsSync)(p) ? p : null;
|
|
231
|
+
}
|
|
232
|
+
const resolvedMsbPath = process.env.MSB_PATH || msbPath();
|
|
233
|
+
const native = (0, node_module.createRequire)(require("url").pathToFileURL(__filename).href)("../../native/index.cjs");
|
|
234
|
+
if (resolvedMsbPath) native.setRuntimeMsbPath?.(resolvedMsbPath);
|
|
235
|
+
const napi = native;
|
|
236
|
+
async function* mapAsyncIterable(source, normalize) {
|
|
237
|
+
for (;;) {
|
|
238
|
+
const raw = await withMappedErrors(() => source.recv());
|
|
239
|
+
if (raw === null) return;
|
|
240
|
+
yield normalize(raw);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
function normalizeExecEvent(raw) {
|
|
244
|
+
switch (raw.eventType) {
|
|
245
|
+
case "started":
|
|
246
|
+
if (typeof raw.pid !== "number") throw new Error("exec event: missing pid on Started");
|
|
247
|
+
return {
|
|
248
|
+
kind: "started",
|
|
249
|
+
pid: raw.pid
|
|
250
|
+
};
|
|
251
|
+
case "stdout":
|
|
252
|
+
if (!raw.data) throw new Error("exec event: missing data on Stdout");
|
|
253
|
+
return {
|
|
254
|
+
kind: "stdout",
|
|
255
|
+
data: raw.data
|
|
256
|
+
};
|
|
257
|
+
case "stderr":
|
|
258
|
+
if (!raw.data) throw new Error("exec event: missing data on Stderr");
|
|
259
|
+
return {
|
|
260
|
+
kind: "stderr",
|
|
261
|
+
data: raw.data
|
|
262
|
+
};
|
|
263
|
+
case "exited":
|
|
264
|
+
if (typeof raw.code !== "number") throw new Error("exec event: missing code on Exited");
|
|
265
|
+
return {
|
|
266
|
+
kind: "exited",
|
|
267
|
+
code: raw.code
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
var ExecOutput = class {
|
|
272
|
+
inner;
|
|
273
|
+
/** @internal */
|
|
274
|
+
constructor(inner) {
|
|
275
|
+
this.inner = inner;
|
|
276
|
+
}
|
|
277
|
+
get code() {
|
|
278
|
+
return this.inner.code;
|
|
279
|
+
}
|
|
280
|
+
get success() {
|
|
281
|
+
return this.inner.success;
|
|
282
|
+
}
|
|
283
|
+
get status() {
|
|
284
|
+
return {
|
|
285
|
+
code: this.inner.code,
|
|
286
|
+
success: this.inner.success
|
|
287
|
+
};
|
|
288
|
+
}
|
|
289
|
+
/** Decode stdout as UTF-8. Lossy on invalid sequences. */
|
|
290
|
+
stdout() {
|
|
291
|
+
return this.inner.stdout();
|
|
292
|
+
}
|
|
293
|
+
/** Decode stderr as UTF-8. Lossy on invalid sequences. */
|
|
294
|
+
stderr() {
|
|
295
|
+
return this.inner.stderr();
|
|
296
|
+
}
|
|
297
|
+
/** Raw stdout bytes. */
|
|
298
|
+
stdoutBytes() {
|
|
299
|
+
return new Uint8Array(this.inner.stdoutBytes());
|
|
300
|
+
}
|
|
301
|
+
/** Raw stderr bytes. */
|
|
302
|
+
stderrBytes() {
|
|
303
|
+
return new Uint8Array(this.inner.stderrBytes());
|
|
304
|
+
}
|
|
305
|
+
};
|
|
306
|
+
var ExecSink = class {
|
|
307
|
+
inner;
|
|
308
|
+
closed = false;
|
|
309
|
+
/** @internal */
|
|
310
|
+
constructor(inner) {
|
|
311
|
+
this.inner = inner;
|
|
312
|
+
}
|
|
313
|
+
/** Write data to the process's stdin. */
|
|
314
|
+
async write(data) {
|
|
315
|
+
const buf = typeof data === "string" ? Buffer.from(data, "utf8") : Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
316
|
+
await withMappedErrors(() => this.inner.write(buf));
|
|
317
|
+
}
|
|
318
|
+
/** Send EOF. Idempotent. */
|
|
319
|
+
async close() {
|
|
320
|
+
if (this.closed) return;
|
|
321
|
+
this.closed = true;
|
|
322
|
+
await withMappedErrors(() => this.inner.close());
|
|
323
|
+
}
|
|
324
|
+
async [Symbol.asyncDispose]() {
|
|
325
|
+
await this.close();
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
var ExecHandle = class {
|
|
329
|
+
inner;
|
|
330
|
+
stdinTaken = false;
|
|
331
|
+
/** @internal */
|
|
332
|
+
constructor(inner) {
|
|
333
|
+
this.inner = inner;
|
|
334
|
+
}
|
|
335
|
+
/** Receive the next event, or `null` once the stream ends. */
|
|
336
|
+
async recv() {
|
|
337
|
+
const raw = await withMappedErrors(() => this.inner.recv());
|
|
338
|
+
return raw === null ? null : normalizeExecEvent(raw);
|
|
339
|
+
}
|
|
340
|
+
/** Take ownership of the stdin sink. Returns `null` after the first call. */
|
|
341
|
+
async takeStdin() {
|
|
342
|
+
if (this.stdinTaken) return null;
|
|
343
|
+
const raw = await withMappedErrors(() => this.inner.takeStdin());
|
|
344
|
+
if (raw === null) return null;
|
|
345
|
+
this.stdinTaken = true;
|
|
346
|
+
return new ExecSink(raw);
|
|
347
|
+
}
|
|
348
|
+
/** Wait for the process to exit. */
|
|
349
|
+
async wait() {
|
|
350
|
+
return await withMappedErrors(() => this.inner.wait());
|
|
351
|
+
}
|
|
352
|
+
/** Drain stdout/stderr and wait for exit. */
|
|
353
|
+
async collect() {
|
|
354
|
+
return new ExecOutput(await withMappedErrors(() => this.inner.collect()));
|
|
355
|
+
}
|
|
356
|
+
async signal(signal) {
|
|
357
|
+
await withMappedErrors(() => this.inner.signal(signal));
|
|
358
|
+
}
|
|
359
|
+
async kill() {
|
|
360
|
+
await withMappedErrors(() => this.inner.kill());
|
|
361
|
+
}
|
|
362
|
+
[Symbol.asyncIterator]() {
|
|
363
|
+
return mapAsyncIterable(this.inner, normalizeExecEvent)[Symbol.asyncIterator]();
|
|
364
|
+
}
|
|
365
|
+
async [Symbol.asyncDispose]() {
|
|
366
|
+
await withMappedErrors(() => this.inner.kill()).catch(() => void 0);
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
var FsReadStream = class {
|
|
370
|
+
inner;
|
|
371
|
+
done = false;
|
|
372
|
+
/** @internal */
|
|
373
|
+
constructor(inner) {
|
|
374
|
+
this.inner = inner;
|
|
375
|
+
}
|
|
376
|
+
async recv() {
|
|
377
|
+
if (this.done) return null;
|
|
378
|
+
const buf = await withMappedErrors(() => this.inner.recv());
|
|
379
|
+
if (buf === null) {
|
|
380
|
+
this.done = true;
|
|
381
|
+
return null;
|
|
382
|
+
}
|
|
383
|
+
return new Uint8Array(buf);
|
|
384
|
+
}
|
|
385
|
+
/** Drain the stream into a single buffer. */
|
|
386
|
+
async collect() {
|
|
387
|
+
const chunks = [];
|
|
388
|
+
let total = 0;
|
|
389
|
+
for (;;) {
|
|
390
|
+
const c = await this.recv();
|
|
391
|
+
if (c === null) break;
|
|
392
|
+
chunks.push(c);
|
|
393
|
+
total += c.byteLength;
|
|
394
|
+
}
|
|
395
|
+
const out = new Uint8Array(total);
|
|
396
|
+
let off = 0;
|
|
397
|
+
for (const c of chunks) {
|
|
398
|
+
out.set(c, off);
|
|
399
|
+
off += c.byteLength;
|
|
400
|
+
}
|
|
401
|
+
return out;
|
|
402
|
+
}
|
|
403
|
+
[Symbol.asyncIterator]() {
|
|
404
|
+
return mapAsyncIterable({ recv: () => this.inner.recv() }, (buf) => new Uint8Array(buf))[Symbol.asyncIterator]();
|
|
405
|
+
}
|
|
406
|
+
async [Symbol.asyncDispose]() {
|
|
407
|
+
this.done = true;
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
var FsWriteSink = class {
|
|
411
|
+
inner;
|
|
412
|
+
closed = false;
|
|
413
|
+
/** @internal */
|
|
414
|
+
constructor(inner) {
|
|
415
|
+
this.inner = inner;
|
|
416
|
+
}
|
|
417
|
+
async write(data) {
|
|
418
|
+
const buf = typeof data === "string" ? Buffer.from(data, "utf8") : Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
419
|
+
await withMappedErrors(() => this.inner.write(buf));
|
|
420
|
+
}
|
|
421
|
+
async close() {
|
|
422
|
+
if (this.closed) return;
|
|
423
|
+
this.closed = true;
|
|
424
|
+
await withMappedErrors(() => this.inner.close());
|
|
425
|
+
}
|
|
426
|
+
async [Symbol.asyncDispose]() {
|
|
427
|
+
await this.close();
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
var SandboxFs = class {
|
|
431
|
+
inner;
|
|
432
|
+
/** @internal */
|
|
433
|
+
constructor(inner) {
|
|
434
|
+
this.inner = inner;
|
|
435
|
+
}
|
|
436
|
+
async read(path) {
|
|
437
|
+
const buf = await withMappedErrors(() => this.inner.read(path));
|
|
438
|
+
return new Uint8Array(buf);
|
|
439
|
+
}
|
|
440
|
+
async readToString(path) {
|
|
441
|
+
return await withMappedErrors(() => this.inner.readString(path));
|
|
442
|
+
}
|
|
443
|
+
async readStream(path) {
|
|
444
|
+
return new FsReadStream(await withMappedErrors(() => this.inner.readStream(path)));
|
|
445
|
+
}
|
|
446
|
+
async writeStream(path) {
|
|
447
|
+
return new FsWriteSink(await withMappedErrors(() => this.inner.writeStream(path)));
|
|
448
|
+
}
|
|
449
|
+
async write(path, data) {
|
|
450
|
+
const buf = typeof data === "string" ? Buffer.from(data, "utf8") : Buffer.from(data.buffer, data.byteOffset, data.byteLength);
|
|
451
|
+
await withMappedErrors(() => this.inner.write(path, buf));
|
|
452
|
+
}
|
|
453
|
+
async list(path) {
|
|
454
|
+
return (await withMappedErrors(() => this.inner.list(path))).map(napiFsEntryToFsEntry);
|
|
455
|
+
}
|
|
456
|
+
async mkdir(path) {
|
|
457
|
+
await withMappedErrors(() => this.inner.mkdir(path));
|
|
458
|
+
}
|
|
459
|
+
async removeDir(path) {
|
|
460
|
+
await withMappedErrors(() => this.inner.removeDir(path));
|
|
461
|
+
}
|
|
462
|
+
async remove(path) {
|
|
463
|
+
await withMappedErrors(() => this.inner.remove(path));
|
|
464
|
+
}
|
|
465
|
+
async copy(from, to) {
|
|
466
|
+
await withMappedErrors(() => this.inner.copy(from, to));
|
|
467
|
+
}
|
|
468
|
+
async rename(from, to) {
|
|
469
|
+
await withMappedErrors(() => this.inner.rename(from, to));
|
|
470
|
+
}
|
|
471
|
+
async stat(path) {
|
|
472
|
+
return napiFsMetadataToFsMetadata(await withMappedErrors(() => this.inner.stat(path)));
|
|
473
|
+
}
|
|
474
|
+
async exists(path) {
|
|
475
|
+
return await withMappedErrors(() => this.inner.exists(path));
|
|
476
|
+
}
|
|
477
|
+
/** Copy a host file into the guest. */
|
|
478
|
+
async copyFromHost(hostPath, guestPath) {
|
|
479
|
+
await withMappedErrors(() => this.inner.copyFromHost(hostPath, guestPath));
|
|
480
|
+
}
|
|
481
|
+
/** Copy a guest file out to the host. */
|
|
482
|
+
async copyToHost(guestPath, hostPath) {
|
|
483
|
+
await withMappedErrors(() => this.inner.copyToHost(guestPath, hostPath));
|
|
484
|
+
}
|
|
485
|
+
};
|
|
486
|
+
function napiFsEntryToFsEntry(e) {
|
|
487
|
+
return {
|
|
488
|
+
path: e.path,
|
|
489
|
+
kind: e.kind,
|
|
490
|
+
size: e.size,
|
|
491
|
+
mode: e.mode,
|
|
492
|
+
modified: typeof e.modified === "number" ? new Date(e.modified) : null
|
|
493
|
+
};
|
|
494
|
+
}
|
|
495
|
+
function napiFsMetadataToFsMetadata(m) {
|
|
496
|
+
return {
|
|
497
|
+
kind: m.kind,
|
|
498
|
+
size: m.size,
|
|
499
|
+
mode: m.mode,
|
|
500
|
+
readonly: m.readonly,
|
|
501
|
+
modified: typeof m.modified === "number" ? new Date(m.modified) : null,
|
|
502
|
+
created: typeof m.created === "number" ? new Date(m.created) : null
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
/**
|
|
506
|
+
* One captured log entry from `exec.log`.
|
|
507
|
+
*
|
|
508
|
+
* Bytes are exposed via `data` as a `Uint8Array`. Use `text()` for a
|
|
509
|
+
* UTF-8-lossy decode.
|
|
510
|
+
*/
|
|
511
|
+
var LogEntry = class {
|
|
512
|
+
/** Wall-clock capture time on the host. */
|
|
513
|
+
timestamp;
|
|
514
|
+
/** `"stdout"`, `"stderr"`, `"output"`, or `"system"`. */
|
|
515
|
+
source;
|
|
516
|
+
/**
|
|
517
|
+
* Exec session correlation id. `null` for `system` lifecycle
|
|
518
|
+
* markers, which aren't tied to a specific session. Useful when
|
|
519
|
+
* grouping entries by session: `entries.filter(e => e.sessionId
|
|
520
|
+
* === 42)`.
|
|
521
|
+
*/
|
|
522
|
+
sessionId;
|
|
523
|
+
/** The captured chunk's bytes. */
|
|
524
|
+
data;
|
|
525
|
+
constructor(timestamp, source, sessionId, data) {
|
|
526
|
+
this.timestamp = timestamp;
|
|
527
|
+
this.source = source;
|
|
528
|
+
this.sessionId = sessionId;
|
|
529
|
+
this.data = data;
|
|
530
|
+
}
|
|
531
|
+
/** UTF-8 decode of {@link data} (lossy — invalid bytes are replaced). */
|
|
532
|
+
text() {
|
|
533
|
+
return new TextDecoder("utf-8", { fatal: false }).decode(this.data);
|
|
534
|
+
}
|
|
535
|
+
};
|
|
536
|
+
/** @internal */
|
|
537
|
+
function logEntryFromNapi(raw) {
|
|
538
|
+
const source = raw.source;
|
|
539
|
+
return new LogEntry(new Date(raw.timestampMs), source, raw.sessionId, new Uint8Array(raw.data));
|
|
540
|
+
}
|
|
541
|
+
/** @internal */
|
|
542
|
+
function logReadOptionsToNapi(opts) {
|
|
543
|
+
if (!opts) return void 0;
|
|
544
|
+
return {
|
|
545
|
+
tail: opts.tail,
|
|
546
|
+
sinceMs: opts.since?.getTime(),
|
|
547
|
+
untilMs: opts.until?.getTime(),
|
|
548
|
+
sources: opts.sources ? Array.from(opts.sources) : void 0
|
|
549
|
+
};
|
|
550
|
+
}
|
|
551
|
+
function metricsFromNapi(raw) {
|
|
552
|
+
return {
|
|
553
|
+
cpuPercent: raw.cpuPercent,
|
|
554
|
+
memoryBytes: raw.memoryBytes,
|
|
555
|
+
memoryLimitBytes: raw.memoryLimitBytes,
|
|
556
|
+
diskReadBytes: raw.diskReadBytes,
|
|
557
|
+
diskWriteBytes: raw.diskWriteBytes,
|
|
558
|
+
netRxBytes: raw.netRxBytes,
|
|
559
|
+
netTxBytes: raw.netTxBytes,
|
|
560
|
+
uptimeMs: raw.uptimeMs,
|
|
561
|
+
timestamp: new Date(raw.timestampMs)
|
|
562
|
+
};
|
|
563
|
+
}
|
|
564
|
+
const READ_ONLY_MSG$1 = "SnapshotHandle is read-only — fetch a live handle via Snapshot.get(name) for lifecycle methods.";
|
|
565
|
+
/**
|
|
566
|
+
* Lightweight handle backed by an index row.
|
|
567
|
+
*
|
|
568
|
+
* Returned by `Snapshot.list()` and `Snapshot.get(...)`. Values are
|
|
569
|
+
* snapshotted from the index at construction time — call
|
|
570
|
+
* `Snapshot.get(...)` again for a fresh reading if needed.
|
|
571
|
+
*/
|
|
572
|
+
var SnapshotHandle = class {
|
|
573
|
+
inner;
|
|
574
|
+
/** Manifest digest (`sha256:hex`) — canonical identity. */
|
|
575
|
+
digest;
|
|
576
|
+
/** Convenience name. `null` for digest-only entries. */
|
|
577
|
+
name;
|
|
578
|
+
/** Manifest digest of the parent snapshot, or `null` for a root. */
|
|
579
|
+
parentDigest;
|
|
580
|
+
/** Image reference the snapshot was taken from. */
|
|
581
|
+
imageRef;
|
|
582
|
+
/** On-disk format of the upper layer. */
|
|
583
|
+
format;
|
|
584
|
+
/** Apparent size of the upper file at index time. */
|
|
585
|
+
sizeBytes;
|
|
586
|
+
/** Snapshot creation time (from manifest). */
|
|
587
|
+
createdAt;
|
|
588
|
+
/** Local artifact directory path. */
|
|
589
|
+
path;
|
|
590
|
+
/** @internal */
|
|
591
|
+
constructor(inner) {
|
|
592
|
+
this.inner = inner;
|
|
593
|
+
this.digest = inner.digest;
|
|
594
|
+
this.name = inner.name ?? null;
|
|
595
|
+
this.parentDigest = inner.parentDigest ?? null;
|
|
596
|
+
this.imageRef = inner.imageRef;
|
|
597
|
+
this.format = inner.format;
|
|
598
|
+
this.sizeBytes = sizeBytesToBigInt(inner.sizeBytes);
|
|
599
|
+
this.createdAt = new Date(inner.createdAt);
|
|
600
|
+
this.path = inner.path;
|
|
601
|
+
}
|
|
602
|
+
/** Open and metadata-validate the underlying artifact. */
|
|
603
|
+
async open() {
|
|
604
|
+
if (typeof this.inner.open !== "function") throw new Error(READ_ONLY_MSG$1);
|
|
605
|
+
return new Snapshot(await withMappedErrors(() => this.inner.open()));
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Remove the artifact and its index row. Refuses if the snapshot
|
|
609
|
+
* has indexed children unless `force` is set.
|
|
610
|
+
*/
|
|
611
|
+
async remove(opts) {
|
|
612
|
+
if (typeof this.inner.remove !== "function") throw new Error(READ_ONLY_MSG$1);
|
|
613
|
+
await withMappedErrors(() => this.inner.remove({ force: opts?.force ?? false }));
|
|
614
|
+
}
|
|
615
|
+
};
|
|
616
|
+
function sizeBytesToBigInt(v) {
|
|
617
|
+
if (v === null || v === void 0) return null;
|
|
618
|
+
return typeof v === "bigint" ? v : BigInt(v);
|
|
619
|
+
}
|
|
620
|
+
/** @internal */
|
|
621
|
+
function snapshotInfoToHandle(info) {
|
|
622
|
+
return new SnapshotHandle(info);
|
|
623
|
+
}
|
|
624
|
+
/**
|
|
625
|
+
* A snapshot artifact on disk.
|
|
626
|
+
*
|
|
627
|
+
* Returned by `Snapshot.builder(name).create()`, `Snapshot.open(...)`,
|
|
628
|
+
* `SandboxHandle.snapshot(name)`, and `SandboxHandle.snapshotTo(path)`.
|
|
629
|
+
*
|
|
630
|
+
* The artifact is a directory containing `manifest.json` and the
|
|
631
|
+
* captured `upper.ext4`. The directory is the source of truth; the
|
|
632
|
+
* local DB index (used for queries like `Snapshot.list()`) is just a
|
|
633
|
+
* cache and is rebuildable via `Snapshot.reindex()`.
|
|
634
|
+
*/
|
|
635
|
+
var Snapshot = class Snapshot {
|
|
636
|
+
/** @internal */
|
|
637
|
+
inner;
|
|
638
|
+
/** @internal */
|
|
639
|
+
constructor(inner) {
|
|
640
|
+
this.inner = inner;
|
|
641
|
+
}
|
|
642
|
+
/**
|
|
643
|
+
* Begin building a new snapshot of `sourceSandbox` (must be stopped).
|
|
644
|
+
*
|
|
645
|
+
* The bare-name and explicit-path destinations are mutually
|
|
646
|
+
* exclusive — call exactly one of `.name(s)` or `.path(p)`.
|
|
647
|
+
*/
|
|
648
|
+
static builder(sourceSandbox) {
|
|
649
|
+
const nb = new napi.SnapshotBuilder(sourceSandbox);
|
|
650
|
+
const origCreate = nb.create.bind(nb);
|
|
651
|
+
nb.create = async () => {
|
|
652
|
+
return new Snapshot(await withMappedErrors(() => origCreate()));
|
|
653
|
+
};
|
|
654
|
+
return nb;
|
|
655
|
+
}
|
|
656
|
+
/**
|
|
657
|
+
* Open an existing snapshot artifact. Bare names resolve under the
|
|
658
|
+
* default snapshots directory; anything else is treated as a path.
|
|
659
|
+
*
|
|
660
|
+
* Cheap metadata validation only — does not read the upper file.
|
|
661
|
+
* Use `verify()` for content checks.
|
|
662
|
+
*/
|
|
663
|
+
static async open(pathOrName) {
|
|
664
|
+
return new Snapshot(await withMappedErrors(() => napi.Snapshot.open(pathOrName)));
|
|
665
|
+
}
|
|
666
|
+
/** Look up an indexed snapshot by digest, name, or path. */
|
|
667
|
+
static async get(nameOrDigest) {
|
|
668
|
+
return new SnapshotHandle(await withMappedErrors(() => napi.Snapshot.get(nameOrDigest)));
|
|
669
|
+
}
|
|
670
|
+
/** List indexed snapshots from the local DB cache. */
|
|
671
|
+
static async list() {
|
|
672
|
+
return (await withMappedErrors(() => napi.Snapshot.list())).map(snapshotInfoToHandle);
|
|
673
|
+
}
|
|
674
|
+
/**
|
|
675
|
+
* Walk a directory and parse each subdirectory's manifest. Does
|
|
676
|
+
* not touch the index — useful for inspecting external snapshot
|
|
677
|
+
* collections that were never imported. Skips entries that don't
|
|
678
|
+
* look like snapshot artifacts.
|
|
679
|
+
*/
|
|
680
|
+
static async listDir(dir) {
|
|
681
|
+
return (await withMappedErrors(() => napi.Snapshot.listDir(dir))).map((s) => new Snapshot(s));
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* Remove a snapshot by path, name, or digest. Refuses if the
|
|
685
|
+
* snapshot has indexed children unless `force` is set.
|
|
686
|
+
*/
|
|
687
|
+
static async remove(pathOrName, opts) {
|
|
688
|
+
await withMappedErrors(() => napi.Snapshot.remove(pathOrName, { force: opts?.force ?? false }));
|
|
689
|
+
}
|
|
690
|
+
/**
|
|
691
|
+
* Walk the snapshots directory (default: configured snapshots dir)
|
|
692
|
+
* and rebuild the local index. Returns the number of artifacts
|
|
693
|
+
* indexed.
|
|
694
|
+
*/
|
|
695
|
+
static async reindex(dir) {
|
|
696
|
+
return withMappedErrors(() => napi.Snapshot.reindex(dir));
|
|
697
|
+
}
|
|
698
|
+
/**
|
|
699
|
+
* Bundle a snapshot into a `.tar.zst` archive. When the snapshot
|
|
700
|
+
* has no integrity hash yet, one is computed and embedded in the
|
|
701
|
+
* bundled manifest so the receiver can verify.
|
|
702
|
+
*/
|
|
703
|
+
static async export(nameOrPath, out, opts) {
|
|
704
|
+
await withMappedErrors(() => napi.Snapshot.export(nameOrPath, out, opts));
|
|
705
|
+
}
|
|
706
|
+
/**
|
|
707
|
+
* Unpack a snapshot archive (`.tar.zst` or `.tar`) into the
|
|
708
|
+
* snapshots directory, verifying recorded integrity on the way in.
|
|
709
|
+
* Compression is detected from magic bytes.
|
|
710
|
+
*/
|
|
711
|
+
static async import(archive, dest) {
|
|
712
|
+
return new SnapshotHandle(await withMappedErrors(() => napi.Snapshot.import(archive, dest)));
|
|
713
|
+
}
|
|
714
|
+
/** Path to the artifact directory. */
|
|
715
|
+
get path() {
|
|
716
|
+
return this.inner.path;
|
|
717
|
+
}
|
|
718
|
+
/** Canonical content digest (`sha256:hex`). The snapshot's identity. */
|
|
719
|
+
get digest() {
|
|
720
|
+
return this.inner.digest;
|
|
721
|
+
}
|
|
722
|
+
/** Apparent size of the captured upper layer in bytes (sparse on disk). */
|
|
723
|
+
get sizeBytes() {
|
|
724
|
+
return this.inner.sizeBytes;
|
|
725
|
+
}
|
|
726
|
+
/** Image reference the snapshot was taken from. */
|
|
727
|
+
get imageRef() {
|
|
728
|
+
return this.inner.imageRef;
|
|
729
|
+
}
|
|
730
|
+
/** OCI manifest digest of the pinned image. */
|
|
731
|
+
get imageManifestDigest() {
|
|
732
|
+
return this.inner.imageManifestDigest;
|
|
733
|
+
}
|
|
734
|
+
/** On-disk format of the upper layer. */
|
|
735
|
+
get format() {
|
|
736
|
+
return this.inner.format;
|
|
737
|
+
}
|
|
738
|
+
/** Filesystem type inside the upper (e.g. `"ext4"`). */
|
|
739
|
+
get fstype() {
|
|
740
|
+
return this.inner.fstype;
|
|
741
|
+
}
|
|
742
|
+
/** Manifest digest of the parent snapshot, or `null` for a root. */
|
|
743
|
+
get parent() {
|
|
744
|
+
return this.inner.parent ?? null;
|
|
745
|
+
}
|
|
746
|
+
/** RFC 3339 timestamp when the snapshot was created. */
|
|
747
|
+
get createdAt() {
|
|
748
|
+
return this.inner.createdAt;
|
|
749
|
+
}
|
|
750
|
+
/** User-supplied labels (sorted by key in canonical form). */
|
|
751
|
+
get labels() {
|
|
752
|
+
return Object.entries(this.inner.labels);
|
|
753
|
+
}
|
|
754
|
+
/** Best-effort source-sandbox name, if recorded. */
|
|
755
|
+
get sourceSandbox() {
|
|
756
|
+
return this.inner.sourceSandbox ?? null;
|
|
757
|
+
}
|
|
758
|
+
/**
|
|
759
|
+
* Recompute the upper layer's content hash and compare against the
|
|
760
|
+
* manifest. Walks data extents only, so a 4 GiB sparse file with a
|
|
761
|
+
* few MB of data verifies in milliseconds.
|
|
762
|
+
*
|
|
763
|
+
* Returns `{ upper: { kind: "notRecorded" } }` when the manifest
|
|
764
|
+
* has no integrity hash recorded.
|
|
765
|
+
*/
|
|
766
|
+
async verify() {
|
|
767
|
+
return verifyReportToTs(await withMappedErrors(() => this.inner.verify()));
|
|
768
|
+
}
|
|
769
|
+
};
|
|
770
|
+
/** @internal */
|
|
771
|
+
function verifyReportToTs(r) {
|
|
772
|
+
if (r.upperKind === "verified") return {
|
|
773
|
+
digest: r.digest,
|
|
774
|
+
path: r.path,
|
|
775
|
+
upper: {
|
|
776
|
+
kind: "verified",
|
|
777
|
+
algorithm: r.upperAlgorithm ?? "",
|
|
778
|
+
digest: r.upperDigest ?? ""
|
|
779
|
+
}
|
|
780
|
+
};
|
|
781
|
+
return {
|
|
782
|
+
digest: r.digest,
|
|
783
|
+
path: r.path,
|
|
784
|
+
upper: { kind: "notRecorded" }
|
|
785
|
+
};
|
|
786
|
+
}
|
|
787
|
+
const READ_ONLY_MSG = "SandboxHandle is read-only — fetch a live handle via Sandbox.get(name) for lifecycle methods.";
|
|
788
|
+
var SandboxHandle = class {
|
|
789
|
+
inner;
|
|
790
|
+
name;
|
|
791
|
+
status;
|
|
792
|
+
configJson;
|
|
793
|
+
createdAt;
|
|
794
|
+
updatedAt;
|
|
795
|
+
/** @internal */
|
|
796
|
+
constructor(inner) {
|
|
797
|
+
this.inner = inner;
|
|
798
|
+
this.name = inner.name;
|
|
799
|
+
this.status = inner.status;
|
|
800
|
+
this.configJson = inner.configJson;
|
|
801
|
+
this.createdAt = typeof inner.createdAt === "number" ? new Date(inner.createdAt) : null;
|
|
802
|
+
this.updatedAt = typeof inner.updatedAt === "number" ? new Date(inner.updatedAt) : null;
|
|
803
|
+
}
|
|
804
|
+
requireLive() {
|
|
805
|
+
if (!isHandle(this.inner)) throw new Error(READ_ONLY_MSG);
|
|
806
|
+
return this.inner;
|
|
807
|
+
}
|
|
808
|
+
/** Get point-in-time metrics. */
|
|
809
|
+
async metrics() {
|
|
810
|
+
const live = this.requireLive();
|
|
811
|
+
return metricsFromNapi(await withMappedErrors(() => live.metrics()));
|
|
812
|
+
}
|
|
813
|
+
/** Resume in attached mode. */
|
|
814
|
+
async start() {
|
|
815
|
+
const live = this.requireLive();
|
|
816
|
+
return new Sandbox(await withMappedErrors(() => live.start()), this.name, true);
|
|
817
|
+
}
|
|
818
|
+
/** Resume in detached mode. */
|
|
819
|
+
async startDetached() {
|
|
820
|
+
const live = this.requireLive();
|
|
821
|
+
return new Sandbox(await withMappedErrors(() => live.startDetached()), this.name, false);
|
|
822
|
+
}
|
|
823
|
+
/** Connect to an already-running sandbox without taking lifecycle ownership. */
|
|
824
|
+
async connect() {
|
|
825
|
+
const live = this.requireLive();
|
|
826
|
+
return new Sandbox(await withMappedErrors(() => live.connect()), this.name, false);
|
|
827
|
+
}
|
|
828
|
+
async stop() {
|
|
829
|
+
const live = this.requireLive();
|
|
830
|
+
await withMappedErrors(() => live.stop());
|
|
831
|
+
}
|
|
832
|
+
async kill() {
|
|
833
|
+
const live = this.requireLive();
|
|
834
|
+
await withMappedErrors(() => live.kill());
|
|
835
|
+
}
|
|
836
|
+
async remove() {
|
|
837
|
+
const live = this.requireLive();
|
|
838
|
+
await withMappedErrors(() => live.remove());
|
|
839
|
+
}
|
|
840
|
+
/**
|
|
841
|
+
* Read captured output from `exec.log` for this sandbox.
|
|
842
|
+
*
|
|
843
|
+
* Works without starting the sandbox. Defaults to user output:
|
|
844
|
+
* `stdout`, `stderr`, and pty-merged `output`. Pass
|
|
845
|
+
* `{ sources: ["system"] }` for runtime/kernel diagnostics or
|
|
846
|
+
* `{ sources: ["all"] }` for everything.
|
|
847
|
+
*/
|
|
848
|
+
async logs(opts) {
|
|
849
|
+
const live = this.requireLive();
|
|
850
|
+
const napiOpts = logReadOptionsToNapi(opts);
|
|
851
|
+
return (await withMappedErrors(() => live.logs(napiOpts))).map(logEntryFromNapi);
|
|
852
|
+
}
|
|
853
|
+
/**
|
|
854
|
+
* Snapshot this (stopped) sandbox under a bare name. Resolves under
|
|
855
|
+
* `~/.microsandbox/snapshots/<name>/`. For an explicit filesystem
|
|
856
|
+
* destination, see `snapshotTo`.
|
|
857
|
+
*
|
|
858
|
+
* The sandbox must be stopped (or crashed); running sandboxes are
|
|
859
|
+
* rejected with a `SnapshotSandboxRunning` error.
|
|
860
|
+
*/
|
|
861
|
+
async snapshot(name) {
|
|
862
|
+
const live = this.requireLive();
|
|
863
|
+
return new Snapshot(await withMappedErrors(() => live.snapshot(name)));
|
|
864
|
+
}
|
|
865
|
+
/** Snapshot this (stopped) sandbox to an explicit filesystem path. */
|
|
866
|
+
async snapshotTo(path) {
|
|
867
|
+
const live = this.requireLive();
|
|
868
|
+
return new Snapshot(await withMappedErrors(() => live.snapshotTo(path)));
|
|
869
|
+
}
|
|
870
|
+
};
|
|
871
|
+
function isHandle(v) {
|
|
872
|
+
return typeof v.start === "function";
|
|
873
|
+
}
|
|
874
|
+
/** @internal */
|
|
875
|
+
function sandboxInfoToHandle(info) {
|
|
876
|
+
return new SandboxHandle(info);
|
|
877
|
+
}
|
|
878
|
+
var MetricsStream = class {
|
|
879
|
+
inner;
|
|
880
|
+
done = false;
|
|
881
|
+
/** @internal */
|
|
882
|
+
constructor(inner) {
|
|
883
|
+
this.inner = inner;
|
|
884
|
+
}
|
|
885
|
+
async recv() {
|
|
886
|
+
if (this.done) return null;
|
|
887
|
+
const raw = await withMappedErrors(() => this.inner.recv());
|
|
888
|
+
if (raw === null) {
|
|
889
|
+
this.done = true;
|
|
890
|
+
return null;
|
|
891
|
+
}
|
|
892
|
+
return metricsFromNapi(raw);
|
|
893
|
+
}
|
|
894
|
+
[Symbol.asyncIterator]() {
|
|
895
|
+
return mapAsyncIterable({ recv: () => this.inner.recv() }, metricsFromNapi)[Symbol.asyncIterator]();
|
|
896
|
+
}
|
|
897
|
+
async [Symbol.asyncDispose]() {
|
|
898
|
+
this.done = true;
|
|
899
|
+
}
|
|
900
|
+
};
|
|
901
|
+
/**
|
|
902
|
+
* Pair returned by `SandboxBuilder.createWithPullProgress()` —
|
|
903
|
+
* the per-layer progress event stream plus a method to await the
|
|
904
|
+
* final `Sandbox`.
|
|
905
|
+
*/
|
|
906
|
+
var PullProgressCreate = class {
|
|
907
|
+
/** @internal */
|
|
908
|
+
inner;
|
|
909
|
+
/** @internal */
|
|
910
|
+
name;
|
|
911
|
+
/** @internal */
|
|
912
|
+
attached;
|
|
913
|
+
/** @internal */
|
|
914
|
+
constructor(inner, name, attached) {
|
|
915
|
+
this.inner = inner;
|
|
916
|
+
this.name = name;
|
|
917
|
+
this.attached = attached;
|
|
918
|
+
}
|
|
919
|
+
/**
|
|
920
|
+
* The progress event stream. Iterate with `for await...of` or poll
|
|
921
|
+
* with `.recv()`. The stream closes once the pull completes.
|
|
922
|
+
*/
|
|
923
|
+
get progress() {
|
|
924
|
+
return this.inner.progress;
|
|
925
|
+
}
|
|
926
|
+
/**
|
|
927
|
+
* Async iterator helper: equivalent to `for await (const ev of c.progress)`.
|
|
928
|
+
* Lets you write `for await (const ev of c) { … }` directly.
|
|
929
|
+
*/
|
|
930
|
+
[Symbol.asyncIterator]() {
|
|
931
|
+
return this.inner.progress[Symbol.asyncIterator]();
|
|
932
|
+
}
|
|
933
|
+
/** Await the sandbox. Resolves once pull + boot finishes. */
|
|
934
|
+
async awaitSandbox() {
|
|
935
|
+
return new Sandbox(await withMappedErrors(() => this.inner.awaitSandbox()), this.name, this.attached);
|
|
936
|
+
}
|
|
937
|
+
};
|
|
938
|
+
var Sandbox = class Sandbox {
|
|
939
|
+
/** @internal */
|
|
940
|
+
inner;
|
|
941
|
+
name;
|
|
942
|
+
ownsLifecycle;
|
|
943
|
+
/** @internal use `Sandbox.builder(name).create()` */
|
|
944
|
+
constructor(inner, name, ownsLifecycle = true) {
|
|
945
|
+
this.inner = inner;
|
|
946
|
+
this.name = name;
|
|
947
|
+
this.ownsLifecycle = ownsLifecycle;
|
|
948
|
+
}
|
|
949
|
+
/** Begin building a new sandbox. */
|
|
950
|
+
static builder(name) {
|
|
951
|
+
const nb = new napi.SandboxBuilder(name);
|
|
952
|
+
const origCreate = nb.create.bind(nb);
|
|
953
|
+
const origCreateDetached = nb.createDetached.bind(nb);
|
|
954
|
+
const origCreateWithPP = nb.createWithPullProgress.bind(nb);
|
|
955
|
+
const origCreateDetachedWithPP = nb.createDetachedWithPullProgress.bind(nb);
|
|
956
|
+
nb.create = async () => {
|
|
957
|
+
return new Sandbox(await withMappedErrors(() => origCreate()), name, true);
|
|
958
|
+
};
|
|
959
|
+
nb.createDetached = async () => {
|
|
960
|
+
return new Sandbox(await withMappedErrors(() => origCreateDetached()), name, false);
|
|
961
|
+
};
|
|
962
|
+
nb.createWithPullProgress = async () => {
|
|
963
|
+
return new PullProgressCreate(await withMappedErrors(() => origCreateWithPP()), name, true);
|
|
964
|
+
};
|
|
965
|
+
nb.createDetachedWithPullProgress = async () => {
|
|
966
|
+
return new PullProgressCreate(await withMappedErrors(() => origCreateDetachedWithPP()), name, false);
|
|
967
|
+
};
|
|
968
|
+
return nb;
|
|
969
|
+
}
|
|
970
|
+
/** Resume an existing stopped sandbox in attached mode. */
|
|
971
|
+
static async start(name) {
|
|
972
|
+
return new Sandbox(await withMappedErrors(() => napi.Sandbox.start(name)), name, true);
|
|
973
|
+
}
|
|
974
|
+
/** Resume an existing stopped sandbox in detached mode. */
|
|
975
|
+
static async startDetached(name) {
|
|
976
|
+
return new Sandbox(await withMappedErrors(() => napi.Sandbox.startDetached(name)), name, false);
|
|
977
|
+
}
|
|
978
|
+
/** Look up a database handle for an existing sandbox. */
|
|
979
|
+
static async get(name) {
|
|
980
|
+
return new SandboxHandle(await withMappedErrors(() => napi.Sandbox.get(name)));
|
|
981
|
+
}
|
|
982
|
+
/** List all known sandboxes. */
|
|
983
|
+
static async list() {
|
|
984
|
+
return (await withMappedErrors(() => napi.Sandbox.list())).map(sandboxInfoToHandle);
|
|
985
|
+
}
|
|
986
|
+
/** Remove a stopped sandbox from the database. */
|
|
987
|
+
static async remove(name) {
|
|
988
|
+
await withMappedErrors(() => napi.Sandbox.remove(name));
|
|
989
|
+
}
|
|
990
|
+
async exec(cmd, args) {
|
|
991
|
+
const argv = args ? Array.from(args) : void 0;
|
|
992
|
+
return new ExecOutput(await withMappedErrors(() => this.inner.exec(cmd, argv)));
|
|
993
|
+
}
|
|
994
|
+
async execWith(cmd, configure) {
|
|
995
|
+
const builder = configure(new napi.ExecOptionsBuilder());
|
|
996
|
+
return new ExecOutput(await withMappedErrors(() => this.inner.execWithBuilder(cmd, builder)));
|
|
997
|
+
}
|
|
998
|
+
async execStream(cmd, args) {
|
|
999
|
+
const argv = args ? Array.from(args) : void 0;
|
|
1000
|
+
return new ExecHandle(await withMappedErrors(() => this.inner.execStream(cmd, argv)));
|
|
1001
|
+
}
|
|
1002
|
+
async execStreamWith(cmd, configure) {
|
|
1003
|
+
const builder = configure(new napi.ExecOptionsBuilder());
|
|
1004
|
+
return new ExecHandle(await withMappedErrors(() => this.inner.execStreamWithBuilder(cmd, builder)));
|
|
1005
|
+
}
|
|
1006
|
+
async shell(script) {
|
|
1007
|
+
return new ExecOutput(await withMappedErrors(() => this.inner.shell(script)));
|
|
1008
|
+
}
|
|
1009
|
+
async shellStream(script) {
|
|
1010
|
+
return new ExecHandle(await withMappedErrors(() => this.inner.shellStream(script)));
|
|
1011
|
+
}
|
|
1012
|
+
async attach(cmd, args) {
|
|
1013
|
+
const argv = args ? Array.from(args) : void 0;
|
|
1014
|
+
return await withMappedErrors(() => this.inner.attach(cmd, argv));
|
|
1015
|
+
}
|
|
1016
|
+
async attachWith(cmd, configure) {
|
|
1017
|
+
const builder = configure(new napi.AttachOptionsBuilder());
|
|
1018
|
+
return await withMappedErrors(() => this.inner.attachWithBuilder(cmd, builder));
|
|
1019
|
+
}
|
|
1020
|
+
async attachShell() {
|
|
1021
|
+
return await withMappedErrors(() => this.inner.attachShell());
|
|
1022
|
+
}
|
|
1023
|
+
fs() {
|
|
1024
|
+
return new SandboxFs(this.inner.fs());
|
|
1025
|
+
}
|
|
1026
|
+
/**
|
|
1027
|
+
* The full configuration this sandbox was created with — image, cpus,
|
|
1028
|
+
* memory, env, mounts, etc. The shape mirrors `SandboxBuilder.build()`.
|
|
1029
|
+
*/
|
|
1030
|
+
async config() {
|
|
1031
|
+
const json = await withMappedErrors(() => this.inner.configJson());
|
|
1032
|
+
return remapKeysToCamel(JSON.parse(json));
|
|
1033
|
+
}
|
|
1034
|
+
/**
|
|
1035
|
+
* Read captured output from this sandbox's `exec.log`.
|
|
1036
|
+
*
|
|
1037
|
+
* Backed by an on-disk JSON Lines file the runtime writes via the
|
|
1038
|
+
* relay tap. Works on running and stopped sandboxes alike — no
|
|
1039
|
+
* protocol traffic. Default sources are user output: `stdout`,
|
|
1040
|
+
* `stderr`, and pty-merged `output`.
|
|
1041
|
+
*/
|
|
1042
|
+
async logs(opts) {
|
|
1043
|
+
const napiOpts = logReadOptionsToNapi(opts);
|
|
1044
|
+
return (await withMappedErrors(() => this.inner.logs(napiOpts))).map(logEntryFromNapi);
|
|
1045
|
+
}
|
|
1046
|
+
async metrics() {
|
|
1047
|
+
return metricsFromNapi(await withMappedErrors(() => this.inner.metrics()));
|
|
1048
|
+
}
|
|
1049
|
+
/** Stream metrics snapshots at the given interval (in milliseconds). */
|
|
1050
|
+
async metricsStream(intervalMs) {
|
|
1051
|
+
return new MetricsStream(await withMappedErrors(() => this.inner.metricsStream(intervalMs)));
|
|
1052
|
+
}
|
|
1053
|
+
async stop() {
|
|
1054
|
+
await withMappedErrors(() => this.inner.stop());
|
|
1055
|
+
}
|
|
1056
|
+
async stopAndWait() {
|
|
1057
|
+
return await withMappedErrors(() => this.inner.stopAndWait());
|
|
1058
|
+
}
|
|
1059
|
+
async kill() {
|
|
1060
|
+
await withMappedErrors(() => this.inner.kill());
|
|
1061
|
+
}
|
|
1062
|
+
async drain() {
|
|
1063
|
+
await withMappedErrors(() => this.inner.drain());
|
|
1064
|
+
}
|
|
1065
|
+
async wait() {
|
|
1066
|
+
return await withMappedErrors(() => this.inner.wait());
|
|
1067
|
+
}
|
|
1068
|
+
async detach() {
|
|
1069
|
+
await withMappedErrors(() => this.inner.detach());
|
|
1070
|
+
}
|
|
1071
|
+
async removePersisted() {
|
|
1072
|
+
await withMappedErrors(() => this.inner.removePersisted());
|
|
1073
|
+
}
|
|
1074
|
+
async [Symbol.asyncDispose]() {
|
|
1075
|
+
if (!this.ownsLifecycle) return;
|
|
1076
|
+
try {
|
|
1077
|
+
await this.inner.stop();
|
|
1078
|
+
} catch {}
|
|
1079
|
+
}
|
|
1080
|
+
};
|
|
1081
|
+
const snakeToCamel = (k) => k.replace(/_([a-z0-9])/g, (_m, c) => c.toUpperCase());
|
|
1082
|
+
function remapKeysToCamel(v) {
|
|
1083
|
+
if (Array.isArray(v)) return v.map(remapKeysToCamel);
|
|
1084
|
+
if (v && typeof v === "object") {
|
|
1085
|
+
const out = {};
|
|
1086
|
+
for (const [k, val] of Object.entries(v)) out[snakeToCamel(k)] = remapKeysToCamel(val);
|
|
1087
|
+
return out;
|
|
1088
|
+
}
|
|
1089
|
+
return v;
|
|
1090
|
+
}
|
|
1091
|
+
/** True when the runtime binaries are present and runnable. */
|
|
1092
|
+
function isInstalled() {
|
|
1093
|
+
return napi.isInstalled();
|
|
1094
|
+
}
|
|
1095
|
+
const empty = Object.freeze([]);
|
|
1096
|
+
const allowEgressRule = (destination) => ({
|
|
1097
|
+
direction: "egress",
|
|
1098
|
+
destination,
|
|
1099
|
+
protocols: empty,
|
|
1100
|
+
ports: empty,
|
|
1101
|
+
action: "allow"
|
|
1102
|
+
});
|
|
1103
|
+
/**
|
|
1104
|
+
* Allow plain DNS (UDP/53 and TCP/53) to the sandbox gateway, i.e. the
|
|
1105
|
+
* in-process DNS forwarder. The standard one-liner for opening DNS
|
|
1106
|
+
* under a deny-by-default policy. DoT (TCP/853) is intentionally not
|
|
1107
|
+
* included; add an explicit `Group::Host tcp/853` allow rule if needed.
|
|
1108
|
+
*/
|
|
1109
|
+
const allowDnsRule = () => ({
|
|
1110
|
+
direction: "egress",
|
|
1111
|
+
destination: {
|
|
1112
|
+
kind: "group",
|
|
1113
|
+
group: "host"
|
|
1114
|
+
},
|
|
1115
|
+
protocols: ["udp", "tcp"],
|
|
1116
|
+
ports: [{
|
|
1117
|
+
start: 53,
|
|
1118
|
+
end: 53
|
|
1119
|
+
}],
|
|
1120
|
+
action: "allow"
|
|
1121
|
+
});
|
|
1122
|
+
const NetworkPolicy$1 = {
|
|
1123
|
+
/** Deny everything in both directions. */
|
|
1124
|
+
none: () => ({
|
|
1125
|
+
defaultEgress: "deny",
|
|
1126
|
+
defaultIngress: "deny",
|
|
1127
|
+
rules: []
|
|
1128
|
+
}),
|
|
1129
|
+
/** Allow everything in both directions. */
|
|
1130
|
+
allowAll: () => ({
|
|
1131
|
+
defaultEgress: "allow",
|
|
1132
|
+
defaultIngress: "allow",
|
|
1133
|
+
rules: []
|
|
1134
|
+
}),
|
|
1135
|
+
/** Egress allowed only to public destinations; ingress allowed by default. */
|
|
1136
|
+
publicOnly: () => ({
|
|
1137
|
+
defaultEgress: "deny",
|
|
1138
|
+
defaultIngress: "allow",
|
|
1139
|
+
rules: [allowDnsRule(), allowEgressRule({
|
|
1140
|
+
kind: "group",
|
|
1141
|
+
group: "public"
|
|
1142
|
+
})]
|
|
1143
|
+
}),
|
|
1144
|
+
/** Egress allowed to public + private (LAN); ingress allowed by default. */
|
|
1145
|
+
nonLocal: () => ({
|
|
1146
|
+
defaultEgress: "deny",
|
|
1147
|
+
defaultIngress: "allow",
|
|
1148
|
+
rules: [
|
|
1149
|
+
allowDnsRule(),
|
|
1150
|
+
allowEgressRule({
|
|
1151
|
+
kind: "group",
|
|
1152
|
+
group: "public"
|
|
1153
|
+
}),
|
|
1154
|
+
allowEgressRule({
|
|
1155
|
+
kind: "group",
|
|
1156
|
+
group: "private"
|
|
1157
|
+
})
|
|
1158
|
+
]
|
|
1159
|
+
})
|
|
1160
|
+
};
|
|
1161
|
+
var dist_exports = /* @__PURE__ */ __exportAll({
|
|
1162
|
+
NetworkPolicy: () => NetworkPolicy,
|
|
1163
|
+
isInstalled: () => isInstalled
|
|
1164
|
+
});
|
|
1165
|
+
function wrapMethodWithErrorMap(cls, method) {
|
|
1166
|
+
const proto = cls.prototype;
|
|
1167
|
+
const orig = proto[method];
|
|
1168
|
+
if (typeof orig !== "function" || orig.__wrapped) return;
|
|
1169
|
+
const wrapped = function(...args) {
|
|
1170
|
+
try {
|
|
1171
|
+
const result = orig.apply(this, args);
|
|
1172
|
+
if (result && typeof result.then === "function") return result.catch((e) => {
|
|
1173
|
+
throw mapNapiError(e);
|
|
1174
|
+
});
|
|
1175
|
+
return result;
|
|
1176
|
+
} catch (e) {
|
|
1177
|
+
throw mapNapiError(e);
|
|
1178
|
+
}
|
|
1179
|
+
};
|
|
1180
|
+
wrapped.__wrapped = true;
|
|
1181
|
+
proto[method] = wrapped;
|
|
1182
|
+
}
|
|
1183
|
+
wrapMethodWithErrorMap(napi.MountBuilder, "build");
|
|
1184
|
+
wrapMethodWithErrorMap(napi.SandboxBuilder, "create");
|
|
1185
|
+
wrapMethodWithErrorMap(napi.SandboxBuilder, "createDetached");
|
|
1186
|
+
wrapMethodWithErrorMap(napi.PatchBuilder, "build");
|
|
1187
|
+
wrapMethodWithErrorMap(napi.DnsBuilder, "build");
|
|
1188
|
+
wrapMethodWithErrorMap(napi.SecretBuilder, "build");
|
|
1189
|
+
wrapMethodWithErrorMap(napi.VolumeBuilder, "create");
|
|
1190
|
+
{
|
|
1191
|
+
const proto = napi.SandboxBuilder.prototype;
|
|
1192
|
+
if (!proto.__buildWrapped) {
|
|
1193
|
+
const origBuild = proto.build;
|
|
1194
|
+
const snakeToCamel = (k) => k.replace(/_([a-z0-9])/g, (_m, c) => c.toUpperCase());
|
|
1195
|
+
const remapKeys = (v) => {
|
|
1196
|
+
if (Array.isArray(v)) return v.map(remapKeys);
|
|
1197
|
+
if (v && typeof v === "object") {
|
|
1198
|
+
const out = {};
|
|
1199
|
+
for (const [k, val] of Object.entries(v)) out[snakeToCamel(k)] = remapKeys(val);
|
|
1200
|
+
return out;
|
|
1201
|
+
}
|
|
1202
|
+
return v;
|
|
1203
|
+
};
|
|
1204
|
+
proto.build = function() {
|
|
1205
|
+
let json;
|
|
1206
|
+
try {
|
|
1207
|
+
json = origBuild.apply(this);
|
|
1208
|
+
} catch (e) {
|
|
1209
|
+
throw mapNapiError(e);
|
|
1210
|
+
}
|
|
1211
|
+
return remapKeys(JSON.parse(json));
|
|
1212
|
+
};
|
|
1213
|
+
Object.defineProperty(proto, "__buildWrapped", {
|
|
1214
|
+
value: true,
|
|
1215
|
+
enumerable: false,
|
|
1216
|
+
writable: false,
|
|
1217
|
+
configurable: false
|
|
1218
|
+
});
|
|
1219
|
+
}
|
|
1220
|
+
}
|
|
1221
|
+
function hideMethod(cls, name) {
|
|
1222
|
+
if (Object.prototype.hasOwnProperty.call(cls.prototype, name)) {
|
|
1223
|
+
const value = cls.prototype[name];
|
|
1224
|
+
Object.defineProperty(cls.prototype, name, {
|
|
1225
|
+
value,
|
|
1226
|
+
enumerable: false,
|
|
1227
|
+
writable: true,
|
|
1228
|
+
configurable: true
|
|
1229
|
+
});
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
hideMethod(napi.NetworkBuilder, "buildJson");
|
|
1233
|
+
hideMethod(napi.NetworkBuilder, "policyJson");
|
|
1234
|
+
hideMethod(napi.NetworkBuilder, "policyFromBuilder");
|
|
1235
|
+
hideMethod(napi.SandboxBuilder, "execWithBuilder");
|
|
1236
|
+
hideMethod(napi.SandboxBuilder, "execStreamWithBuilder");
|
|
1237
|
+
hideMethod(napi.SandboxBuilder, "attachWithBuilder");
|
|
1238
|
+
{
|
|
1239
|
+
const proto = napi.NetworkBuilder.prototype;
|
|
1240
|
+
if (!proto.__buildWrapped) {
|
|
1241
|
+
const snakeToCamel = (k) => k.replace(/_([a-z0-9])/g, (_m, c) => c.toUpperCase());
|
|
1242
|
+
const remapKeys = (v) => {
|
|
1243
|
+
if (Array.isArray(v)) return v.map(remapKeys);
|
|
1244
|
+
if (v && typeof v === "object") {
|
|
1245
|
+
const out = {};
|
|
1246
|
+
for (const [k, val] of Object.entries(v)) out[snakeToCamel(k)] = remapKeys(val);
|
|
1247
|
+
return out;
|
|
1248
|
+
}
|
|
1249
|
+
return v;
|
|
1250
|
+
};
|
|
1251
|
+
proto.build = function() {
|
|
1252
|
+
let json;
|
|
1253
|
+
try {
|
|
1254
|
+
json = this.buildJson();
|
|
1255
|
+
} catch (e) {
|
|
1256
|
+
throw mapNapiError(e);
|
|
1257
|
+
}
|
|
1258
|
+
return remapKeys(JSON.parse(json));
|
|
1259
|
+
};
|
|
1260
|
+
Object.defineProperty(proto, "__buildWrapped", {
|
|
1261
|
+
value: true,
|
|
1262
|
+
enumerable: false,
|
|
1263
|
+
writable: false,
|
|
1264
|
+
configurable: false
|
|
1265
|
+
});
|
|
1266
|
+
}
|
|
1267
|
+
}
|
|
1268
|
+
{
|
|
1269
|
+
const camelToSnake = (k) => k.replace(/[A-Z]/g, (c) => "_" + c.toLowerCase());
|
|
1270
|
+
const isDestination = (v) => {
|
|
1271
|
+
if (!v || typeof v !== "object" || Array.isArray(v)) return false;
|
|
1272
|
+
const obj = v;
|
|
1273
|
+
if (typeof obj.kind !== "string") return false;
|
|
1274
|
+
return [
|
|
1275
|
+
"any",
|
|
1276
|
+
"cidr",
|
|
1277
|
+
"domain",
|
|
1278
|
+
"domainSuffix",
|
|
1279
|
+
"group"
|
|
1280
|
+
].includes(obj.kind);
|
|
1281
|
+
};
|
|
1282
|
+
const remapDestination = (v, deep) => {
|
|
1283
|
+
const tag = camelToSnake(v.kind);
|
|
1284
|
+
if (v.kind === "any") return tag;
|
|
1285
|
+
const dataField = v.kind === "domainSuffix" ? "suffix" : v.kind;
|
|
1286
|
+
return { [tag]: deep(v[dataField]) };
|
|
1287
|
+
};
|
|
1288
|
+
const remapKeys = (v) => {
|
|
1289
|
+
if (Array.isArray(v)) return v.map(remapKeys);
|
|
1290
|
+
if (isDestination(v)) return remapDestination(v, remapKeys);
|
|
1291
|
+
if (v && typeof v === "object") {
|
|
1292
|
+
const out = {};
|
|
1293
|
+
for (const [k, val] of Object.entries(v)) out[camelToSnake(k)] = remapKeys(val);
|
|
1294
|
+
return out;
|
|
1295
|
+
}
|
|
1296
|
+
return v;
|
|
1297
|
+
};
|
|
1298
|
+
const proto = napi.NetworkBuilder.prototype;
|
|
1299
|
+
if (!proto.policy) proto.policy = function(p) {
|
|
1300
|
+
if (p instanceof napi.NetworkPolicyBuilder) {
|
|
1301
|
+
this.policyFromBuilder(p);
|
|
1302
|
+
return this;
|
|
1303
|
+
}
|
|
1304
|
+
this.policyJson(JSON.stringify(remapKeys(p)));
|
|
1305
|
+
return this;
|
|
1306
|
+
};
|
|
1307
|
+
}
|
|
1308
|
+
napi.DnsBuilder;
|
|
1309
|
+
napi.TlsBuilder;
|
|
1310
|
+
napi.SecretBuilder;
|
|
1311
|
+
napi.NetworkBuilder;
|
|
1312
|
+
napi.MountBuilder;
|
|
1313
|
+
napi.PatchBuilder;
|
|
1314
|
+
napi.RegistryConfigBuilder;
|
|
1315
|
+
napi.ImageBuilder;
|
|
1316
|
+
napi.ExecOptionsBuilder;
|
|
1317
|
+
napi.InitOptionsBuilder;
|
|
1318
|
+
napi.AttachOptionsBuilder;
|
|
1319
|
+
napi.NetworkPolicyBuilder;
|
|
1320
|
+
napi.RuleBuilder;
|
|
1321
|
+
napi.RuleDestinationBuilder;
|
|
1322
|
+
napi.InterfaceOverridesBuilder;
|
|
1323
|
+
const NetworkPolicy = {
|
|
1324
|
+
...NetworkPolicy$1,
|
|
1325
|
+
/**
|
|
1326
|
+
* Start building a `NetworkPolicy` via the native fluent builder.
|
|
1327
|
+
* Equivalent to `new NetworkPolicyBuilder()`.
|
|
1328
|
+
*/
|
|
1329
|
+
builder: () => new napi.NetworkPolicyBuilder()
|
|
1330
|
+
};
|
|
1331
|
+
const DEFAULT_IMAGE = "node:22";
|
|
1332
|
+
const DEFAULT_VM_IMAGE = DEFAULT_IMAGE;
|
|
1333
|
+
const DEFAULT_NETWORK = "public-only";
|
|
1334
|
+
function applyNetwork(builder, preset) {
|
|
1335
|
+
switch (preset) {
|
|
1336
|
+
case "none": return builder.disableNetwork();
|
|
1337
|
+
case "allow-all": return builder.network((n) => n.policy(NetworkPolicy.allowAll()));
|
|
1338
|
+
case "non-local": return builder.network((n) => n.policy(NetworkPolicy.nonLocal()));
|
|
1339
|
+
default: return builder.network((n) => n.policy(NetworkPolicy.publicOnly()));
|
|
1340
|
+
}
|
|
1341
|
+
}
|
|
1342
|
+
function applyVolume(builder, mount) {
|
|
1343
|
+
return builder.volume(mount.guestPath, (m) => {
|
|
1344
|
+
if ("bind" in mount) {
|
|
1345
|
+
let bind = m.bind(mount.bind);
|
|
1346
|
+
if (mount.readonly) bind = bind.readonly();
|
|
1347
|
+
return bind;
|
|
1348
|
+
}
|
|
1349
|
+
if ("named" in mount) {
|
|
1350
|
+
let named = m.named(mount.named);
|
|
1351
|
+
if (mount.readonly) named = named.readonly();
|
|
1352
|
+
return named;
|
|
1353
|
+
}
|
|
1354
|
+
const tmpfs = m.tmpfs();
|
|
1355
|
+
return mount.sizeMiB !== void 0 ? tmpfs.size(mount.sizeMiB) : tmpfs;
|
|
1356
|
+
});
|
|
1357
|
+
}
|
|
1358
|
+
function buildMicrosandbox(name, workspaceRoot, options = {}) {
|
|
1359
|
+
const workdir = options.workdir ?? "/workspace";
|
|
1360
|
+
let builder = Sandbox.builder(name).workdir(workdir);
|
|
1361
|
+
if (options.snapshot) builder = builder.fromSnapshot(options.snapshot);
|
|
1362
|
+
else builder = builder.image(options.image ?? DEFAULT_IMAGE);
|
|
1363
|
+
if (options.memory !== void 0) builder = builder.memory(options.memory);
|
|
1364
|
+
if (options.cpus !== void 0) builder = builder.cpus(options.cpus);
|
|
1365
|
+
if (options.env) builder = builder.envs(options.env);
|
|
1366
|
+
if (options.idleTimeout !== void 0) builder = builder.idleTimeout(options.idleTimeout);
|
|
1367
|
+
if (options.maxDuration !== void 0) builder = builder.maxDuration(options.maxDuration);
|
|
1368
|
+
if (options.replace !== false) builder = builder.replace();
|
|
1369
|
+
builder = applyNetwork(builder, options.network ?? DEFAULT_NETWORK);
|
|
1370
|
+
builder = builder.volume(require_dist.WORKSPACE_MOUNT, (m) => m.bind(workspaceRoot));
|
|
1371
|
+
for (const mount of options.volumes ?? []) builder = applyVolume(builder, mount);
|
|
1372
|
+
return builder;
|
|
1373
|
+
}
|
|
1374
|
+
const NODE_RUNTIME_REQUIRED_MESSAGE = "js-exec requires Node.js in the VM image. Use a Node-based image such as node:22 (the default VM image), or install Node in your custom image.";
|
|
1375
|
+
function nodeRuntimeMissingResult(image) {
|
|
1376
|
+
return {
|
|
1377
|
+
stdout: "",
|
|
1378
|
+
stderr: `${NODE_RUNTIME_REQUIRED_MESSAGE}${image ? ` Configured image: ${image}.` : ""}\n`,
|
|
1379
|
+
exitCode: 127
|
|
1380
|
+
};
|
|
1381
|
+
}
|
|
1382
|
+
async function probeNodeRuntime(sb) {
|
|
1383
|
+
return (await sb.execWith("sh", (builder) => builder.args(["-lc", "command -v node >/dev/null 2>&1"]))).code === 0;
|
|
1384
|
+
}
|
|
1385
|
+
/** Split a shell-style argument string, respecting single and double quotes. */
|
|
1386
|
+
function splitShellArgs(input) {
|
|
1387
|
+
const args = [];
|
|
1388
|
+
let current = "";
|
|
1389
|
+
let quote = null;
|
|
1390
|
+
let escaped = false;
|
|
1391
|
+
for (let i = 0; i < input.length; i++) {
|
|
1392
|
+
const char = input[i];
|
|
1393
|
+
if (escaped) {
|
|
1394
|
+
current += char;
|
|
1395
|
+
escaped = false;
|
|
1396
|
+
continue;
|
|
1397
|
+
}
|
|
1398
|
+
if (quote === "'") {
|
|
1399
|
+
if (char === "'") quote = null;
|
|
1400
|
+
else current += char;
|
|
1401
|
+
continue;
|
|
1402
|
+
}
|
|
1403
|
+
if (quote === "\"") {
|
|
1404
|
+
if (char === "\\") escaped = true;
|
|
1405
|
+
else if (char === "\"") quote = null;
|
|
1406
|
+
else current += char;
|
|
1407
|
+
continue;
|
|
1408
|
+
}
|
|
1409
|
+
if (char === "'" || char === "\"") {
|
|
1410
|
+
quote = char;
|
|
1411
|
+
continue;
|
|
1412
|
+
}
|
|
1413
|
+
if (/\s/.test(char)) {
|
|
1414
|
+
if (current.length > 0) {
|
|
1415
|
+
args.push(current);
|
|
1416
|
+
current = "";
|
|
1417
|
+
}
|
|
1418
|
+
continue;
|
|
1419
|
+
}
|
|
1420
|
+
current += char;
|
|
1421
|
+
}
|
|
1422
|
+
if (current.length > 0) args.push(current);
|
|
1423
|
+
return args;
|
|
1424
|
+
}
|
|
1425
|
+
/** Return js-exec argv when `script` is a direct js-exec invocation. */
|
|
1426
|
+
function parseJsExecCommand(script) {
|
|
1427
|
+
const trimmed = script.trim();
|
|
1428
|
+
if (!trimmed.startsWith("js-exec")) return null;
|
|
1429
|
+
const rest = trimmed.slice(7).trim();
|
|
1430
|
+
if (rest.length === 0) return null;
|
|
1431
|
+
return { argv: splitShellArgs(rest) };
|
|
1432
|
+
}
|
|
1433
|
+
const CODEMODE_GUEST_DIR = "/opt/keystroke";
|
|
1434
|
+
const CODEMODE_GUEST_RUNNER = `${CODEMODE_GUEST_DIR}/runner.mjs`;
|
|
1435
|
+
function findPackageRoot(from) {
|
|
1436
|
+
let dir = from;
|
|
1437
|
+
while (dir !== (0, node_path.dirname)(dir)) {
|
|
1438
|
+
const manifest = (0, node_path.join)(dir, "package.json");
|
|
1439
|
+
if ((0, node_fs.existsSync)(manifest)) {
|
|
1440
|
+
if (JSON.parse((0, node_fs.readFileSync)(manifest, "utf8")).name === "@keystrokehq/sandbox") return dir;
|
|
1441
|
+
}
|
|
1442
|
+
dir = (0, node_path.dirname)(dir);
|
|
1443
|
+
}
|
|
1444
|
+
throw new Error("@keystrokehq/sandbox package root not found");
|
|
1445
|
+
}
|
|
1446
|
+
/** Locate the shipped codemode runner on the host filesystem. */
|
|
1447
|
+
function resolveCodemodeRunnerDir(fromModuleUrl) {
|
|
1448
|
+
const packageRoot = findPackageRoot((0, node_path.dirname)((0, node_url.fileURLToPath)(fromModuleUrl)));
|
|
1449
|
+
const candidates = [(0, node_path.join)(packageRoot, "dist", "providers", "microsandbox", "codemode"), (0, node_path.join)(packageRoot, "src", "providers", "microsandbox", "codemode")];
|
|
1450
|
+
for (const candidate of candidates) if ((0, node_fs.existsSync)((0, node_path.join)(candidate, "runner.mjs"))) return candidate;
|
|
1451
|
+
throw new Error("codemode runner.mjs not found on host");
|
|
1452
|
+
}
|
|
1453
|
+
function codemodeDir(workspaceRoot) {
|
|
1454
|
+
return (0, node_path.join)(workspaceRoot, ".codemode");
|
|
1455
|
+
}
|
|
1456
|
+
async function prepareCodemodeDir(workspaceRoot) {
|
|
1457
|
+
await (0, node_fs_promises.rm)(codemodeDir(workspaceRoot), {
|
|
1458
|
+
recursive: true,
|
|
1459
|
+
force: true
|
|
1460
|
+
});
|
|
1461
|
+
await (0, node_fs_promises.mkdir)(codemodeDir(workspaceRoot), { recursive: true });
|
|
1462
|
+
}
|
|
1463
|
+
async function handleToolRequest(workspaceRoot, filename, invokeTool, handled) {
|
|
1464
|
+
if (!filename.endsWith(".request.json")) return;
|
|
1465
|
+
if (handled.has(filename)) return;
|
|
1466
|
+
handled.add(filename);
|
|
1467
|
+
const requestPath = (0, node_path.join)(codemodeDir(workspaceRoot), filename);
|
|
1468
|
+
let request;
|
|
1469
|
+
try {
|
|
1470
|
+
request = JSON.parse(await (0, node_fs_promises.readFile)(requestPath, "utf8"));
|
|
1471
|
+
} catch {
|
|
1472
|
+
handled.delete(filename);
|
|
1473
|
+
return;
|
|
1474
|
+
}
|
|
1475
|
+
const responsePath = (0, node_path.join)(codemodeDir(workspaceRoot), `${request.id}.response.json`);
|
|
1476
|
+
try {
|
|
1477
|
+
const result = await invokeTool(request.path, request.argsJson);
|
|
1478
|
+
const response = {
|
|
1479
|
+
id: request.id,
|
|
1480
|
+
result
|
|
1481
|
+
};
|
|
1482
|
+
await (0, node_fs_promises.writeFile)(responsePath, JSON.stringify(response));
|
|
1483
|
+
} catch (error) {
|
|
1484
|
+
const response = {
|
|
1485
|
+
id: request.id,
|
|
1486
|
+
error: error instanceof Error ? error.message : String(error)
|
|
1487
|
+
};
|
|
1488
|
+
await (0, node_fs_promises.writeFile)(responsePath, JSON.stringify(response));
|
|
1489
|
+
}
|
|
1490
|
+
}
|
|
1491
|
+
/** Poll interval (ms) backing up fs.watch, which silently drops events under load. */
|
|
1492
|
+
const REQUEST_POLL_INTERVAL_MS = 25;
|
|
1493
|
+
function watchToolRequests(workspaceRoot, invokeTool) {
|
|
1494
|
+
const dir = codemodeDir(workspaceRoot);
|
|
1495
|
+
const handled = /* @__PURE__ */ new Set();
|
|
1496
|
+
const handle = (filename) => {
|
|
1497
|
+
if (!filename) return;
|
|
1498
|
+
handleToolRequest(workspaceRoot, filename, invokeTool, handled).catch(() => {});
|
|
1499
|
+
};
|
|
1500
|
+
const watcher = (0, node_fs.watch)(dir, (_event, filename) => handle(filename));
|
|
1501
|
+
const poll = setInterval(() => {
|
|
1502
|
+
(0, node_fs_promises.readdir)(dir).then((entries) => {
|
|
1503
|
+
for (const entry of entries) handle(entry);
|
|
1504
|
+
}).catch(() => {});
|
|
1505
|
+
}, REQUEST_POLL_INTERVAL_MS);
|
|
1506
|
+
return { close: () => {
|
|
1507
|
+
watcher.close();
|
|
1508
|
+
clearInterval(poll);
|
|
1509
|
+
} };
|
|
1510
|
+
}
|
|
1511
|
+
function isJsExecCommand(script) {
|
|
1512
|
+
return parseJsExecCommand(script) !== null;
|
|
1513
|
+
}
|
|
1514
|
+
async function runCodemode(options) {
|
|
1515
|
+
const invocation = parseJsExecCommand(options.script);
|
|
1516
|
+
if (!invocation) return {
|
|
1517
|
+
stdout: "",
|
|
1518
|
+
stderr: "js-exec: malformed command\n",
|
|
1519
|
+
exitCode: 2
|
|
1520
|
+
};
|
|
1521
|
+
await prepareCodemodeDir(options.workspaceRoot);
|
|
1522
|
+
const requestWatcher = options.invokeTool !== void 0 ? watchToolRequests(options.workspaceRoot, options.invokeTool) : null;
|
|
1523
|
+
try {
|
|
1524
|
+
const cwd = options.execOptions?.cwd ?? options.workdir ?? "/workspace";
|
|
1525
|
+
const runnerArgs = options.invokeTool ? ["--tools", ...invocation.argv] : [...invocation.argv];
|
|
1526
|
+
const out = await options.sb.execWith("node", (builder) => {
|
|
1527
|
+
let configured = builder.args([CODEMODE_GUEST_RUNNER, ...runnerArgs]).cwd(cwd);
|
|
1528
|
+
if (options.execOptions?.env) configured = configured.envs(options.execOptions.env);
|
|
1529
|
+
return configured;
|
|
1530
|
+
});
|
|
1531
|
+
return {
|
|
1532
|
+
stdout: out.stdout(),
|
|
1533
|
+
stderr: out.stderr(),
|
|
1534
|
+
exitCode: out.code
|
|
1535
|
+
};
|
|
1536
|
+
} finally {
|
|
1537
|
+
requestWatcher?.close();
|
|
1538
|
+
await (0, node_fs_promises.rm)(codemodeDir(options.workspaceRoot), {
|
|
1539
|
+
recursive: true,
|
|
1540
|
+
force: true
|
|
1541
|
+
});
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
function sandboxName(agentId, sessionId) {
|
|
1545
|
+
return `agent-${(0, node_crypto.createHash)("sha256").update(`${agentId}:${sessionId}`).digest("hex").slice(0, 16)}`;
|
|
1546
|
+
}
|
|
1547
|
+
/** Recursively create the parent directory of a guest file (mkdir is non-recursive). */
|
|
1548
|
+
async function ensureGuestDir(fs, filePath) {
|
|
1549
|
+
const segments = node_path.posix.dirname(filePath).split("/").filter(Boolean);
|
|
1550
|
+
let current = "";
|
|
1551
|
+
for (const segment of segments) {
|
|
1552
|
+
current += `/${segment}`;
|
|
1553
|
+
try {
|
|
1554
|
+
await fs.mkdir(current);
|
|
1555
|
+
} catch {}
|
|
1556
|
+
}
|
|
1557
|
+
}
|
|
1558
|
+
function createMicrosandboxProvider(options = {}) {
|
|
1559
|
+
return { async create(providerOptions) {
|
|
1560
|
+
await require_dist.ensureWorkspaceDir(providerOptions.workspaceRoot);
|
|
1561
|
+
const runnerHostDir = resolveCodemodeRunnerDir(require("url").pathToFileURL(__filename).href);
|
|
1562
|
+
const sb = await buildMicrosandbox(sandboxName(providerOptions.agentId, providerOptions.sessionId), providerOptions.workspaceRoot, {
|
|
1563
|
+
...options,
|
|
1564
|
+
volumes: [...options.volumes ?? [], {
|
|
1565
|
+
guestPath: CODEMODE_GUEST_DIR,
|
|
1566
|
+
bind: runnerHostDir,
|
|
1567
|
+
readonly: true
|
|
1568
|
+
}]
|
|
1569
|
+
}).create();
|
|
1570
|
+
const hooks = providerOptions.hooks;
|
|
1571
|
+
const guestFs = sb.fs();
|
|
1572
|
+
let nodeAvailable;
|
|
1573
|
+
async function ensureNodeRuntime() {
|
|
1574
|
+
if (nodeAvailable === void 0) nodeAvailable = await probeNodeRuntime(sb);
|
|
1575
|
+
if (!nodeAvailable) return nodeRuntimeMissingResult(options.image);
|
|
1576
|
+
return null;
|
|
1577
|
+
}
|
|
1578
|
+
const runtime = {
|
|
1579
|
+
agentId: providerOptions.agentId,
|
|
1580
|
+
sessionId: providerOptions.sessionId,
|
|
1581
|
+
workspaceRoot: providerOptions.workspaceRoot,
|
|
1582
|
+
async exec(script, execOptions) {
|
|
1583
|
+
const hookCtx = {
|
|
1584
|
+
agentId: providerOptions.agentId,
|
|
1585
|
+
sessionId: providerOptions.sessionId,
|
|
1586
|
+
workspaceRoot: providerOptions.workspaceRoot
|
|
1587
|
+
};
|
|
1588
|
+
await hooks?.beforeExec?.({
|
|
1589
|
+
...hookCtx,
|
|
1590
|
+
script
|
|
1591
|
+
});
|
|
1592
|
+
let execResult;
|
|
1593
|
+
if (isJsExecCommand(script)) execResult = await ensureNodeRuntime() ?? await runCodemode({
|
|
1594
|
+
sb,
|
|
1595
|
+
workspaceRoot: providerOptions.workspaceRoot,
|
|
1596
|
+
script,
|
|
1597
|
+
execOptions,
|
|
1598
|
+
invokeTool: providerOptions.invokeTool,
|
|
1599
|
+
workdir: options.workdir
|
|
1600
|
+
});
|
|
1601
|
+
else {
|
|
1602
|
+
const out = await sb.execWith("sh", (e) => {
|
|
1603
|
+
let builder = e.args(["-lc", script]).cwd(execOptions?.cwd ?? options.workdir ?? "/workspace");
|
|
1604
|
+
if (execOptions?.env) builder = builder.envs(execOptions.env);
|
|
1605
|
+
if (execOptions?.stdin !== void 0) builder = builder.stdinBytes(typeof execOptions.stdin === "string" ? Buffer.from(execOptions.stdin) : execOptions.stdin);
|
|
1606
|
+
return builder;
|
|
1607
|
+
});
|
|
1608
|
+
execResult = {
|
|
1609
|
+
stdout: out.stdout(),
|
|
1610
|
+
stderr: out.stderr(),
|
|
1611
|
+
exitCode: out.code
|
|
1612
|
+
};
|
|
1613
|
+
}
|
|
1614
|
+
await hooks?.afterExec?.({
|
|
1615
|
+
...hookCtx,
|
|
1616
|
+
script,
|
|
1617
|
+
result: execResult
|
|
1618
|
+
});
|
|
1619
|
+
return execResult;
|
|
1620
|
+
},
|
|
1621
|
+
async readFile(path) {
|
|
1622
|
+
return guestFs.readToString(path);
|
|
1623
|
+
},
|
|
1624
|
+
async writeFile(path, content) {
|
|
1625
|
+
await ensureGuestDir(guestFs, path);
|
|
1626
|
+
await guestFs.write(path, content);
|
|
1627
|
+
},
|
|
1628
|
+
async dispose() {
|
|
1629
|
+
await hooks?.onDispose?.({
|
|
1630
|
+
agentId: providerOptions.agentId,
|
|
1631
|
+
sessionId: providerOptions.sessionId,
|
|
1632
|
+
workspaceRoot: providerOptions.workspaceRoot
|
|
1633
|
+
});
|
|
1634
|
+
await sb.stopAndWait();
|
|
1635
|
+
}
|
|
1636
|
+
};
|
|
1637
|
+
return {
|
|
1638
|
+
runtime,
|
|
1639
|
+
tools: require_dist.createCodingTools(runtime)
|
|
1640
|
+
};
|
|
1641
|
+
} };
|
|
1642
|
+
}
|
|
1643
|
+
let cached;
|
|
1644
|
+
/** True when the optional `microsandbox` package is installed and usable. */
|
|
1645
|
+
async function isMicrosandboxAvailable() {
|
|
1646
|
+
if (cached !== void 0) return cached;
|
|
1647
|
+
try {
|
|
1648
|
+
cached = (await Promise.resolve().then(() => dist_exports)).isInstalled();
|
|
1649
|
+
} catch {
|
|
1650
|
+
cached = false;
|
|
1651
|
+
}
|
|
1652
|
+
return cached;
|
|
1653
|
+
}
|
|
1654
|
+
var microsandbox_exports = /* @__PURE__ */ __exportAll({
|
|
1655
|
+
DEFAULT_VM_IMAGE: () => DEFAULT_VM_IMAGE,
|
|
1656
|
+
createMicrosandboxProvider: () => createMicrosandboxProvider,
|
|
1657
|
+
isMicrosandboxAvailable: () => isMicrosandboxAvailable
|
|
1658
|
+
});
|
|
1659
|
+
//#endregion
|
|
1660
|
+
exports.t = microsandbox_exports;
|
|
1661
|
+
|
|
1662
|
+
//# sourceMappingURL=microsandbox-kL031wZw-WOyY5ZG4.cjs.map
|