@struktoai/mirage-node 0.0.2-alpha.0 → 0.0.3-alpha.0
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/README.md +61 -127
- package/dist/aliyun-TMZRUYCG.js +10 -0
- package/dist/backblaze-OHW57DLK.js +10 -0
- package/dist/box-UXTCAFOZ.js +8 -0
- package/dist/ceph-TNN4I2FT.js +10 -0
- package/dist/chunk-2CC5VW7K.js +52 -0
- package/dist/chunk-2CC5VW7K.js.map +1 -0
- package/dist/chunk-3IJSIVKT.js +57 -0
- package/dist/chunk-3IJSIVKT.js.map +1 -0
- package/dist/chunk-3T3RMDNX.js +57 -0
- package/dist/chunk-3T3RMDNX.js.map +1 -0
- package/dist/chunk-54NTYJEO.js +13 -0
- package/dist/chunk-54NTYJEO.js.map +1 -0
- package/dist/{chunk-DCJQ2PIX.js → chunk-5DLOHQJ2.js} +5 -8
- package/dist/chunk-5DLOHQJ2.js.map +1 -0
- package/dist/chunk-5HCVKTP3.js +2086 -0
- package/dist/chunk-5HCVKTP3.js.map +1 -0
- package/dist/{chunk-5E6BULAK.js → chunk-5YOCVEUB.js} +5 -8
- package/dist/chunk-5YOCVEUB.js.map +1 -0
- package/dist/{chunk-6M2NL363.js → chunk-A4Z6DZ22.js} +6 -8
- package/dist/chunk-A4Z6DZ22.js.map +1 -0
- package/dist/{chunk-NOZZFJEB.js → chunk-A7X4L4JM.js} +5 -8
- package/dist/chunk-A7X4L4JM.js.map +1 -0
- package/dist/{chunk-GCB4JUF7.js → chunk-ABTEGAFB.js} +5 -8
- package/dist/chunk-ABTEGAFB.js.map +1 -0
- package/dist/chunk-AJICZLHT.js +57 -0
- package/dist/chunk-AJICZLHT.js.map +1 -0
- package/dist/{chunk-H74QYTN7.js → chunk-B2ZOKNN4.js} +14 -3
- package/dist/chunk-B2ZOKNN4.js.map +1 -0
- package/dist/{chunk-ICSS5ETT.js → chunk-B6SXRCBO.js} +8 -18
- package/dist/chunk-B6SXRCBO.js.map +1 -0
- package/dist/{chunk-HEQL3LPK.js → chunk-BYTU2YC3.js} +8 -18
- package/dist/chunk-BYTU2YC3.js.map +1 -0
- package/dist/{chunk-V5OLWE7F.js → chunk-C6NHEDHY.js} +5 -8
- package/dist/chunk-C6NHEDHY.js.map +1 -0
- package/dist/chunk-C6NHFMIP.js +57 -0
- package/dist/chunk-C6NHFMIP.js.map +1 -0
- package/dist/chunk-CASCUFK2.js +87 -0
- package/dist/chunk-CASCUFK2.js.map +1 -0
- package/dist/chunk-DNBAMB5J.js +18 -0
- package/dist/chunk-DNBAMB5J.js.map +1 -0
- package/dist/chunk-DP2PP5V2.js +26 -0
- package/dist/chunk-DP2PP5V2.js.map +1 -0
- package/dist/{chunk-OYJXYJTE.js → chunk-DTAY7LPC.js} +303 -866
- package/dist/chunk-DTAY7LPC.js.map +1 -0
- package/dist/chunk-DYXEITK3.js +52 -0
- package/dist/chunk-DYXEITK3.js.map +1 -0
- package/dist/chunk-E2ISWXLB.js +7 -0
- package/dist/chunk-E2ISWXLB.js.map +1 -0
- package/dist/{chunk-XDEEOTVK.js → chunk-E7RW3SBV.js} +5 -8
- package/dist/chunk-E7RW3SBV.js.map +1 -0
- package/dist/chunk-EGB7V74Z.js +76 -0
- package/dist/chunk-EGB7V74Z.js.map +1 -0
- package/dist/{chunk-LBBM3LKK.js → chunk-ERELJ7BS.js} +5 -8
- package/dist/chunk-ERELJ7BS.js.map +1 -0
- package/dist/chunk-FXFDBF3P.js +57 -0
- package/dist/chunk-FXFDBF3P.js.map +1 -0
- package/dist/chunk-G5BZE7UA.js +50 -0
- package/dist/chunk-G5BZE7UA.js.map +1 -0
- package/dist/chunk-H3BST2LI.js +26 -0
- package/dist/chunk-H3BST2LI.js.map +1 -0
- package/dist/chunk-H3I2KZIY.js +25 -0
- package/dist/chunk-H3I2KZIY.js.map +1 -0
- package/dist/{chunk-UWMOTOXA.js → chunk-HEHERHQ5.js} +8 -15
- package/dist/chunk-HEHERHQ5.js.map +1 -0
- package/dist/chunk-HQ4KWN76.js +57 -0
- package/dist/chunk-HQ4KWN76.js.map +1 -0
- package/dist/{chunk-MY3NUJJD.js → chunk-IQVNVTOP.js} +8 -18
- package/dist/chunk-IQVNVTOP.js.map +1 -0
- package/dist/chunk-JALIYI6M.js +55 -0
- package/dist/chunk-JALIYI6M.js.map +1 -0
- package/dist/chunk-JZQHKDSY.js +216 -0
- package/dist/chunk-JZQHKDSY.js.map +1 -0
- package/dist/chunk-JZT4QGIP.js +24 -0
- package/dist/chunk-JZT4QGIP.js.map +1 -0
- package/dist/chunk-KTNDT45N.js +57 -0
- package/dist/chunk-KTNDT45N.js.map +1 -0
- package/dist/chunk-L6JPBJAS.js +57 -0
- package/dist/chunk-L6JPBJAS.js.map +1 -0
- package/dist/{chunk-6VKNSO6U.js → chunk-LAJJPLEV.js} +17 -11
- package/dist/chunk-LAJJPLEV.js.map +1 -0
- package/dist/chunk-LW25LMIH.js +26 -0
- package/dist/chunk-LW25LMIH.js.map +1 -0
- package/dist/{chunk-WSDQ2MRG.js → chunk-LYDMMNL2.js} +5 -8
- package/dist/chunk-LYDMMNL2.js.map +1 -0
- package/dist/{chunk-G7O6DAWU.js → chunk-MHCMHKM6.js} +15 -9
- package/dist/chunk-MHCMHKM6.js.map +1 -0
- package/dist/chunk-N72CAZEH.js +1990 -0
- package/dist/chunk-N72CAZEH.js.map +1 -0
- package/dist/{chunk-XQUQSNCA.js → chunk-NHS7WLEQ.js} +4 -5
- package/dist/chunk-NHS7WLEQ.js.map +1 -0
- package/dist/chunk-NJMGCT63.js +54 -0
- package/dist/chunk-NJMGCT63.js.map +1 -0
- package/dist/chunk-O7ODGJYL.js +57 -0
- package/dist/chunk-O7ODGJYL.js.map +1 -0
- package/dist/chunk-OHROA3FQ.js +54 -0
- package/dist/chunk-OHROA3FQ.js.map +1 -0
- package/dist/chunk-OPYQ5KIO.js +52 -0
- package/dist/chunk-OPYQ5KIO.js.map +1 -0
- package/dist/chunk-OYV2DN66.js +50 -0
- package/dist/chunk-OYV2DN66.js.map +1 -0
- package/dist/chunk-OZAEWZZ3.js +31 -0
- package/dist/chunk-OZAEWZZ3.js.map +1 -0
- package/dist/chunk-PBBG7VFT.js +1896 -0
- package/dist/chunk-PBBG7VFT.js.map +1 -0
- package/dist/{chunk-HXWGG4K7.js → chunk-PJBQKMCD.js} +10 -20
- package/dist/chunk-PJBQKMCD.js.map +1 -0
- package/dist/chunk-Q2IAILVC.js +26 -0
- package/dist/chunk-Q2IAILVC.js.map +1 -0
- package/dist/chunk-Q6CDMOM6.js +57 -0
- package/dist/chunk-Q6CDMOM6.js.map +1 -0
- package/dist/{chunk-ALAMUIGJ.js → chunk-QGRDPSAH.js} +17 -12
- package/dist/chunk-QGRDPSAH.js.map +1 -0
- package/dist/{chunk-7QXJ4KWQ.js → chunk-RLGWMJD3.js} +63 -9
- package/dist/chunk-RLGWMJD3.js.map +1 -0
- package/dist/chunk-RO5IQEDQ.js +30 -0
- package/dist/chunk-RO5IQEDQ.js.map +1 -0
- package/dist/{chunk-ZC4KNEOQ.js → chunk-RQK5UPMP.js} +16 -11
- package/dist/chunk-RQK5UPMP.js.map +1 -0
- package/dist/chunk-RQYEEA2O.js +50 -0
- package/dist/chunk-RQYEEA2O.js.map +1 -0
- package/dist/chunk-SFUCUARB.js +21 -0
- package/dist/chunk-SFUCUARB.js.map +1 -0
- package/dist/{chunk-MVE5VVMQ.js → chunk-TRTUHCS4.js} +5 -8
- package/dist/chunk-TRTUHCS4.js.map +1 -0
- package/dist/chunk-TWGVQLG2.js +24 -0
- package/dist/chunk-TWGVQLG2.js.map +1 -0
- package/dist/chunk-UGK4TAVK.js +32 -0
- package/dist/chunk-UGK4TAVK.js.map +1 -0
- package/dist/{chunk-LPMPTQYP.js → chunk-UT2OPSN4.js} +12 -10
- package/dist/chunk-UT2OPSN4.js.map +1 -0
- package/dist/chunk-VGLHY6BK.js +31 -0
- package/dist/chunk-VGLHY6BK.js.map +1 -0
- package/dist/chunk-W7FLHT65.js +26 -0
- package/dist/chunk-W7FLHT65.js.map +1 -0
- package/dist/chunk-WL7HS7EM.js +50 -0
- package/dist/chunk-WL7HS7EM.js.map +1 -0
- package/dist/chunk-WSGEIVY3.js +1766 -0
- package/dist/chunk-WSGEIVY3.js.map +1 -0
- package/dist/{chunk-H3JR7MN3.js → chunk-XGJ2QERC.js} +17 -10
- package/dist/chunk-XGJ2QERC.js.map +1 -0
- package/dist/chunk-XHCBHYN4.js +54 -0
- package/dist/chunk-XHCBHYN4.js.map +1 -0
- package/dist/chunk-XLQI4IT2.js +54 -0
- package/dist/chunk-XLQI4IT2.js.map +1 -0
- package/dist/{chunk-3PBSL7BS.js → chunk-XRU5WXZX.js} +5 -8
- package/dist/chunk-XRU5WXZX.js.map +1 -0
- package/dist/{chunk-UZZD4MRJ.js → chunk-YAVGCQUP.js} +5 -8
- package/dist/chunk-YAVGCQUP.js.map +1 -0
- package/dist/chunk-YGZMVNN5.js +54 -0
- package/dist/chunk-YGZMVNN5.js.map +1 -0
- package/dist/{chunk-PEZYBKZH.js → chunk-YPT4JBUY.js} +10 -24
- package/dist/chunk-YPT4JBUY.js.map +1 -0
- package/dist/chunk-YUK3X3B4.js +27 -0
- package/dist/chunk-YUK3X3B4.js.map +1 -0
- package/dist/chunk-ZNWVJ6UW.js +54 -0
- package/dist/chunk-ZNWVJ6UW.js.map +1 -0
- package/dist/config-34LHOGLM.js +13 -0
- package/dist/config-3BBWD5AB.js +11 -0
- package/dist/{config-FNR6LJ5H.js → config-3IVQJBNW.js} +4 -2
- package/dist/config-4UDVSUQJ.js +11 -0
- package/dist/config-CMDBAPDH.js +11 -0
- package/dist/config-CVZ2AGCO.js +21 -0
- package/dist/config-D3RLSPNF.js +11 -0
- package/dist/config-DG65OEG3.js +11 -0
- package/dist/{config-HNSDNQZH.js → config-EIHSP5DZ.js} +4 -2
- package/dist/config-EO23EY62.js +15 -0
- package/dist/config-GCQK6NJY.js +11 -0
- package/dist/{config-5ZPGISS6.js → config-GE4W4ZJC.js} +4 -2
- package/dist/config-GHRUKEQ6.js +13 -0
- package/dist/config-GVH27UPE.js +11 -0
- package/dist/config-HKRMKD76.js +15 -0
- package/dist/config-HXVYIXP5.js +11 -0
- package/dist/config-IDZMEW73.js +11 -0
- package/dist/config-IJJXGLBQ.js +11 -0
- package/dist/config-IVY5EQQ2.js +15 -0
- package/dist/config-KJOLGVB2.js +11 -0
- package/dist/{config-S47UDVRZ.js → config-KMVCVBYN.js} +4 -2
- package/dist/{config-UKZ72IDO.js → config-KYTRXAB2.js} +4 -2
- package/dist/{config-MOLWOSRG.js → config-LHFFXVYI.js} +4 -2
- package/dist/config-NV5WXP64.js +11 -0
- package/dist/config-OT2TQQCN.js +11 -0
- package/dist/config-Q45Y46YT.js +15 -0
- package/dist/config-QAA646XB.js +15 -0
- package/dist/config-QNMKWJ4M.js +15 -0
- package/dist/config-QWCY3LBQ.js +11 -0
- package/dist/{config-HIZHA5VD.js → config-VM526IKB.js} +4 -2
- package/dist/config-WDAZFXYD.js +15 -0
- package/dist/config-ZFJYQZCH.js +13 -0
- package/dist/config-ZV6G2ZEC.js +11 -0
- package/dist/databricks_volume-HNQ4DJVJ.js +7 -0
- package/dist/digitalocean-6SPR4S7V.js +10 -0
- package/dist/discord-SAV2RBJV.js +8 -0
- package/dist/{disk-C7TJNU2B.js → disk-POACMF4G.js} +2 -2
- package/dist/dropbox-CQ7MTYX2.js +8 -0
- package/dist/email-KBQ7CXS7.js +8 -0
- package/dist/gcs-SMIE4VMT.js +10 -0
- package/dist/gdocs-X5Y2SIQX.js +8 -0
- package/dist/gdrive-SIQPRIGI.js +8 -0
- package/dist/github-KBHWANKQ.js +8 -0
- package/dist/github-KBHWANKQ.js.map +1 -0
- package/dist/github_ci-HPITNK37.js +8 -0
- package/dist/github_ci-HPITNK37.js.map +1 -0
- package/dist/gmail-DKHAGJNX.js +8 -0
- package/dist/gmail-DKHAGJNX.js.map +1 -0
- package/dist/gsheets-ZSUDIWGK.js +8 -0
- package/dist/gsheets-ZSUDIWGK.js.map +1 -0
- package/dist/gslides-GYXM7IMJ.js +8 -0
- package/dist/gslides-GYXM7IMJ.js.map +1 -0
- package/dist/hf_buckets-RIOMV7WG.js +10 -0
- package/dist/hf_buckets-RIOMV7WG.js.map +1 -0
- package/dist/hf_datasets-QF4BQ3OK.js +10 -0
- package/dist/hf_datasets-QF4BQ3OK.js.map +1 -0
- package/dist/hf_models-62GC2HPZ.js +10 -0
- package/dist/hf_models-62GC2HPZ.js.map +1 -0
- package/dist/hf_spaces-NVSMUNRM.js +10 -0
- package/dist/hf_spaces-NVSMUNRM.js.map +1 -0
- package/dist/index.d.ts +722 -277
- package/dist/index.js +646 -2268
- package/dist/index.js.map +1 -1
- package/dist/langfuse-HUAYVPHF.js +8 -0
- package/dist/langfuse-HUAYVPHF.js.map +1 -0
- package/dist/linear-2MM55KBC.js +8 -0
- package/dist/linear-2MM55KBC.js.map +1 -0
- package/dist/minio-L3XE6PQS.js +10 -0
- package/dist/minio-L3XE6PQS.js.map +1 -0
- package/dist/mongodb-ZOX4FRHJ.js +7 -0
- package/dist/mongodb-ZOX4FRHJ.js.map +1 -0
- package/dist/notion-UK4GTMT4.js +8 -0
- package/dist/notion-UK4GTMT4.js.map +1 -0
- package/dist/oci-NURLWPL2.js +10 -0
- package/dist/oci-NURLWPL2.js.map +1 -0
- package/dist/postgres-JNFMPAO2.js +7 -0
- package/dist/postgres-JNFMPAO2.js.map +1 -0
- package/dist/qingstor-W55D5YFO.js +10 -0
- package/dist/qingstor-W55D5YFO.js.map +1 -0
- package/dist/r2-FSZK7IFI.js +10 -0
- package/dist/r2-FSZK7IFI.js.map +1 -0
- package/dist/redis-S6GIPA4Z.js +8 -0
- package/dist/redis-S6GIPA4Z.js.map +1 -0
- package/dist/s3-GMPUJ65D.js +8 -0
- package/dist/s3-GMPUJ65D.js.map +1 -0
- package/dist/scaleway-5VM55Y6D.js +10 -0
- package/dist/scaleway-5VM55Y6D.js.map +1 -0
- package/dist/seaweedfs-J3EPUEPE.js +10 -0
- package/dist/seaweedfs-J3EPUEPE.js.map +1 -0
- package/dist/slack-FVBXY7KD.js +8 -0
- package/dist/slack-FVBXY7KD.js.map +1 -0
- package/dist/ssh-GCXETJ3Z.js +9 -0
- package/dist/ssh-GCXETJ3Z.js.map +1 -0
- package/dist/supabase-HLWNHBBE.js +10 -0
- package/dist/supabase-HLWNHBBE.js.map +1 -0
- package/dist/tencent-YDO73XBD.js +10 -0
- package/dist/tencent-YDO73XBD.js.map +1 -0
- package/dist/trello-CQ53BQUL.js +8 -0
- package/dist/trello-CQ53BQUL.js.map +1 -0
- package/dist/wasabi-SOZKPMRQ.js +10 -0
- package/dist/wasabi-SOZKPMRQ.js.map +1 -0
- package/package.json +39 -13
- package/dist/box-4P7DCJH7.js +0 -8
- package/dist/chunk-35PVZRWU.js +0 -24
- package/dist/chunk-35PVZRWU.js.map +0 -1
- package/dist/chunk-3PBSL7BS.js.map +0 -1
- package/dist/chunk-3Y625AUP.js +0 -24
- package/dist/chunk-3Y625AUP.js.map +0 -1
- package/dist/chunk-5E6BULAK.js.map +0 -1
- package/dist/chunk-5ITBZN55.js +0 -24
- package/dist/chunk-5ITBZN55.js.map +0 -1
- package/dist/chunk-6M2NL363.js.map +0 -1
- package/dist/chunk-6M3QVVOH.js +0 -32
- package/dist/chunk-6M3QVVOH.js.map +0 -1
- package/dist/chunk-6VKNSO6U.js.map +0 -1
- package/dist/chunk-6Y6GWMFF.js +0 -24
- package/dist/chunk-6Y6GWMFF.js.map +0 -1
- package/dist/chunk-7QXJ4KWQ.js.map +0 -1
- package/dist/chunk-ALAMUIGJ.js.map +0 -1
- package/dist/chunk-DCJQ2PIX.js.map +0 -1
- package/dist/chunk-EKPH4MMD.js +0 -27
- package/dist/chunk-EKPH4MMD.js.map +0 -1
- package/dist/chunk-FZ2GJ4BJ.js +0 -29
- package/dist/chunk-FZ2GJ4BJ.js.map +0 -1
- package/dist/chunk-G7O6DAWU.js.map +0 -1
- package/dist/chunk-GCB4JUF7.js.map +0 -1
- package/dist/chunk-GKQNMLQU.js +0 -7757
- package/dist/chunk-GKQNMLQU.js.map +0 -1
- package/dist/chunk-GO67AOYK.js +0 -24
- package/dist/chunk-GO67AOYK.js.map +0 -1
- package/dist/chunk-GPF66TH2.js +0 -24
- package/dist/chunk-GPF66TH2.js.map +0 -1
- package/dist/chunk-H3JR7MN3.js.map +0 -1
- package/dist/chunk-H74QYTN7.js.map +0 -1
- package/dist/chunk-HEQL3LPK.js.map +0 -1
- package/dist/chunk-HXWGG4K7.js.map +0 -1
- package/dist/chunk-I4RRGZGB.js +0 -24
- package/dist/chunk-I4RRGZGB.js.map +0 -1
- package/dist/chunk-ICSS5ETT.js.map +0 -1
- package/dist/chunk-KINMBZHC.js +0 -18
- package/dist/chunk-KINMBZHC.js.map +0 -1
- package/dist/chunk-LBBM3LKK.js.map +0 -1
- package/dist/chunk-LPMPTQYP.js.map +0 -1
- package/dist/chunk-M42JTWPR.js +0 -2794
- package/dist/chunk-M42JTWPR.js.map +0 -1
- package/dist/chunk-MVE5VVMQ.js.map +0 -1
- package/dist/chunk-MY3NUJJD.js.map +0 -1
- package/dist/chunk-NOZZFJEB.js.map +0 -1
- package/dist/chunk-OYJXYJTE.js.map +0 -1
- package/dist/chunk-PEZYBKZH.js.map +0 -1
- package/dist/chunk-QWWOBAYU.js +0 -26
- package/dist/chunk-QWWOBAYU.js.map +0 -1
- package/dist/chunk-RQYYYBQG.js +0 -24
- package/dist/chunk-RQYYYBQG.js.map +0 -1
- package/dist/chunk-T2WWAEKH.js +0 -7591
- package/dist/chunk-T2WWAEKH.js.map +0 -1
- package/dist/chunk-UWMOTOXA.js.map +0 -1
- package/dist/chunk-UZZD4MRJ.js.map +0 -1
- package/dist/chunk-V5OLWE7F.js.map +0 -1
- package/dist/chunk-VCLMTMSO.js +0 -23
- package/dist/chunk-VCLMTMSO.js.map +0 -1
- package/dist/chunk-WSDQ2MRG.js.map +0 -1
- package/dist/chunk-XDEEOTVK.js.map +0 -1
- package/dist/chunk-XQUQSNCA.js.map +0 -1
- package/dist/chunk-XVYZO2FG.js +0 -14
- package/dist/chunk-XVYZO2FG.js.map +0 -1
- package/dist/chunk-ZC4KNEOQ.js.map +0 -1
- package/dist/config-6HWSKHEU.js +0 -9
- package/dist/config-6TNFPYZF.js +0 -9
- package/dist/config-BHLXQ3OL.js +0 -9
- package/dist/config-E7UOEWEP.js +0 -9
- package/dist/config-IXLFUSMQ.js +0 -9
- package/dist/config-J3TM7NIS.js +0 -9
- package/dist/config-JXLZ4XEW.js +0 -9
- package/dist/config-KQCEMLNZ.js +0 -9
- package/dist/config-R3XJ5OW4.js +0 -9
- package/dist/config-V7XI5UTG.js +0 -9
- package/dist/config-YLIX3ZBT.js +0 -9
- package/dist/config-Z5JGDOKE.js +0 -9
- package/dist/config-ZCZZAH5W.js +0 -9
- package/dist/config-ZZGIWDUC.js +0 -9
- package/dist/discord-2PWP2MGX.js +0 -8
- package/dist/dropbox-L5DPYGKR.js +0 -8
- package/dist/email-HASRFBKC.js +0 -8
- package/dist/gcs-P5QMKTPR.js +0 -10
- package/dist/gdocs-IF2I35HZ.js +0 -8
- package/dist/gdrive-TAETVCKP.js +0 -8
- package/dist/github-5E6GSCNZ.js +0 -8
- package/dist/github_ci-2DSZI3Y7.js +0 -8
- package/dist/gmail-F5VYGKOT.js +0 -8
- package/dist/gsheets-BAO54CQ7.js +0 -8
- package/dist/gslides-A62CEEMR.js +0 -8
- package/dist/langfuse-YKBYRQLU.js +0 -8
- package/dist/linear-WJDQ6JDE.js +0 -8
- package/dist/mongodb-MK4DVSIK.js +0 -7
- package/dist/oci-KZ7XFZ2X.js +0 -10
- package/dist/postgres-M2N2APFZ.js +0 -7
- package/dist/r2-X4DDNSAZ.js +0 -10
- package/dist/redis-NVCXUUIO.js +0 -7
- package/dist/s3-HVAL7ZX3.js +0 -8
- package/dist/slack-GUQMDGLP.js +0 -8
- package/dist/ssh-LY6WYVVD.js +0 -9
- package/dist/supabase-H3ZP4Y3W.js +0 -10
- package/dist/trello-WR6TEDYD.js +0 -8
- /package/dist/{box-4P7DCJH7.js.map → aliyun-TMZRUYCG.js.map} +0 -0
- /package/dist/{config-5ZPGISS6.js.map → backblaze-OHW57DLK.js.map} +0 -0
- /package/dist/{config-6HWSKHEU.js.map → box-UXTCAFOZ.js.map} +0 -0
- /package/dist/{config-6TNFPYZF.js.map → ceph-TNN4I2FT.js.map} +0 -0
- /package/dist/{config-BHLXQ3OL.js.map → config-34LHOGLM.js.map} +0 -0
- /package/dist/{config-E7UOEWEP.js.map → config-3BBWD5AB.js.map} +0 -0
- /package/dist/{config-FNR6LJ5H.js.map → config-3IVQJBNW.js.map} +0 -0
- /package/dist/{config-HIZHA5VD.js.map → config-4UDVSUQJ.js.map} +0 -0
- /package/dist/{config-HNSDNQZH.js.map → config-CMDBAPDH.js.map} +0 -0
- /package/dist/{config-IXLFUSMQ.js.map → config-CVZ2AGCO.js.map} +0 -0
- /package/dist/{config-J3TM7NIS.js.map → config-D3RLSPNF.js.map} +0 -0
- /package/dist/{config-JXLZ4XEW.js.map → config-DG65OEG3.js.map} +0 -0
- /package/dist/{config-KQCEMLNZ.js.map → config-EIHSP5DZ.js.map} +0 -0
- /package/dist/{config-MOLWOSRG.js.map → config-EO23EY62.js.map} +0 -0
- /package/dist/{config-R3XJ5OW4.js.map → config-GCQK6NJY.js.map} +0 -0
- /package/dist/{config-S47UDVRZ.js.map → config-GE4W4ZJC.js.map} +0 -0
- /package/dist/{config-UKZ72IDO.js.map → config-GHRUKEQ6.js.map} +0 -0
- /package/dist/{config-V7XI5UTG.js.map → config-GVH27UPE.js.map} +0 -0
- /package/dist/{config-YLIX3ZBT.js.map → config-HKRMKD76.js.map} +0 -0
- /package/dist/{config-Z5JGDOKE.js.map → config-HXVYIXP5.js.map} +0 -0
- /package/dist/{config-ZCZZAH5W.js.map → config-IDZMEW73.js.map} +0 -0
- /package/dist/{config-ZZGIWDUC.js.map → config-IJJXGLBQ.js.map} +0 -0
- /package/dist/{discord-2PWP2MGX.js.map → config-IVY5EQQ2.js.map} +0 -0
- /package/dist/{disk-C7TJNU2B.js.map → config-KJOLGVB2.js.map} +0 -0
- /package/dist/{dropbox-L5DPYGKR.js.map → config-KMVCVBYN.js.map} +0 -0
- /package/dist/{email-HASRFBKC.js.map → config-KYTRXAB2.js.map} +0 -0
- /package/dist/{gcs-P5QMKTPR.js.map → config-LHFFXVYI.js.map} +0 -0
- /package/dist/{gdocs-IF2I35HZ.js.map → config-NV5WXP64.js.map} +0 -0
- /package/dist/{gdrive-TAETVCKP.js.map → config-OT2TQQCN.js.map} +0 -0
- /package/dist/{github-5E6GSCNZ.js.map → config-Q45Y46YT.js.map} +0 -0
- /package/dist/{github_ci-2DSZI3Y7.js.map → config-QAA646XB.js.map} +0 -0
- /package/dist/{gmail-F5VYGKOT.js.map → config-QNMKWJ4M.js.map} +0 -0
- /package/dist/{gsheets-BAO54CQ7.js.map → config-QWCY3LBQ.js.map} +0 -0
- /package/dist/{gslides-A62CEEMR.js.map → config-VM526IKB.js.map} +0 -0
- /package/dist/{langfuse-YKBYRQLU.js.map → config-WDAZFXYD.js.map} +0 -0
- /package/dist/{linear-WJDQ6JDE.js.map → config-ZFJYQZCH.js.map} +0 -0
- /package/dist/{mongodb-MK4DVSIK.js.map → config-ZV6G2ZEC.js.map} +0 -0
- /package/dist/{oci-KZ7XFZ2X.js.map → databricks_volume-HNQ4DJVJ.js.map} +0 -0
- /package/dist/{postgres-M2N2APFZ.js.map → digitalocean-6SPR4S7V.js.map} +0 -0
- /package/dist/{r2-X4DDNSAZ.js.map → discord-SAV2RBJV.js.map} +0 -0
- /package/dist/{redis-NVCXUUIO.js.map → disk-POACMF4G.js.map} +0 -0
- /package/dist/{s3-HVAL7ZX3.js.map → dropbox-CQ7MTYX2.js.map} +0 -0
- /package/dist/{slack-GUQMDGLP.js.map → email-KBQ7CXS7.js.map} +0 -0
- /package/dist/{ssh-LY6WYVVD.js.map → gcs-SMIE4VMT.js.map} +0 -0
- /package/dist/{supabase-H3ZP4Y3W.js.map → gdocs-X5Y2SIQX.js.map} +0 -0
- /package/dist/{trello-WR6TEDYD.js.map → gdrive-SIQPRIGI.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resource/ssh/ssh.ts","../src/accessor/ssh.ts","../src/commands/builtin/ssh/basename.ts","../src/commands/builtin/ssh/cat/cat.ts","../src/core/ssh/utils.ts","../src/core/ssh/stream.ts","../src/core/ssh/entry.ts","../src/core/ssh/stat.ts","../src/commands/builtin/ssh/cp.ts","../src/core/ssh/read.ts","../src/core/ssh/write.ts","../src/core/ssh/copy.ts","../src/core/ssh/find.ts","../src/commands/builtin/ssh/dirname.ts","../src/commands/builtin/ssh/du.ts","../src/core/ssh/du.ts","../src/commands/builtin/ssh/file/file.ts","../src/commands/builtin/ssh/find.ts","../src/commands/builtin/ssh/grep/grep.ts","../src/commands/builtin/ssh/head/head.ts","../src/commands/builtin/ssh/jq.ts","../src/commands/builtin/ssh/ls/ls.ts","../src/core/ssh/readdir.ts","../src/commands/builtin/ssh/mkdir.ts","../src/core/ssh/mkdir.ts","../src/commands/builtin/ssh/mv.ts","../src/core/ssh/rename.ts","../src/commands/builtin/ssh/realpath.ts","../src/commands/builtin/ssh/rg.ts","../src/commands/builtin/ssh/rm.ts","../src/core/ssh/rmdir.ts","../src/core/ssh/unlink.ts","../src/core/ssh/rm.ts","../src/commands/builtin/ssh/stat/stat.ts","../src/commands/builtin/ssh/tail/tail.ts","../src/commands/builtin/ssh/touch.ts","../src/core/ssh/exists.ts","../src/commands/builtin/ssh/tree.ts","../src/commands/builtin/ssh/wc/wc.ts","../src/commands/builtin/ssh/index.ts","../src/core/ssh/append.ts","../src/core/ssh/create.ts","../src/core/ssh/glob.ts","../src/core/ssh/truncate.ts","../src/ops/ssh/append.ts","../src/ops/ssh/create.ts","../src/ops/ssh/mkdir.ts","../src/ops/ssh/read.ts","../src/ops/ssh/readdir.ts","../src/ops/ssh/rename.ts","../src/ops/ssh/rmdir.ts","../src/ops/ssh/stat.ts","../src/ops/ssh/truncate.ts","../src/ops/ssh/unlink.ts","../src/ops/ssh/write.ts","../src/ops/ssh/index.ts","../src/resource/ssh/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n type FindOptions,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n} from '@struktoai/mirage-core'\nimport { SSHAccessor } from '../../accessor/ssh.ts'\nimport { SSH_COMMANDS } from '../../commands/builtin/ssh/index.ts'\nimport { appendBytes as appendCore } from '../../core/ssh/append.ts'\nimport { copy as copyCore } from '../../core/ssh/copy.ts'\nimport { create as createCore } from '../../core/ssh/create.ts'\nimport { du as duCore, duAll as duAllCore } from '../../core/ssh/du.ts'\nimport { exists as existsCore } from '../../core/ssh/exists.ts'\nimport { find as findCore, type FindOptions as SshFindOptions } from '../../core/ssh/find.ts'\nimport { resolveGlob as globCore } from '../../core/ssh/glob.ts'\nimport { mkdir as mkdirCore } from '../../core/ssh/mkdir.ts'\nimport { read as readCoreFn } from '../../core/ssh/read.ts'\nimport { readdir as readdirCore } from '../../core/ssh/readdir.ts'\nimport { rename as renameCore } from '../../core/ssh/rename.ts'\nimport { rmR as rmRCore } from '../../core/ssh/rm.ts'\nimport { rmdir as rmdirCore } from '../../core/ssh/rmdir.ts'\nimport { stat as statCore } from '../../core/ssh/stat.ts'\nimport { rangeRead as rangeReadCore, stream as streamCore } from '../../core/ssh/stream.ts'\nimport { truncate as truncateCore } from '../../core/ssh/truncate.ts'\nimport { unlink as unlinkCore } from '../../core/ssh/unlink.ts'\nimport { writeBytes as writeCore } from '../../core/ssh/write.ts'\nimport { SSH_OPS } from '../../ops/ssh/index.ts'\nimport { type SSHConfig, type SSHConfigRedacted, redactSshConfig } from './config.ts'\nimport { SSH_PROMPT } from './prompt.ts'\n\nexport interface SSHResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: SSHConfigRedacted\n}\n\nexport class SSHResource implements Resource {\n readonly kind = ResourceName.SSH\n readonly isRemote: boolean = true\n readonly indexTtl: number = 60\n readonly prompt = SSH_PROMPT\n readonly config: SSHConfig\n readonly accessor: SSHAccessor\n readonly index: IndexCacheStore\n readonly opsMap: Record<string, unknown> = {\n read_bytes: readCoreFn,\n write: writeCore,\n readdir: readdirCore,\n stat: statCore,\n unlink: unlinkCore,\n rmdir: rmdirCore,\n copy: copyCore,\n rename: renameCore,\n mkdir: mkdirCore,\n read_stream: streamCore,\n range_read: rangeReadCore,\n rm_recursive: rmRCore,\n du_total: duCore,\n du_all: duAllCore,\n create: createCore,\n truncate: truncateCore,\n exists: existsCore,\n find_flat: findCore,\n append: appendCore,\n }\n\n constructor(config: SSHConfig) {\n this.config = config\n this.accessor = new SSHAccessor(config)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return this.accessor.close()\n }\n\n ops(): readonly RegisteredOp[] {\n return SSH_OPS\n }\n\n commands(): readonly RegisteredCommand[] {\n return SSH_COMMANDS\n }\n\n streamPath(p: PathSpec): AsyncIterable<Uint8Array> {\n return streamCore(this.accessor, p)\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return readCoreFn(this.accessor, p)\n }\n\n writeFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return writeCore(this.accessor, p, data)\n }\n\n appendFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return appendCore(this.accessor, p, data)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return readdirCore(this.accessor, p)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return statCore(this.accessor, p)\n }\n\n exists(p: PathSpec): Promise<boolean> {\n return existsCore(this.accessor, p)\n }\n\n mkdir(p: PathSpec, options?: { recursive?: boolean }): Promise<void> {\n return mkdirCore(this.accessor, p, options?.recursive === true)\n }\n\n rmdir(p: PathSpec): Promise<void> {\n return rmdirCore(this.accessor, p)\n }\n\n unlink(p: PathSpec): Promise<void> {\n return unlinkCore(this.accessor, p)\n }\n\n rename(src: PathSpec, dst: PathSpec): Promise<void> {\n return renameCore(this.accessor, src, dst)\n }\n\n truncate(p: PathSpec, length: number): Promise<void> {\n return truncateCore(this.accessor, p, length)\n }\n\n copy(src: PathSpec, dst: PathSpec): Promise<void> {\n return copyCore(this.accessor, src, dst)\n }\n\n rmR(p: PathSpec): Promise<void> {\n return rmRCore(this.accessor, p)\n }\n\n du(p: PathSpec): Promise<number> {\n return duCore(this.accessor, p)\n }\n\n find(p: PathSpec, options: FindOptions = {}): Promise<string[]> {\n return findCore(this.accessor, p, options as SshFindOptions)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n try {\n const remote = await statCore(this.accessor, p)\n const mtime = remote.modified ?? ''\n const size = String(remote.size ?? 0)\n return `${mtime}:${size}`\n } catch (err) {\n if ((err as { code?: string }).code === 'ENOENT') return null\n throw err\n }\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective = prefix\n ? paths.map((p) =>\n p.prefix\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return globCore(this.accessor, effective)\n }\n\n // eslint-disable-next-line @typescript-eslint/require-await\n async getState(): Promise<SSHResourceState> {\n return {\n type: this.kind,\n needsOverride: false,\n redactedFields: ['password', 'passphrase'],\n config: redactSshConfig(this.config),\n }\n }\n\n loadState(_state: SSHResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type * as Ssh2Mod from 'ssh2'\nimport type { Client, SFTPWrapper } from 'ssh2'\nimport { Accessor } from '@struktoai/mirage-core'\nimport { homedir } from 'node:os'\nimport { readFileSync } from 'node:fs'\nimport { resolve } from 'node:path'\nimport type { SSHConfig } from '../resource/ssh/config.ts'\n\nfunction expandHome(p: string): string {\n if (p === '~') return homedir()\n if (p.startsWith('~/')) return resolve(homedir(), p.slice(2))\n return p\n}\n\nexport class SSHAccessor extends Accessor {\n private client: Client | null = null\n private sftpClient: SFTPWrapper | null = null\n private connectPromise: Promise<SFTPWrapper> | null = null\n\n constructor(public readonly config: SSHConfig) {\n super()\n }\n\n async sftp(): Promise<SFTPWrapper> {\n if (this.sftpClient !== null) return this.sftpClient\n if (this.connectPromise !== null) return this.connectPromise\n this.connectPromise = this.connect()\n try {\n return await this.connectPromise\n } finally {\n this.connectPromise = null\n }\n }\n\n private async connect(): Promise<SFTPWrapper> {\n let ssh2Mod: typeof Ssh2Mod\n try {\n ssh2Mod = await import('ssh2')\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n throw new Error(`ssh2 is required for the SSH resource — install it as a peer dep: ${msg}`)\n }\n const { Client: ClientCtor } = ssh2Mod\n const c = new ClientCtor()\n const opts: Record<string, unknown> = {\n host: this.config.hostname ?? this.config.host,\n port: this.config.port ?? 22,\n readyTimeout: (this.config.timeout ?? 30) * 1000,\n }\n if (this.config.username !== undefined) opts.username = this.config.username\n if (this.config.password !== undefined) opts.password = this.config.password\n if (this.config.identityFile !== undefined) {\n opts.privateKey = readFileSync(expandHome(this.config.identityFile))\n if (this.config.passphrase !== undefined) opts.passphrase = this.config.passphrase\n }\n return new Promise<SFTPWrapper>((resolveFn, rejectFn) => {\n c.on('ready', () => {\n c.sftp((err: Error | undefined, sftp: SFTPWrapper) => {\n if (err !== undefined) {\n rejectFn(err)\n return\n }\n this.client = c\n this.sftpClient = sftp\n resolveFn(sftp)\n })\n })\n c.on('error', rejectFn)\n c.connect(opts as Parameters<Client['connect']>[0])\n })\n }\n\n close(): Promise<void> {\n if (this.client !== null) {\n this.client.end()\n this.client = null\n this.sftpClient = null\n }\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type Accessor,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\n\nfunction basenameCommand(\n _accessor: Accessor,\n paths: PathSpec[],\n texts: string[],\n _opts: CommandOpts,\n): CommandFnResult {\n const arg = texts[0] ?? paths[0]?.original ?? ''\n const stripped = arg.replace(/\\/+$/, '')\n const idx = stripped.lastIndexOf('/')\n const base = idx >= 0 ? stripped.slice(idx + 1) : stripped\n const out: ByteSource = new TextEncoder().encode(`${base}\\n`)\n return [out, new IOResult()]\n}\n\nexport const SSH_BASENAME = command({\n name: 'basename',\n resource: ResourceName.SSH,\n spec: specOf('basename'),\n fn: basenameCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n AsyncLineIterator,\n CachableAsyncIterator,\n IOResult,\n ProvisionResult,\n ResourceName,\n command,\n concatAggregate,\n resolveSource,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../../core/ssh/stream.ts'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nasync function* numberLinesStream(source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> {\n let num = 1\n const lineIter = new AsyncLineIterator(source)\n for await (const line of lineIter) {\n yield ENC.encode(` ${String(num)}\\t`)\n yield line\n yield ENC.encode('\\n')\n num += 1\n }\n}\n\nexport async function catProvision(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n _opts: CommandOpts,\n): Promise<ProvisionResult> {\n const [first] = paths\n if (first === undefined) return new ProvisionResult({ command: 'cat' })\n try {\n const s = await sshStat(accessor, first)\n return new ProvisionResult({\n command: `cat ${first.original}`,\n networkReadLow: s.size ?? 0,\n networkReadHigh: s.size ?? 0,\n readOps: 1,\n })\n } catch {\n return new ProvisionResult({ command: 'cat' })\n }\n}\n\nasync function* chainStreams(\n streams: readonly AsyncIterable<Uint8Array>[],\n): AsyncIterable<Uint8Array> {\n for (const s of streams) {\n for await (const chunk of s) yield chunk\n }\n}\n\nasync function catCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const nFlag = opts.flags.n === true\n if (paths.length > 0) {\n for (const p of paths) await sshStat(accessor, p)\n const reads: Record<string, ByteSource> = {}\n const cacheKeys: string[] = []\n const outputs: AsyncIterable<Uint8Array>[] = []\n for (const p of paths) {\n const cachable = new CachableAsyncIterator(sshStream(accessor, p))\n reads[p.stripPrefix] = cachable\n cacheKeys.push(p.stripPrefix)\n outputs.push(cachable)\n }\n const merged = chainStreams(outputs)\n const out: ByteSource = nFlag ? numberLinesStream(merged) : merged\n return [out, new IOResult({ reads, cache: cacheKeys })]\n }\n try {\n const source = resolveSource(opts.stdin, 'cat: missing operand')\n const out: ByteSource = nFlag ? numberLinesStream(source) : source\n return [out, new IOResult()]\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(`${msg}\\n`) })]\n }\n}\n\nexport const SSH_CAT = command({\n name: 'cat',\n resource: ResourceName.SSH,\n spec: specOf('cat'),\n fn: catCommand,\n provision: catProvision,\n aggregate: concatAggregate,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\n\nconst S_IFMT = 0o170000\nconst S_IFDIR = 0o040000\nconst S_IFREG = 0o100000\n\nexport function stripPrefix(p: PathSpec): string {\n if (p.prefix && p.original.startsWith(p.prefix)) {\n return p.original.slice(p.prefix.length) || '/'\n }\n return p.original\n}\n\nexport function joinRoot(root: string, rel: string): string {\n const r = root.replace(/\\/+$/, '')\n const stripped = rel.replace(/^\\/+/, '')\n if (stripped === '') return r === '' ? '/' : r\n if (r === '') return `/${stripped}`\n return `${r}/${stripped}`\n}\n\nexport function enoent(path: string): Error & { code: 'ENOENT' } {\n const err = new Error(`file not found: ${path}`) as Error & { code: 'ENOENT' }\n err.code = 'ENOENT'\n return err\n}\n\nexport function isNoSuchFile(err: unknown): boolean {\n if (err === null || err === undefined) return false\n if (typeof err !== 'object') return false\n const code = (err as { code?: unknown }).code\n return code === 2\n}\n\nexport function isDirectoryAttrs(attrs: { mode?: number }): boolean {\n if (attrs.mode === undefined) return false\n return (attrs.mode & S_IFMT) === S_IFDIR\n}\n\nexport function isFileAttrs(attrs: { mode?: number }): boolean {\n if (attrs.mode === undefined) return false\n return (attrs.mode & S_IFMT) === S_IFREG\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function* stream(accessor: SSHAccessor, p: PathSpec): AsyncIterable<Uint8Array> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const rs = sftp.createReadStream(remote)\n try {\n for await (const chunk of rs) {\n const buf = chunk as Buffer\n yield new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n }\n } catch (err) {\n if (isNoSuchFile(err)) throw enoent(virtual)\n throw err\n }\n}\n\nexport async function rangeRead(\n accessor: SSHAccessor,\n p: PathSpec,\n start: number,\n end: number,\n): Promise<Uint8Array> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const rs = sftp.createReadStream(remote, { start, end: end - 1 })\n const chunks: Uint8Array[] = []\n let total = 0\n try {\n for await (const chunk of rs) {\n const buf = chunk as Buffer\n const u8 = new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength)\n chunks.push(u8)\n total += u8.byteLength\n }\n } catch (err) {\n if (isNoSuchFile(err)) throw enoent(virtual)\n throw err\n }\n const out = new Uint8Array(total)\n let offset = 0\n for (const c of chunks) {\n out.set(c, offset)\n offset += c.byteLength\n }\n return out\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { FileStat, FileType, guessType } from '@struktoai/mirage-core'\nimport { isDirectoryAttrs } from './utils.ts'\n\nexport interface SshAttrs {\n size?: number\n mode?: number\n mtime?: number\n atime?: number\n uid?: number\n gid?: number\n}\n\nexport function attrsToFileStat(name: string, attrs: SshAttrs): FileStat {\n const modified = attrs.mtime !== undefined ? new Date(attrs.mtime * 1000).toISOString() : null\n const extra: Record<string, unknown> = {}\n if (attrs.mode !== undefined) extra.mode = attrs.mode\n if (attrs.uid !== undefined) extra.uid = attrs.uid\n if (attrs.gid !== undefined) extra.gid = attrs.gid\n if (isDirectoryAttrs(attrs)) {\n return new FileStat({\n name,\n size: null,\n modified,\n type: FileType.DIRECTORY,\n extra,\n })\n }\n return new FileStat({\n name,\n size: attrs.size ?? null,\n modified,\n fingerprint: null,\n type: guessType(name),\n extra,\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { FileStat, PathSpec } from '@struktoai/mirage-core'\nimport type { Stats } from 'ssh2'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { attrsToFileStat } from './entry.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function stat(accessor: SSHAccessor, p: PathSpec): Promise<FileStat> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const attrs = await new Promise<Stats>((resolveFn, rejectFn) => {\n sftp.lstat(remote, (err, stats) => {\n if (err !== undefined) {\n if (isNoSuchFile(err)) rejectFn(enoent(virtual))\n else rejectFn(err)\n return\n }\n resolveFn(stats)\n })\n })\n const cleaned = virtual.replace(/\\/+$/, '')\n const name = cleaned.length === 0 ? '/' : (cleaned.split('/').pop() ?? '/')\n return attrsToFileStat(name, attrs)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport { copy as sshCopy } from '../../../core/ssh/copy.ts'\nimport { find as sshFind } from '../../../core/ssh/find.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nasync function exists(accessor: SSHAccessor, path: PathSpec): Promise<boolean> {\n try {\n await sshStat(accessor, path)\n return true\n } catch {\n return false\n }\n}\n\nfunction toPathSpec(strPath: string, prefix: string): PathSpec {\n return new PathSpec({\n original: strPath,\n directory: strPath,\n resolved: false,\n prefix,\n })\n}\n\nasync function cpCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length < 2) {\n return [\n null,\n new IOResult({\n exitCode: 1,\n stderr: new TextEncoder().encode('cp: missing operand\\n'),\n }),\n ]\n }\n const recursive = opts.flags.r === true || opts.flags.R === true || opts.flags.a === true\n const noClobber = opts.flags.n === true\n const verbose = opts.flags.v === true\n const dst = paths[paths.length - 1]\n if (dst === undefined) return [null, new IOResult()]\n const lines: string[] = []\n\n if (recursive) {\n const src = paths[0]\n if (src === undefined) return [null, new IOResult()]\n const srcBase = src.stripPrefix.replace(/\\/+$/, '')\n const dstBase = dst.stripPrefix.replace(/\\/+$/, '')\n const entries = await sshFind(accessor, src, { type: 'f' })\n for (const entry of entries) {\n const rel = entry.slice(srcBase.length)\n const dstPath = dstBase + rel\n const dstSpec = toPathSpec(dstPath, dst.prefix)\n if (noClobber && (await exists(accessor, dstSpec))) continue\n const srcSpec = toPathSpec(entry, src.prefix)\n await sshCopy(accessor, srcSpec, dstSpec)\n if (verbose) lines.push(`${entry} -> ${dstPath}`)\n }\n const out = lines.length > 0 ? new TextEncoder().encode(lines.join('\\n') + '\\n') : null\n return [out, new IOResult()]\n }\n\n const sources = paths.slice(0, -1)\n for (const src of sources) {\n if (noClobber && (await exists(accessor, dst))) continue\n await sshCopy(accessor, src, dst)\n if (verbose) lines.push(`${src.original} -> ${dst.original}`)\n }\n const out = lines.length > 0 ? new TextEncoder().encode(lines.join('\\n') + '\\n') : null\n return [out, new IOResult()]\n}\n\nexport const SSH_CP = command({\n name: 'cp',\n resource: ResourceName.SSH,\n spec: specOf('cp'),\n fn: cpCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function read(accessor: SSHAccessor, p: PathSpec): Promise<Uint8Array> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n return new Promise<Uint8Array>((resolveFn, rejectFn) => {\n sftp.readFile(remote, (err, buf) => {\n if (err !== undefined) {\n if (isNoSuchFile(err)) rejectFn(enoent(virtual))\n else rejectFn(err)\n return\n }\n resolveFn(new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength))\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { joinRoot, stripPrefix } from './utils.ts'\n\nexport async function writeBytes(\n accessor: SSHAccessor,\n p: PathSpec,\n data: Uint8Array,\n): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n await new Promise<void>((resolveFn, rejectFn) => {\n sftp.writeFile(remote, Buffer.from(data), (err) => {\n if (err) rejectFn(err)\n else resolveFn()\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { read } from './read.ts'\nimport { writeBytes } from './write.ts'\n\nexport async function copy(accessor: SSHAccessor, src: PathSpec, dst: PathSpec): Promise<void> {\n const data = await read(accessor, src)\n await writeBytes(accessor, dst, data)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { FileEntryWithStats } from 'ssh2'\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { isDirectoryAttrs, joinRoot, stripPrefix } from './utils.ts'\n\nexport interface FindOptions {\n name?: string | null\n type?: 'f' | 'd' | 'file' | 'directory' | null\n minSize?: number | null\n maxSize?: number | null\n maxDepth?: number | null\n minDepth?: number | null\n nameExclude?: string | null\n orNames?: string[] | null\n iname?: string | null\n pathPattern?: string | null\n mtimeMin?: number | null\n mtimeMax?: number | null\n}\n\ninterface WalkCtx {\n accessor: SSHAccessor\n options: FindOptions\n results: string[]\n baseDepth: number\n}\n\nfunction fnmatch(name: string, pattern: string): boolean {\n let re = '^'\n for (const ch of pattern) {\n if (ch === '*') re += '.*'\n else if (ch === '?') re += '.'\n else if (/[.+^${}()|[\\]\\\\]/.test(ch)) re += '\\\\' + ch\n else re += ch\n }\n re += '$'\n return new RegExp(re).test(name)\n}\n\nfunction norm(p: string): string {\n return `/${p.replace(/^\\/+|\\/+$/g, '')}`\n}\n\nfunction isFileType(t: FindOptions['type']): boolean {\n return t === 'f' || t === 'file'\n}\n\nfunction isDirType(t: FindOptions['type']): boolean {\n return t === 'd' || t === 'directory'\n}\n\nfunction matches(\n entry: FileEntryWithStats,\n entryPath: string,\n isDir: boolean,\n depth: number,\n opts: FindOptions,\n): boolean {\n if (opts.minDepth !== null && opts.minDepth !== undefined && depth < opts.minDepth) return false\n if (isFileType(opts.type) && isDir) return false\n if (isDirType(opts.type) && !isDir) return false\n const basename = entryPath.slice(entryPath.lastIndexOf('/') + 1)\n if (opts.orNames !== null && opts.orNames !== undefined && opts.orNames.length > 0) {\n if (!opts.orNames.some((pat) => fnmatch(basename, pat))) return false\n } else if (opts.name !== null && opts.name !== undefined) {\n if (!fnmatch(basename, opts.name)) return false\n }\n if (\n opts.iname !== null &&\n opts.iname !== undefined &&\n !fnmatch(basename.toLowerCase(), opts.iname.toLowerCase())\n ) {\n return false\n }\n if (\n opts.nameExclude !== null &&\n opts.nameExclude !== undefined &&\n fnmatch(basename, opts.nameExclude)\n ) {\n return false\n }\n if (\n opts.pathPattern !== null &&\n opts.pathPattern !== undefined &&\n !fnmatch(entryPath, opts.pathPattern)\n ) {\n return false\n }\n const size = entry.attrs.size\n if (opts.minSize !== null && opts.minSize !== undefined && size < opts.minSize) return false\n if (opts.maxSize !== null && opts.maxSize !== undefined && size > opts.maxSize) return false\n if (\n (opts.mtimeMin !== null && opts.mtimeMin !== undefined) ||\n (opts.mtimeMax !== null && opts.mtimeMax !== undefined)\n ) {\n const mtime = entry.attrs.mtime\n if (opts.mtimeMin !== null && opts.mtimeMin !== undefined && mtime < opts.mtimeMin) return false\n if (opts.mtimeMax !== null && opts.mtimeMax !== undefined && mtime > opts.mtimeMax) return false\n }\n return true\n}\n\nasync function readRemoteDir(\n accessor: SSHAccessor,\n remote: string,\n): Promise<FileEntryWithStats[] | null> {\n const sftp = await accessor.sftp()\n return new Promise<FileEntryWithStats[] | null>((resolveFn, rejectFn) => {\n sftp.readdir(remote, (err, entries) => {\n if (err !== undefined) {\n const code = (err as { code?: unknown }).code\n if (code === 2) {\n resolveFn(null)\n return\n }\n rejectFn(err)\n return\n }\n resolveFn(entries)\n })\n })\n}\n\nasync function walk(ctx: WalkCtx, virtual: string, depth: number): Promise<void> {\n const opts = ctx.options\n if (opts.maxDepth !== null && opts.maxDepth !== undefined && depth > opts.maxDepth) return\n const remote = joinRoot(ctx.accessor.config.root ?? '/', virtual)\n const entries = await readRemoteDir(ctx.accessor, remote)\n if (entries === null) return\n for (const entry of entries) {\n if (entry.filename === '.' || entry.filename === '..') continue\n const childPath = virtual === '/' ? `/${entry.filename}` : `${virtual}/${entry.filename}`\n const isDir = isDirectoryAttrs(entry.attrs)\n if (isFileType(opts.type) && isDir) {\n await walk(ctx, childPath, depth + 1)\n continue\n }\n if (matches(entry, childPath, isDir, depth + 1, opts)) {\n ctx.results.push(childPath)\n }\n if (isDir) {\n await walk(ctx, childPath, depth + 1)\n }\n }\n}\n\nexport async function find(\n accessor: SSHAccessor,\n p: PathSpec,\n options: FindOptions = {},\n): Promise<string[]> {\n const virtual = norm(stripPrefix(p))\n const results: string[] = []\n const baseDepth = (virtual.match(/\\//g) ?? []).length\n await walk({ accessor, options, results, baseDepth }, virtual, 0)\n results.sort()\n return results\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type Accessor,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\n\nfunction dirnameCommand(\n _accessor: Accessor,\n paths: PathSpec[],\n texts: string[],\n _opts: CommandOpts,\n): CommandFnResult {\n const arg = texts[0] ?? paths[0]?.original ?? ''\n const stripped = arg.replace(/\\/+$/, '')\n const idx = stripped.lastIndexOf('/')\n const dir = idx > 0 ? stripped.slice(0, idx) : idx === 0 ? '/' : '.'\n const out: ByteSource = new TextEncoder().encode(`${dir}\\n`)\n return [out, new IOResult()]\n}\n\nexport const SSH_DIRNAME = command({\n name: 'dirname',\n resource: ResourceName.SSH,\n spec: specOf('dirname'),\n fn: dirnameCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport { du as sshDu, duAll as sshDuAll } from '../../../core/ssh/du.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nfunction humanSize(n: number): string {\n const units = ['', 'K', 'M', 'G', 'T']\n let v = n\n let i = 0\n while (v >= 1024 && i < units.length - 1) {\n v /= 1024\n i += 1\n }\n const s = v >= 10 || i === 0 ? Math.round(v).toString() : v.toFixed(1)\n return `${s}${units[i] ?? ''}`\n}\n\nfunction depthOf(entryPath: string, basePath: string): number {\n const base = basePath.replace(/\\/+$/, '')\n const rel = entryPath.replace(/\\/+$/, '').slice(base.length)\n if (!rel) return 0\n return (rel.replace(/^\\/+|\\/+$/g, '').match(/\\//g) ?? []).length + 1\n}\n\nasync function duCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const human = opts.flags.h === true\n const summarize = opts.flags.s === true\n const all = opts.flags.a === true\n const cumulative = opts.flags.c === true\n const maxDepthRaw = opts.flags['max-depth']\n const maxDepth = typeof maxDepthRaw === 'string' ? Number.parseInt(maxDepthRaw, 10) : null\n const fmt = (size: number): string => (human ? humanSize(size) : String(size))\n const targets =\n paths.length > 0 ? paths : [new PathSpec({ original: '/', directory: '/', resolved: false })]\n const path = targets[0]\n if (path === undefined) return [null, new IOResult()]\n\n if (summarize) {\n const total = await sshDu(accessor, path)\n let output = `${fmt(total)}\\t${path.original}`\n if (cumulative) output += `\\n${fmt(total)}\\ttotal`\n return [new TextEncoder().encode(output) as ByteSource, new IOResult()]\n }\n\n const [allEntriesRaw, totalFromAll] = await sshDuAll(accessor, path)\n let entries = allEntriesRaw\n if (entries.length === 0) {\n const total = await sshDu(accessor, path)\n let output = `${fmt(total)}\\t${path.original}`\n if (cumulative) output += `\\n${fmt(total)}\\ttotal`\n return [new TextEncoder().encode(output) as ByteSource, new IOResult()]\n }\n if (!all) {\n entries = entries.filter(([p]) => p === path.original)\n }\n if (maxDepth !== null) {\n entries = entries.filter(([p]) => depthOf(p, path.original) <= maxDepth)\n }\n if (entries.length === 0) {\n const total = totalFromAll !== 0 ? totalFromAll : await sshDu(accessor, path)\n let output = `${fmt(total)}\\t${path.original}`\n if (cumulative) output += `\\n${fmt(total)}\\ttotal`\n return [new TextEncoder().encode(output) as ByteSource, new IOResult()]\n }\n const lines: string[] = entries.map(([p, sz]) => `${fmt(sz)}\\t${p}`)\n if (cumulative) {\n const grand = entries.reduce((acc, [, sz]) => acc + sz, 0)\n lines.push(`${fmt(grand)}\\ttotal`)\n }\n return [new TextEncoder().encode(lines.join('\\n')) as ByteSource, new IOResult()]\n}\n\nexport const SSH_DU = command({\n name: 'du',\n resource: ResourceName.SSH,\n spec: specOf('du'),\n fn: duCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { FileEntryWithStats } from 'ssh2'\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { isDirectoryAttrs, isFileAttrs, joinRoot, stripPrefix } from './utils.ts'\n\nfunction norm(p: string): string {\n return `/${p.replace(/^\\/+|\\/+$/g, '')}`\n}\n\nasync function readRemoteDir(\n accessor: SSHAccessor,\n remote: string,\n): Promise<FileEntryWithStats[] | null> {\n const sftp = await accessor.sftp()\n return new Promise<FileEntryWithStats[] | null>((resolveFn, rejectFn) => {\n sftp.readdir(remote, (err, entries) => {\n if (err !== undefined) {\n const code = (err as { code?: unknown }).code\n if (code === 2) {\n resolveFn(null)\n return\n }\n rejectFn(err)\n return\n }\n resolveFn(entries)\n })\n })\n}\n\nasync function statRemote(\n accessor: SSHAccessor,\n remote: string,\n): Promise<{ mode: number; size: number } | null> {\n const sftp = await accessor.sftp()\n return new Promise<{ mode: number; size: number } | null>((resolveFn, rejectFn) => {\n sftp.lstat(remote, (err, stats) => {\n if (err !== undefined) {\n const code = (err as { code?: unknown }).code\n if (code === 2) {\n resolveFn(null)\n return\n }\n rejectFn(err)\n return\n }\n resolveFn({ mode: stats.mode, size: stats.size })\n })\n })\n}\n\nasync function walkSizes(accessor: SSHAccessor, virtual: string): Promise<number> {\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const st = await statRemote(accessor, remote)\n if (st === null) return 0\n if (isFileAttrs(st)) return st.size\n if (!isDirectoryAttrs(st)) return 0\n const entries = await readRemoteDir(accessor, remote)\n if (entries === null) return 0\n let total = 0\n for (const entry of entries) {\n if (entry.filename === '.' || entry.filename === '..') continue\n const child = virtual === '/' ? `/${entry.filename}` : `${virtual}/${entry.filename}`\n if (isDirectoryAttrs(entry.attrs)) {\n total += await walkSizes(accessor, child)\n } else {\n total += entry.attrs.size\n }\n }\n return total\n}\n\nasync function walkAll(\n accessor: SSHAccessor,\n virtual: string,\n entries: [string, number][],\n): Promise<number> {\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const st = await statRemote(accessor, remote)\n if (st === null) return 0\n if (isFileAttrs(st)) {\n entries.push([virtual, st.size])\n return st.size\n }\n if (!isDirectoryAttrs(st)) return 0\n const list = await readRemoteDir(accessor, remote)\n if (list === null) return 0\n let total = 0\n for (const entry of list) {\n if (entry.filename === '.' || entry.filename === '..') continue\n const child = virtual === '/' ? `/${entry.filename}` : `${virtual}/${entry.filename}`\n if (isDirectoryAttrs(entry.attrs)) {\n total += await walkAll(accessor, child, entries)\n } else {\n const size = entry.attrs.size\n entries.push([child, size])\n total += size\n }\n }\n return total\n}\n\nexport async function du(accessor: SSHAccessor, p: PathSpec): Promise<number> {\n const virtual = stripPrefix(p)\n return walkSizes(accessor, virtual)\n}\n\nexport async function duAll(\n accessor: SSHAccessor,\n p: PathSpec,\n): Promise<[entries: [string, number][], total: number]> {\n const virtual = norm(stripPrefix(p))\n const entries: [string, number][] = []\n const total = await walkAll(accessor, virtual, entries)\n entries.sort((a, b) => (a[0] < b[0] ? -1 : a[0] > b[0] ? 1 : 0))\n return [entries, total]\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n ResourceName,\n command,\n detectFileType,\n formatFileResult,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport { read as sshRead } from '../../../../core/ssh/read.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nasync function fileCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('file: missing operand\\n') })]\n }\n const brief = opts.flags.b === true\n const mime = opts.flags.i === true\n const lines: string[] = []\n for (const p of paths) {\n const s = await sshStat(accessor, p)\n if (s.type === FileType.DIRECTORY) {\n lines.push(formatFileResult(p.original, FileType.DIRECTORY, brief, mime))\n continue\n }\n let header: Uint8Array\n try {\n const raw = await sshRead(accessor, p)\n header = raw.subarray(0, 512)\n } catch {\n header = new Uint8Array(0)\n }\n const result = detectFileType(header, s)\n lines.push(formatFileResult(p.original, result, brief, mime))\n }\n const out: ByteSource = ENC.encode(lines.join('\\n'))\n return [out, new IOResult()]\n}\n\nexport const SSH_FILE = command({\n name: 'file',\n resource: ResourceName.SSH,\n spec: specOf('file'),\n fn: fileCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport { find as sshFind } from '../../../core/ssh/find.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nfunction parseSize(spec: string): [number | null, number | null] {\n const suffixes: Record<string, number> = { c: 1, k: 1024, M: 1024 ** 2, G: 1024 ** 3 }\n const sign = spec.startsWith('+') ? '+' : spec.startsWith('-') ? '-' : ''\n const raw = sign === '' ? spec : spec.slice(1)\n const lastChar = raw.slice(-1)\n const mult = suffixes[lastChar] ?? 1\n const numPart = lastChar in suffixes ? raw.slice(0, -1) : raw\n const num = Number.parseInt(numPart, 10) * mult\n if (sign === '+') return [num, null]\n if (sign === '-') return [null, num]\n return [num, num]\n}\n\nfunction parseMtime(spec: string): [number | null, number | null] {\n const now = Date.now() / 1000\n const day = 86_400\n const n = Number.parseInt(spec.replace(/^[+-]/, ''), 10)\n if (spec.startsWith('+')) return [null, now - n * day]\n if (spec.startsWith('-')) return [now - n * day, null]\n return [now - (n + 1) * day, now - n * day]\n}\n\nfunction extractNotName(texts: readonly string[]): string | null {\n for (let i = 0; i < texts.length; i++) {\n const pat = texts[i + 2]\n if (texts[i] === '-not' && texts[i + 1] === '-name' && pat !== undefined) {\n return pat\n }\n }\n return null\n}\n\nfunction extractOrNames(name: string | null, texts: readonly string[]): string[] {\n const names: string[] = []\n if (name !== null) names.push(name)\n let i = 0\n while (i < texts.length) {\n const pat = texts[i + 2]\n if (texts[i] === '-or' && texts[i + 1] === '-name' && pat !== undefined) {\n names.push(pat)\n i += 3\n } else {\n i += 1\n }\n }\n return names\n}\n\nasync function findCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const nameFlag = typeof opts.flags.name === 'string' ? opts.flags.name : null\n const inameFlag = typeof opts.flags.iname === 'string' ? opts.flags.iname : null\n const typeFlag = typeof opts.flags.type === 'string' ? opts.flags.type : null\n const pathFlag = typeof opts.flags.path === 'string' ? opts.flags.path : null\n const maxDepthFlag = typeof opts.flags.maxdepth === 'string' ? opts.flags.maxdepth : null\n const minDepthFlag = typeof opts.flags.mindepth === 'string' ? opts.flags.mindepth : null\n const sizeFlag = typeof opts.flags.size === 'string' ? opts.flags.size : null\n const mtimeFlag = typeof opts.flags.mtime === 'string' ? opts.flags.mtime : null\n const targets =\n paths.length > 0 ? paths : [new PathSpec({ original: '/', directory: '/', resolved: false })]\n const findType: 'f' | 'd' | null = typeFlag === 'f' ? 'f' : typeFlag === 'd' ? 'd' : null\n const maxDepth = maxDepthFlag !== null ? Number.parseInt(maxDepthFlag, 10) : null\n const minDepth = minDepthFlag !== null ? Number.parseInt(minDepthFlag, 10) : null\n const [minSize, maxSize] = sizeFlag !== null ? parseSize(sizeFlag) : [null, null]\n const [mtimeMin, mtimeMax] = mtimeFlag !== null ? parseMtime(mtimeFlag) : [null, null]\n const nameExclude = extractNotName(texts)\n const orNames = extractOrNames(nameFlag, texts)\n const matches: string[] = []\n for (const root of targets) {\n let keys: string[]\n try {\n keys = await sshFind(accessor, root, {\n name: nameFlag,\n iname: inameFlag,\n type: findType,\n ...(maxDepth !== null ? { maxDepth } : {}),\n ...(minDepth !== null ? { minDepth } : {}),\n ...(minSize !== null ? { minSize } : {}),\n ...(maxSize !== null ? { maxSize } : {}),\n ...(mtimeMin !== null ? { mtimeMin } : {}),\n ...(mtimeMax !== null ? { mtimeMax } : {}),\n ...(nameExclude !== null ? { nameExclude } : {}),\n ...(pathFlag !== null ? { pathPattern: pathFlag } : {}),\n ...(orNames.length > 1 ? { orNames } : {}),\n })\n } catch {\n continue\n }\n const rootKey = root.stripPrefix.replace(/\\/+$/, '') || '/'\n for (const key of keys) {\n const displayPath =\n root.original === '/'\n ? key\n : root.original.replace(/\\/+$/, '') + key.slice(rootKey === '/' ? 0 : rootKey.length)\n matches.push(displayPath)\n }\n }\n matches.sort()\n const out: ByteSource = new TextEncoder().encode(matches.join('\\n'))\n return [out, new IOResult()]\n}\n\nexport const SSH_FIND = command({\n name: 'find',\n resource: ResourceName.SSH,\n spec: specOf('find'),\n fn: findCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n compilePattern,\n exitOnEmpty,\n grepLines,\n grepStream,\n materialize,\n prefixAggregate,\n quietMatch,\n resolveSource,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../../core/ssh/stream.ts'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport { find as sshFind } from '../../../../core/ssh/find.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\nfunction getPattern(texts: readonly string[], flags: Record<string, string | boolean>): string {\n if (typeof flags.e === 'string') return flags.e\n if (texts.length > 0 && texts[0] !== undefined) return texts[0]\n throw new Error('grep: usage: grep [flags] pattern [path]')\n}\n\ninterface FlagSet {\n ignoreCase: boolean\n invert: boolean\n lineNumbers: boolean\n countOnly: boolean\n filesOnly: boolean\n wholeWord: boolean\n fixedString: boolean\n onlyMatching: boolean\n maxCount: number | null\n quiet: boolean\n afterContext: number\n beforeContext: number\n}\n\nfunction parseFlags(flags: Record<string, string | boolean>): FlagSet {\n const toInt = (v: string | boolean | undefined): number | null =>\n typeof v === 'string' ? Number.parseInt(v, 10) : null\n const aCtx = toInt(flags.A)\n const bCtx = toInt(flags.B)\n const cCtx = toInt(flags.C)\n return {\n ignoreCase: flags.i === true,\n invert: flags.v === true,\n lineNumbers: flags.n === true,\n countOnly: flags.c === true,\n filesOnly: flags.args_l === true || flags.l === true,\n wholeWord: flags.w === true,\n fixedString: flags.F === true,\n onlyMatching: flags.o === true,\n maxCount: toInt(flags.m),\n quiet: flags.q === true,\n afterContext: aCtx ?? cCtx ?? 0,\n beforeContext: bCtx ?? cCtx ?? 0,\n }\n}\n\nasync function readFile(accessor: SSHAccessor, p: PathSpec): Promise<Uint8Array> {\n return materialize(sshStream(accessor, p))\n}\n\nfunction splitLinesNoTrailing(text: string): string[] {\n const stripped = text.endsWith('\\n') ? text.slice(0, -1) : text\n return stripped === '' ? [] : stripped.split('\\n')\n}\n\nasync function expandRecursive(accessor: SSHAccessor, paths: PathSpec[]): Promise<PathSpec[]> {\n const expanded: PathSpec[] = []\n for (const p of paths) {\n try {\n const st = await sshStat(accessor, p)\n if (st.type === FileType.DIRECTORY) {\n const entries = await sshFind(accessor, p, { type: 'f' })\n for (const entry of entries) {\n expanded.push(\n new PathSpec({\n original: entry,\n directory: entry,\n resolved: false,\n prefix: p.prefix,\n }),\n )\n }\n } else {\n expanded.push(p)\n }\n } catch {\n expanded.push(p)\n }\n }\n return expanded\n}\n\nasync function grepImpl(\n name: string,\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n let pattern: string\n try {\n pattern = getPattern(texts, opts.flags)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode(`${msg}\\n`) })]\n }\n const f = parseFlags(opts.flags)\n const recursive = opts.flags.r === true || opts.flags.R === true\n\n if (recursive && paths.length > 0) {\n const pat = compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord)\n const expanded = await expandRecursive(accessor, paths)\n const allResults: string[] = []\n for (const p of expanded) {\n const data = splitLinesNoTrailing(DEC.decode(await readFile(accessor, p)))\n const hits = grepLines(p.original, data, pat, f)\n if (f.countOnly) {\n if (hits.length > 0) allResults.push(`${p.original}:${hits[0] ?? ''}`)\n } else if (f.filesOnly) {\n for (const h of hits) allResults.push(h)\n } else {\n for (const h of hits) allResults.push(`${p.original}:${h}`)\n }\n }\n if (allResults.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(allResults.join('\\n'))\n return [out, new IOResult()]\n }\n\n if (paths.length > 0) {\n const pat = compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord)\n\n if (paths.length > 1) {\n const allResults: string[] = []\n for (const p of paths) {\n const data = splitLinesNoTrailing(DEC.decode(await readFile(accessor, p)))\n const hits = grepLines(p.original, data, pat, f)\n if (f.countOnly) {\n if (hits.length > 0) allResults.push(`${p.original}:${hits[0] ?? ''}`)\n } else if (f.filesOnly) {\n for (const h of hits) allResults.push(h)\n } else {\n for (const h of hits) allResults.push(`${p.original}:${h}`)\n }\n }\n if (allResults.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(allResults.join('\\n'))\n return [out, new IOResult()]\n }\n\n const first = paths[0]\n if (first === undefined) return [null, new IOResult()]\n await sshStat(accessor, first)\n if (f.filesOnly) {\n const data = splitLinesNoTrailing(DEC.decode(await readFile(accessor, first)))\n const hits = grepLines(first.original, data, pat, f)\n if (hits.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n return [ENC.encode(hits.join('\\n')), new IOResult()]\n }\n const source = sshStream(accessor, first)\n const stream = grepStream(source, pat, f)\n if (f.quiet) {\n const io = new IOResult({ exitCode: 1 })\n return [quietMatch(stream, io), io]\n }\n const io = new IOResult()\n return [exitOnEmpty(stream, io), io]\n }\n\n let source: AsyncIterable<Uint8Array>\n try {\n source = resolveSource(opts.stdin, `${name}: usage: ${name} [flags] pattern [path]`)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode(`${msg}\\n`) })]\n }\n const pat = compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord)\n const stream = grepStream(source, pat, f)\n if (f.quiet) {\n const io = new IOResult({ exitCode: 1 })\n return [quietMatch(stream, io), io]\n }\n const io = new IOResult()\n return [exitOnEmpty(stream, io), io]\n}\n\nconst grepFn = (\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> => {\n return grepImpl('grep', accessor, paths, texts, opts)\n}\n\nexport const SSH_GREP = command({\n name: 'grep',\n resource: ResourceName.SSH,\n spec: specOf('grep'),\n fn: grepFn,\n aggregate: prefixAggregate,\n})\n\nexport { grepImpl }\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n AsyncLineIterator,\n IOResult,\n Precision,\n ProvisionResult,\n ResourceName,\n command,\n headerAggregate,\n resolveSource,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../../core/ssh/stream.ts'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nasync function* headStream(\n source: AsyncIterable<Uint8Array>,\n lines: number,\n bytesMode: number | null,\n): AsyncIterable<Uint8Array> {\n if (bytesMode !== null) {\n let remaining = bytesMode\n for await (const chunk of source) {\n if (chunk.byteLength <= remaining) {\n yield chunk\n remaining -= chunk.byteLength\n if (remaining <= 0) return\n } else {\n yield chunk.slice(0, remaining)\n return\n }\n }\n return\n }\n let count = 0\n const lineIter = new AsyncLineIterator(source)\n for await (const line of lineIter) {\n const out = new Uint8Array(line.byteLength + 1)\n out.set(line, 0)\n out[line.byteLength] = 0x0a\n yield out\n count += 1\n if (count >= lines) return\n }\n}\n\nasync function* headMulti(\n accessor: SSHAccessor,\n paths: readonly PathSpec[],\n lines: number,\n bytesMode: number | null,\n): AsyncIterable<Uint8Array> {\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i]\n if (p === undefined) continue\n if (paths.length > 1) {\n const prefix = i > 0 ? '\\n' : ''\n yield ENC.encode(`${prefix}==> ${p.original} <==\\n`)\n }\n const source = sshStream(accessor, p)\n for await (const chunk of headStream(source, lines, bytesMode)) yield chunk\n }\n}\n\nexport async function headProvision(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<ProvisionResult> {\n const [first] = paths\n if (first === undefined) return new ProvisionResult({ command: 'head' })\n try {\n const s = await sshStat(accessor, first)\n const fileSize = s.size ?? 0\n const nFlag = typeof opts.flags.n === 'string' ? Number.parseInt(opts.flags.n, 10) : null\n const lines = nFlag !== null && Number.isFinite(nFlag) ? nFlag : 10\n const avgLine = 80\n const low = Math.min(lines * avgLine, fileSize)\n return new ProvisionResult({\n command: `head ${first.original}`,\n networkReadLow: low,\n networkReadHigh: fileSize,\n readOps: 1,\n precision: Precision.RANGE,\n })\n } catch {\n return new ProvisionResult({ command: 'head' })\n }\n}\n\nasync function headCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const nRaw = typeof opts.flags.n === 'string' ? opts.flags.n : null\n const cRaw = typeof opts.flags.c === 'string' ? opts.flags.c : null\n const lineCount = nRaw !== null ? Number.parseInt(nRaw, 10) : 10\n const byteCount = cRaw !== null ? Number.parseInt(cRaw, 10) : null\n if (paths.length > 0) {\n for (const p of paths) await sshStat(accessor, p)\n return [headMulti(accessor, paths, lineCount, byteCount), new IOResult()]\n }\n try {\n const source = resolveSource(opts.stdin, 'head: missing operand')\n return [headStream(source, lineCount, byteCount), new IOResult()]\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(`${msg}\\n`) })]\n }\n}\n\nexport const SSH_HEAD = command({\n name: 'head',\n resource: ResourceName.SSH,\n spec: specOf('head'),\n fn: headCommand,\n provision: headProvision,\n aggregate: headerAggregate,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n Precision,\n ProvisionResult,\n ResourceName,\n command,\n evalJsonlStream,\n isJsonlPath,\n isStreamableJsonlExpr,\n jqEval,\n materialize,\n parseJsonAuto,\n parseJsonPath,\n readStdinAsync,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../core/ssh/stream.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nexport async function jqProvision(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n _opts: CommandOpts,\n): Promise<ProvisionResult> {\n const [first] = paths\n const [expr] = texts\n if (first === undefined || expr === undefined) return new ProvisionResult({ command: 'jq' })\n try {\n const s = await sshStat(accessor, first)\n const fileSize = s.size ?? 0\n if (isJsonlPath(first.original) && isStreamableJsonlExpr(expr)) {\n return new ProvisionResult({\n command: `jq '${expr}' ${first.original}`,\n networkReadLow: 0,\n networkReadHigh: fileSize,\n readOps: 1,\n precision: Precision.RANGE,\n })\n }\n return new ProvisionResult({\n command: `jq '${expr}' ${first.original}`,\n networkReadLow: fileSize,\n networkReadHigh: fileSize,\n readOps: 1,\n precision: Precision.EXACT,\n })\n } catch {\n return new ProvisionResult({ command: 'jq' })\n }\n}\n\nfunction formatResult(result: unknown, raw: boolean, compact: boolean): Uint8Array {\n if (raw && typeof result === 'string') return ENC.encode(result + '\\n')\n const json = compact ? JSON.stringify(result) : JSON.stringify(result, null, 2)\n return ENC.encode(json + '\\n')\n}\n\nfunction formatResults(\n result: unknown,\n raw: boolean,\n compact: boolean,\n spread: boolean,\n): Uint8Array {\n if (spread && Array.isArray(result)) {\n const parts: Uint8Array[] = []\n for (const item of result) parts.push(formatResult(item, raw, compact))\n return concat(parts)\n }\n return formatResult(result, raw, compact)\n}\n\nfunction concat(chunks: Uint8Array[]): Uint8Array {\n let total = 0\n for (const c of chunks) total += c.byteLength\n const out = new Uint8Array(total)\n let offset = 0\n for (const c of chunks) {\n out.set(c, offset)\n offset += c.byteLength\n }\n return out\n}\n\nasync function readFile(accessor: SSHAccessor, p: PathSpec): Promise<Uint8Array> {\n return materialize(sshStream(accessor, p))\n}\n\nasync function jqCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const expression = texts[0]\n if (expression === undefined) {\n return [\n null,\n new IOResult({ exitCode: 1, stderr: ENC.encode('jq: usage: jq EXPRESSION [path]\\n') }),\n ]\n }\n const raw = opts.flags.r === true\n const compact = opts.flags.c === true\n const slurp = opts.flags.s === true\n\n if (paths.length > 0) {\n const first = paths[0]\n if (first === undefined) return [null, new IOResult()]\n if (isJsonlPath(first.original) && isStreamableJsonlExpr(expression)) {\n return [evalJsonlStream(sshStream(accessor, first), expression), new IOResult()]\n }\n const outputs: Uint8Array[] = []\n for (const p of paths) {\n const bytes = await readFile(accessor, p)\n let data = parseJsonPath(bytes, p.original)\n if (slurp) data = Array.isArray(data) ? data : [data]\n const result = await jqEval(data, expression.trim())\n const spread = expression.includes('[]')\n outputs.push(formatResults(result, raw, compact, spread))\n }\n const out: ByteSource = concat(outputs)\n return [out, new IOResult()]\n }\n\n const bytes = await readStdinAsync(opts.stdin)\n if (bytes === null) return [null, new IOResult()]\n let data = parseJsonAuto(bytes)\n if (slurp && !Array.isArray(data)) data = [data]\n const result = await jqEval(data, expression.trim())\n const spread = expression.includes('[]')\n return [formatResults(result, raw, compact, spread), new IOResult()]\n}\n\nexport const SSH_JQ = command({\n name: 'jq',\n resource: ResourceName.SSH,\n spec: specOf('jq'),\n fn: jqCommand,\n provision: jqProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n} from '@struktoai/mirage-core'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport { readdir as sshReaddir } from '../../../../core/ssh/readdir.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nfunction humanSize(n: number): string {\n const units = ['B', 'K', 'M', 'G', 'T']\n let v = n\n let i = 0\n while (v >= 1024 && i < units.length - 1) {\n v /= 1024\n i += 1\n }\n const s = v >= 10 || i === 0 ? Math.round(v).toString() : v.toFixed(1)\n return `${s}${units[i] ?? ''}`\n}\n\nfunction childSpec(entryPath: string, prefix: string): PathSpec {\n return new PathSpec({\n original: entryPath,\n directory: entryPath,\n resolved: false,\n prefix,\n })\n}\n\nfunction formatEntry(s: FileStat, long: boolean, human: boolean, classify: boolean): string {\n if (long) {\n const size = human ? humanSize(s.size ?? 0) : String(s.size ?? 0)\n return `${s.type ?? '-'}\\t${size}\\t${s.modified ?? ''}\\t${s.name}`\n }\n const suffix = classify && s.type === FileType.DIRECTORY ? '/' : ''\n return `${s.name}${suffix}`\n}\n\nfunction sortStats(\n stats: FileStat[],\n sortBy: 'time' | 'size' | 'name',\n reverse: boolean,\n): FileStat[] {\n const sorted = [...stats].sort((a, b) => {\n if (sortBy === 'time') return (b.modified ?? '').localeCompare(a.modified ?? '')\n if (sortBy === 'size') return (b.size ?? 0) - (a.size ?? 0)\n return a.name.localeCompare(b.name)\n })\n if (reverse) sorted.reverse()\n return sorted\n}\n\nasync function listDir(accessor: SSHAccessor, dir: PathSpec, all: boolean): Promise<FileStat[]> {\n const entries = await sshReaddir(accessor, dir)\n const stats = await Promise.all(entries.map((p) => sshStat(accessor, childSpec(p, dir.prefix))))\n return all ? stats : stats.filter((s) => !s.name.startsWith('.'))\n}\n\ninterface WalkOpts {\n all: boolean\n long: boolean\n human: boolean\n classify: boolean\n sortBy: 'time' | 'size' | 'name'\n reverse: boolean\n}\n\nasync function walkRecursive(\n accessor: SSHAccessor,\n dir: PathSpec,\n opts: WalkOpts,\n header: boolean,\n lines: string[],\n warnings: string[],\n): Promise<void> {\n let stats: FileStat[]\n try {\n stats = await listDir(accessor, dir, opts.all)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${dir.original}': ${msg}`)\n return\n }\n if (header) lines.push(`${dir.stripPrefix}:`)\n const sorted = sortStats(stats, opts.sortBy, opts.reverse)\n for (const s of sorted) lines.push(formatEntry(s, opts.long, opts.human, opts.classify))\n const subdirs = sorted.filter((s) => s.type === FileType.DIRECTORY)\n for (const sub of subdirs) {\n lines.push('')\n const base = dir.stripPrefix.replace(/\\/+$/, '')\n const childPath = `${base}/${sub.name}`\n await walkRecursive(accessor, childSpec(childPath, dir.prefix), opts, true, lines, warnings)\n }\n}\n\nasync function lsCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const targets: PathSpec[] =\n paths.length > 0\n ? paths\n : [\n new PathSpec({\n original: opts.cwd,\n directory: opts.cwd,\n resolved: false,\n prefix: opts.mountPrefix ?? '',\n }),\n ]\n const long = opts.flags.args_l === true\n const all = opts.flags.a === true || opts.flags.A === true\n const human = opts.flags.h === true\n const reverse = opts.flags.r === true\n const classify = opts.flags.F === true\n const recursive = opts.flags.R === true\n const listDirItself = opts.flags.d === true\n const sortBy: 'time' | 'size' | 'name' =\n opts.flags.t === true ? 'time' : opts.flags.S === true ? 'size' : 'name'\n const warnings: string[] = []\n const lines: string[] = []\n\n if (listDirItself) {\n for (const p of targets) {\n try {\n const s = await sshStat(accessor, p)\n lines.push(formatEntry(s, long, human, classify))\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${p.original}': ${msg}`)\n }\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n'))\n const exitCode = warnings.length > 0 && lines.length === 0 ? 1 : 0\n if (warnings.length > 0) {\n const stderr = new TextEncoder().encode(warnings.join('\\n'))\n return [out, new IOResult({ stderr, exitCode })]\n }\n return [out, new IOResult({ exitCode })]\n }\n\n if (recursive) {\n const walkOpts: WalkOpts = { all, long, human, classify, sortBy, reverse }\n for (let i = 0; i < targets.length; i++) {\n const p = targets[i]\n if (p === undefined) continue\n if (i > 0) lines.push('')\n await walkRecursive(accessor, p, walkOpts, true, lines, warnings)\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n'))\n const exitCode = warnings.length > 0 && lines.length === 0 ? 1 : 0\n if (warnings.length > 0) {\n const stderr = new TextEncoder().encode(warnings.join('\\n'))\n return [out, new IOResult({ stderr, exitCode })]\n }\n return [out, new IOResult({ exitCode })]\n }\n\n for (const p of targets) {\n let stats: FileStat[]\n try {\n stats = await listDir(accessor, p, all)\n } catch (err) {\n try {\n stats = [await sshStat(accessor, p)]\n } catch {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${p.original}': ${msg}`)\n continue\n }\n }\n for (const s of sortStats(stats, sortBy, reverse))\n lines.push(formatEntry(s, long, human, classify))\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n'))\n const exitCode = warnings.length > 0 && lines.length === 0 ? 1 : 0\n if (warnings.length > 0) {\n const stderr = new TextEncoder().encode(warnings.join('\\n'))\n return [out, new IOResult({ stderr, exitCode })]\n }\n return [out, new IOResult({ exitCode })]\n}\n\nexport const SSH_LS = command({\n name: 'ls',\n resource: ResourceName.SSH,\n spec: specOf('ls'),\n fn: lsCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { FileEntryWithStats } from 'ssh2'\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function readdir(accessor: SSHAccessor, p: PathSpec): Promise<string[]> {\n const sftp = await accessor.sftp()\n const virtual = p.pattern !== null ? p.directory.slice(p.prefix.length) || '/' : stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n const list = await new Promise<FileEntryWithStats[]>((resolveFn, rejectFn) => {\n sftp.readdir(remote, (err, entries) => {\n if (err !== undefined) {\n if (isNoSuchFile(err)) rejectFn(enoent(virtual))\n else rejectFn(err)\n return\n }\n resolveFn(entries)\n })\n })\n const base = `/${virtual.replace(/^\\/+|\\/+$/g, '')}`\n const dirPrefix = base === '/' ? '/' : `${base}/`\n const mountPrefix = p.prefix\n const names: string[] = []\n for (const entry of list) {\n if (entry.filename === '.' || entry.filename === '..') continue\n names.push(`${mountPrefix}${dirPrefix}${entry.filename}`)\n }\n names.sort()\n return names\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { mkdir as sshMkdir } from '../../../core/ssh/mkdir.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nasync function mkdirCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const parents = opts.flags.p === true\n const verbose = opts.flags.v === true\n if (paths.length === 0) {\n return [\n null,\n new IOResult({\n exitCode: 1,\n stderr: new TextEncoder().encode('mkdir: missing operand\\n'),\n }),\n ]\n }\n const lines: string[] = []\n for (const p of paths) {\n await sshMkdir(accessor, p, parents)\n if (verbose) lines.push(`mkdir: created directory '${p.original}'`)\n }\n const out = lines.length > 0 ? new TextEncoder().encode(lines.join('\\n') + '\\n') : null\n return [out, new IOResult()]\n}\n\nexport const SSH_MKDIR = command({\n name: 'mkdir',\n resource: ResourceName.SSH,\n spec: specOf('mkdir'),\n fn: mkdirCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SFTPWrapper, Stats } from 'ssh2'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nasync function statRemote(sftp: SFTPWrapper, remote: string): Promise<Stats | null> {\n return new Promise<Stats | null>((resolveFn) => {\n sftp.lstat(remote, (err, stats) => {\n if (err) resolveFn(null)\n else resolveFn(stats)\n })\n })\n}\n\nasync function mkdirOne(sftp: SFTPWrapper, remote: string, ignoreExisting: boolean): Promise<void> {\n return new Promise<void>((resolveFn, rejectFn) => {\n sftp.mkdir(remote, (err) => {\n if (!err) {\n resolveFn()\n return\n }\n if (ignoreExisting) {\n // ignore: dir already exists\n resolveFn()\n return\n }\n rejectFn(err)\n })\n })\n}\n\nexport async function mkdir(accessor: SSHAccessor, p: PathSpec, recursive: boolean): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const root = accessor.config.root ?? '/'\n const remote = joinRoot(root, virtual)\n if (!recursive) {\n try {\n await mkdirOne(sftp, remote, false)\n } catch (err) {\n if (isNoSuchFile(err)) throw enoent(virtual)\n throw err\n }\n return\n }\n const cleaned = virtual.replace(/^\\/+|\\/+$/g, '')\n if (cleaned.length === 0) return\n const parts = cleaned.split('/')\n let cur = ''\n for (const part of parts) {\n cur = cur === '' ? `/${part}` : `${cur}/${part}`\n const stepRemote = joinRoot(root, cur)\n const existing = await statRemote(sftp, stepRemote)\n if (existing?.isDirectory()) continue\n await mkdirOne(sftp, stepRemote, true)\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { rename as sshRename } from '../../../core/ssh/rename.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nasync function exists(accessor: SSHAccessor, path: PathSpec): Promise<boolean> {\n try {\n await sshStat(accessor, path)\n return true\n } catch {\n return false\n }\n}\n\nasync function mvCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length < 2) {\n return [\n null,\n new IOResult({\n exitCode: 1,\n stderr: new TextEncoder().encode('mv: missing operand\\n'),\n }),\n ]\n }\n const noClobber = opts.flags.n === true\n const verbose = opts.flags.v === true\n const sources = paths.slice(0, -1)\n const dst = paths[paths.length - 1]\n if (dst === undefined) return [null, new IOResult()]\n const lines: string[] = []\n for (const src of sources) {\n if (noClobber && (await exists(accessor, dst))) continue\n await sshRename(accessor, src, dst)\n if (verbose) lines.push(`'${src.original}' -> '${dst.original}'`)\n }\n const out = lines.length > 0 ? new TextEncoder().encode(lines.join('\\n') + '\\n') : null\n return [out, new IOResult()]\n}\n\nexport const SSH_MV = command({\n name: 'mv',\n resource: ResourceName.SSH,\n spec: specOf('mv'),\n fn: mvCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function rename(accessor: SSHAccessor, src: PathSpec, dst: PathSpec): Promise<void> {\n const sftp = await accessor.sftp()\n const root = accessor.config.root ?? '/'\n const srcVirtual = stripPrefix(src)\n const dstVirtual = stripPrefix(dst)\n const remoteSrc = joinRoot(root, srcVirtual)\n const remoteDst = joinRoot(root, dstVirtual)\n await new Promise<void>((resolveFn, rejectFn) => {\n sftp.rename(remoteSrc, remoteDst, (err) => {\n if (!err) {\n resolveFn()\n return\n }\n if (isNoSuchFile(err)) rejectFn(enoent(srcVirtual))\n else rejectFn(err)\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\n\nfunction normalize(p: string, cwd: string): string {\n const path = p.startsWith('/') ? p : `${cwd.replace(/\\/+$/, '')}/${p}`\n const parts = path.split('/').filter((s) => s !== '' && s !== '.')\n const out: string[] = []\n for (const part of parts) {\n if (part === '..') out.pop()\n else out.push(part)\n }\n return '/' + out.join('/')\n}\n\nasync function existsSsh(accessor: SSHAccessor, p: PathSpec): Promise<boolean> {\n try {\n await sshStat(accessor, p)\n return true\n } catch {\n return false\n }\n}\n\nasync function realpathCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const requireExists = opts.flags.e === true\n const lines: string[] = []\n if (paths.length > 0) {\n for (const p of paths) {\n if (requireExists && !(await existsSsh(accessor, p))) {\n throw new Error(`realpath: '${p.original}': No such file or directory`)\n }\n lines.push(normalize(p.original, opts.cwd))\n }\n } else {\n for (const t of texts) lines.push(normalize(t, opts.cwd))\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n}\n\nexport const SSH_REALPATH = command({\n name: 'realpath',\n resource: ResourceName.SSH,\n spec: specOf('realpath'),\n fn: realpathCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n compilePattern,\n exitOnEmpty,\n grepStream,\n materialize,\n resolveSource,\n rgFolderFiletype,\n rgFull,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n} from '@struktoai/mirage-core'\nimport { readdir as sshReaddir } from '../../../core/ssh/readdir.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport { stream as sshStream } from '../../../core/ssh/stream.ts'\nimport { find as sshFind } from '../../../core/ssh/find.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\nimport { grepImpl } from './grep/grep.ts'\n\nconst ENC = new TextEncoder()\n\ninterface RgFlags {\n ignoreCase: boolean\n invert: boolean\n lineNumbers: boolean\n countOnly: boolean\n filesOnly: boolean\n wholeWord: boolean\n fixedString: boolean\n onlyMatching: boolean\n maxCount: number | null\n afterContext: number\n beforeContext: number\n fileType: string | null\n globPattern: string | null\n hidden: boolean\n}\n\nfunction parseRgFlags(flags: Record<string, string | boolean>): RgFlags {\n const toInt = (v: string | boolean | undefined): number | null =>\n typeof v === 'string' ? Number.parseInt(v, 10) : null\n const a = toInt(flags.A)\n const b = toInt(flags.B)\n const c = toInt(flags.C)\n return {\n ignoreCase: flags.i === true,\n invert: flags.v === true,\n lineNumbers: flags.n === true,\n countOnly: flags.c === true,\n filesOnly: flags.args_l === true,\n wholeWord: flags.w === true,\n fixedString: flags.F === true,\n onlyMatching: flags.o === true,\n maxCount: toInt(flags.m),\n afterContext: a ?? c ?? 0,\n beforeContext: b ?? c ?? 0,\n fileType: typeof flags.type === 'string' ? flags.type : null,\n globPattern: typeof flags.glob === 'string' ? flags.glob : null,\n hidden: flags.hidden === true,\n }\n}\n\nasync function rgCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const [exprText] = texts\n if (exprText === undefined) {\n return [\n null,\n new IOResult({ exitCode: 2, stderr: ENC.encode('rg: usage: rg [flags] pattern [path]\\n') }),\n ]\n }\n const flags = parseRgFlags(opts.flags)\n const [first] = paths\n\n if (first === undefined) {\n const source = resolveSource(opts.stdin, 'rg: usage: rg [flags] pattern [path]')\n const pat = compilePattern(exprText, flags.ignoreCase, flags.fixedString, flags.wholeWord)\n const stream = grepStream(source, pat, {\n invert: flags.invert,\n lineNumbers: flags.lineNumbers,\n countOnly: flags.countOnly,\n onlyMatching: flags.onlyMatching,\n maxCount: flags.maxCount,\n afterContext: flags.afterContext,\n beforeContext: flags.beforeContext,\n })\n const io = new IOResult()\n return [exitOnEmpty(stream, io), io]\n }\n\n let isDir = false\n try {\n const s = await sshStat(accessor, first)\n isDir = s.type === FileType.DIRECTORY\n } catch {\n try {\n await sshReaddir(accessor, first)\n isDir = true\n } catch {\n // not readable\n }\n }\n\n if (isDir && opts.filetypeFns !== null && Object.keys(opts.filetypeFns).length > 0) {\n const readdirFn = async (p: string): Promise<string[]> => {\n const keys = await sshFind(accessor, makeSpec(p, first), { type: null })\n return keys\n }\n const statFn = (p: string): Promise<FileStat> => sshStat(accessor, makeSpec(p, first))\n const readBytesFn = (p: string): Promise<Uint8Array> =>\n materialize(sshStream(accessor, makeSpec(p, first)))\n const warnings: string[] = []\n const results = await rgFolderFiletype(\n readdirFn,\n statFn,\n readBytesFn,\n first.original,\n exprText,\n {},\n {\n ignoreCase: flags.ignoreCase,\n invert: flags.invert,\n lineNumbers: flags.lineNumbers,\n countOnly: flags.countOnly,\n filesOnly: flags.filesOnly,\n onlyMatching: flags.onlyMatching,\n maxCount: flags.maxCount,\n fixedString: flags.fixedString,\n wholeWord: flags.wholeWord,\n fileType: flags.fileType,\n globPattern: flags.globPattern,\n hidden: flags.hidden,\n },\n warnings,\n )\n const stderr = warnings.length > 0 ? ENC.encode(warnings.join('\\n')) : undefined\n if (results.length === 0) {\n const io = new IOResult({ exitCode: 1, ...(stderr !== undefined ? { stderr } : {}) })\n return [new Uint8Array(0), io]\n }\n const out: ByteSource = ENC.encode(results.join('\\n'))\n const io = new IOResult(stderr !== undefined ? { stderr } : {})\n return [out, io]\n }\n\n const needsFull =\n flags.filesOnly ||\n flags.beforeContext > 0 ||\n flags.afterContext > 0 ||\n flags.fileType !== null ||\n flags.globPattern !== null\n if (needsFull) {\n const readdirFn = async (p: string): Promise<string[]> => {\n const keys = await sshFind(accessor, makeSpec(p, first), { type: null })\n return keys\n }\n const statFn = (p: string): Promise<FileStat> => sshStat(accessor, makeSpec(p, first))\n const readBytesFn = (p: string): Promise<Uint8Array> =>\n materialize(sshStream(accessor, makeSpec(p, first)))\n const warnings: string[] = []\n const results = await rgFull(\n readdirFn,\n statFn,\n readBytesFn,\n first.original,\n exprText,\n {\n ignoreCase: flags.ignoreCase,\n invert: flags.invert,\n lineNumbers: flags.lineNumbers,\n countOnly: flags.countOnly,\n filesOnly: flags.filesOnly,\n fixedString: flags.fixedString,\n onlyMatching: flags.onlyMatching,\n maxCount: flags.maxCount,\n wholeWord: flags.wholeWord,\n contextBefore: flags.beforeContext,\n contextAfter: flags.afterContext,\n fileType: flags.fileType,\n globPattern: flags.globPattern,\n hidden: flags.hidden,\n },\n warnings,\n )\n const stderr = warnings.length > 0 ? ENC.encode(warnings.join('\\n')) : undefined\n if (results.length === 0) {\n const io = new IOResult({ exitCode: 1, ...(stderr !== undefined ? { stderr } : {}) })\n return [new Uint8Array(0), io]\n }\n const out: ByteSource = ENC.encode(results.join('\\n'))\n const io = new IOResult(stderr !== undefined ? { stderr } : {})\n return [out, io]\n }\n\n return grepImpl('rg', accessor, paths, texts, opts)\n}\n\nfunction makeSpec(path: string, template: PathSpec): PathSpec {\n return new PathSpec({\n original: path,\n directory: path,\n resolved: false,\n prefix: template.prefix,\n })\n}\n\nexport const SSH_RG = command({\n name: 'rg',\n resource: ResourceName.SSH,\n spec: specOf('rg'),\n fn: rgCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n ResourceName,\n command,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { rmdir as sshRmdir } from '../../../core/ssh/rmdir.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport { unlink as sshUnlink } from '../../../core/ssh/unlink.ts'\nimport { rmR as sshRmR } from '../../../core/ssh/rm.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nasync function rmCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [\n null,\n new IOResult({\n exitCode: 1,\n stderr: new TextEncoder().encode('rm: missing operand\\n'),\n }),\n ]\n }\n const recursive = opts.flags.r === true || opts.flags.R === true\n const force = opts.flags.f === true\n const verbose = opts.flags.v === true\n const lines: string[] = []\n for (const p of paths) {\n let isDir = false\n try {\n const st = await sshStat(accessor, p)\n isDir = st.type === FileType.DIRECTORY\n } catch {\n if (force) continue\n throw new Error(`rm: cannot remove '${p.original}': No such file or directory`)\n }\n if (isDir) {\n if (recursive) {\n await sshRmR(accessor, p)\n } else {\n await sshRmdir(accessor, p)\n }\n } else {\n await sshUnlink(accessor, p)\n }\n if (verbose) lines.push(`removed '${p.original}'`)\n }\n const out = lines.length > 0 ? new TextEncoder().encode(lines.join('\\n')) : null\n return [out, new IOResult()]\n}\n\nexport const SSH_RM = command({\n name: 'rm',\n resource: ResourceName.SSH,\n spec: specOf('rm'),\n fn: rmCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function rmdir(accessor: SSHAccessor, p: PathSpec): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n await new Promise<void>((resolveFn, rejectFn) => {\n sftp.rmdir(remote, (err) => {\n if (!err) {\n resolveFn()\n return\n }\n if (isNoSuchFile(err)) rejectFn(enoent(virtual))\n else rejectFn(err)\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nexport async function unlink(accessor: SSHAccessor, p: PathSpec): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n await new Promise<void>((resolveFn, rejectFn) => {\n sftp.unlink(remote, (err) => {\n if (!err) {\n resolveFn()\n return\n }\n if (isNoSuchFile(err)) rejectFn(enoent(virtual))\n else rejectFn(err)\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { FileEntryWithStats, SFTPWrapper, Stats } from 'ssh2'\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { enoent, isDirectoryAttrs, isNoSuchFile, joinRoot, stripPrefix } from './utils.ts'\n\nasync function statRemote(sftp: SFTPWrapper, remote: string): Promise<Stats> {\n return new Promise<Stats>((resolveFn, rejectFn) => {\n sftp.lstat(remote, (err, stats) => {\n if (err !== undefined) rejectFn(err)\n else resolveFn(stats)\n })\n })\n}\n\nasync function readdirRemote(sftp: SFTPWrapper, remote: string): Promise<FileEntryWithStats[]> {\n return new Promise<FileEntryWithStats[]>((resolveFn, rejectFn) => {\n sftp.readdir(remote, (err, list) => {\n if (err !== undefined) rejectFn(err)\n else resolveFn(list)\n })\n })\n}\n\nasync function unlinkRemote(sftp: SFTPWrapper, remote: string): Promise<void> {\n return new Promise<void>((resolveFn, rejectFn) => {\n sftp.unlink(remote, (err) => {\n if (err) rejectFn(err)\n else resolveFn()\n })\n })\n}\n\nasync function rmdirRemote(sftp: SFTPWrapper, remote: string): Promise<void> {\n return new Promise<void>((resolveFn, rejectFn) => {\n sftp.rmdir(remote, (err) => {\n if (err) rejectFn(err)\n else resolveFn()\n })\n })\n}\n\nasync function rmRecurse(sftp: SFTPWrapper, remote: string): Promise<void> {\n const stats = await statRemote(sftp, remote)\n if (isDirectoryAttrs(stats)) {\n const entries = await readdirRemote(sftp, remote)\n for (const entry of entries) {\n if (entry.filename === '.' || entry.filename === '..') continue\n const child = remote === '/' ? `/${entry.filename}` : `${remote}/${entry.filename}`\n await rmRecurse(sftp, child)\n }\n await rmdirRemote(sftp, remote)\n return\n }\n await unlinkRemote(sftp, remote)\n}\n\nexport async function rmR(accessor: SSHAccessor, p: PathSpec): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n try {\n await rmRecurse(sftp, remote)\n } catch (err) {\n if (isNoSuchFile(err)) throw enoent(virtual)\n throw err\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n ProvisionResult,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stat as sshStat } from '../../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst TYPE_LABELS: Record<string, string> = {\n [FileType.DIRECTORY]: 'directory',\n [FileType.TEXT]: 'regular file',\n [FileType.BINARY]: 'regular file',\n [FileType.JSON]: 'regular file',\n [FileType.CSV]: 'regular file',\n}\n\nfunction formatStat(fmt: string, s: FileStat): string {\n return fmt.replace(/%(.)/g, (_, spec: string) => {\n if (spec === 'n') return s.name\n if (spec === 's') return String(s.size ?? 0)\n if (spec === 'F') return s.type ? (TYPE_LABELS[s.type] ?? 'regular file') : 'regular file'\n if (spec === 'y') return s.modified ?? ''\n return '?'\n })\n}\n\nexport function statProvision(\n accessor: SSHAccessor,\n paths: PathSpec[],\n _texts: string[],\n _opts: CommandOpts,\n): ProvisionResult {\n const [first] = paths\n return new ProvisionResult({\n command: first !== undefined ? `stat ${first.original}` : 'stat',\n })\n}\n\nasync function statCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [\n null,\n new IOResult({\n exitCode: 1,\n stderr: new TextEncoder().encode('stat: missing operand\\n'),\n }),\n ]\n }\n const fmt =\n typeof opts.flags.c === 'string'\n ? opts.flags.c\n : typeof opts.flags.f === 'string'\n ? opts.flags.f\n : null\n const lines: string[] = []\n for (const p of paths) {\n const s = await sshStat(accessor, p)\n if (fmt !== null) {\n lines.push(formatStat(fmt, s))\n } else {\n const sizeStr = s.size === null ? 'None' : String(s.size)\n const modStr = s.modified ?? 'None'\n const typeStr = s.type ?? 'None'\n lines.push(`name=${s.name} size=${sizeStr} modified=${modStr} type=${typeStr}`)\n }\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n'))\n return [out, new IOResult()]\n}\n\nexport const SSH_STAT = command({\n name: 'stat',\n resource: ResourceName.SSH,\n spec: specOf('stat'),\n fn: statCommand,\n provision: statProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n countNewlines,\n headerAggregate,\n materialize,\n parseN,\n readStdinAsync,\n specOf,\n tailBytes,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../../core/ssh/stream.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nasync function readFile(accessor: SSHAccessor, p: PathSpec): Promise<Uint8Array> {\n return materialize(sshStream(accessor, p))\n}\n\nasync function tailCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const nRaw = typeof opts.flags.n === 'string' ? opts.flags.n : null\n const cRaw = typeof opts.flags.c === 'string' ? opts.flags.c : null\n const qFlag = opts.flags.q === true\n const vFlag = opts.flags.v === true\n const [lines, plusMode] = parseN(nRaw)\n const bytesMode = cRaw !== null ? Number.parseInt(cRaw, 10) : null\n\n if (paths.length > 0) {\n const chunks: Uint8Array[] = []\n const cache: string[] = []\n const showHeaders = (vFlag || paths.length > 1) && !qFlag\n for (let i = 0; i < paths.length; i++) {\n const p = paths[i]\n if (p === undefined) continue\n const raw = await readFile(accessor, p)\n if (showHeaders) {\n const header = i > 0 ? `\\n==> ${p.original} <==\\n` : `==> ${p.original} <==\\n`\n chunks.push(ENC.encode(header))\n }\n if (bytesMode !== null) {\n chunks.push(bytesMode === 0 ? new Uint8Array(0) : raw.slice(-bytesMode))\n if (bytesMode >= raw.byteLength) cache.push(p.original)\n } else {\n chunks.push(tailBytes(raw, lines, null, plusMode))\n if (!plusMode && lines >= countNewlines(raw)) cache.push(p.original)\n }\n }\n const out: ByteSource = concat(chunks)\n return [out, new IOResult({ cache })]\n }\n const raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('tail: missing operand\\n') })]\n }\n if (bytesMode !== null) {\n const out: ByteSource = bytesMode === 0 ? new Uint8Array(0) : raw.slice(-bytesMode)\n return [out, new IOResult()]\n }\n return [tailBytes(raw, lines, null, plusMode), new IOResult()]\n}\n\nfunction concat(chunks: Uint8Array[]): Uint8Array {\n let total = 0\n for (const c of chunks) total += c.byteLength\n const out = new Uint8Array(total)\n let offset = 0\n for (const c of chunks) {\n out.set(c, offset)\n offset += c.byteLength\n }\n return out\n}\n\nexport const SSH_TAIL = command({\n name: 'tail',\n resource: ResourceName.SSH,\n spec: specOf('tail'),\n fn: tailCommand,\n aggregate: headerAggregate,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n specOf,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport { writeBytes as sshWrite } from '../../../core/ssh/write.ts'\nimport { exists as sshExists } from '../../../core/ssh/exists.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\n\nasync function touchCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('touch: missing operand\\n') })]\n }\n const createOnly = opts.flags.c === true\n for (const p of paths) {\n if (createOnly) continue\n if (!(await sshExists(accessor, p))) {\n await sshWrite(accessor, p, new Uint8Array(0))\n }\n }\n return [null, new IOResult()]\n}\n\nexport const SSH_TOUCH = command({\n name: 'touch',\n resource: ResourceName.SSH,\n spec: specOf('touch'),\n fn: touchCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { joinRoot, stripPrefix } from './utils.ts'\n\nexport async function exists(accessor: SSHAccessor, p: PathSpec): Promise<boolean> {\n const sftp = await accessor.sftp()\n const remote = joinRoot(accessor.config.root ?? '/', stripPrefix(p))\n return new Promise<boolean>((resolveFn) => {\n sftp.exists(remote, (yes) => {\n resolveFn(yes)\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport { readdir as sshReaddir } from '../../../core/ssh/readdir.ts'\nimport { stat as sshStat } from '../../../core/ssh/stat.ts'\nimport type { SSHAccessor } from '../../../accessor/ssh.ts'\n\ninterface TreeOpts {\n showHidden: boolean\n maxDepth: number | null\n ignorePattern: string | null\n dirsOnly: boolean\n matchPattern: string | null\n}\n\nfunction fnmatch(name: string, pattern: string): boolean {\n let re = '^'\n for (const ch of pattern) {\n if (ch === '*') re += '.*'\n else if (ch === '?') re += '.'\n else if (/[.+^${}()|[\\]\\\\]/.test(ch)) re += '\\\\' + ch\n else re += ch\n }\n re += '$'\n return new RegExp(re).test(name)\n}\n\nasync function walkTree(\n accessor: SSHAccessor,\n path: PathSpec,\n prefix: string,\n lines: string[],\n treeOpts: TreeOpts,\n depth: number,\n): Promise<void> {\n let entries: string[]\n try {\n entries = await sshReaddir(accessor, path)\n } catch {\n return\n }\n entries.sort()\n const filtered: { spec: PathSpec; name: string; isDir: boolean }[] = []\n for (const childPath of entries) {\n const name = childPath.slice(childPath.lastIndexOf('/') + 1)\n if (!treeOpts.showHidden && name.startsWith('.')) continue\n if (treeOpts.ignorePattern !== null && fnmatch(name, treeOpts.ignorePattern)) continue\n const sub = new PathSpec({\n original: childPath,\n directory: childPath,\n resolved: false,\n prefix: path.prefix,\n })\n let isDir: boolean\n try {\n const s = await sshStat(accessor, sub)\n isDir = s.type === FileType.DIRECTORY\n } catch {\n continue\n }\n if (treeOpts.dirsOnly && !isDir) continue\n if (treeOpts.matchPattern !== null && !isDir && !fnmatch(name, treeOpts.matchPattern)) continue\n filtered.push({ spec: sub, name, isDir })\n }\n for (let i = 0; i < filtered.length; i++) {\n const entry = filtered[i]\n if (entry === undefined) continue\n const last = i === filtered.length - 1\n const connector = last ? '└── ' : '├── '\n lines.push(`${prefix}${connector}${entry.name}`)\n if (entry.isDir) {\n if (treeOpts.maxDepth !== null && depth >= treeOpts.maxDepth) continue\n const nextPrefix = prefix + (last ? ' ' : '│ ')\n await walkTree(accessor, entry.spec, nextPrefix, lines, treeOpts, depth + 1)\n }\n }\n}\n\nasync function treeCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const targets =\n paths.length > 0\n ? paths\n : [\n new PathSpec({\n original: opts.cwd,\n directory: opts.cwd,\n resolved: false,\n prefix: opts.mountPrefix ?? '',\n }),\n ]\n const depthRaw = typeof opts.flags.L === 'string' ? opts.flags.L : null\n const ignoreRaw = typeof opts.flags.args_I === 'string' ? opts.flags.args_I : null\n const matchRaw = typeof opts.flags.P === 'string' ? opts.flags.P : null\n const treeOpts: TreeOpts = {\n showHidden: opts.flags.a === true,\n maxDepth: depthRaw === null ? null : Number.parseInt(depthRaw, 10),\n ignorePattern: ignoreRaw,\n dirsOnly: opts.flags.d === true,\n matchPattern: matchRaw,\n }\n const lines: string[] = []\n for (const p of targets) {\n await walkTree(accessor, p, '', lines, treeOpts, 0)\n }\n const out: ByteSource = new TextEncoder().encode(lines.join('\\n'))\n return [out, new IOResult()]\n}\n\nexport const SSH_TREE = command({\n name: 'tree',\n resource: ResourceName.SSH,\n spec: specOf('tree'),\n fn: treeCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n materialize,\n resolveSource,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n wcAggregate,\n} from '@struktoai/mirage-core'\nimport { stream as sshStream } from '../../../../core/ssh/stream.ts'\nimport type { SSHAccessor } from '../../../../accessor/ssh.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\nasync function* wcLinesStream(source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> {\n let count = 0\n for await (const chunk of source) {\n for (let i = 0; i < chunk.byteLength; i++) if (chunk[i] === 0x0a) count += 1\n }\n yield ENC.encode(String(count))\n}\n\nasync function readStream(accessor: SSHAccessor, p: PathSpec): Promise<Uint8Array> {\n return materialize(sshStream(accessor, p))\n}\n\nasync function wcCommand(\n accessor: SSHAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const f = opts.flags\n const lFlag = f.args_l === true\n const wFlag = f.w === true\n const cFlag = f.c === true\n const mFlag = f.m === true\n const LFlag = f.L === true\n if (paths.length > 0) {\n const outputs: string[] = []\n let totalLines = 0\n let totalWords = 0\n let totalBytes = 0\n for (const p of paths) {\n const data = await readStream(accessor, p)\n const text = DEC.decode(data)\n const lineCount = countChar(text, '\\n')\n const wordCount = text.split(/\\s+/).filter((s) => s !== '').length\n const byteCount = data.byteLength\n if (LFlag) {\n const maxLen = text.split(/\\r?\\n/).reduce((m, l) => Math.max(m, l.length), 0)\n outputs.push(`${String(maxLen)}\\t${p.original}`)\n } else if (lFlag) {\n outputs.push(`${String(lineCount)}\\t${p.original}`)\n totalLines += lineCount\n } else if (wFlag) {\n outputs.push(`${String(wordCount)}\\t${p.original}`)\n totalWords += wordCount\n } else if (cFlag) {\n outputs.push(`${String(byteCount)}\\t${p.original}`)\n totalBytes += byteCount\n } else if (mFlag) {\n const charCount = text.length\n outputs.push(`${String(charCount)}\\t${p.original}`)\n totalBytes += charCount\n } else {\n outputs.push(\n `${String(lineCount)}\\t${String(wordCount)}\\t${String(byteCount)}\\t${p.original}`,\n )\n totalLines += lineCount\n totalWords += wordCount\n totalBytes += byteCount\n }\n }\n if (paths.length > 1) {\n if (lFlag) outputs.push(`${String(totalLines)}\\ttotal`)\n else if (wFlag) outputs.push(`${String(totalWords)}\\ttotal`)\n else if (cFlag) outputs.push(`${String(totalBytes)}\\ttotal`)\n else if (mFlag) outputs.push(`${String(totalBytes)}\\ttotal`)\n else\n outputs.push(`${String(totalLines)}\\t${String(totalWords)}\\t${String(totalBytes)}\\ttotal`)\n }\n const out: ByteSource = ENC.encode(outputs.join('\\n'))\n return [out, new IOResult()]\n }\n let source: AsyncIterable<Uint8Array>\n try {\n source = resolveSource(opts.stdin, 'wc: missing operand')\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(`${msg}\\n`) })]\n }\n if (lFlag) return [wcLinesStream(source), new IOResult()]\n const raw = await materialize(source)\n const text = DEC.decode(raw)\n const lc = countChar(text, '\\n')\n const wcVal = text.split(/\\s+/).filter((s) => s !== '').length\n const bc = raw.byteLength\n const cc = text.length\n if (LFlag) {\n const maxLen = text.split(/\\r?\\n/).reduce((m, l) => Math.max(m, l.length), 0)\n return [ENC.encode(String(maxLen)), new IOResult()]\n }\n if (wFlag) return [ENC.encode(String(wcVal)), new IOResult()]\n if (mFlag) return [ENC.encode(String(cc)), new IOResult()]\n if (cFlag) return [ENC.encode(String(bc)), new IOResult()]\n return [ENC.encode(`${String(lc)}\\t${String(wcVal)}\\t${String(bc)}`), new IOResult()]\n}\n\nfunction countChar(text: string, ch: string): number {\n let n = 0\n for (const c of text) if (c === ch) n += 1\n return n\n}\n\nexport const SSH_WC = command({\n name: 'wc',\n resource: ResourceName.SSH,\n spec: specOf('wc'),\n fn: wcCommand,\n aggregate: wcAggregate,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { RegisteredCommand } from '@struktoai/mirage-core'\nimport { SSH_BASENAME } from './basename.ts'\nimport { SSH_CAT } from './cat/cat.ts'\nimport { SSH_CP } from './cp.ts'\nimport { SSH_DIRNAME } from './dirname.ts'\nimport { SSH_DU } from './du.ts'\nimport { SSH_FILE } from './file/file.ts'\nimport { SSH_FIND } from './find.ts'\nimport { SSH_GREP } from './grep/grep.ts'\nimport { SSH_HEAD } from './head/head.ts'\nimport { SSH_JQ } from './jq.ts'\nimport { SSH_LS } from './ls/ls.ts'\nimport { SSH_MKDIR } from './mkdir.ts'\nimport { SSH_MV } from './mv.ts'\nimport { SSH_REALPATH } from './realpath.ts'\nimport { SSH_RG } from './rg.ts'\nimport { SSH_RM } from './rm.ts'\nimport { SSH_STAT } from './stat/stat.ts'\nimport { SSH_TAIL } from './tail/tail.ts'\nimport { SSH_TOUCH } from './touch.ts'\nimport { SSH_TREE } from './tree.ts'\nimport { SSH_WC } from './wc/wc.ts'\n\nexport const SSH_COMMANDS: readonly RegisteredCommand[] = [\n ...SSH_LS,\n ...SSH_TREE,\n ...SSH_CAT,\n ...SSH_HEAD,\n ...SSH_TAIL,\n ...SSH_WC,\n ...SSH_FIND,\n ...SSH_GREP,\n ...SSH_RG,\n ...SSH_STAT,\n ...SSH_JQ,\n ...SSH_DU,\n ...SSH_FILE,\n ...SSH_BASENAME,\n ...SSH_DIRNAME,\n ...SSH_REALPATH,\n ...SSH_CP,\n ...SSH_MV,\n ...SSH_RM,\n ...SSH_MKDIR,\n ...SSH_TOUCH,\n]\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { joinRoot, stripPrefix } from './utils.ts'\n\nexport async function appendBytes(\n accessor: SSHAccessor,\n p: PathSpec,\n data: Uint8Array,\n): Promise<void> {\n const sftp = await accessor.sftp()\n const virtual = stripPrefix(p)\n const remote = joinRoot(accessor.config.root ?? '/', virtual)\n await new Promise<void>((resolveFn, rejectFn) => {\n sftp.appendFile(remote, Buffer.from(data), (err) => {\n if (err) rejectFn(err)\n else resolveFn()\n })\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { writeBytes } from './write.ts'\n\nexport function create(accessor: SSHAccessor, path: PathSpec): Promise<void> {\n return writeBytes(accessor, path, new Uint8Array())\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { SCOPE_ERROR } from '../disk/constants.ts'\nimport { readdir } from './readdir.ts'\n\nfunction fnmatch(name: string, pattern: string): boolean {\n let re = '^'\n for (const ch of pattern) {\n if (ch === '*') re += '.*'\n else if (ch === '?') re += '.'\n else if (/[.+^${}()|[\\]\\\\]/.test(ch)) re += '\\\\' + ch\n else re += ch\n }\n re += '$'\n return new RegExp(re).test(name)\n}\n\nfunction basenameOf(p: string): string {\n return p.slice(p.lastIndexOf('/') + 1)\n}\n\nexport async function resolveGlob(\n accessor: SSHAccessor,\n paths: readonly PathSpec[],\n): Promise<PathSpec[]> {\n const result: PathSpec[] = []\n for (const p of paths) {\n if (p.resolved) {\n result.push(p)\n } else if (p.pattern !== null && p.pattern !== '') {\n const dirSpec = new PathSpec({\n original: p.directory,\n directory: p.directory,\n resolved: true,\n prefix: p.prefix,\n })\n const entries = await readdir(accessor, dirSpec)\n const matched: PathSpec[] = []\n for (const e of entries) {\n if (fnmatch(basenameOf(e), p.pattern)) {\n matched.push(\n new PathSpec({\n original: e,\n directory: p.directory,\n resolved: true,\n prefix: p.prefix,\n }),\n )\n }\n }\n if (matched.length > SCOPE_ERROR) matched.length = SCOPE_ERROR\n result.push(...matched)\n } else {\n result.push(p)\n }\n }\n return result\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { read } from './read.ts'\nimport { writeBytes } from './write.ts'\n\nexport async function truncate(accessor: SSHAccessor, p: PathSpec, length: number): Promise<void> {\n let data: Uint8Array\n try {\n data = await read(accessor, p)\n } catch (err) {\n if ((err as { code?: string }).code === 'ENOENT') {\n data = new Uint8Array(0)\n } else {\n throw err\n }\n }\n const out = new Uint8Array(length)\n out.set(data.subarray(0, Math.min(data.byteLength, length)))\n await writeBytes(accessor, p, out)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { appendBytes as coreAppend } from '../../core/ssh/append.ts'\n\nexport const appendOp: RegisteredOp = {\n name: 'append',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec, args: readonly unknown[]) => {\n const data = args[0]\n if (!(data instanceof Uint8Array)) {\n throw new TypeError('append op requires a Uint8Array as the first arg')\n }\n return coreAppend(accessor, path, data)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { create as coreCreate } from '../../core/ssh/create.ts'\n\nexport const createOp: RegisteredOp = {\n name: 'create',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreCreate(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { mkdir as coreMkdir } from '../../core/ssh/mkdir.ts'\n\nexport const mkdirOp: RegisteredOp = {\n name: 'mkdir',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreMkdir(accessor, path, true)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { read as coreRead } from '../../core/ssh/read.ts'\n\nexport const readOp: RegisteredOp = {\n name: 'read',\n resource: ResourceName.SSH,\n filetype: null,\n write: false,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreRead(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { readdir as coreReaddir } from '../../core/ssh/readdir.ts'\n\nexport const readdirOp: RegisteredOp = {\n name: 'readdir',\n resource: ResourceName.SSH,\n filetype: null,\n write: false,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreReaddir(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { rename as coreRename } from '../../core/ssh/rename.ts'\n\nexport const renameOp: RegisteredOp = {\n name: 'rename',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec, args: readonly unknown[]) => {\n const dst = args[0]\n if (dst === undefined || dst === null || typeof dst !== 'object' || !('original' in dst)) {\n throw new TypeError('rename op requires a PathSpec destination as the first arg')\n }\n return coreRename(accessor, path, dst as PathSpec)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { rmdir as coreRmdir } from '../../core/ssh/rmdir.ts'\n\nexport const rmdirOp: RegisteredOp = {\n name: 'rmdir',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreRmdir(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { stat as coreStat } from '../../core/ssh/stat.ts'\n\nexport const statOp: RegisteredOp = {\n name: 'stat',\n resource: ResourceName.SSH,\n filetype: null,\n write: false,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreStat(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { truncate as coreTruncate } from '../../core/ssh/truncate.ts'\n\nexport const truncateOp: RegisteredOp = {\n name: 'truncate',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec, args: readonly unknown[]) => {\n const length = args[0]\n if (typeof length !== 'number') {\n throw new TypeError('truncate op requires a number length as the first arg')\n }\n return coreTruncate(accessor, path, length)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { unlink as coreUnlink } from '../../core/ssh/unlink.ts'\n\nexport const unlinkOp: RegisteredOp = {\n name: 'unlink',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec) => {\n return coreUnlink(accessor, path)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { extractWriteData, type PathSpec, type RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { SSHAccessor } from '../../accessor/ssh.ts'\nimport { writeBytes } from '../../core/ssh/write.ts'\n\nexport const writeOp: RegisteredOp = {\n name: 'write',\n resource: ResourceName.SSH,\n filetype: null,\n write: true,\n fn: (accessor: SSHAccessor, path: PathSpec, args: readonly unknown[]) => {\n const data = extractWriteData(args)\n return writeBytes(accessor, path, data)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { RegisteredOp } from '@struktoai/mirage-core'\nimport { appendOp } from './append.ts'\nimport { createOp } from './create.ts'\nimport { mkdirOp } from './mkdir.ts'\nimport { readOp } from './read.ts'\nimport { readdirOp } from './readdir.ts'\nimport { renameOp } from './rename.ts'\nimport { rmdirOp } from './rmdir.ts'\nimport { statOp } from './stat.ts'\nimport { truncateOp } from './truncate.ts'\nimport { unlinkOp } from './unlink.ts'\nimport { writeOp } from './write.ts'\n\nexport const SSH_OPS: readonly RegisteredOp[] = [\n appendOp,\n createOp,\n mkdirOp,\n readOp,\n readdirOp,\n renameOp,\n rmdirOp,\n statOp,\n truncateOp,\n unlinkOp,\n writeOp,\n]\n\nexport {\n appendOp,\n createOp,\n mkdirOp,\n readOp,\n readdirOp,\n renameOp,\n rmdirOp,\n statOp,\n truncateOp,\n unlinkOp,\n writeOp,\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const SSH_PROMPT = `{prefix}\n Remote filesystem via SSH/SFTP.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, stat, mkdir, touch, cp, mv, rm, tee.`\n"],"mappings":"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","names":["PathSpec","ResourceName","IOResult","ResourceName","command","specOf","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","IOResult","out","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","IOResult","PathSpec","ResourceName","command","specOf","norm","readRemoteDir","PathSpec","IOResult","command","ResourceName","specOf","FileType","IOResult","ResourceName","command","specOf","ENC","IOResult","FileType","command","ResourceName","specOf","IOResult","PathSpec","ResourceName","command","specOf","PathSpec","matches","IOResult","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","resolveSource","specOf","ENC","FileType","PathSpec","IOResult","pat","source","stream","io","resolveSource","command","ResourceName","specOf","AsyncLineIterator","IOResult","ProvisionResult","ResourceName","command","resolveSource","specOf","ENC","AsyncLineIterator","ProvisionResult","IOResult","resolveSource","command","ResourceName","specOf","IOResult","Precision","ProvisionResult","ResourceName","command","materialize","specOf","ENC","ProvisionResult","Precision","readFile","materialize","IOResult","bytes","data","result","spread","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","specOf","humanSize","PathSpec","FileType","out","exitCode","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","statRemote","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","exists","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","IOResult","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","compilePattern","exitOnEmpty","grepStream","materialize","resolveSource","specOf","ENC","IOResult","resolveSource","compilePattern","stream","grepStream","exitOnEmpty","FileType","materialize","io","PathSpec","command","ResourceName","specOf","FileType","IOResult","ResourceName","command","specOf","statRemote","IOResult","FileType","command","ResourceName","specOf","FileType","IOResult","ProvisionResult","ResourceName","command","specOf","FileType","ProvisionResult","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","headerAggregate","materialize","readStdinAsync","specOf","ENC","readFile","materialize","raw","concat","IOResult","readStdinAsync","command","ResourceName","specOf","headerAggregate","IOResult","ResourceName","command","specOf","exists","ENC","IOResult","exists","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","specOf","fnmatch","PathSpec","FileType","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","materialize","resolveSource","specOf","ENC","DEC","materialize","text","IOResult","resolveSource","command","ResourceName","specOf","PathSpec","fnmatch","PathSpec","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","exists","PathSpec"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/resource/gdrive/gdrive.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n GDRIVE_COMMANDS,\n GDRIVE_PROMPT,\n GDRIVE_VFS_OPS,\n GDriveAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gdriveRead,\n gdriveReaddir,\n gdriveResolveGlob,\n gdriveStat,\n} from '@struktoai/mirage-core'\nimport { redactGDriveConfig, type GDriveConfig, type GDriveConfigRedacted } from './config.ts'\n\nexport interface GDriveResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GDriveConfigRedacted\n}\n\nexport class GDriveResource implements Resource {\n readonly kind: string = ResourceName.GDRIVE\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GDRIVE_PROMPT\n readonly config: GDriveConfig\n readonly accessor: GDriveAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GDriveConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken: config.refreshToken,\n })\n this.accessor = new GDriveAccessor({ tokenManager: tm })\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GDRIVE_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GDRIVE_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gdriveRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gdriveReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gdriveStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return gdriveResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GDriveResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\n config: redactGDriveConfig(this.config),\n })\n }\n\n loadState(_state: GDriveResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB,CAAC;AACD,SAAK,WAAW,IAAI,eAAe,EAAE,cAAc,GAAG,CAAC;AACvD,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,MAAO,CAAC;AAAA,EACrD;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACnD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,kBAAkB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
|