@struktoai/mirage-node 0.0.3 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/aliyun-PGI57A43.js +10 -0
- package/dist/backblaze-TSPL6Y56.js +10 -0
- package/dist/box-7XTZYDSO.js +8 -0
- package/dist/cas.lua +15 -0
- package/dist/ceph-C265UI5T.js +10 -0
- package/dist/{chunk-I5THIMPP.js → chunk-25W4XQJZ.js} +5 -5
- package/dist/{chunk-QGRDPSAH.js → chunk-2ERLWAGG.js} +4 -2
- package/dist/chunk-2ERLWAGG.js.map +1 -0
- package/dist/{chunk-NJMGCT63.js → chunk-2QNPKPZZ.js} +7 -2
- package/dist/chunk-2QNPKPZZ.js.map +1 -0
- package/dist/{chunk-ZNWVJ6UW.js → chunk-3ASOQTZB.js} +7 -2
- package/dist/chunk-3ASOQTZB.js.map +1 -0
- package/dist/{chunk-WAR4Q2NM.js → chunk-3JZN3GYO.js} +13 -12
- package/dist/chunk-3JZN3GYO.js.map +1 -0
- package/dist/{chunk-S5OVP467.js → chunk-4GYB7DGC.js} +294 -705
- package/dist/chunk-4GYB7DGC.js.map +1 -0
- package/dist/{chunk-HJJMP6IX.js → chunk-4M73WHIE.js} +3 -3
- package/dist/{chunk-7CW3BMPH.js → chunk-4X6CLF4F.js} +3 -3
- package/dist/{chunk-QQBJC2FQ.js → chunk-5I7Q7RHW.js} +3 -3
- package/dist/{chunk-LV2G7VHL.js → chunk-5YRWF5RP.js} +17 -15
- package/dist/chunk-5YRWF5RP.js.map +1 -0
- package/dist/chunk-5ZHNPNDD.js +944 -0
- package/dist/chunk-5ZHNPNDD.js.map +1 -0
- package/dist/{chunk-VGLHY6BK.js → chunk-AULFV3KY.js} +1 -2
- package/dist/chunk-AULFV3KY.js.map +1 -0
- package/dist/{chunk-VWKUT4CW.js → chunk-BWLUBJQG.js} +19 -15
- package/dist/chunk-BWLUBJQG.js.map +1 -0
- package/dist/{chunk-X5HF2OFP.js → chunk-BWWU5T2D.js} +3 -3
- package/dist/chunk-C7TNKIK5.js +39 -0
- package/dist/chunk-C7TNKIK5.js.map +1 -0
- package/dist/{chunk-MPCCRRE6.js → chunk-CB76WPUS.js} +12 -13
- package/dist/chunk-CB76WPUS.js.map +1 -0
- package/dist/chunk-CGGO5NKD.js +1194 -0
- package/dist/chunk-CGGO5NKD.js.map +1 -0
- package/dist/{chunk-B2ZOKNN4.js → chunk-CQCTCW4S.js} +1 -2
- package/dist/chunk-CQCTCW4S.js.map +1 -0
- package/dist/{chunk-KPULTUOK.js → chunk-CXQGMFI7.js} +3 -3
- package/dist/{chunk-LW25LMIH.js → chunk-D3U7VQCG.js} +1 -2
- package/dist/{chunk-LW25LMIH.js.map → chunk-D3U7VQCG.js.map} +1 -1
- package/dist/{chunk-N5FSLVKO.js → chunk-DXU7NZPH.js} +3 -3
- package/dist/{chunk-XGJ2QERC.js → chunk-E3KXVEYI.js} +8 -4
- package/dist/chunk-E3KXVEYI.js.map +1 -0
- package/dist/{chunk-YAHRT6MB.js → chunk-EGZNOUMH.js} +3 -3
- package/dist/{chunk-DNBAMB5J.js → chunk-EVK6HH6Z.js} +1 -2
- package/dist/{chunk-DNBAMB5J.js.map → chunk-EVK6HH6Z.js.map} +1 -1
- package/dist/{chunk-HGCRXJGP.js → chunk-F5NWRF32.js} +3 -3
- package/dist/{chunk-GCFYZSVR.js → chunk-FRGTDZQT.js} +15 -10
- package/dist/chunk-FRGTDZQT.js.map +1 -0
- package/dist/{chunk-DYXEITK3.js → chunk-GF75O2EN.js} +4 -2
- package/dist/chunk-GF75O2EN.js.map +1 -0
- package/dist/{chunk-W7FLHT65.js → chunk-GTAS3QVC.js} +1 -2
- package/dist/{chunk-W7FLHT65.js.map → chunk-GTAS3QVC.js.map} +1 -1
- package/dist/{chunk-RQK5UPMP.js → chunk-H62XQZUM.js} +4 -3
- package/dist/chunk-H62XQZUM.js.map +1 -0
- package/dist/{chunk-UT2OPSN4.js → chunk-HCU3B6FW.js} +1 -2
- package/dist/chunk-HCU3B6FW.js.map +1 -0
- package/dist/chunk-HEDE2377.js +754 -0
- package/dist/chunk-HEDE2377.js.map +1 -0
- package/dist/{chunk-RNQN2FOU.js → chunk-HGIPWY5Y.js} +21 -10
- package/dist/chunk-HGIPWY5Y.js.map +1 -0
- package/dist/{chunk-Q2IAILVC.js → chunk-HSD24IP2.js} +8 -4
- package/dist/chunk-HSD24IP2.js.map +1 -0
- package/dist/{chunk-SWCDFEUK.js → chunk-HWQPEBID.js} +18 -14
- package/dist/chunk-HWQPEBID.js.map +1 -0
- package/dist/{chunk-SFUCUARB.js → chunk-IEHPTILN.js} +4 -4
- package/dist/chunk-IEHPTILN.js.map +1 -0
- package/dist/{chunk-M5FVUIYP.js → chunk-IEVLWEBO.js} +14 -13
- package/dist/chunk-IEVLWEBO.js.map +1 -0
- package/dist/{chunk-YUK3X3B4.js → chunk-IKJQOYI4.js} +1 -2
- package/dist/{chunk-YUK3X3B4.js.map → chunk-IKJQOYI4.js.map} +1 -1
- package/dist/{chunk-TA3WMOMU.js → chunk-IUXXZHY3.js} +16 -22
- package/dist/chunk-IUXXZHY3.js.map +1 -0
- package/dist/{chunk-EZQ5HBAC.js → chunk-JBDFYIN2.js} +12 -13
- package/dist/chunk-JBDFYIN2.js.map +1 -0
- package/dist/{chunk-JCC4CU2I.js → chunk-JEBH5APX.js} +14 -14
- package/dist/chunk-JEBH5APX.js.map +1 -0
- package/dist/{chunk-H3BST2LI.js → chunk-JHI2PHHD.js} +1 -2
- package/dist/{chunk-H3BST2LI.js.map → chunk-JHI2PHHD.js.map} +1 -1
- package/dist/{chunk-EGB7V74Z.js → chunk-KAWDDS27.js} +1 -3
- package/dist/chunk-KAWDDS27.js.map +1 -0
- package/dist/{chunk-DP2PP5V2.js → chunk-KGC2OGXI.js} +5 -4
- package/dist/chunk-KGC2OGXI.js.map +1 -0
- package/dist/{chunk-3WIO7NBR.js → chunk-L4GMDSMB.js} +3 -3
- package/dist/{chunk-47AVIIOT.js → chunk-L7FEZ7LU.js} +3 -3
- package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
- package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
- package/dist/{chunk-UGK4TAVK.js → chunk-LPLZLSMK.js} +1 -2
- package/dist/chunk-LPLZLSMK.js.map +1 -0
- package/dist/{chunk-EM4J5EQS.js → chunk-M6E7VK4D.js} +13 -13
- package/dist/chunk-M6E7VK4D.js.map +1 -0
- package/dist/{chunk-2CC5VW7K.js → chunk-MIQ3ECZM.js} +4 -2
- package/dist/chunk-MIQ3ECZM.js.map +1 -0
- package/dist/chunk-MRXTUFBZ.js +30 -0
- package/dist/chunk-MRXTUFBZ.js.map +1 -0
- package/dist/{chunk-RO5IQEDQ.js → chunk-NJ42VNXG.js} +1 -2
- package/dist/chunk-NJ42VNXG.js.map +1 -0
- package/dist/{chunk-AUHSTJJ3.js → chunk-NLXJMXVE.js} +3 -3
- package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
- package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
- package/dist/{chunk-IDYHQQOH.js → chunk-OSVZKYXS.js} +229 -378
- package/dist/chunk-OSVZKYXS.js.map +1 -0
- package/dist/{chunk-JAGJTM3Q.js → chunk-RHUEV4I7.js} +11 -12
- package/dist/chunk-RHUEV4I7.js.map +1 -0
- package/dist/{chunk-JALIYI6M.js → chunk-S4KVLPBR.js} +7 -2
- package/dist/chunk-S4KVLPBR.js.map +1 -0
- package/dist/{chunk-ZEGAMJO2.js → chunk-SAOQW6ZJ.js} +14 -14
- package/dist/chunk-SAOQW6ZJ.js.map +1 -0
- package/dist/{chunk-NOHWIBRX.js → chunk-SI4GMRXD.js} +13 -14
- package/dist/chunk-SI4GMRXD.js.map +1 -0
- package/dist/{chunk-X3G37FXT.js → chunk-SYMNWNC3.js} +3 -3
- package/dist/{chunk-DM4GSE26.js → chunk-TUNR4VUM.js} +3 -3
- package/dist/{chunk-XHCBHYN4.js → chunk-UAJYJP5C.js} +7 -2
- package/dist/chunk-UAJYJP5C.js.map +1 -0
- package/dist/{chunk-OPYQ5KIO.js → chunk-UYA3XL3J.js} +4 -2
- package/dist/chunk-UYA3XL3J.js.map +1 -0
- package/dist/{chunk-UINQOUZR.js → chunk-V7JVMG63.js} +3 -3
- package/dist/{chunk-LAJJPLEV.js → chunk-VBYIDRNU.js} +7 -3
- package/dist/chunk-VBYIDRNU.js.map +1 -0
- package/dist/{chunk-GS5AUKUO.js → chunk-VHED2STW.js} +10 -7
- package/dist/chunk-VHED2STW.js.map +1 -0
- package/dist/{chunk-JZT4QGIP.js → chunk-VIICUPWQ.js} +1 -2
- package/dist/{chunk-JZT4QGIP.js.map → chunk-VIICUPWQ.js.map} +1 -1
- package/dist/{chunk-QCZ2XUKH.js → chunk-VLRSOWHP.js} +16 -14
- package/dist/chunk-VLRSOWHP.js.map +1 -0
- package/dist/{chunk-XWVDS66D.js → chunk-W5ZLIQFR.js} +182 -381
- package/dist/chunk-W5ZLIQFR.js.map +1 -0
- package/dist/{chunk-YGZMVNN5.js → chunk-WTSSEUOZ.js} +7 -2
- package/dist/chunk-WTSSEUOZ.js.map +1 -0
- package/dist/{chunk-OHROA3FQ.js → chunk-WWP2STF5.js} +7 -2
- package/dist/chunk-WWP2STF5.js.map +1 -0
- package/dist/{chunk-IK2L4EN3.js → chunk-XADEMW6B.js} +3 -3
- package/dist/{chunk-FQ33BYFR.js → chunk-XEMLYWHK.js} +3 -3
- package/dist/{chunk-OZAEWZZ3.js → chunk-XFSEADPC.js} +6 -2
- package/dist/chunk-XFSEADPC.js.map +1 -0
- package/dist/{chunk-TWGVQLG2.js → chunk-XUUSWR4U.js} +1 -2
- package/dist/{chunk-TWGVQLG2.js.map → chunk-XUUSWR4U.js.map} +1 -1
- package/dist/{chunk-XLQI4IT2.js → chunk-YBVMZ7SR.js} +7 -2
- package/dist/chunk-YBVMZ7SR.js.map +1 -0
- package/dist/{chunk-A7IVFIOP.js → chunk-YRJICL2Q.js} +14 -14
- package/dist/chunk-YRJICL2Q.js.map +1 -0
- package/dist/{chunk-ZGSER5TG.js → chunk-ZM44MGC5.js} +3 -3
- package/dist/{chunk-G2WCEUQL.js → chunk-ZMREYTHA.js} +15 -14
- package/dist/chunk-ZMREYTHA.js.map +1 -0
- package/dist/{chunk-H3I2KZIY.js → chunk-ZPB3SLPK.js} +1 -2
- package/dist/{chunk-H3I2KZIY.js.map → chunk-ZPB3SLPK.js.map} +1 -1
- package/dist/chunk-ZPZQXHW2.js +1230 -0
- package/dist/chunk-ZPZQXHW2.js.map +1 -0
- package/dist/{config-34LHOGLM.js → config-2LASFFRD.js} +2 -4
- package/dist/config-3WDIJPTG.js +9 -0
- package/dist/config-4QV4QYI5.js +9 -0
- package/dist/{config-ZFJYQZCH.js → config-54USUVSE.js} +2 -4
- package/dist/config-5ZXN2T2H.js +9 -0
- package/dist/config-A2GQYJDB.js +9 -0
- package/dist/config-BBOLI7VE.js +9 -0
- package/dist/{config-VM526IKB.js → config-BIBFLUIR.js} +2 -4
- package/dist/{config-EO23EY62.js → config-CPYFOUQO.js} +2 -4
- package/dist/{config-3IVQJBNW.js → config-DWSJL3NH.js} +2 -4
- package/dist/config-E22XAGYN.js +9 -0
- package/dist/config-EHE52ZTK.js +9 -0
- package/dist/{config-GE4W4ZJC.js → config-EX3ZJTZI.js} +2 -4
- package/dist/{config-QNMKWJ4M.js → config-FRK7ZL37.js} +2 -4
- package/dist/{config-LHFFXVYI.js → config-HQXNFQZS.js} +2 -4
- package/dist/config-HTXOOAOD.js +9 -0
- package/dist/{config-HKRMKD76.js → config-IPNWAJHH.js} +2 -4
- package/dist/config-J2C53GOT.js +9 -0
- package/dist/config-K63RX6EU.js +9 -0
- package/dist/config-L7SBSH5L.js +9 -0
- package/dist/config-LEALEMKA.js +9 -0
- package/dist/{config-IVY5EQQ2.js → config-M3Z47VYU.js} +2 -4
- package/dist/{config-EIHSP5DZ.js → config-MZM3IPFM.js} +2 -4
- package/dist/{config-GHRUKEQ6.js → config-OJ2BPESH.js} +2 -4
- package/dist/{config-WDAZFXYD.js → config-QO2XUME4.js} +2 -4
- package/dist/config-QWQGOXQ5.js +9 -0
- package/dist/config-RI7IEZUF.js +9 -0
- package/dist/{config-CVZ2AGCO.js → config-SPW6NESU.js} +2 -6
- package/dist/{config-QAA646XB.js → config-T2IUIU5C.js} +2 -4
- package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
- package/dist/config-VKKZGC7V.js +9 -0
- package/dist/config-W7EVPJNK.js +11 -0
- package/dist/config-WKQ3FGTZ.js +9 -0
- package/dist/config-WVILHDFV.js +11 -0
- package/dist/{config-Q45Y46YT.js → config-XU6D5C7E.js} +2 -4
- package/dist/databricks_volume-ETRDJVVQ.js +7 -0
- package/dist/digitalocean-QP72DR4J.js +10 -0
- package/dist/discord-BSN5RB3E.js +8 -0
- package/dist/disk-24NWTN2I.js +7 -0
- package/dist/dropbox-OSTZXSIE.js +8 -0
- package/dist/email-4ZFPSWIN.js +8 -0
- package/dist/gcs-PFWR6MIW.js +10 -0
- package/dist/gdocs-GPAZRQG5.js +8 -0
- package/dist/gdrive-XSX6A7B3.js +8 -0
- package/dist/github-EQ4NXUTA.js +8 -0
- package/dist/github_ci-QL5B2Q2N.js +8 -0
- package/dist/gmail-2TBT4CVH.js +8 -0
- package/dist/gridfs-KZRZ6SIB.js +9 -0
- package/dist/gsheets-N53WEXN2.js +8 -0
- package/dist/gslides-TATSARTH.js +8 -0
- package/dist/hf_buckets-BK7NGJWS.js +10 -0
- package/dist/hf_datasets-UQ5QGM4L.js +10 -0
- package/dist/hf_models-75LFCQCS.js +10 -0
- package/dist/hf_spaces-6T2KB3UC.js +10 -0
- package/dist/index.d.ts +494 -40
- package/dist/index.js +1193 -388
- package/dist/index.js.map +1 -1
- package/dist/langfuse-AMQCQWNE.js +8 -0
- package/dist/linear-V3TXO6CV.js +8 -0
- package/dist/minio-IZRZY4C5.js +10 -0
- package/dist/mongodb-VMKPQCPX.js +7 -0
- package/dist/nextcloud-5RHQCGDO.js +9 -0
- package/dist/notion-6PPNTQFM.js +8 -0
- package/dist/oci-CKYBSFZJ.js +10 -0
- package/dist/postgres-WIQBVL5M.js +7 -0
- package/dist/qingstor-AP4IIPLY.js +10 -0
- package/dist/r2-C4XGEWQY.js +10 -0
- package/dist/redis-6D55Q2WB.js +8 -0
- package/dist/s3-XQBI2CXN.js +8 -0
- package/dist/scaleway-SEZJVURB.js +10 -0
- package/dist/seaweedfs-3XYIAFU2.js +10 -0
- package/dist/slack-ZHXDJQY4.js +8 -0
- package/dist/ssh-X2MO7JOV.js +8 -0
- package/dist/supabase-BBM44UTM.js +10 -0
- package/dist/supabase-BBM44UTM.js.map +1 -0
- package/dist/tencent-X72USLJ7.js +10 -0
- package/dist/tencent-X72USLJ7.js.map +1 -0
- package/dist/trello-EER5NG7L.js +8 -0
- package/dist/trello-EER5NG7L.js.map +1 -0
- package/dist/wasabi-O4MVIUFG.js +10 -0
- package/dist/wasabi-O4MVIUFG.js.map +1 -0
- package/package.json +4 -2
- package/dist/aliyun-JMJ3PFYY.js +0 -10
- package/dist/backblaze-TDFD23QO.js +0 -10
- package/dist/box-GQ2U2R6R.js +0 -8
- package/dist/ceph-S2VOYO6G.js +0 -10
- package/dist/chunk-2CC5VW7K.js.map +0 -1
- package/dist/chunk-A7IVFIOP.js.map +0 -1
- package/dist/chunk-B2ZOKNN4.js.map +0 -1
- package/dist/chunk-DP2PP5V2.js.map +0 -1
- package/dist/chunk-DYXEITK3.js.map +0 -1
- package/dist/chunk-EGB7V74Z.js.map +0 -1
- package/dist/chunk-EM4J5EQS.js.map +0 -1
- package/dist/chunk-EZQ5HBAC.js.map +0 -1
- package/dist/chunk-G2WCEUQL.js.map +0 -1
- package/dist/chunk-GCFYZSVR.js.map +0 -1
- package/dist/chunk-GS5AUKUO.js.map +0 -1
- package/dist/chunk-IDYHQQOH.js.map +0 -1
- package/dist/chunk-JAGJTM3Q.js.map +0 -1
- package/dist/chunk-JALIYI6M.js.map +0 -1
- package/dist/chunk-JCC4CU2I.js.map +0 -1
- package/dist/chunk-LAJJPLEV.js.map +0 -1
- package/dist/chunk-LV2G7VHL.js.map +0 -1
- package/dist/chunk-M5FVUIYP.js.map +0 -1
- package/dist/chunk-MPCCRRE6.js.map +0 -1
- package/dist/chunk-NJMGCT63.js.map +0 -1
- package/dist/chunk-NOHWIBRX.js.map +0 -1
- package/dist/chunk-OHROA3FQ.js.map +0 -1
- package/dist/chunk-OPYQ5KIO.js.map +0 -1
- package/dist/chunk-OZAEWZZ3.js.map +0 -1
- package/dist/chunk-Q2IAILVC.js.map +0 -1
- package/dist/chunk-QCZ2XUKH.js.map +0 -1
- package/dist/chunk-QGRDPSAH.js.map +0 -1
- package/dist/chunk-RNQN2FOU.js.map +0 -1
- package/dist/chunk-RO5IQEDQ.js.map +0 -1
- package/dist/chunk-RQK5UPMP.js.map +0 -1
- package/dist/chunk-S5OVP467.js.map +0 -1
- package/dist/chunk-SFUCUARB.js.map +0 -1
- package/dist/chunk-SWCDFEUK.js.map +0 -1
- package/dist/chunk-TA3WMOMU.js.map +0 -1
- package/dist/chunk-TURD42QO.js +0 -1782
- package/dist/chunk-TURD42QO.js.map +0 -1
- package/dist/chunk-U6QSXTUS.js +0 -7
- package/dist/chunk-U6QSXTUS.js.map +0 -1
- package/dist/chunk-UGK4TAVK.js.map +0 -1
- package/dist/chunk-UT2OPSN4.js.map +0 -1
- package/dist/chunk-VGLHY6BK.js.map +0 -1
- package/dist/chunk-VWKUT4CW.js.map +0 -1
- package/dist/chunk-WAR4Q2NM.js.map +0 -1
- package/dist/chunk-WHFUWWI6.js +0 -2097
- package/dist/chunk-WHFUWWI6.js.map +0 -1
- package/dist/chunk-XGJ2QERC.js.map +0 -1
- package/dist/chunk-XHCBHYN4.js.map +0 -1
- package/dist/chunk-XLQI4IT2.js.map +0 -1
- package/dist/chunk-XWVDS66D.js.map +0 -1
- package/dist/chunk-YGZMVNN5.js.map +0 -1
- package/dist/chunk-ZEGAMJO2.js.map +0 -1
- package/dist/chunk-ZNWVJ6UW.js.map +0 -1
- package/dist/config-3BBWD5AB.js +0 -11
- package/dist/config-4UDVSUQJ.js +0 -11
- package/dist/config-CMDBAPDH.js +0 -11
- package/dist/config-D3RLSPNF.js +0 -11
- package/dist/config-DG65OEG3.js +0 -11
- package/dist/config-GCQK6NJY.js +0 -11
- package/dist/config-GVH27UPE.js +0 -11
- package/dist/config-HXVYIXP5.js +0 -11
- package/dist/config-IDZMEW73.js +0 -11
- package/dist/config-IJJXGLBQ.js +0 -11
- package/dist/config-KJOLGVB2.js +0 -11
- package/dist/config-KMVCVBYN.js +0 -15
- package/dist/config-KYTRXAB2.js +0 -15
- package/dist/config-OT2TQQCN.js +0 -11
- package/dist/config-QWCY3LBQ.js +0 -11
- package/dist/config-ZV6G2ZEC.js +0 -11
- package/dist/databricks_volume-7XOUYSTY.js +0 -7
- package/dist/digitalocean-3CQ4CPPZ.js +0 -10
- package/dist/discord-BG7OSRJG.js +0 -8
- package/dist/disk-XVLBCVKE.js +0 -8
- package/dist/dropbox-74GYLV3R.js +0 -8
- package/dist/email-5IZ7OBQ4.js +0 -8
- package/dist/gcs-EMEYU2XT.js +0 -10
- package/dist/gdocs-R67TDPON.js +0 -8
- package/dist/gdrive-PRN2ALRK.js +0 -8
- package/dist/github-DV7E6OFV.js +0 -8
- package/dist/github_ci-Q554V5PA.js +0 -8
- package/dist/gmail-OLN2LT4O.js +0 -8
- package/dist/gsheets-H4RYMQJ5.js +0 -8
- package/dist/gslides-YLCHKJOM.js +0 -8
- package/dist/hf_buckets-DTKXKKFF.js +0 -10
- package/dist/hf_datasets-55C4APKR.js +0 -10
- package/dist/hf_models-RO5JR36V.js +0 -10
- package/dist/hf_spaces-ZVZ3EDRX.js +0 -10
- package/dist/langfuse-ACASJZ7O.js +0 -8
- package/dist/linear-IC37LZV7.js +0 -8
- package/dist/minio-HZ576XFQ.js +0 -10
- package/dist/mongodb-JVR62OIO.js +0 -7
- package/dist/notion-HKRPQMJS.js +0 -8
- package/dist/oci-ZLVECXTW.js +0 -10
- package/dist/postgres-P36Z2YN4.js +0 -7
- package/dist/qingstor-YLP6K3L4.js +0 -10
- package/dist/r2-RPK25ANI.js +0 -10
- package/dist/redis-V5ULXULL.js +0 -8
- package/dist/s3-4OIOCAAT.js +0 -8
- package/dist/scaleway-CCWCLUHB.js +0 -10
- package/dist/seaweedfs-QSWKF2FN.js +0 -10
- package/dist/slack-YPS7PII3.js +0 -8
- package/dist/ssh-YFP3SMTJ.js +0 -9
- package/dist/supabase-6CFTOKGZ.js +0 -10
- package/dist/tencent-IWZZOSQ4.js +0 -10
- package/dist/trello-XYKWZD6P.js +0 -8
- package/dist/wasabi-6Z4DC5S5.js +0 -10
- /package/dist/{aliyun-JMJ3PFYY.js.map → aliyun-PGI57A43.js.map} +0 -0
- /package/dist/{backblaze-TDFD23QO.js.map → backblaze-TSPL6Y56.js.map} +0 -0
- /package/dist/{box-GQ2U2R6R.js.map → box-7XTZYDSO.js.map} +0 -0
- /package/dist/{ceph-S2VOYO6G.js.map → ceph-C265UI5T.js.map} +0 -0
- /package/dist/{chunk-I5THIMPP.js.map → chunk-25W4XQJZ.js.map} +0 -0
- /package/dist/{chunk-HJJMP6IX.js.map → chunk-4M73WHIE.js.map} +0 -0
- /package/dist/{chunk-7CW3BMPH.js.map → chunk-4X6CLF4F.js.map} +0 -0
- /package/dist/{chunk-QQBJC2FQ.js.map → chunk-5I7Q7RHW.js.map} +0 -0
- /package/dist/{chunk-X5HF2OFP.js.map → chunk-BWWU5T2D.js.map} +0 -0
- /package/dist/{chunk-KPULTUOK.js.map → chunk-CXQGMFI7.js.map} +0 -0
- /package/dist/{chunk-N5FSLVKO.js.map → chunk-DXU7NZPH.js.map} +0 -0
- /package/dist/{chunk-YAHRT6MB.js.map → chunk-EGZNOUMH.js.map} +0 -0
- /package/dist/{chunk-HGCRXJGP.js.map → chunk-F5NWRF32.js.map} +0 -0
- /package/dist/{chunk-3WIO7NBR.js.map → chunk-L4GMDSMB.js.map} +0 -0
- /package/dist/{chunk-47AVIIOT.js.map → chunk-L7FEZ7LU.js.map} +0 -0
- /package/dist/{chunk-AUHSTJJ3.js.map → chunk-NLXJMXVE.js.map} +0 -0
- /package/dist/{chunk-X3G37FXT.js.map → chunk-SYMNWNC3.js.map} +0 -0
- /package/dist/{chunk-DM4GSE26.js.map → chunk-TUNR4VUM.js.map} +0 -0
- /package/dist/{chunk-UINQOUZR.js.map → chunk-V7JVMG63.js.map} +0 -0
- /package/dist/{chunk-IK2L4EN3.js.map → chunk-XADEMW6B.js.map} +0 -0
- /package/dist/{chunk-FQ33BYFR.js.map → chunk-XEMLYWHK.js.map} +0 -0
- /package/dist/{chunk-ZGSER5TG.js.map → chunk-ZM44MGC5.js.map} +0 -0
- /package/dist/{config-34LHOGLM.js.map → config-2LASFFRD.js.map} +0 -0
- /package/dist/{config-3BBWD5AB.js.map → config-3WDIJPTG.js.map} +0 -0
- /package/dist/{config-3IVQJBNW.js.map → config-4QV4QYI5.js.map} +0 -0
- /package/dist/{config-4UDVSUQJ.js.map → config-54USUVSE.js.map} +0 -0
- /package/dist/{config-CMDBAPDH.js.map → config-5ZXN2T2H.js.map} +0 -0
- /package/dist/{config-CVZ2AGCO.js.map → config-A2GQYJDB.js.map} +0 -0
- /package/dist/{config-D3RLSPNF.js.map → config-BBOLI7VE.js.map} +0 -0
- /package/dist/{config-DG65OEG3.js.map → config-BIBFLUIR.js.map} +0 -0
- /package/dist/{config-EIHSP5DZ.js.map → config-CPYFOUQO.js.map} +0 -0
- /package/dist/{config-EO23EY62.js.map → config-DWSJL3NH.js.map} +0 -0
- /package/dist/{config-GCQK6NJY.js.map → config-E22XAGYN.js.map} +0 -0
- /package/dist/{config-GE4W4ZJC.js.map → config-EHE52ZTK.js.map} +0 -0
- /package/dist/{config-GHRUKEQ6.js.map → config-EX3ZJTZI.js.map} +0 -0
- /package/dist/{config-GVH27UPE.js.map → config-FRK7ZL37.js.map} +0 -0
- /package/dist/{config-HKRMKD76.js.map → config-HQXNFQZS.js.map} +0 -0
- /package/dist/{config-HXVYIXP5.js.map → config-HTXOOAOD.js.map} +0 -0
- /package/dist/{config-IDZMEW73.js.map → config-IPNWAJHH.js.map} +0 -0
- /package/dist/{config-IJJXGLBQ.js.map → config-J2C53GOT.js.map} +0 -0
- /package/dist/{config-IVY5EQQ2.js.map → config-K63RX6EU.js.map} +0 -0
- /package/dist/{config-KJOLGVB2.js.map → config-L7SBSH5L.js.map} +0 -0
- /package/dist/{config-KMVCVBYN.js.map → config-LEALEMKA.js.map} +0 -0
- /package/dist/{config-KYTRXAB2.js.map → config-M3Z47VYU.js.map} +0 -0
- /package/dist/{config-LHFFXVYI.js.map → config-MZM3IPFM.js.map} +0 -0
- /package/dist/{config-NV5WXP64.js.map → config-OJ2BPESH.js.map} +0 -0
- /package/dist/{config-OT2TQQCN.js.map → config-QO2XUME4.js.map} +0 -0
- /package/dist/{config-Q45Y46YT.js.map → config-QWQGOXQ5.js.map} +0 -0
- /package/dist/{config-QAA646XB.js.map → config-RI7IEZUF.js.map} +0 -0
- /package/dist/{config-QNMKWJ4M.js.map → config-SPW6NESU.js.map} +0 -0
- /package/dist/{config-QWCY3LBQ.js.map → config-T2IUIU5C.js.map} +0 -0
- /package/dist/{config-VM526IKB.js.map → config-UU27ALAA.js.map} +0 -0
- /package/dist/{config-WDAZFXYD.js.map → config-VKKZGC7V.js.map} +0 -0
- /package/dist/{config-ZFJYQZCH.js.map → config-W7EVPJNK.js.map} +0 -0
- /package/dist/{config-ZV6G2ZEC.js.map → config-WKQ3FGTZ.js.map} +0 -0
- /package/dist/{databricks_volume-7XOUYSTY.js.map → config-WVILHDFV.js.map} +0 -0
- /package/dist/{digitalocean-3CQ4CPPZ.js.map → config-XU6D5C7E.js.map} +0 -0
- /package/dist/{discord-BG7OSRJG.js.map → databricks_volume-ETRDJVVQ.js.map} +0 -0
- /package/dist/{disk-XVLBCVKE.js.map → digitalocean-QP72DR4J.js.map} +0 -0
- /package/dist/{dropbox-74GYLV3R.js.map → discord-BSN5RB3E.js.map} +0 -0
- /package/dist/{email-5IZ7OBQ4.js.map → disk-24NWTN2I.js.map} +0 -0
- /package/dist/{gcs-EMEYU2XT.js.map → dropbox-OSTZXSIE.js.map} +0 -0
- /package/dist/{gdocs-R67TDPON.js.map → email-4ZFPSWIN.js.map} +0 -0
- /package/dist/{gdrive-PRN2ALRK.js.map → gcs-PFWR6MIW.js.map} +0 -0
- /package/dist/{github-DV7E6OFV.js.map → gdocs-GPAZRQG5.js.map} +0 -0
- /package/dist/{github_ci-Q554V5PA.js.map → gdrive-XSX6A7B3.js.map} +0 -0
- /package/dist/{gmail-OLN2LT4O.js.map → github-EQ4NXUTA.js.map} +0 -0
- /package/dist/{gsheets-H4RYMQJ5.js.map → github_ci-QL5B2Q2N.js.map} +0 -0
- /package/dist/{gslides-YLCHKJOM.js.map → gmail-2TBT4CVH.js.map} +0 -0
- /package/dist/{hf_buckets-DTKXKKFF.js.map → gridfs-KZRZ6SIB.js.map} +0 -0
- /package/dist/{hf_datasets-55C4APKR.js.map → gsheets-N53WEXN2.js.map} +0 -0
- /package/dist/{hf_models-RO5JR36V.js.map → gslides-TATSARTH.js.map} +0 -0
- /package/dist/{hf_spaces-ZVZ3EDRX.js.map → hf_buckets-BK7NGJWS.js.map} +0 -0
- /package/dist/{langfuse-ACASJZ7O.js.map → hf_datasets-UQ5QGM4L.js.map} +0 -0
- /package/dist/{linear-IC37LZV7.js.map → hf_models-75LFCQCS.js.map} +0 -0
- /package/dist/{minio-HZ576XFQ.js.map → hf_spaces-6T2KB3UC.js.map} +0 -0
- /package/dist/{mongodb-JVR62OIO.js.map → langfuse-AMQCQWNE.js.map} +0 -0
- /package/dist/{notion-HKRPQMJS.js.map → linear-V3TXO6CV.js.map} +0 -0
- /package/dist/{oci-ZLVECXTW.js.map → minio-IZRZY4C5.js.map} +0 -0
- /package/dist/{postgres-P36Z2YN4.js.map → mongodb-VMKPQCPX.js.map} +0 -0
- /package/dist/{qingstor-YLP6K3L4.js.map → nextcloud-5RHQCGDO.js.map} +0 -0
- /package/dist/{r2-RPK25ANI.js.map → notion-6PPNTQFM.js.map} +0 -0
- /package/dist/{redis-V5ULXULL.js.map → oci-CKYBSFZJ.js.map} +0 -0
- /package/dist/{s3-4OIOCAAT.js.map → postgres-WIQBVL5M.js.map} +0 -0
- /package/dist/{scaleway-CCWCLUHB.js.map → qingstor-AP4IIPLY.js.map} +0 -0
- /package/dist/{seaweedfs-QSWKF2FN.js.map → r2-C4XGEWQY.js.map} +0 -0
- /package/dist/{slack-YPS7PII3.js.map → redis-6D55Q2WB.js.map} +0 -0
- /package/dist/{ssh-YFP3SMTJ.js.map → s3-XQBI2CXN.js.map} +0 -0
- /package/dist/{supabase-6CFTOKGZ.js.map → scaleway-SEZJVURB.js.map} +0 -0
- /package/dist/{tencent-IWZZOSQ4.js.map → seaweedfs-3XYIAFU2.js.map} +0 -0
- /package/dist/{trello-XYKWZD6P.js.map → slack-ZHXDJQY4.js.map} +0 -0
- /package/dist/{wasabi-6Z4DC5S5.js.map → ssh-X2MO7JOV.js.map} +0 -0
package/dist/index.js
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DropboxResource
|
|
3
|
+
} from "./chunk-HWQPEBID.js";
|
|
4
|
+
import {
|
|
5
|
+
BoxResource
|
|
6
|
+
} from "./chunk-BWLUBJQG.js";
|
|
7
|
+
import {
|
|
8
|
+
normalizeBoxConfig,
|
|
9
|
+
redactBoxConfig
|
|
10
|
+
} from "./chunk-XFSEADPC.js";
|
|
1
11
|
import {
|
|
2
12
|
GmailResource
|
|
3
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-CB76WPUS.js";
|
|
14
|
+
import {
|
|
15
|
+
normalizeGoogleConfig,
|
|
16
|
+
redactGoogleConfig
|
|
17
|
+
} from "./chunk-LPDLPRPS.js";
|
|
4
18
|
import {
|
|
5
19
|
EMAIL_COMMANDS,
|
|
6
20
|
EMAIL_OPS,
|
|
@@ -8,273 +22,277 @@ import {
|
|
|
8
22
|
EMAIL_WRITE_PROMPT,
|
|
9
23
|
EmailAccessor,
|
|
10
24
|
EmailResource
|
|
11
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-4GYB7DGC.js";
|
|
12
26
|
import {
|
|
13
27
|
buildEmailConfig,
|
|
14
28
|
normalizeEmailConfig,
|
|
15
29
|
redactEmailConfig
|
|
16
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-CQCTCW4S.js";
|
|
31
|
+
import {
|
|
32
|
+
GDocsResource
|
|
33
|
+
} from "./chunk-JEBH5APX.js";
|
|
34
|
+
import {
|
|
35
|
+
GSheetsResource
|
|
36
|
+
} from "./chunk-SAOQW6ZJ.js";
|
|
37
|
+
import {
|
|
38
|
+
normalizeGSheetsConfig,
|
|
39
|
+
redactGSheetsConfig
|
|
40
|
+
} from "./chunk-D3U7VQCG.js";
|
|
17
41
|
import {
|
|
18
42
|
GSlidesResource
|
|
19
|
-
} from "./chunk-
|
|
43
|
+
} from "./chunk-YRJICL2Q.js";
|
|
44
|
+
import {
|
|
45
|
+
normalizeGSlidesConfig,
|
|
46
|
+
redactGSlidesConfig
|
|
47
|
+
} from "./chunk-GTAS3QVC.js";
|
|
20
48
|
import {
|
|
21
49
|
GDriveResource
|
|
22
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-VLRSOWHP.js";
|
|
23
51
|
import {
|
|
24
52
|
normalizeGDriveConfig,
|
|
25
53
|
redactGDriveConfig
|
|
26
|
-
} from "./chunk-
|
|
27
|
-
import {
|
|
28
|
-
DropboxResource
|
|
29
|
-
} from "./chunk-SWCDFEUK.js";
|
|
54
|
+
} from "./chunk-KGC2OGXI.js";
|
|
30
55
|
import {
|
|
31
56
|
normalizeDropboxConfig,
|
|
32
57
|
redactDropboxConfig
|
|
33
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-HSD24IP2.js";
|
|
34
59
|
import {
|
|
35
|
-
|
|
36
|
-
} from "./chunk-
|
|
60
|
+
NotionResource
|
|
61
|
+
} from "./chunk-SI4GMRXD.js";
|
|
37
62
|
import {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
} from "./chunk-OZAEWZZ3.js";
|
|
63
|
+
LangfuseResource
|
|
64
|
+
} from "./chunk-M6E7VK4D.js";
|
|
41
65
|
import {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
} from "./chunk-
|
|
66
|
+
normalizeLangfuseConfig,
|
|
67
|
+
redactLangfuseConfig
|
|
68
|
+
} from "./chunk-AULFV3KY.js";
|
|
45
69
|
import {
|
|
46
70
|
GitHubResource
|
|
47
|
-
} from "./chunk-
|
|
71
|
+
} from "./chunk-5YRWF5RP.js";
|
|
72
|
+
import {
|
|
73
|
+
normalizeGitHubConfig,
|
|
74
|
+
redactGitHubConfig
|
|
75
|
+
} from "./chunk-XUUSWR4U.js";
|
|
48
76
|
import {
|
|
49
77
|
GitHubCIResource
|
|
50
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-JBDFYIN2.js";
|
|
51
79
|
import {
|
|
52
80
|
normalizeGitHubCIConfig,
|
|
53
81
|
redactGitHubCIConfig
|
|
54
|
-
} from "./chunk-
|
|
55
|
-
import {
|
|
56
|
-
GDocsResource
|
|
57
|
-
} from "./chunk-JCC4CU2I.js";
|
|
82
|
+
} from "./chunk-ZPB3SLPK.js";
|
|
58
83
|
import {
|
|
59
84
|
normalizeGDocsConfig,
|
|
60
85
|
redactGDocsConfig
|
|
61
|
-
} from "./chunk-
|
|
86
|
+
} from "./chunk-JHI2PHHD.js";
|
|
62
87
|
import {
|
|
63
|
-
|
|
64
|
-
|
|
88
|
+
NEXTCLOUD_COMMANDS,
|
|
89
|
+
NEXTCLOUD_OPS,
|
|
90
|
+
NEXTCLOUD_PROMPT,
|
|
91
|
+
NextcloudAccessor,
|
|
92
|
+
NextcloudResource
|
|
93
|
+
} from "./chunk-ZPZQXHW2.js";
|
|
65
94
|
import {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
} from "./chunk-LW25LMIH.js";
|
|
95
|
+
DiscordResource
|
|
96
|
+
} from "./chunk-RHUEV4I7.js";
|
|
69
97
|
import {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
} from "./chunk-
|
|
98
|
+
normalizeDiscordConfig,
|
|
99
|
+
redactDiscordConfig
|
|
100
|
+
} from "./chunk-EVK6HH6Z.js";
|
|
73
101
|
import {
|
|
74
102
|
TrelloResource
|
|
75
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-3JZN3GYO.js";
|
|
104
|
+
import {
|
|
105
|
+
normalizeTrelloConfig,
|
|
106
|
+
redactTrelloConfig
|
|
107
|
+
} from "./chunk-NJ42VNXG.js";
|
|
76
108
|
import {
|
|
77
109
|
LinearResource
|
|
78
|
-
} from "./chunk-
|
|
110
|
+
} from "./chunk-ZMREYTHA.js";
|
|
79
111
|
import {
|
|
80
112
|
normalizeLinearConfig,
|
|
81
113
|
redactLinearConfig
|
|
82
|
-
} from "./chunk-
|
|
83
|
-
import {
|
|
84
|
-
NotionResource
|
|
85
|
-
} from "./chunk-NOHWIBRX.js";
|
|
114
|
+
} from "./chunk-IKJQOYI4.js";
|
|
86
115
|
import {
|
|
87
116
|
normalizeNotionConfig,
|
|
88
117
|
redactNotionConfig
|
|
89
|
-
} from "./chunk-
|
|
90
|
-
import {
|
|
91
|
-
LangfuseResource
|
|
92
|
-
} from "./chunk-EM4J5EQS.js";
|
|
118
|
+
} from "./chunk-VIICUPWQ.js";
|
|
93
119
|
import {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
} from "./chunk-
|
|
120
|
+
QINGSTOR_PROMPT,
|
|
121
|
+
QingStorResource
|
|
122
|
+
} from "./chunk-5I7Q7RHW.js";
|
|
97
123
|
import {
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
} from "./chunk-
|
|
124
|
+
PostgresResource,
|
|
125
|
+
PostgresStore
|
|
126
|
+
} from "./chunk-VHED2STW.js";
|
|
101
127
|
import {
|
|
102
128
|
MongoDBResource,
|
|
103
129
|
MongoDBStore
|
|
104
|
-
} from "./chunk-
|
|
130
|
+
} from "./chunk-FRGTDZQT.js";
|
|
105
131
|
import {
|
|
106
132
|
SlackResource
|
|
107
|
-
} from "./chunk-
|
|
133
|
+
} from "./chunk-IEVLWEBO.js";
|
|
108
134
|
import {
|
|
109
135
|
normalizeSlackConfig,
|
|
110
136
|
redactSlackConfig
|
|
111
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-IEHPTILN.js";
|
|
112
138
|
import {
|
|
113
139
|
SSHAccessor,
|
|
114
140
|
SSHResource,
|
|
115
141
|
SSH_COMMANDS,
|
|
116
142
|
SSH_OPS,
|
|
117
143
|
SSH_PROMPT
|
|
118
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-5ZHNPNDD.js";
|
|
119
145
|
import {
|
|
120
146
|
normalizeSshConfig,
|
|
121
147
|
redactSshConfig
|
|
122
|
-
} from "./chunk-
|
|
123
|
-
import {
|
|
124
|
-
DiscordResource
|
|
125
|
-
} from "./chunk-JAGJTM3Q.js";
|
|
148
|
+
} from "./chunk-LPLZLSMK.js";
|
|
126
149
|
import {
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
} from "./chunk-
|
|
150
|
+
normalizeNextcloudConfig,
|
|
151
|
+
redactNextcloudConfig
|
|
152
|
+
} from "./chunk-MRXTUFBZ.js";
|
|
130
153
|
import {
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
} from "./chunk-
|
|
154
|
+
DIGITALOCEAN_PROMPT,
|
|
155
|
+
DigitalOceanResource
|
|
156
|
+
} from "./chunk-CXQGMFI7.js";
|
|
134
157
|
import {
|
|
135
158
|
TENCENT_PROMPT,
|
|
136
159
|
TencentResource
|
|
137
|
-
} from "./chunk-
|
|
160
|
+
} from "./chunk-EGZNOUMH.js";
|
|
161
|
+
import {
|
|
162
|
+
redactTencentConfig,
|
|
163
|
+
resolvedTencentEndpoint
|
|
164
|
+
} from "./chunk-WTSSEUOZ.js";
|
|
138
165
|
import {
|
|
139
166
|
ALIYUN_PROMPT,
|
|
140
167
|
AliyunResource
|
|
141
|
-
} from "./chunk-
|
|
168
|
+
} from "./chunk-XEMLYWHK.js";
|
|
142
169
|
import {
|
|
143
170
|
redactAliyunConfig,
|
|
144
171
|
resolvedAliyunEndpoint
|
|
145
|
-
} from "./chunk-
|
|
172
|
+
} from "./chunk-2QNPKPZZ.js";
|
|
146
173
|
import {
|
|
147
174
|
SCALEWAY_PROMPT,
|
|
148
175
|
ScalewayResource
|
|
149
|
-
} from "./chunk-
|
|
176
|
+
} from "./chunk-L4GMDSMB.js";
|
|
150
177
|
import {
|
|
151
178
|
redactScalewayConfig,
|
|
152
179
|
resolvedScalewayEndpoint
|
|
153
|
-
} from "./chunk-
|
|
154
|
-
import {
|
|
155
|
-
QINGSTOR_PROMPT,
|
|
156
|
-
QingStorResource
|
|
157
|
-
} from "./chunk-QQBJC2FQ.js";
|
|
180
|
+
} from "./chunk-YBVMZ7SR.js";
|
|
158
181
|
import {
|
|
159
182
|
redactQingStorConfig,
|
|
160
183
|
resolvedQingStorEndpoint
|
|
161
|
-
} from "./chunk-
|
|
184
|
+
} from "./chunk-WWP2STF5.js";
|
|
162
185
|
import {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
} from "./chunk-
|
|
186
|
+
SEAWEEDFS_PROMPT,
|
|
187
|
+
SeaweedFSResource
|
|
188
|
+
} from "./chunk-NLXJMXVE.js";
|
|
166
189
|
import {
|
|
167
190
|
CEPH_PROMPT,
|
|
168
191
|
CephResource
|
|
169
|
-
} from "./chunk-
|
|
192
|
+
} from "./chunk-XADEMW6B.js";
|
|
193
|
+
import {
|
|
194
|
+
redactCephConfig
|
|
195
|
+
} from "./chunk-UYA3XL3J.js";
|
|
170
196
|
import {
|
|
171
197
|
WASABI_PROMPT,
|
|
172
198
|
WasabiResource
|
|
173
|
-
} from "./chunk-
|
|
199
|
+
} from "./chunk-L7FEZ7LU.js";
|
|
174
200
|
import {
|
|
175
201
|
redactWasabiConfig,
|
|
176
202
|
resolvedWasabiEndpoint
|
|
177
|
-
} from "./chunk-
|
|
203
|
+
} from "./chunk-S4KVLPBR.js";
|
|
178
204
|
import {
|
|
179
205
|
BACKBLAZE_PROMPT,
|
|
180
206
|
BackblazeResource
|
|
181
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-SYMNWNC3.js";
|
|
182
208
|
import {
|
|
183
209
|
redactBackblazeConfig,
|
|
184
210
|
resolvedBackblazeEndpoint
|
|
185
|
-
} from "./chunk-
|
|
186
|
-
import {
|
|
187
|
-
DIGITALOCEAN_PROMPT,
|
|
188
|
-
DigitalOceanResource
|
|
189
|
-
} from "./chunk-KPULTUOK.js";
|
|
211
|
+
} from "./chunk-UAJYJP5C.js";
|
|
190
212
|
import {
|
|
191
213
|
redactDigitalOceanConfig,
|
|
192
214
|
resolvedDigitalOceanEndpoint
|
|
193
|
-
} from "./chunk-
|
|
215
|
+
} from "./chunk-3ASOQTZB.js";
|
|
194
216
|
import {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
} from "./chunk-
|
|
217
|
+
HF_BUCKETS_PROMPT,
|
|
218
|
+
HfBucketsResource
|
|
219
|
+
} from "./chunk-4M73WHIE.js";
|
|
198
220
|
import {
|
|
199
221
|
HF_DATASETS_PROMPT,
|
|
200
222
|
HfDatasetsResource
|
|
201
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-DXU7NZPH.js";
|
|
202
224
|
import {
|
|
203
225
|
HF_MODELS_PROMPT,
|
|
204
226
|
HfModelsResource
|
|
205
|
-
} from "./chunk-
|
|
227
|
+
} from "./chunk-V7JVMG63.js";
|
|
206
228
|
import {
|
|
207
229
|
HF_SPACES_PROMPT,
|
|
208
230
|
HfSpacesResource
|
|
209
|
-
} from "./chunk-
|
|
231
|
+
} from "./chunk-BWWU5T2D.js";
|
|
232
|
+
import {
|
|
233
|
+
HF_COMMANDS,
|
|
234
|
+
HF_OPS,
|
|
235
|
+
HF_RESOURCES,
|
|
236
|
+
HfAccessor,
|
|
237
|
+
HfBucketsAccessor,
|
|
238
|
+
HfDatasetsAccessor,
|
|
239
|
+
HfModelsAccessor,
|
|
240
|
+
HfSpacesAccessor
|
|
241
|
+
} from "./chunk-HEDE2377.js";
|
|
242
|
+
import {
|
|
243
|
+
HF_ENDPOINT,
|
|
244
|
+
assertHfRepoId,
|
|
245
|
+
normalizeHfBucketsConfig,
|
|
246
|
+
normalizeHfRepoConfig,
|
|
247
|
+
redactHfBucketsConfig,
|
|
248
|
+
redactHfRepoConfig
|
|
249
|
+
} from "./chunk-KAWDDS27.js";
|
|
210
250
|
import {
|
|
211
251
|
MINIO_PROMPT,
|
|
212
252
|
MinIOResource
|
|
213
|
-
} from "./chunk-
|
|
253
|
+
} from "./chunk-4X6CLF4F.js";
|
|
214
254
|
import {
|
|
215
255
|
redactMinIOConfig
|
|
216
|
-
} from "./chunk-
|
|
217
|
-
import {
|
|
218
|
-
SEAWEEDFS_PROMPT,
|
|
219
|
-
SeaweedFSResource
|
|
220
|
-
} from "./chunk-AUHSTJJ3.js";
|
|
256
|
+
} from "./chunk-GF75O2EN.js";
|
|
221
257
|
import {
|
|
222
258
|
redactSeaweedFSConfig
|
|
223
|
-
} from "./chunk-
|
|
259
|
+
} from "./chunk-MIQ3ECZM.js";
|
|
224
260
|
import {
|
|
225
|
-
|
|
226
|
-
|
|
261
|
+
GCSResource,
|
|
262
|
+
GCS_PROMPT
|
|
263
|
+
} from "./chunk-25W4XQJZ.js";
|
|
264
|
+
import {
|
|
265
|
+
GCS_ENDPOINT,
|
|
266
|
+
redactGcsConfig
|
|
267
|
+
} from "./chunk-E3KXVEYI.js";
|
|
227
268
|
import {
|
|
228
269
|
OCIResource,
|
|
229
270
|
OCI_PROMPT
|
|
230
|
-
} from "./chunk-
|
|
271
|
+
} from "./chunk-TUNR4VUM.js";
|
|
231
272
|
import {
|
|
232
273
|
redactOciConfig
|
|
233
|
-
} from "./chunk-
|
|
274
|
+
} from "./chunk-H62XQZUM.js";
|
|
234
275
|
import {
|
|
235
276
|
R2Resource,
|
|
236
277
|
R2_PROMPT
|
|
237
|
-
} from "./chunk-
|
|
278
|
+
} from "./chunk-ZM44MGC5.js";
|
|
238
279
|
import {
|
|
239
280
|
redactR2Config
|
|
240
|
-
} from "./chunk-
|
|
281
|
+
} from "./chunk-VBYIDRNU.js";
|
|
241
282
|
import {
|
|
242
283
|
SUPABASE_PROMPT,
|
|
243
284
|
SupabaseResource
|
|
244
|
-
} from "./chunk-
|
|
285
|
+
} from "./chunk-F5NWRF32.js";
|
|
245
286
|
import {
|
|
246
287
|
redactSupabaseConfig,
|
|
247
288
|
resolvedSupabaseEndpoint
|
|
248
|
-
} from "./chunk-
|
|
249
|
-
import {
|
|
250
|
-
HF_BUCKETS_PROMPT,
|
|
251
|
-
HfBucketsResource
|
|
252
|
-
} from "./chunk-HJJMP6IX.js";
|
|
253
|
-
import {
|
|
254
|
-
HF_COMMANDS,
|
|
255
|
-
HF_OPS,
|
|
256
|
-
HF_RESOURCES,
|
|
257
|
-
HfAccessor,
|
|
258
|
-
HfBucketsAccessor,
|
|
259
|
-
HfDatasetsAccessor,
|
|
260
|
-
HfModelsAccessor,
|
|
261
|
-
HfSpacesAccessor
|
|
262
|
-
} from "./chunk-TURD42QO.js";
|
|
263
|
-
import {
|
|
264
|
-
HF_ENDPOINT,
|
|
265
|
-
assertHfRepoId,
|
|
266
|
-
normalizeHfBucketsConfig,
|
|
267
|
-
normalizeHfRepoConfig,
|
|
268
|
-
redactHfBucketsConfig,
|
|
269
|
-
redactHfRepoConfig
|
|
270
|
-
} from "./chunk-EGB7V74Z.js";
|
|
289
|
+
} from "./chunk-2ERLWAGG.js";
|
|
271
290
|
import {
|
|
272
291
|
DISK_COMMANDS,
|
|
273
292
|
DISK_OPS,
|
|
274
293
|
DISK_PROMPT,
|
|
275
294
|
DiskResource
|
|
276
|
-
} from "./chunk-
|
|
277
|
-
import "./chunk-U6QSXTUS.js";
|
|
295
|
+
} from "./chunk-W5ZLIQFR.js";
|
|
278
296
|
import {
|
|
279
297
|
REDIS_COMMANDS,
|
|
280
298
|
REDIS_OPS,
|
|
@@ -283,29 +301,28 @@ import {
|
|
|
283
301
|
RedisResource,
|
|
284
302
|
RedisStore,
|
|
285
303
|
stat
|
|
286
|
-
} from "./chunk-
|
|
304
|
+
} from "./chunk-OSVZKYXS.js";
|
|
287
305
|
import {
|
|
288
|
-
|
|
289
|
-
} from "./chunk-
|
|
306
|
+
S3Resource
|
|
307
|
+
} from "./chunk-IUXXZHY3.js";
|
|
290
308
|
import {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
parseDatabricksCfg
|
|
294
|
-
} from "./chunk-RNQN2FOU.js";
|
|
309
|
+
redactConfig
|
|
310
|
+
} from "./chunk-HCU3B6FW.js";
|
|
295
311
|
import {
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
} from "./chunk-
|
|
312
|
+
GridFSAccessor,
|
|
313
|
+
GridFSResource
|
|
314
|
+
} from "./chunk-CGGO5NKD.js";
|
|
299
315
|
import {
|
|
300
|
-
|
|
301
|
-
} from "./chunk-
|
|
316
|
+
loadOptionalPeer
|
|
317
|
+
} from "./chunk-OQKNDS66.js";
|
|
302
318
|
import {
|
|
303
|
-
|
|
304
|
-
} from "./chunk-
|
|
319
|
+
normalizeGridFSConfig
|
|
320
|
+
} from "./chunk-C7TNKIK5.js";
|
|
305
321
|
import {
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
322
|
+
DatabricksVolumeResource,
|
|
323
|
+
loadDatabricksProfile,
|
|
324
|
+
parseDatabricksCfg
|
|
325
|
+
} from "./chunk-HGIPWY5Y.js";
|
|
309
326
|
|
|
310
327
|
// src/index.ts
|
|
311
328
|
export * from "@struktoai/mirage-core";
|
|
@@ -328,7 +345,14 @@ import { tmpdir } from "os";
|
|
|
328
345
|
import { join } from "path";
|
|
329
346
|
|
|
330
347
|
// src/fuse/fs.ts
|
|
331
|
-
import {
|
|
348
|
+
import { posix } from "path";
|
|
349
|
+
import {
|
|
350
|
+
FileType,
|
|
351
|
+
isMissingOp,
|
|
352
|
+
PathSpec,
|
|
353
|
+
runWithSession,
|
|
354
|
+
rstripSlash
|
|
355
|
+
} from "@struktoai/mirage-core";
|
|
332
356
|
|
|
333
357
|
// src/fuse/platform/macos.ts
|
|
334
358
|
var MACOS_METADATA = /* @__PURE__ */ new Set([
|
|
@@ -342,17 +366,15 @@ function isMacosMetadata(name) {
|
|
|
342
366
|
}
|
|
343
367
|
|
|
344
368
|
// src/fuse/fs.ts
|
|
345
|
-
var ENV_AGENT_ID = "MIRAGE_AGENT_ID";
|
|
346
|
-
var MIRAGE_DIR = "/.mirage";
|
|
347
|
-
var MIRAGE_WHOAMI = "/.mirage/whoami";
|
|
348
369
|
var ENOENT = -2;
|
|
349
370
|
var EACCES = -13;
|
|
350
371
|
var ENOTDIR = -20;
|
|
351
372
|
var EEXIST = -17;
|
|
352
373
|
var ENOTEMPTY = -66;
|
|
353
374
|
var EIO = -5;
|
|
375
|
+
var EINVAL = -22;
|
|
376
|
+
var EROFS = -30;
|
|
354
377
|
var PREFETCH_TTL_MS = 3e4;
|
|
355
|
-
var UNKNOWN_SIZE_SENTINEL = 100 * 1024 * 1024;
|
|
356
378
|
function classifyError(err) {
|
|
357
379
|
const code = err.code;
|
|
358
380
|
if (code === "ENOTEMPTY") return ENOTEMPTY;
|
|
@@ -363,6 +385,7 @@ function classifyError(err) {
|
|
|
363
385
|
const msg = (err instanceof Error ? err.message : String(err)).toLowerCase();
|
|
364
386
|
if (msg.includes("not empty") || msg.includes("enotempty")) return ENOTEMPTY;
|
|
365
387
|
if (msg.includes("not a directory") || msg.includes("enotdir")) return ENOTDIR;
|
|
388
|
+
if (msg.includes("not allowed to access mount")) return EACCES;
|
|
366
389
|
if (msg.includes("permission") || msg.includes("eacces") || msg.includes("read-only"))
|
|
367
390
|
return EACCES;
|
|
368
391
|
if (msg.includes("file exists") || msg.includes("eexist")) return EEXIST;
|
|
@@ -372,7 +395,6 @@ function classifyError(err) {
|
|
|
372
395
|
}
|
|
373
396
|
var MirageFS = class {
|
|
374
397
|
ws;
|
|
375
|
-
agentId;
|
|
376
398
|
now;
|
|
377
399
|
root;
|
|
378
400
|
prefixes;
|
|
@@ -385,23 +407,20 @@ var MirageFS = class {
|
|
|
385
407
|
nextFh = 1;
|
|
386
408
|
uid;
|
|
387
409
|
gid;
|
|
410
|
+
session;
|
|
388
411
|
constructor(ws, options = {}) {
|
|
389
412
|
this.ws = ws;
|
|
390
|
-
this.agentId = options.agentId ?? process.env[ENV_AGENT_ID] ?? `agent-${Math.random().toString(36).slice(2, 10)}`;
|
|
391
413
|
this.now = /* @__PURE__ */ new Date();
|
|
392
414
|
this.root = options.rootPrefix !== void 0 ? rstripSlash(options.rootPrefix) : "";
|
|
393
415
|
this.prefixes = this.root === "" ? ws.mounts().map((m) => m.prefix) : [];
|
|
394
416
|
this.uid = typeof process.getuid === "function" ? process.getuid() : 0;
|
|
395
417
|
this.gid = typeof process.getgid === "function" ? process.getgid() : 0;
|
|
418
|
+
this.session = options.session ?? null;
|
|
396
419
|
}
|
|
397
420
|
// ── helpers ──────────────────────────────────────────────────────
|
|
398
|
-
resolve(
|
|
399
|
-
if (this.root === "") return
|
|
400
|
-
return
|
|
401
|
-
}
|
|
402
|
-
whoamiContent() {
|
|
403
|
-
const lines = [`agent: ${this.agentId}`, "cwd: /", `mounts: ${this.prefixes.join(", ")}`];
|
|
404
|
-
return new TextEncoder().encode(lines.join("\n") + "\n");
|
|
421
|
+
resolve(path4) {
|
|
422
|
+
if (this.root === "") return path4;
|
|
423
|
+
return path4 === "/" ? this.root : this.root + path4;
|
|
405
424
|
}
|
|
406
425
|
dirStat() {
|
|
407
426
|
return {
|
|
@@ -427,8 +446,62 @@ var MirageFS = class {
|
|
|
427
446
|
gid: this.gid
|
|
428
447
|
};
|
|
429
448
|
}
|
|
430
|
-
|
|
431
|
-
|
|
449
|
+
/**
|
|
450
|
+
* Fold merged stat attributes into a FUSE attr. The workspace stat
|
|
451
|
+
* already carries the namespace overlay (chmod bits, chown ids, touched
|
|
452
|
+
* mtime), so honoring these fields here is what makes metadata ops
|
|
453
|
+
* visible over FUSE. String uid/gid (names) are skipped: FUSE wants
|
|
454
|
+
* numeric ids and there is no user db to map against.
|
|
455
|
+
*/
|
|
456
|
+
applyStatAttrs(entry, s) {
|
|
457
|
+
if (s.mode !== null) {
|
|
458
|
+
entry.mode = entry.mode & ~4095 | s.mode & 4095;
|
|
459
|
+
}
|
|
460
|
+
if (typeof s.uid === "number") entry.uid = s.uid;
|
|
461
|
+
if (typeof s.gid === "number") entry.gid = s.gid;
|
|
462
|
+
if (s.modified !== null) {
|
|
463
|
+
const ts = new Date(s.modified);
|
|
464
|
+
if (!Number.isNaN(ts.getTime())) {
|
|
465
|
+
entry.mtime = ts;
|
|
466
|
+
entry.ctime = ts;
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
return entry;
|
|
470
|
+
}
|
|
471
|
+
/**
|
|
472
|
+
* The target to present for a namespace link at a FUSE path, or null
|
|
473
|
+
* when not a link. Relative targets are stored verbatim and returned
|
|
474
|
+
* as-is. Absolute targets name virtual paths, so they are rewritten
|
|
475
|
+
* relative to the link's directory: returned raw, the kernel would
|
|
476
|
+
* resolve them against the host root and escape the mountpoint.
|
|
477
|
+
*/
|
|
478
|
+
linkTarget(path4) {
|
|
479
|
+
const links = this.ws.fs.links;
|
|
480
|
+
if (links === null) return null;
|
|
481
|
+
const target = links.readlink(this.resolve(path4));
|
|
482
|
+
if (target === null) return null;
|
|
483
|
+
if (!target.startsWith("/")) return target;
|
|
484
|
+
let fuseTarget = target;
|
|
485
|
+
if (this.root !== "") {
|
|
486
|
+
if (target === this.root) {
|
|
487
|
+
fuseTarget = "/";
|
|
488
|
+
} else if (target.startsWith(this.root + "/")) {
|
|
489
|
+
fuseTarget = target.slice(this.root.length);
|
|
490
|
+
} else {
|
|
491
|
+
return target;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
const slash = path4.lastIndexOf("/");
|
|
495
|
+
const parent = slash <= 0 ? "/" : path4.slice(0, slash);
|
|
496
|
+
return posix.relative(parent, fuseTarget);
|
|
497
|
+
}
|
|
498
|
+
linkStat(target) {
|
|
499
|
+
const entry = this.fileStat(new TextEncoder().encode(target).byteLength);
|
|
500
|
+
entry.mode = 41471;
|
|
501
|
+
return entry;
|
|
502
|
+
}
|
|
503
|
+
isVirtualDir(path4) {
|
|
504
|
+
const bare = rstripSlash(path4);
|
|
432
505
|
const normalized = bare + "/";
|
|
433
506
|
for (const p of this.prefixes) {
|
|
434
507
|
const pBare = rstripSlash(p);
|
|
@@ -436,8 +509,8 @@ var MirageFS = class {
|
|
|
436
509
|
}
|
|
437
510
|
return false;
|
|
438
511
|
}
|
|
439
|
-
virtualChildren(
|
|
440
|
-
const normalized =
|
|
512
|
+
virtualChildren(path4) {
|
|
513
|
+
const normalized = path4 === "/" ? "/" : rstripSlash(path4) + "/";
|
|
441
514
|
const children = /* @__PURE__ */ new Set();
|
|
442
515
|
for (const p of this.prefixes) {
|
|
443
516
|
if (p.startsWith(normalized) && p !== normalized) {
|
|
@@ -448,47 +521,47 @@ var MirageFS = class {
|
|
|
448
521
|
}
|
|
449
522
|
return [...children].sort();
|
|
450
523
|
}
|
|
451
|
-
cachedSize(
|
|
524
|
+
cachedSize(path4) {
|
|
452
525
|
for (const ctx of this.handles.values()) {
|
|
453
|
-
if (ctx.path ===
|
|
526
|
+
if (ctx.path === path4 && ctx.data !== void 0) return ctx.data.byteLength;
|
|
454
527
|
}
|
|
455
|
-
const entry = this.prefetchCache.get(
|
|
528
|
+
const entry = this.prefetchCache.get(path4);
|
|
456
529
|
if (entry !== void 0 && entry.expires > Date.now()) return entry.data.byteLength;
|
|
457
530
|
return null;
|
|
458
531
|
}
|
|
459
|
-
cachedData(
|
|
532
|
+
cachedData(path4) {
|
|
460
533
|
for (const ctx of this.handles.values()) {
|
|
461
|
-
if (ctx.path ===
|
|
534
|
+
if (ctx.path === path4 && ctx.data !== void 0) return ctx.data;
|
|
462
535
|
}
|
|
463
|
-
const entry = this.prefetchCache.get(
|
|
536
|
+
const entry = this.prefetchCache.get(path4);
|
|
464
537
|
if (entry !== void 0 && entry.expires > Date.now()) return entry.data;
|
|
465
|
-
if (entry !== void 0) this.prefetchCache.delete(
|
|
538
|
+
if (entry !== void 0) this.prefetchCache.delete(path4);
|
|
466
539
|
return null;
|
|
467
540
|
}
|
|
468
541
|
/**
|
|
469
|
-
* Fetch bytes for a size-unknown file and cache them so the
|
|
470
|
-
*
|
|
471
|
-
*
|
|
472
|
-
*
|
|
473
|
-
*
|
|
542
|
+
* Fetch bytes for a size-unknown file and cache them so the open → read →
|
|
543
|
+
* fstat burst (and subsequent stats within the TTL) reuse the same fetch.
|
|
544
|
+
* With getattr reporting 0 pre-open, this hydration is what lets fgetattr
|
|
545
|
+
* answer with the real byte length after open (mirrors Python's
|
|
546
|
+
* `_prefetch_read`).
|
|
474
547
|
*/
|
|
475
|
-
async prefetch(
|
|
476
|
-
const cached = this.cachedData(
|
|
548
|
+
async prefetch(path4) {
|
|
549
|
+
const cached = this.cachedData(path4);
|
|
477
550
|
if (cached !== null) return cached;
|
|
478
|
-
const inflight = this.prefetchInflight.get(
|
|
551
|
+
const inflight = this.prefetchInflight.get(path4);
|
|
479
552
|
if (inflight !== void 0) return inflight;
|
|
480
553
|
const promise = (async () => {
|
|
481
554
|
try {
|
|
482
|
-
const data = await this.ws.fs.readFile(this.resolve(
|
|
483
|
-
this.prefetchCache.set(
|
|
555
|
+
const data = await this.ws.fs.readFile(this.resolve(path4));
|
|
556
|
+
this.prefetchCache.set(path4, { data, expires: Date.now() + PREFETCH_TTL_MS });
|
|
484
557
|
return data;
|
|
485
558
|
} catch {
|
|
486
559
|
return null;
|
|
487
560
|
} finally {
|
|
488
|
-
this.prefetchInflight.delete(
|
|
561
|
+
this.prefetchInflight.delete(path4);
|
|
489
562
|
}
|
|
490
563
|
})();
|
|
491
|
-
this.prefetchInflight.set(
|
|
564
|
+
this.prefetchInflight.set(path4, promise);
|
|
492
565
|
return promise;
|
|
493
566
|
}
|
|
494
567
|
/** Drain and return accumulated op records (mirrors Python's drain_ops). */
|
|
@@ -497,12 +570,12 @@ var MirageFS = class {
|
|
|
497
570
|
this.ws.records.length = 0;
|
|
498
571
|
return records;
|
|
499
572
|
}
|
|
500
|
-
async writeFile(
|
|
501
|
-
await this.ws.dispatch("write", this.resolve(
|
|
573
|
+
async writeFile(path4, data) {
|
|
574
|
+
await this.ws.dispatch("write", this.resolve(path4), [data]);
|
|
502
575
|
}
|
|
503
576
|
// ── FUSE op surface (mirrors mfusepy Operations) ─────────────────
|
|
504
577
|
ops() {
|
|
505
|
-
|
|
578
|
+
const table = {
|
|
506
579
|
readdir: this.readdir.bind(this),
|
|
507
580
|
getattr: this.getattr.bind(this),
|
|
508
581
|
fgetattr: this.fgetattr.bind(this),
|
|
@@ -510,6 +583,8 @@ var MirageFS = class {
|
|
|
510
583
|
read: this.read.bind(this),
|
|
511
584
|
write: this.write.bind(this),
|
|
512
585
|
create: this.create.bind(this),
|
|
586
|
+
readlink: this.readlink.bind(this),
|
|
587
|
+
symlink: this.symlink.bind(this),
|
|
513
588
|
unlink: this.unlink.bind(this),
|
|
514
589
|
mkdir: this.mkdir.bind(this),
|
|
515
590
|
rmdir: this.rmdir.bind(this),
|
|
@@ -528,58 +603,72 @@ var MirageFS = class {
|
|
|
528
603
|
removexattr: this.removexattr.bind(this),
|
|
529
604
|
statfs: this.statfs.bind(this)
|
|
530
605
|
};
|
|
606
|
+
const session = this.session;
|
|
607
|
+
if (session === null) return table;
|
|
608
|
+
const bound = {};
|
|
609
|
+
for (const [name, fn] of Object.entries(table)) {
|
|
610
|
+
bound[name] = (...args) => {
|
|
611
|
+
void runWithSession(session, () => {
|
|
612
|
+
fn(...args);
|
|
613
|
+
return Promise.resolve();
|
|
614
|
+
});
|
|
615
|
+
};
|
|
616
|
+
}
|
|
617
|
+
return bound;
|
|
531
618
|
}
|
|
532
|
-
getattr(
|
|
619
|
+
getattr(path4, cb) {
|
|
533
620
|
void (async () => {
|
|
534
|
-
if (
|
|
621
|
+
if (path4 === "/") {
|
|
535
622
|
cb(0, this.dirStat());
|
|
536
623
|
return;
|
|
537
624
|
}
|
|
538
|
-
|
|
539
|
-
cb(0, this.fileStat(this.whoamiContent().byteLength));
|
|
540
|
-
return;
|
|
541
|
-
}
|
|
542
|
-
const name = path2.slice(path2.lastIndexOf("/") + 1);
|
|
625
|
+
const name = path4.slice(path4.lastIndexOf("/") + 1);
|
|
543
626
|
if (isMacosMetadata(name)) {
|
|
544
627
|
cb(ENOENT);
|
|
545
628
|
return;
|
|
546
629
|
}
|
|
547
|
-
|
|
630
|
+
const target = this.linkTarget(path4);
|
|
631
|
+
if (target !== null) {
|
|
632
|
+
cb(0, this.linkStat(target));
|
|
633
|
+
return;
|
|
634
|
+
}
|
|
635
|
+
if (this.isVirtualDir(path4)) {
|
|
548
636
|
cb(0, this.dirStat());
|
|
549
637
|
return;
|
|
550
638
|
}
|
|
551
639
|
try {
|
|
552
|
-
const s = await this.ws.fs.stat(this.resolve(
|
|
640
|
+
const s = await this.ws.fs.stat(this.resolve(path4));
|
|
553
641
|
if (s.type === FileType.DIRECTORY) {
|
|
554
|
-
cb(0, this.dirStat());
|
|
642
|
+
cb(0, this.applyStatAttrs(this.dirStat(), s));
|
|
555
643
|
return;
|
|
556
644
|
}
|
|
557
645
|
let size = s.size;
|
|
558
|
-
size ??= this.cachedSize(
|
|
559
|
-
cb(0, this.fileStat(size));
|
|
646
|
+
size ??= this.cachedSize(path4) ?? 0;
|
|
647
|
+
cb(0, this.applyStatAttrs(this.fileStat(size), s));
|
|
560
648
|
} catch (err) {
|
|
561
649
|
cb(classifyError(err));
|
|
562
650
|
}
|
|
563
651
|
})();
|
|
564
652
|
}
|
|
565
|
-
fgetattr(
|
|
653
|
+
fgetattr(path4, fd, cb) {
|
|
566
654
|
const ctx = this.handles.get(fd);
|
|
567
655
|
if (ctx?.data !== void 0) {
|
|
568
656
|
cb(0, this.fileStat(ctx.data.byteLength));
|
|
569
657
|
return;
|
|
570
658
|
}
|
|
571
|
-
this.getattr(
|
|
659
|
+
this.getattr(path4, cb);
|
|
572
660
|
}
|
|
573
|
-
readdir(
|
|
661
|
+
readdir(path4, cb) {
|
|
574
662
|
void (async () => {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
663
|
+
const names = new Set(this.virtualChildren(path4));
|
|
664
|
+
const links = this.ws.fs.links;
|
|
665
|
+
if (links !== null) {
|
|
666
|
+
for (const linkName of links.linksUnder(this.resolve(path4)).keys()) {
|
|
667
|
+
if (linkName !== "" && !isMacosMetadata(linkName)) names.add(linkName);
|
|
668
|
+
}
|
|
578
669
|
}
|
|
579
|
-
const names = new Set(this.virtualChildren(path2));
|
|
580
|
-
if (path2 === "/") names.add(".mirage");
|
|
581
670
|
try {
|
|
582
|
-
const entries = await this.ws.fs.readdir(this.resolve(
|
|
671
|
+
const entries = await this.ws.fs.readdir(this.resolve(path4));
|
|
583
672
|
for (const e of entries) {
|
|
584
673
|
const part = rstripSlash(e).split("/").pop() ?? "";
|
|
585
674
|
if (part !== "" && !isMacosMetadata(part)) names.add(part);
|
|
@@ -593,22 +682,15 @@ var MirageFS = class {
|
|
|
593
682
|
cb(0, [".", "..", ...[...names].sort()]);
|
|
594
683
|
})();
|
|
595
684
|
}
|
|
596
|
-
read(
|
|
685
|
+
read(path4, fd, buf, len, pos, cb) {
|
|
597
686
|
void (async () => {
|
|
598
|
-
if (path2 === MIRAGE_WHOAMI) {
|
|
599
|
-
const data = this.whoamiContent();
|
|
600
|
-
const slice = data.subarray(pos, pos + len);
|
|
601
|
-
buf.set(slice, 0);
|
|
602
|
-
cb(slice.byteLength);
|
|
603
|
-
return;
|
|
604
|
-
}
|
|
605
687
|
const ctx = this.handles.get(fd);
|
|
606
688
|
try {
|
|
607
689
|
if (ctx !== void 0 && ctx.data === void 0) {
|
|
608
|
-
const cached = this.cachedData(
|
|
609
|
-
ctx.data = cached ?? await this.ws.fs.readFile(this.resolve(
|
|
690
|
+
const cached = this.cachedData(path4);
|
|
691
|
+
ctx.data = cached ?? await this.ws.fs.readFile(this.resolve(path4));
|
|
610
692
|
}
|
|
611
|
-
const data = ctx?.data ?? this.cachedData(
|
|
693
|
+
const data = ctx?.data ?? this.cachedData(path4) ?? await this.ws.fs.readFile(this.resolve(path4));
|
|
612
694
|
const slice = data.subarray(pos, pos + len);
|
|
613
695
|
buf.set(slice, 0);
|
|
614
696
|
cb(slice.byteLength);
|
|
@@ -617,7 +699,7 @@ var MirageFS = class {
|
|
|
617
699
|
}
|
|
618
700
|
})();
|
|
619
701
|
}
|
|
620
|
-
write(
|
|
702
|
+
write(path4, fd, buf, len, pos, cb) {
|
|
621
703
|
const ctx = this.handles.get(fd);
|
|
622
704
|
const data = new Uint8Array(buf.subarray(0, len));
|
|
623
705
|
if (ctx !== void 0) {
|
|
@@ -630,7 +712,7 @@ var MirageFS = class {
|
|
|
630
712
|
try {
|
|
631
713
|
let existing = new Uint8Array(0);
|
|
632
714
|
try {
|
|
633
|
-
existing = await this.ws.fs.readFile(this.resolve(
|
|
715
|
+
existing = await this.ws.fs.readFile(this.resolve(path4), { raw: true });
|
|
634
716
|
} catch {
|
|
635
717
|
}
|
|
636
718
|
let merged = existing;
|
|
@@ -649,46 +731,84 @@ var MirageFS = class {
|
|
|
649
731
|
}
|
|
650
732
|
merged = out;
|
|
651
733
|
}
|
|
652
|
-
await this.writeFile(
|
|
734
|
+
await this.writeFile(path4, merged);
|
|
653
735
|
cb(len);
|
|
654
736
|
} catch {
|
|
655
737
|
cb(0);
|
|
656
738
|
}
|
|
657
739
|
})();
|
|
658
740
|
}
|
|
659
|
-
create(
|
|
741
|
+
create(path4, _mode, cb) {
|
|
660
742
|
void (async () => {
|
|
661
743
|
try {
|
|
662
744
|
try {
|
|
663
|
-
await this.ws.dispatch("create", this.resolve(
|
|
745
|
+
await this.ws.dispatch("create", this.resolve(path4));
|
|
664
746
|
} catch (dispatchErr) {
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
await this.writeFile(path2, new Uint8Array(0));
|
|
747
|
+
if (!isMissingOp(dispatchErr, "create")) throw dispatchErr;
|
|
748
|
+
await this.writeFile(path4, new Uint8Array(0));
|
|
668
749
|
}
|
|
669
750
|
const fh = this.nextFh++;
|
|
670
|
-
this.handles.set(fh, { path:
|
|
751
|
+
this.handles.set(fh, { path: path4 });
|
|
671
752
|
cb(0, fh);
|
|
672
753
|
} catch (err) {
|
|
673
754
|
cb(classifyError(err));
|
|
674
755
|
}
|
|
675
756
|
})();
|
|
676
757
|
}
|
|
677
|
-
mkdir(
|
|
758
|
+
mkdir(path4, _mode, cb) {
|
|
678
759
|
void (async () => {
|
|
679
760
|
try {
|
|
680
|
-
await this.ws.
|
|
761
|
+
await this.ws.dispatch("mkdir", this.resolve(path4));
|
|
681
762
|
cb(0);
|
|
682
763
|
} catch (err) {
|
|
683
764
|
cb(classifyError(err));
|
|
684
765
|
}
|
|
685
766
|
})();
|
|
686
767
|
}
|
|
687
|
-
|
|
768
|
+
readlink(path4, cb) {
|
|
769
|
+
const target = this.linkTarget(path4);
|
|
770
|
+
if (target === null) {
|
|
771
|
+
cb(EINVAL);
|
|
772
|
+
return;
|
|
773
|
+
}
|
|
774
|
+
cb(0, target);
|
|
775
|
+
}
|
|
776
|
+
/**
|
|
777
|
+
* Create namespace link `dest -> src` (ln -s src dest; libfuse passes
|
|
778
|
+
* the pointee first). Relative sources are stored verbatim (resolved
|
|
779
|
+
* at follow time, exactly like the shell `ln -s`); absolute sources
|
|
780
|
+
* are mapped into virtual space so a scoped mount stores the path it
|
|
781
|
+
* will later follow.
|
|
782
|
+
*/
|
|
783
|
+
symlink(src, dest, cb) {
|
|
688
784
|
void (async () => {
|
|
785
|
+
const links = this.ws.fs.links;
|
|
786
|
+
if (links === null) {
|
|
787
|
+
cb(EROFS);
|
|
788
|
+
return;
|
|
789
|
+
}
|
|
790
|
+
const stored = src.startsWith("/") ? this.resolve(src) : src;
|
|
689
791
|
try {
|
|
690
|
-
await
|
|
691
|
-
|
|
792
|
+
await links.symlink(this.resolve(dest), stored, Date.now() / 1e3);
|
|
793
|
+
cb(0);
|
|
794
|
+
} catch (err) {
|
|
795
|
+
cb(classifyError(err));
|
|
796
|
+
}
|
|
797
|
+
})();
|
|
798
|
+
}
|
|
799
|
+
unlink(path4, cb) {
|
|
800
|
+
void (async () => {
|
|
801
|
+
const links = this.ws.fs.links;
|
|
802
|
+
if (links?.isLink(this.resolve(path4)) === true) {
|
|
803
|
+
await links.unlink(this.resolve(path4));
|
|
804
|
+
this.xattrs.delete(path4);
|
|
805
|
+
this.prefetchCache.delete(path4);
|
|
806
|
+
cb(0);
|
|
807
|
+
return;
|
|
808
|
+
}
|
|
809
|
+
try {
|
|
810
|
+
await this.ws.dispatch("unlink", this.resolve(path4));
|
|
811
|
+
this.xattrs.delete(path4);
|
|
692
812
|
cb(0);
|
|
693
813
|
} catch (err) {
|
|
694
814
|
cb(classifyError(err));
|
|
@@ -698,7 +818,9 @@ var MirageFS = class {
|
|
|
698
818
|
rename(src, dst, cb) {
|
|
699
819
|
void (async () => {
|
|
700
820
|
try {
|
|
701
|
-
await this.ws.
|
|
821
|
+
await this.ws.dispatch("rename", this.resolve(src), [
|
|
822
|
+
PathSpec.fromStrPath(this.resolve(dst))
|
|
823
|
+
]);
|
|
702
824
|
const moved = this.xattrs.get(src);
|
|
703
825
|
if (moved !== void 0) {
|
|
704
826
|
this.xattrs.delete(src);
|
|
@@ -710,37 +832,36 @@ var MirageFS = class {
|
|
|
710
832
|
}
|
|
711
833
|
})();
|
|
712
834
|
}
|
|
713
|
-
rmdir(
|
|
835
|
+
rmdir(path4, cb) {
|
|
714
836
|
void (async () => {
|
|
715
837
|
try {
|
|
716
838
|
try {
|
|
717
|
-
const entries = await this.ws.fs.readdir(this.resolve(
|
|
839
|
+
const entries = await this.ws.fs.readdir(this.resolve(path4));
|
|
718
840
|
if (entries.length > 0) {
|
|
719
841
|
cb(ENOTEMPTY);
|
|
720
842
|
return;
|
|
721
843
|
}
|
|
722
844
|
} catch {
|
|
723
845
|
}
|
|
724
|
-
await this.ws.
|
|
725
|
-
this.xattrs.delete(
|
|
846
|
+
await this.ws.dispatch("rmdir", this.resolve(path4));
|
|
847
|
+
this.xattrs.delete(path4);
|
|
726
848
|
cb(0);
|
|
727
849
|
} catch (err) {
|
|
728
850
|
cb(classifyError(err));
|
|
729
851
|
}
|
|
730
852
|
})();
|
|
731
853
|
}
|
|
732
|
-
truncate(
|
|
854
|
+
truncate(path4, size, cb) {
|
|
733
855
|
void (async () => {
|
|
734
856
|
try {
|
|
735
857
|
try {
|
|
736
|
-
await this.ws.dispatch("truncate", this.resolve(
|
|
858
|
+
await this.ws.dispatch("truncate", this.resolve(path4), [size]);
|
|
737
859
|
} catch (dispatchErr) {
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
const data = await this.ws.fs.readFile(this.resolve(path2), { raw: true }).catch(() => new Uint8Array(0));
|
|
860
|
+
if (!isMissingOp(dispatchErr, "truncate")) throw dispatchErr;
|
|
861
|
+
const data = await this.ws.fs.readFile(this.resolve(path4), { raw: true }).catch(() => new Uint8Array(0));
|
|
741
862
|
const out = new Uint8Array(size);
|
|
742
863
|
out.set(data.subarray(0, Math.min(data.byteLength, size)), 0);
|
|
743
|
-
await this.writeFile(
|
|
864
|
+
await this.writeFile(path4, out);
|
|
744
865
|
}
|
|
745
866
|
cb(0);
|
|
746
867
|
} catch (err) {
|
|
@@ -764,17 +885,17 @@ var MirageFS = class {
|
|
|
764
885
|
// chmod / chown / utimens / access are no-ops for the filesystem but must
|
|
765
886
|
// validate path existence — callers like `touch`/`chmod` on a missing file
|
|
766
887
|
// should fail with ENOENT, not silently succeed.
|
|
767
|
-
chmod(
|
|
768
|
-
this.getattrValidate(
|
|
888
|
+
chmod(path4, _mode, cb) {
|
|
889
|
+
this.getattrValidate(path4, cb);
|
|
769
890
|
}
|
|
770
|
-
chown(
|
|
771
|
-
this.getattrValidate(
|
|
891
|
+
chown(path4, _uid, _gid, cb) {
|
|
892
|
+
this.getattrValidate(path4, cb);
|
|
772
893
|
}
|
|
773
|
-
utimens(
|
|
774
|
-
this.getattrValidate(
|
|
894
|
+
utimens(path4, _atime, _mtime, cb) {
|
|
895
|
+
this.getattrValidate(path4, cb);
|
|
775
896
|
}
|
|
776
|
-
access(
|
|
777
|
-
this.getattrValidate(
|
|
897
|
+
access(path4, _amode, cb) {
|
|
898
|
+
this.getattrValidate(path4, cb);
|
|
778
899
|
}
|
|
779
900
|
// Mirage backends (S3, etc.) have no POSIX extended attributes, so there is
|
|
780
901
|
// nothing to persist xattrs to. We keep them in memory per mount so tools that
|
|
@@ -782,68 +903,62 @@ var MirageFS = class {
|
|
|
782
903
|
// Finder writing com.apple.*) succeed instead of failing with ENOTSUP. The
|
|
783
904
|
// values live only for the mount's lifetime and are never written to the
|
|
784
905
|
// backend.
|
|
785
|
-
setxattr(
|
|
786
|
-
this.getattr(
|
|
906
|
+
setxattr(path4, name, value, _position, _flags, cb) {
|
|
907
|
+
this.getattr(path4, (code) => {
|
|
787
908
|
if (code !== 0) {
|
|
788
909
|
cb(code);
|
|
789
910
|
return;
|
|
790
911
|
}
|
|
791
|
-
let attrs = this.xattrs.get(
|
|
912
|
+
let attrs = this.xattrs.get(path4);
|
|
792
913
|
if (attrs === void 0) {
|
|
793
914
|
attrs = /* @__PURE__ */ new Map();
|
|
794
|
-
this.xattrs.set(
|
|
915
|
+
this.xattrs.set(path4, attrs);
|
|
795
916
|
}
|
|
796
917
|
attrs.set(name, Buffer.from(value));
|
|
797
918
|
cb(0);
|
|
798
919
|
});
|
|
799
920
|
}
|
|
800
|
-
getxattr(
|
|
801
|
-
this.getattr(
|
|
921
|
+
getxattr(path4, name, _position, cb) {
|
|
922
|
+
this.getattr(path4, (code) => {
|
|
802
923
|
if (code !== 0) {
|
|
803
924
|
cb(code);
|
|
804
925
|
return;
|
|
805
926
|
}
|
|
806
|
-
cb(0, this.xattrs.get(
|
|
927
|
+
cb(0, this.xattrs.get(path4)?.get(name));
|
|
807
928
|
});
|
|
808
929
|
}
|
|
809
|
-
listxattr(
|
|
810
|
-
this.getattr(
|
|
930
|
+
listxattr(path4, cb) {
|
|
931
|
+
this.getattr(path4, (code) => {
|
|
811
932
|
if (code !== 0) {
|
|
812
933
|
cb(code);
|
|
813
934
|
return;
|
|
814
935
|
}
|
|
815
|
-
const attrs = this.xattrs.get(
|
|
936
|
+
const attrs = this.xattrs.get(path4);
|
|
816
937
|
cb(0, attrs ? [...attrs.keys()] : []);
|
|
817
938
|
});
|
|
818
939
|
}
|
|
819
|
-
removexattr(
|
|
820
|
-
this.getattr(
|
|
940
|
+
removexattr(path4, name, cb) {
|
|
941
|
+
this.getattr(path4, (code) => {
|
|
821
942
|
if (code !== 0) {
|
|
822
943
|
cb(code);
|
|
823
944
|
return;
|
|
824
945
|
}
|
|
825
|
-
this.xattrs.get(
|
|
946
|
+
this.xattrs.get(path4)?.delete(name);
|
|
826
947
|
cb(0);
|
|
827
948
|
});
|
|
828
949
|
}
|
|
829
|
-
getattrValidate(
|
|
830
|
-
this.getattr(
|
|
950
|
+
getattrValidate(path4, cb) {
|
|
951
|
+
this.getattr(path4, (code) => {
|
|
831
952
|
cb(code);
|
|
832
953
|
});
|
|
833
954
|
}
|
|
834
|
-
open(
|
|
955
|
+
open(path4, _flags, cb) {
|
|
835
956
|
void (async () => {
|
|
836
|
-
if (path2 === MIRAGE_WHOAMI) {
|
|
837
|
-
const fh = this.nextFh++;
|
|
838
|
-
this.handles.set(fh, { path: path2 });
|
|
839
|
-
cb(0, fh);
|
|
840
|
-
return;
|
|
841
|
-
}
|
|
842
957
|
try {
|
|
843
|
-
const s = await this.ws.fs.stat(this.resolve(
|
|
844
|
-
const ctx = { path:
|
|
958
|
+
const s = await this.ws.fs.stat(this.resolve(path4));
|
|
959
|
+
const ctx = { path: path4 };
|
|
845
960
|
if (s.size === null && s.type !== FileType.DIRECTORY) {
|
|
846
|
-
const data = await this.prefetch(
|
|
961
|
+
const data = await this.prefetch(path4);
|
|
847
962
|
if (data !== null) ctx.data = data;
|
|
848
963
|
}
|
|
849
964
|
const fh = this.nextFh++;
|
|
@@ -858,7 +973,7 @@ var MirageFS = class {
|
|
|
858
973
|
this.handles.delete(fd);
|
|
859
974
|
cb(0);
|
|
860
975
|
}
|
|
861
|
-
flush(
|
|
976
|
+
flush(path4, fd, cb) {
|
|
862
977
|
const ctx = this.handles.get(fd);
|
|
863
978
|
if (ctx?.writeBuf === void 0 || ctx.writeBuf.length === 0) {
|
|
864
979
|
cb(0);
|
|
@@ -870,7 +985,7 @@ var MirageFS = class {
|
|
|
870
985
|
try {
|
|
871
986
|
let existing = new Uint8Array(0);
|
|
872
987
|
try {
|
|
873
|
-
existing = await this.ws.fs.readFile(this.resolve(
|
|
988
|
+
existing = await this.ws.fs.readFile(this.resolve(path4), { raw: true });
|
|
874
989
|
} catch {
|
|
875
990
|
}
|
|
876
991
|
let total = existing.byteLength;
|
|
@@ -882,19 +997,32 @@ var MirageFS = class {
|
|
|
882
997
|
for (const [off, chunk] of writes) {
|
|
883
998
|
merged.set(chunk, off);
|
|
884
999
|
}
|
|
885
|
-
await this.writeFile(
|
|
1000
|
+
await this.writeFile(path4, merged);
|
|
886
1001
|
cb(0);
|
|
887
1002
|
} catch (err) {
|
|
888
1003
|
cb(classifyError(err));
|
|
889
1004
|
}
|
|
890
1005
|
})();
|
|
891
1006
|
}
|
|
892
|
-
fsync(
|
|
893
|
-
this.flush(
|
|
1007
|
+
fsync(path4, _datasync, fd, cb) {
|
|
1008
|
+
this.flush(path4, fd, cb);
|
|
894
1009
|
}
|
|
895
1010
|
};
|
|
896
1011
|
|
|
897
1012
|
// src/fuse/mount.ts
|
|
1013
|
+
function appendDirectIO(fuse) {
|
|
1014
|
+
const orig = fuse._fuseOptions?.bind(fuse);
|
|
1015
|
+
if (orig === void 0) {
|
|
1016
|
+
throw new Error(
|
|
1017
|
+
"@zkochan/fuse-native no longer exposes _fuseOptions(); the direct_io mount option cannot be applied. Update appendDirectIO in mount.ts for the new fuse-native version."
|
|
1018
|
+
);
|
|
1019
|
+
}
|
|
1020
|
+
fuse._fuseOptions = () => {
|
|
1021
|
+
const serialized = orig();
|
|
1022
|
+
if (serialized === "") return "-odirect_io";
|
|
1023
|
+
return serialized.includes("direct_io") ? serialized : `${serialized},direct_io`;
|
|
1024
|
+
};
|
|
1025
|
+
}
|
|
898
1026
|
async function loadFuse() {
|
|
899
1027
|
const mod = await loadOptionalPeer(
|
|
900
1028
|
() => import("@zkochan/fuse-native"),
|
|
@@ -931,10 +1059,9 @@ async function mount(ws, options = {}) {
|
|
|
931
1059
|
mountpoint = mkdtempSync(join(tmpdir(), "mirage-fuse-"));
|
|
932
1060
|
ownsMountpoint = true;
|
|
933
1061
|
}
|
|
934
|
-
const agentId = options.agentId;
|
|
935
1062
|
const mfs = new MirageFS(ws, {
|
|
936
|
-
...
|
|
937
|
-
...options.
|
|
1063
|
+
...options.rootPrefix !== void 0 ? { rootPrefix: options.rootPrefix } : {},
|
|
1064
|
+
...options.session !== void 0 ? { session: options.session } : {}
|
|
938
1065
|
});
|
|
939
1066
|
const autoUnmount = options.autoUnmount ?? process.platform === "linux";
|
|
940
1067
|
const fuseOpts = {
|
|
@@ -945,6 +1072,7 @@ async function mount(ws, options = {}) {
|
|
|
945
1072
|
...options.fuseOptions ?? {}
|
|
946
1073
|
};
|
|
947
1074
|
const fuse = new Fuse(mountpoint, mfs.ops(), fuseOpts);
|
|
1075
|
+
if (fuseOpts.directIO !== false) appendDirectIO(fuse);
|
|
948
1076
|
await new Promise((resolve, reject) => {
|
|
949
1077
|
fuse.mount((err) => {
|
|
950
1078
|
if (err === null) resolve();
|
|
@@ -1103,27 +1231,24 @@ var Workspace = class extends CoreWorkspace {
|
|
|
1103
1231
|
fuseMountpointsMap = /* @__PURE__ */ new Map();
|
|
1104
1232
|
fuseManagers = /* @__PURE__ */ new Map();
|
|
1105
1233
|
constructor(resources, options = {}) {
|
|
1106
|
-
const
|
|
1107
|
-
const modeOverrides = { ...options.modeOverrides ?? {} };
|
|
1234
|
+
const specs = {};
|
|
1108
1235
|
const commandSafeguards = {
|
|
1109
1236
|
...options.commandSafeguards ?? {}
|
|
1110
1237
|
};
|
|
1111
1238
|
const fuseTargets = [];
|
|
1112
1239
|
for (const [prefix, value] of Object.entries(resources)) {
|
|
1113
1240
|
if (value instanceof Mount) {
|
|
1114
|
-
|
|
1115
|
-
if (value.options.mode !== void 0) modeOverrides[prefix] = value.options.mode;
|
|
1241
|
+
specs[prefix] = value.options.mode !== void 0 ? [value.resource, value.options.mode] : value.resource;
|
|
1116
1242
|
if (value.options.commandSafeguards !== void 0)
|
|
1117
1243
|
commandSafeguards[prefix] = value.options.commandSafeguards;
|
|
1118
1244
|
if (value.options.fuse !== void 0 && value.options.fuse !== false)
|
|
1119
1245
|
fuseTargets.push([prefix, value.options.fuse]);
|
|
1120
1246
|
} else {
|
|
1121
|
-
|
|
1247
|
+
specs[prefix] = value;
|
|
1122
1248
|
}
|
|
1123
1249
|
}
|
|
1124
|
-
super(
|
|
1250
|
+
super(specs, {
|
|
1125
1251
|
...options,
|
|
1126
|
-
...Object.keys(modeOverrides).length > 0 ? { modeOverrides } : {},
|
|
1127
1252
|
...Object.keys(commandSafeguards).length > 0 ? { commandSafeguards } : {},
|
|
1128
1253
|
shellParserFactory: options.shellParserFactory ?? loadShellParser
|
|
1129
1254
|
});
|
|
@@ -1157,29 +1282,38 @@ var Workspace = class extends CoreWorkspace {
|
|
|
1157
1282
|
* its own {@link FuseManager}, so a workspace can expose any number of FUSE
|
|
1158
1283
|
* subtrees at once. A pinned mountpoint is collision-checked BEFORE mounting,
|
|
1159
1284
|
* so a clash never leaves a partial kernel mount.
|
|
1285
|
+
*
|
|
1286
|
+
* A session-bound mount (`sessionId` given) runs every op under that
|
|
1287
|
+
* session's mount grants (the kernel-tier primitive: bind-mount the tree
|
|
1288
|
+
* into a container and the narrowing travels with it); it is keyed
|
|
1289
|
+
* separately so the same prefix can also be exposed unbound.
|
|
1160
1290
|
*/
|
|
1161
|
-
async addFuseMount(prefix, mountpoint) {
|
|
1162
|
-
|
|
1291
|
+
async addFuseMount(prefix, mountpoint, sessionId) {
|
|
1292
|
+
const session = sessionId !== void 0 ? this.getSession(sessionId) : void 0;
|
|
1293
|
+
const key = sessionId === void 0 ? prefix : `${prefix}@${sessionId}`;
|
|
1294
|
+
if (mountpoint !== void 0) this.registerFuseMount(key, mountpoint);
|
|
1163
1295
|
const fm = new FuseManager();
|
|
1164
|
-
this.fuseManagers.set(
|
|
1296
|
+
this.fuseManagers.set(key, fm);
|
|
1165
1297
|
try {
|
|
1166
1298
|
const mp = await fm.setup(this, {
|
|
1167
1299
|
rootPrefix: prefix,
|
|
1168
|
-
...mountpoint !== void 0 ? { mountpoint } : {}
|
|
1300
|
+
...mountpoint !== void 0 ? { mountpoint } : {},
|
|
1301
|
+
...session !== void 0 ? { session } : {}
|
|
1169
1302
|
});
|
|
1170
|
-
if (mountpoint === void 0) this.registerFuseMount(
|
|
1303
|
+
if (mountpoint === void 0) this.registerFuseMount(key, mp);
|
|
1171
1304
|
return mp;
|
|
1172
1305
|
} catch (err) {
|
|
1173
|
-
this.fuseManagers.delete(
|
|
1174
|
-
this.fuseMountpointsMap.delete(
|
|
1306
|
+
this.fuseManagers.delete(key);
|
|
1307
|
+
this.fuseMountpointsMap.delete(key);
|
|
1175
1308
|
throw err;
|
|
1176
1309
|
}
|
|
1177
1310
|
}
|
|
1178
|
-
async removeFuseMount(prefix) {
|
|
1179
|
-
const
|
|
1180
|
-
this.fuseManagers.
|
|
1311
|
+
async removeFuseMount(prefix, sessionId) {
|
|
1312
|
+
const key = sessionId === void 0 ? prefix : `${prefix}@${sessionId}`;
|
|
1313
|
+
const fm = this.fuseManagers.get(key);
|
|
1314
|
+
this.fuseManagers.delete(key);
|
|
1181
1315
|
if (fm !== void 0) await fm.unmount();
|
|
1182
|
-
this.fuseMountpointsMap.delete(
|
|
1316
|
+
this.fuseMountpointsMap.delete(key);
|
|
1183
1317
|
}
|
|
1184
1318
|
get fuseMountpoints() {
|
|
1185
1319
|
return Object.fromEntries(this.fuseMountpointsMap);
|
|
@@ -1347,11 +1481,634 @@ var RedisObserverStore = class {
|
|
|
1347
1481
|
}
|
|
1348
1482
|
async close() {
|
|
1349
1483
|
if (this.clientPromise === null) return;
|
|
1350
|
-
const
|
|
1484
|
+
const pending = this.clientPromise;
|
|
1485
|
+
this.clientPromise = null;
|
|
1486
|
+
const c = await pending;
|
|
1351
1487
|
await c.quit();
|
|
1352
1488
|
}
|
|
1353
1489
|
};
|
|
1354
1490
|
|
|
1491
|
+
// src/workspace/namespace/disk.ts
|
|
1492
|
+
import { NamespaceStore } from "@struktoai/mirage-core";
|
|
1493
|
+
|
|
1494
|
+
// src/workspace/session/disk.ts
|
|
1495
|
+
import { mkdir as mkdir2, open, readFile as readFile2, readdir as readdir2, rename, stat as stat2, unlink as unlink2, writeFile as writeFile2 } from "fs/promises";
|
|
1496
|
+
import path2 from "path";
|
|
1497
|
+
import { generationOf, SessionStore } from "@struktoai/mirage-core";
|
|
1498
|
+
var LOCK_STALE_SECONDS = 10;
|
|
1499
|
+
var LOCK_RETRY_SLEEP_MS = 5;
|
|
1500
|
+
var LOCK_RETRY_LIMIT = 2e3;
|
|
1501
|
+
var tmpCounter = 0;
|
|
1502
|
+
function quoteName(name) {
|
|
1503
|
+
return encodeURIComponent(name).replace(
|
|
1504
|
+
/[!'()*]/g,
|
|
1505
|
+
(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`
|
|
1506
|
+
);
|
|
1507
|
+
}
|
|
1508
|
+
function isMissing(e) {
|
|
1509
|
+
return e.code === "ENOENT";
|
|
1510
|
+
}
|
|
1511
|
+
var DiskRecordClient = class {
|
|
1512
|
+
dir;
|
|
1513
|
+
constructor(root, prefix) {
|
|
1514
|
+
this.dir = path2.join(root, prefix);
|
|
1515
|
+
}
|
|
1516
|
+
recordPath(name) {
|
|
1517
|
+
return path2.join(this.dir, `${quoteName(name)}.json`);
|
|
1518
|
+
}
|
|
1519
|
+
// The token slot mirrors the S3 client's ETag but stays empty: disk
|
|
1520
|
+
// CAS anchors on the lockfile, not on a version token.
|
|
1521
|
+
async get(name) {
|
|
1522
|
+
let body;
|
|
1523
|
+
try {
|
|
1524
|
+
body = await readFile2(this.recordPath(name));
|
|
1525
|
+
} catch (e) {
|
|
1526
|
+
if (isMissing(e)) return [null, ""];
|
|
1527
|
+
throw e;
|
|
1528
|
+
}
|
|
1529
|
+
return [JSON.parse(body.toString()), ""];
|
|
1530
|
+
}
|
|
1531
|
+
async put(name, fields) {
|
|
1532
|
+
await mkdir2(this.dir, { recursive: true });
|
|
1533
|
+
await this.writeRecord(this.recordPath(name), fields);
|
|
1534
|
+
}
|
|
1535
|
+
/**
|
|
1536
|
+
* Write one record iff its stored generation matches.
|
|
1537
|
+
*
|
|
1538
|
+
* Take the record's lockfile, re-read under the lock, check the
|
|
1539
|
+
* generation, then tmp-write + rename. Losing the lock race or the
|
|
1540
|
+
* generation check resolves false; the caller adopts and retries.
|
|
1541
|
+
*/
|
|
1542
|
+
async casPut(name, fields, expectedGeneration) {
|
|
1543
|
+
await mkdir2(this.dir, { recursive: true });
|
|
1544
|
+
const target = this.recordPath(name);
|
|
1545
|
+
const lockPath = `${target}.lock`;
|
|
1546
|
+
let fh = await this.acquireLock(lockPath);
|
|
1547
|
+
if (fh === null) {
|
|
1548
|
+
if (!await this.reclaimStaleLock(lockPath)) return false;
|
|
1549
|
+
fh = await this.acquireLock(lockPath);
|
|
1550
|
+
if (fh === null) return false;
|
|
1551
|
+
}
|
|
1552
|
+
try {
|
|
1553
|
+
const [stored] = await this.get(name);
|
|
1554
|
+
if (generationOf(stored) !== expectedGeneration) return false;
|
|
1555
|
+
await this.writeRecord(target, fields);
|
|
1556
|
+
return true;
|
|
1557
|
+
} finally {
|
|
1558
|
+
await this.releaseLock(fh, lockPath);
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
async listNames() {
|
|
1562
|
+
let entries;
|
|
1563
|
+
try {
|
|
1564
|
+
entries = await readdir2(this.dir);
|
|
1565
|
+
} catch (e) {
|
|
1566
|
+
if (isMissing(e)) return [];
|
|
1567
|
+
throw e;
|
|
1568
|
+
}
|
|
1569
|
+
return entries.filter((n) => n.endsWith(".json")).map((n) => decodeURIComponent(n.slice(0, -".json".length)));
|
|
1570
|
+
}
|
|
1571
|
+
async loadAll() {
|
|
1572
|
+
const names = await this.listNames();
|
|
1573
|
+
const records = await Promise.all(names.map((name) => this.get(name)));
|
|
1574
|
+
const out = /* @__PURE__ */ new Map();
|
|
1575
|
+
for (let i = 0; i < names.length; i++) {
|
|
1576
|
+
const name = names[i];
|
|
1577
|
+
const fields = records[i]?.[0];
|
|
1578
|
+
if (name !== void 0 && fields != null) out.set(name, fields);
|
|
1579
|
+
}
|
|
1580
|
+
return out;
|
|
1581
|
+
}
|
|
1582
|
+
async delete(names) {
|
|
1583
|
+
for (const name of names) {
|
|
1584
|
+
try {
|
|
1585
|
+
await unlink2(this.recordPath(name));
|
|
1586
|
+
} catch (e) {
|
|
1587
|
+
if (!isMissing(e)) throw e;
|
|
1588
|
+
}
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
async clear() {
|
|
1592
|
+
await this.delete(await this.listNames());
|
|
1593
|
+
}
|
|
1594
|
+
async close() {
|
|
1595
|
+
}
|
|
1596
|
+
/**
|
|
1597
|
+
* Block until this record's lockfile is held; handle to release.
|
|
1598
|
+
*
|
|
1599
|
+
* For callers doing a read-modify-write that is not generation-CAS
|
|
1600
|
+
* (e.g. the single-file namespace plane); spins past contention and
|
|
1601
|
+
* reclaims stale locks, throwing only if a live writer holds the
|
|
1602
|
+
* lock for the whole retry budget (~10s).
|
|
1603
|
+
*/
|
|
1604
|
+
async lock(name) {
|
|
1605
|
+
await mkdir2(this.dir, { recursive: true });
|
|
1606
|
+
const lockPath = `${this.recordPath(name)}.lock`;
|
|
1607
|
+
for (let i = 0; i < LOCK_RETRY_LIMIT; i++) {
|
|
1608
|
+
const fh = await this.acquireLock(lockPath);
|
|
1609
|
+
if (fh !== null) return fh;
|
|
1610
|
+
if (await this.reclaimStaleLock(lockPath)) continue;
|
|
1611
|
+
await new Promise((r) => setTimeout(r, LOCK_RETRY_SLEEP_MS));
|
|
1612
|
+
}
|
|
1613
|
+
throw new Error(`could not acquire lock ${lockPath}`);
|
|
1614
|
+
}
|
|
1615
|
+
async unlock(name, fh) {
|
|
1616
|
+
await this.releaseLock(fh, `${this.recordPath(name)}.lock`);
|
|
1617
|
+
}
|
|
1618
|
+
// O_CREAT|O_EXCL ('wx'): filesystem-atomic mutex, the git protocol.
|
|
1619
|
+
// Local filesystems only (O_EXCL is unreliable on ancient NFS, the
|
|
1620
|
+
// same caveat git ships with).
|
|
1621
|
+
async acquireLock(lockPath) {
|
|
1622
|
+
let fh;
|
|
1623
|
+
try {
|
|
1624
|
+
fh = await open(lockPath, "wx");
|
|
1625
|
+
} catch (e) {
|
|
1626
|
+
if (e.code === "EEXIST") return null;
|
|
1627
|
+
throw e;
|
|
1628
|
+
}
|
|
1629
|
+
await fh.write(String(process.pid));
|
|
1630
|
+
return fh;
|
|
1631
|
+
}
|
|
1632
|
+
// True when the lock is gone or was stale and removed; false when a
|
|
1633
|
+
// live writer still holds it.
|
|
1634
|
+
async reclaimStaleLock(lockPath) {
|
|
1635
|
+
let mtimeMs;
|
|
1636
|
+
try {
|
|
1637
|
+
mtimeMs = (await stat2(lockPath)).mtimeMs;
|
|
1638
|
+
} catch (e) {
|
|
1639
|
+
if (isMissing(e)) return true;
|
|
1640
|
+
throw e;
|
|
1641
|
+
}
|
|
1642
|
+
const age = (Date.now() - mtimeMs) / 1e3;
|
|
1643
|
+
if (age <= LOCK_STALE_SECONDS) return false;
|
|
1644
|
+
console.warn(`mirage: reclaiming stale lock ${lockPath} (age ${age.toFixed(1)}s)`);
|
|
1645
|
+
try {
|
|
1646
|
+
await unlink2(lockPath);
|
|
1647
|
+
} catch (e) {
|
|
1648
|
+
if (!isMissing(e)) throw e;
|
|
1649
|
+
}
|
|
1650
|
+
return true;
|
|
1651
|
+
}
|
|
1652
|
+
async releaseLock(fh, lockPath) {
|
|
1653
|
+
await fh.close();
|
|
1654
|
+
try {
|
|
1655
|
+
await unlink2(lockPath);
|
|
1656
|
+
} catch (e) {
|
|
1657
|
+
if (!isMissing(e)) throw e;
|
|
1658
|
+
console.warn(`mirage: lock ${lockPath} vanished before release (reclaimed?)`);
|
|
1659
|
+
}
|
|
1660
|
+
}
|
|
1661
|
+
async writeRecord(target, fields) {
|
|
1662
|
+
const tmp = `${target}.${String(process.pid)}.${String(tmpCounter++)}.tmp`;
|
|
1663
|
+
await writeFile2(tmp, JSON.stringify(fields));
|
|
1664
|
+
await rename(tmp, target);
|
|
1665
|
+
}
|
|
1666
|
+
};
|
|
1667
|
+
var DiskSessionStore = class extends SessionStore {
|
|
1668
|
+
records;
|
|
1669
|
+
constructor(root) {
|
|
1670
|
+
super();
|
|
1671
|
+
this.records = new DiskRecordClient(root, "sessions/");
|
|
1672
|
+
}
|
|
1673
|
+
async load() {
|
|
1674
|
+
return await this.records.loadAll();
|
|
1675
|
+
}
|
|
1676
|
+
async set(sessionId, fields) {
|
|
1677
|
+
await this.records.put(sessionId, fields);
|
|
1678
|
+
}
|
|
1679
|
+
async casSet(sessionId, fields, expectedGeneration) {
|
|
1680
|
+
return await this.records.casPut(sessionId, fields, expectedGeneration);
|
|
1681
|
+
}
|
|
1682
|
+
async delete(sessionIds) {
|
|
1683
|
+
await this.records.delete(sessionIds);
|
|
1684
|
+
}
|
|
1685
|
+
async replaceAll(entries) {
|
|
1686
|
+
const stale = (await this.records.listNames()).filter((n) => !entries.has(n));
|
|
1687
|
+
await this.records.delete(stale);
|
|
1688
|
+
await Promise.all([...entries].map(([sid, fields]) => this.records.put(sid, fields)));
|
|
1689
|
+
}
|
|
1690
|
+
async clear() {
|
|
1691
|
+
await this.records.clear();
|
|
1692
|
+
}
|
|
1693
|
+
async close() {
|
|
1694
|
+
await this.records.close();
|
|
1695
|
+
}
|
|
1696
|
+
};
|
|
1697
|
+
|
|
1698
|
+
// src/workspace/namespace/disk.ts
|
|
1699
|
+
var NAMESPACE_RECORD = "namespace";
|
|
1700
|
+
var DiskNamespaceStore = class extends NamespaceStore {
|
|
1701
|
+
records;
|
|
1702
|
+
constructor(root) {
|
|
1703
|
+
super();
|
|
1704
|
+
this.records = new DiskRecordClient(root, "");
|
|
1705
|
+
}
|
|
1706
|
+
async state() {
|
|
1707
|
+
const [fields] = await this.records.get(NAMESPACE_RECORD);
|
|
1708
|
+
if (fields === null) return { nodes: {}, user: null };
|
|
1709
|
+
return {
|
|
1710
|
+
nodes: fields.nodes ?? {},
|
|
1711
|
+
user: typeof fields.user === "string" ? fields.user : null
|
|
1712
|
+
};
|
|
1713
|
+
}
|
|
1714
|
+
async write(state) {
|
|
1715
|
+
await this.records.put(NAMESPACE_RECORD, { nodes: state.nodes, user: state.user });
|
|
1716
|
+
}
|
|
1717
|
+
async load() {
|
|
1718
|
+
return new Map(Object.entries((await this.state()).nodes));
|
|
1719
|
+
}
|
|
1720
|
+
async set(path4, fields) {
|
|
1721
|
+
const fh = await this.records.lock(NAMESPACE_RECORD);
|
|
1722
|
+
try {
|
|
1723
|
+
const state = await this.state();
|
|
1724
|
+
state.nodes[path4] = fields;
|
|
1725
|
+
await this.write(state);
|
|
1726
|
+
} finally {
|
|
1727
|
+
await this.records.unlock(NAMESPACE_RECORD, fh);
|
|
1728
|
+
}
|
|
1729
|
+
}
|
|
1730
|
+
async delete(paths) {
|
|
1731
|
+
const fh = await this.records.lock(NAMESPACE_RECORD);
|
|
1732
|
+
try {
|
|
1733
|
+
const state = await this.state();
|
|
1734
|
+
const drop = new Set(paths);
|
|
1735
|
+
state.nodes = Object.fromEntries(
|
|
1736
|
+
Object.entries(state.nodes).filter(([path4]) => !drop.has(path4))
|
|
1737
|
+
);
|
|
1738
|
+
await this.write(state);
|
|
1739
|
+
} finally {
|
|
1740
|
+
await this.records.unlock(NAMESPACE_RECORD, fh);
|
|
1741
|
+
}
|
|
1742
|
+
}
|
|
1743
|
+
async replaceAll(entries) {
|
|
1744
|
+
const fh = await this.records.lock(NAMESPACE_RECORD);
|
|
1745
|
+
try {
|
|
1746
|
+
const state = await this.state();
|
|
1747
|
+
state.nodes = Object.fromEntries(entries);
|
|
1748
|
+
await this.write(state);
|
|
1749
|
+
} finally {
|
|
1750
|
+
await this.records.unlock(NAMESPACE_RECORD, fh);
|
|
1751
|
+
}
|
|
1752
|
+
}
|
|
1753
|
+
async loadUser() {
|
|
1754
|
+
return (await this.state()).user;
|
|
1755
|
+
}
|
|
1756
|
+
async setUser(user) {
|
|
1757
|
+
const fh = await this.records.lock(NAMESPACE_RECORD);
|
|
1758
|
+
try {
|
|
1759
|
+
const state = await this.state();
|
|
1760
|
+
state.user = user;
|
|
1761
|
+
await this.write(state);
|
|
1762
|
+
} finally {
|
|
1763
|
+
await this.records.unlock(NAMESPACE_RECORD, fh);
|
|
1764
|
+
}
|
|
1765
|
+
}
|
|
1766
|
+
async clear() {
|
|
1767
|
+
const fh = await this.records.lock(NAMESPACE_RECORD);
|
|
1768
|
+
try {
|
|
1769
|
+
await this.write({ nodes: {}, user: null });
|
|
1770
|
+
} finally {
|
|
1771
|
+
await this.records.unlock(NAMESPACE_RECORD, fh);
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
async close() {
|
|
1775
|
+
await this.records.close();
|
|
1776
|
+
}
|
|
1777
|
+
};
|
|
1778
|
+
|
|
1779
|
+
// src/workspace/namespace/redis.ts
|
|
1780
|
+
import { NamespaceStore as NamespaceStore2 } from "@struktoai/mirage-core";
|
|
1781
|
+
var RedisNamespaceStore = class extends NamespaceStore2 {
|
|
1782
|
+
url;
|
|
1783
|
+
key;
|
|
1784
|
+
userKey;
|
|
1785
|
+
clientPromise = null;
|
|
1786
|
+
constructor(options = {}) {
|
|
1787
|
+
super();
|
|
1788
|
+
this.url = options.url ?? "redis://localhost:6379/0";
|
|
1789
|
+
const prefix = options.keyPrefix ?? "mirage:namespace:";
|
|
1790
|
+
this.key = `${prefix}nodes`;
|
|
1791
|
+
this.userKey = `${prefix}user`;
|
|
1792
|
+
}
|
|
1793
|
+
async client() {
|
|
1794
|
+
this.clientPromise ??= (async () => {
|
|
1795
|
+
const mod = await loadOptionalPeer(
|
|
1796
|
+
() => import("redis"),
|
|
1797
|
+
{ feature: "RedisNamespaceStore", packageName: "redis" }
|
|
1798
|
+
);
|
|
1799
|
+
const c = mod.createClient({
|
|
1800
|
+
url: this.url,
|
|
1801
|
+
socket: { reconnectStrategy: false }
|
|
1802
|
+
});
|
|
1803
|
+
await c.connect();
|
|
1804
|
+
return c;
|
|
1805
|
+
})();
|
|
1806
|
+
return this.clientPromise;
|
|
1807
|
+
}
|
|
1808
|
+
async load() {
|
|
1809
|
+
const c = await this.client();
|
|
1810
|
+
const raw = await c.hGetAll(this.key);
|
|
1811
|
+
const out = /* @__PURE__ */ new Map();
|
|
1812
|
+
for (const [path4, value] of Object.entries(raw)) {
|
|
1813
|
+
out.set(path4, JSON.parse(value));
|
|
1814
|
+
}
|
|
1815
|
+
return out;
|
|
1816
|
+
}
|
|
1817
|
+
async set(path4, fields) {
|
|
1818
|
+
const c = await this.client();
|
|
1819
|
+
await c.hSet(this.key, path4, JSON.stringify(fields));
|
|
1820
|
+
}
|
|
1821
|
+
async delete(paths) {
|
|
1822
|
+
if (paths.length === 0) return;
|
|
1823
|
+
const c = await this.client();
|
|
1824
|
+
await c.hDel(this.key, [...paths]);
|
|
1825
|
+
}
|
|
1826
|
+
async replaceAll(entries) {
|
|
1827
|
+
const c = await this.client();
|
|
1828
|
+
const multi = c.multi().del(this.key);
|
|
1829
|
+
for (const [path4, fields] of entries) {
|
|
1830
|
+
multi.hSet(this.key, path4, JSON.stringify(fields));
|
|
1831
|
+
}
|
|
1832
|
+
await multi.exec();
|
|
1833
|
+
}
|
|
1834
|
+
async loadUser() {
|
|
1835
|
+
const c = await this.client();
|
|
1836
|
+
return c.get(this.userKey);
|
|
1837
|
+
}
|
|
1838
|
+
async setUser(user) {
|
|
1839
|
+
const c = await this.client();
|
|
1840
|
+
await c.set(this.userKey, user);
|
|
1841
|
+
}
|
|
1842
|
+
async clear() {
|
|
1843
|
+
const c = await this.client();
|
|
1844
|
+
await c.del([this.key, this.userKey]);
|
|
1845
|
+
}
|
|
1846
|
+
async close() {
|
|
1847
|
+
if (this.clientPromise === null) return;
|
|
1848
|
+
const pending = this.clientPromise;
|
|
1849
|
+
this.clientPromise = null;
|
|
1850
|
+
const c = await pending;
|
|
1851
|
+
await c.quit();
|
|
1852
|
+
}
|
|
1853
|
+
};
|
|
1854
|
+
|
|
1855
|
+
// src/workspace/session/redis.ts
|
|
1856
|
+
import { readFileSync as readFileSync2 } from "fs";
|
|
1857
|
+
import { SessionStore as SessionStore2 } from "@struktoai/mirage-core";
|
|
1858
|
+
var CAS_SCRIPT = readFileSync2(new URL("./cas.lua", import.meta.url), "utf8");
|
|
1859
|
+
var RedisSessionStore = class extends SessionStore2 {
|
|
1860
|
+
url;
|
|
1861
|
+
key;
|
|
1862
|
+
clientPromise = null;
|
|
1863
|
+
constructor(options = {}) {
|
|
1864
|
+
super();
|
|
1865
|
+
this.url = options.url ?? "redis://localhost:6379/0";
|
|
1866
|
+
const prefix = options.keyPrefix ?? "mirage:session:";
|
|
1867
|
+
this.key = `${prefix}sessions`;
|
|
1868
|
+
}
|
|
1869
|
+
async client() {
|
|
1870
|
+
this.clientPromise ??= (async () => {
|
|
1871
|
+
const mod = await loadOptionalPeer(
|
|
1872
|
+
() => import("redis"),
|
|
1873
|
+
{ feature: "RedisSessionStore", packageName: "redis" }
|
|
1874
|
+
);
|
|
1875
|
+
const c = mod.createClient({
|
|
1876
|
+
url: this.url,
|
|
1877
|
+
socket: { reconnectStrategy: false }
|
|
1878
|
+
});
|
|
1879
|
+
await c.connect();
|
|
1880
|
+
return c;
|
|
1881
|
+
})();
|
|
1882
|
+
return this.clientPromise;
|
|
1883
|
+
}
|
|
1884
|
+
// One atomic server-side compare-and-set: Lua reads the stored
|
|
1885
|
+
// record's generation and writes only on a match.
|
|
1886
|
+
async casSet(sessionId, fields, expectedGeneration) {
|
|
1887
|
+
const c = await this.client();
|
|
1888
|
+
const result = await c.eval(CAS_SCRIPT, {
|
|
1889
|
+
keys: [this.key],
|
|
1890
|
+
arguments: [sessionId, JSON.stringify(fields), String(expectedGeneration)]
|
|
1891
|
+
});
|
|
1892
|
+
return result === 1;
|
|
1893
|
+
}
|
|
1894
|
+
async load() {
|
|
1895
|
+
const c = await this.client();
|
|
1896
|
+
const raw = await c.hGetAll(this.key);
|
|
1897
|
+
const out = /* @__PURE__ */ new Map();
|
|
1898
|
+
for (const [sid, value] of Object.entries(raw)) {
|
|
1899
|
+
out.set(sid, JSON.parse(value));
|
|
1900
|
+
}
|
|
1901
|
+
return out;
|
|
1902
|
+
}
|
|
1903
|
+
async set(sessionId, fields) {
|
|
1904
|
+
const c = await this.client();
|
|
1905
|
+
await c.hSet(this.key, sessionId, JSON.stringify(fields));
|
|
1906
|
+
}
|
|
1907
|
+
async delete(sessionIds) {
|
|
1908
|
+
if (sessionIds.length === 0) return;
|
|
1909
|
+
const c = await this.client();
|
|
1910
|
+
await c.hDel(this.key, [...sessionIds]);
|
|
1911
|
+
}
|
|
1912
|
+
async replaceAll(entries) {
|
|
1913
|
+
const c = await this.client();
|
|
1914
|
+
const multi = c.multi().del(this.key);
|
|
1915
|
+
for (const [sid, fields] of entries) {
|
|
1916
|
+
multi.hSet(this.key, sid, JSON.stringify(fields));
|
|
1917
|
+
}
|
|
1918
|
+
await multi.exec();
|
|
1919
|
+
}
|
|
1920
|
+
async clear() {
|
|
1921
|
+
const c = await this.client();
|
|
1922
|
+
await c.del(this.key);
|
|
1923
|
+
}
|
|
1924
|
+
async close() {
|
|
1925
|
+
if (this.clientPromise === null) return;
|
|
1926
|
+
const pending = this.clientPromise;
|
|
1927
|
+
this.clientPromise = null;
|
|
1928
|
+
const c = await pending;
|
|
1929
|
+
await c.quit();
|
|
1930
|
+
}
|
|
1931
|
+
};
|
|
1932
|
+
|
|
1933
|
+
// src/workspace/store/disk.ts
|
|
1934
|
+
import { homedir } from "os";
|
|
1935
|
+
import path3 from "path";
|
|
1936
|
+
import {
|
|
1937
|
+
WorkspaceStateStore
|
|
1938
|
+
} from "@struktoai/mirage-core";
|
|
1939
|
+
var DEFAULT_STATE_ROOT = "~/.mirage/state";
|
|
1940
|
+
function expandHome(p) {
|
|
1941
|
+
if (p === "~") return homedir();
|
|
1942
|
+
if (p.startsWith("~/")) return path3.join(homedir(), p.slice(2));
|
|
1943
|
+
return p;
|
|
1944
|
+
}
|
|
1945
|
+
function quoteSegment(name) {
|
|
1946
|
+
return encodeURIComponent(name).replace(
|
|
1947
|
+
/[!'()*]/g,
|
|
1948
|
+
(c) => `%${c.charCodeAt(0).toString(16).toUpperCase()}`
|
|
1949
|
+
);
|
|
1950
|
+
}
|
|
1951
|
+
var DiskWorkspaceStateStore = class extends WorkspaceStateStore {
|
|
1952
|
+
root;
|
|
1953
|
+
meta = /* @__PURE__ */ new Map();
|
|
1954
|
+
namespaces = /* @__PURE__ */ new Map();
|
|
1955
|
+
observers = /* @__PURE__ */ new Map();
|
|
1956
|
+
sessionTables = /* @__PURE__ */ new Map();
|
|
1957
|
+
constructor(options = {}) {
|
|
1958
|
+
const { root, ...overrides } = options;
|
|
1959
|
+
super(overrides);
|
|
1960
|
+
this.root = expandHome(root ?? DEFAULT_STATE_ROOT);
|
|
1961
|
+
}
|
|
1962
|
+
wsRoot(workspaceId) {
|
|
1963
|
+
return path3.join(this.root, "workspaces", quoteSegment(workspaceId));
|
|
1964
|
+
}
|
|
1965
|
+
metaClient(workspaceId) {
|
|
1966
|
+
let client = this.meta.get(workspaceId);
|
|
1967
|
+
if (client === void 0) {
|
|
1968
|
+
client = new DiskRecordClient(this.wsRoot(workspaceId), "");
|
|
1969
|
+
this.meta.set(workspaceId, client);
|
|
1970
|
+
}
|
|
1971
|
+
return client;
|
|
1972
|
+
}
|
|
1973
|
+
makeNamespace(workspaceId) {
|
|
1974
|
+
let ns = this.namespaces.get(workspaceId);
|
|
1975
|
+
if (ns === void 0) {
|
|
1976
|
+
ns = new DiskNamespaceStore(this.wsRoot(workspaceId));
|
|
1977
|
+
this.namespaces.set(workspaceId, ns);
|
|
1978
|
+
}
|
|
1979
|
+
return ns;
|
|
1980
|
+
}
|
|
1981
|
+
makeObserver(workspaceId) {
|
|
1982
|
+
let ob = this.observers.get(workspaceId);
|
|
1983
|
+
if (ob === void 0) {
|
|
1984
|
+
ob = new DiskObserverStore(path3.join(this.wsRoot(workspaceId), "history"));
|
|
1985
|
+
this.observers.set(workspaceId, ob);
|
|
1986
|
+
}
|
|
1987
|
+
return ob;
|
|
1988
|
+
}
|
|
1989
|
+
makeSessions(workspaceId) {
|
|
1990
|
+
let table = this.sessionTables.get(workspaceId);
|
|
1991
|
+
if (table === void 0) {
|
|
1992
|
+
table = new DiskSessionStore(this.wsRoot(workspaceId));
|
|
1993
|
+
this.sessionTables.set(workspaceId, table);
|
|
1994
|
+
}
|
|
1995
|
+
return table;
|
|
1996
|
+
}
|
|
1997
|
+
async readMeta(workspaceId) {
|
|
1998
|
+
const [fields] = await this.metaClient(workspaceId).get("workspace");
|
|
1999
|
+
return fields;
|
|
2000
|
+
}
|
|
2001
|
+
async writeMeta(workspaceId, fields) {
|
|
2002
|
+
await this.metaClient(workspaceId).put("workspace", fields);
|
|
2003
|
+
}
|
|
2004
|
+
async casWriteMeta(workspaceId, fields, expectedGeneration) {
|
|
2005
|
+
return await this.metaClient(workspaceId).casPut("workspace", fields, expectedGeneration);
|
|
2006
|
+
}
|
|
2007
|
+
async closeSelf() {
|
|
2008
|
+
for (const ns of this.namespaces.values()) await ns.close();
|
|
2009
|
+
for (const ob of this.observers.values()) await ob.close();
|
|
2010
|
+
for (const table of this.sessionTables.values()) await table.close();
|
|
2011
|
+
for (const client of this.meta.values()) await client.close();
|
|
2012
|
+
}
|
|
2013
|
+
};
|
|
2014
|
+
|
|
2015
|
+
// src/workspace/store/redis.ts
|
|
2016
|
+
import {
|
|
2017
|
+
WorkspaceStateStore as WorkspaceStateStore2
|
|
2018
|
+
} from "@struktoai/mirage-core";
|
|
2019
|
+
var RedisWorkspaceStateStore = class extends WorkspaceStateStore2 {
|
|
2020
|
+
url;
|
|
2021
|
+
prefix;
|
|
2022
|
+
metaKey;
|
|
2023
|
+
clientPromise = null;
|
|
2024
|
+
namespaces = /* @__PURE__ */ new Map();
|
|
2025
|
+
observers = /* @__PURE__ */ new Map();
|
|
2026
|
+
sessionTables = /* @__PURE__ */ new Map();
|
|
2027
|
+
constructor(options = {}) {
|
|
2028
|
+
const { url, keyPrefix, ...overrides } = options;
|
|
2029
|
+
super(overrides);
|
|
2030
|
+
this.url = url ?? "redis://localhost:6379/0";
|
|
2031
|
+
this.prefix = keyPrefix ?? "mirage:";
|
|
2032
|
+
this.metaKey = `${this.prefix}workspaces`;
|
|
2033
|
+
}
|
|
2034
|
+
async client() {
|
|
2035
|
+
this.clientPromise ??= (async () => {
|
|
2036
|
+
const mod = await loadOptionalPeer(
|
|
2037
|
+
() => import("redis"),
|
|
2038
|
+
{ feature: "RedisWorkspaceStateStore", packageName: "redis" }
|
|
2039
|
+
);
|
|
2040
|
+
const c = mod.createClient({
|
|
2041
|
+
url: this.url,
|
|
2042
|
+
socket: { reconnectStrategy: false }
|
|
2043
|
+
});
|
|
2044
|
+
await c.connect();
|
|
2045
|
+
return c;
|
|
2046
|
+
})();
|
|
2047
|
+
return this.clientPromise;
|
|
2048
|
+
}
|
|
2049
|
+
makeNamespace(workspaceId) {
|
|
2050
|
+
let ns = this.namespaces.get(workspaceId);
|
|
2051
|
+
if (ns === void 0) {
|
|
2052
|
+
ns = new RedisNamespaceStore({
|
|
2053
|
+
url: this.url,
|
|
2054
|
+
keyPrefix: `${this.prefix}${workspaceId}:namespace:`
|
|
2055
|
+
});
|
|
2056
|
+
this.namespaces.set(workspaceId, ns);
|
|
2057
|
+
}
|
|
2058
|
+
return ns;
|
|
2059
|
+
}
|
|
2060
|
+
makeObserver(workspaceId) {
|
|
2061
|
+
let ob = this.observers.get(workspaceId);
|
|
2062
|
+
if (ob === void 0) {
|
|
2063
|
+
ob = new RedisObserverStore({
|
|
2064
|
+
url: this.url,
|
|
2065
|
+
keyPrefix: `${this.prefix}${workspaceId}:observer:`
|
|
2066
|
+
});
|
|
2067
|
+
this.observers.set(workspaceId, ob);
|
|
2068
|
+
}
|
|
2069
|
+
return ob;
|
|
2070
|
+
}
|
|
2071
|
+
makeSessions(workspaceId) {
|
|
2072
|
+
let table = this.sessionTables.get(workspaceId);
|
|
2073
|
+
if (table === void 0) {
|
|
2074
|
+
table = new RedisSessionStore({
|
|
2075
|
+
url: this.url,
|
|
2076
|
+
keyPrefix: `${this.prefix}${workspaceId}:`
|
|
2077
|
+
});
|
|
2078
|
+
this.sessionTables.set(workspaceId, table);
|
|
2079
|
+
}
|
|
2080
|
+
return table;
|
|
2081
|
+
}
|
|
2082
|
+
async readMeta(workspaceId) {
|
|
2083
|
+
const c = await this.client();
|
|
2084
|
+
const raw = await c.hGet(this.metaKey, workspaceId);
|
|
2085
|
+
return raw != null ? JSON.parse(raw) : null;
|
|
2086
|
+
}
|
|
2087
|
+
async writeMeta(workspaceId, fields) {
|
|
2088
|
+
const c = await this.client();
|
|
2089
|
+
await c.hSet(this.metaKey, workspaceId, JSON.stringify(fields));
|
|
2090
|
+
}
|
|
2091
|
+
// Same generic hash-field CAS the session store uses: the meta hash
|
|
2092
|
+
// is keyed by workspace id instead of session id.
|
|
2093
|
+
async casWriteMeta(workspaceId, fields, expectedGeneration) {
|
|
2094
|
+
const c = await this.client();
|
|
2095
|
+
const result = await c.eval(CAS_SCRIPT, {
|
|
2096
|
+
keys: [this.metaKey],
|
|
2097
|
+
arguments: [workspaceId, JSON.stringify(fields), String(expectedGeneration)]
|
|
2098
|
+
});
|
|
2099
|
+
return result === 1;
|
|
2100
|
+
}
|
|
2101
|
+
async closeSelf() {
|
|
2102
|
+
for (const ns of this.namespaces.values()) await ns.close();
|
|
2103
|
+
for (const ob of this.observers.values()) await ob.close();
|
|
2104
|
+
for (const table of this.sessionTables.values()) await table.close();
|
|
2105
|
+
if (this.clientPromise !== null) {
|
|
2106
|
+
const c = await this.clientPromise;
|
|
2107
|
+
await c.quit();
|
|
2108
|
+
}
|
|
2109
|
+
}
|
|
2110
|
+
};
|
|
2111
|
+
|
|
1355
2112
|
// src/fs_monkey.ts
|
|
1356
2113
|
import { Buffer as Buffer2 } from "buffer";
|
|
1357
2114
|
import { createRequire as createRequire3 } from "module";
|
|
@@ -1362,7 +2119,10 @@ var fsMonkey = requireCjs3("fs-monkey");
|
|
|
1362
2119
|
var { patchFs } = fsMonkey;
|
|
1363
2120
|
function mountedPath(ws, p) {
|
|
1364
2121
|
try {
|
|
1365
|
-
|
|
2122
|
+
const m = ws.registry.mountFor(p);
|
|
2123
|
+
if (m === null) return false;
|
|
2124
|
+
if (ws.syntheticRoot && m === ws.registry.rootMount) return false;
|
|
2125
|
+
return true;
|
|
1366
2126
|
} catch {
|
|
1367
2127
|
return false;
|
|
1368
2128
|
}
|
|
@@ -1509,7 +2269,7 @@ async function resolveSizes(accessor, paths, index) {
|
|
|
1509
2269
|
const resolved = [];
|
|
1510
2270
|
let missing = 0;
|
|
1511
2271
|
for (const p of paths) {
|
|
1512
|
-
const pathStr = p.
|
|
2272
|
+
const pathStr = p.virtual;
|
|
1513
2273
|
let size = null;
|
|
1514
2274
|
if (index !== void 0) {
|
|
1515
2275
|
const lookup = await index.get(pathStr);
|
|
@@ -1577,13 +2337,19 @@ function metadataProvision(_accessor, paths, _texts, _opts) {
|
|
|
1577
2337
|
// src/cache/redis/file.ts
|
|
1578
2338
|
import {
|
|
1579
2339
|
defaultFingerprint,
|
|
1580
|
-
parseLimit
|
|
2340
|
+
parseLimit,
|
|
2341
|
+
validateMaxDrainBytes
|
|
1581
2342
|
} from "@struktoai/mirage-core";
|
|
1582
2343
|
var RedisFileCacheStore = class extends RedisResource {
|
|
2344
|
+
// Advisory only: unlike the RAM store there is no client-side LRU, so
|
|
2345
|
+
// nothing evicts on overflow. Cap memory on the Redis server instead
|
|
2346
|
+
// (maxmemory + maxmemory-policy allkeys-lru) to approximate the RAM
|
|
2347
|
+
// store's eviction behavior.
|
|
1583
2348
|
limit;
|
|
1584
2349
|
dataPrefix;
|
|
1585
2350
|
metaPrefix;
|
|
1586
|
-
|
|
2351
|
+
maxDrainBytesValue = null;
|
|
2352
|
+
drainTasks = /* @__PURE__ */ new Map();
|
|
1587
2353
|
constructor(options = {}) {
|
|
1588
2354
|
super({
|
|
1589
2355
|
url: options.url ?? "redis://localhost:6379/0",
|
|
@@ -1594,7 +2360,16 @@ var RedisFileCacheStore = class extends RedisResource {
|
|
|
1594
2360
|
this.metaPrefix = `${this.keyPrefix}meta:`;
|
|
1595
2361
|
this.maxDrainBytes = options.maxDrainBytes ?? null;
|
|
1596
2362
|
}
|
|
1597
|
-
|
|
2363
|
+
get maxDrainBytes() {
|
|
2364
|
+
return this.maxDrainBytesValue;
|
|
2365
|
+
}
|
|
2366
|
+
set maxDrainBytes(value) {
|
|
2367
|
+
validateMaxDrainBytes(this.limit, value);
|
|
2368
|
+
this.maxDrainBytesValue = value;
|
|
2369
|
+
}
|
|
2370
|
+
// Size lives in the redis server and is not tracked client-side.
|
|
2371
|
+
cacheSize = null;
|
|
2372
|
+
cacheEntries = null;
|
|
1598
2373
|
get cacheLimit() {
|
|
1599
2374
|
return this.limit;
|
|
1600
2375
|
}
|
|
@@ -1633,6 +2408,7 @@ var RedisFileCacheStore = class extends RedisResource {
|
|
|
1633
2408
|
return true;
|
|
1634
2409
|
}
|
|
1635
2410
|
async remove(key) {
|
|
2411
|
+
this.drainTasks.delete(key);
|
|
1636
2412
|
const c = await this.cacheClient();
|
|
1637
2413
|
const pipe = c.multi();
|
|
1638
2414
|
pipe.del(`${this.dataPrefix}${key}`);
|
|
@@ -1640,7 +2416,7 @@ var RedisFileCacheStore = class extends RedisResource {
|
|
|
1640
2416
|
await pipe.exec();
|
|
1641
2417
|
}
|
|
1642
2418
|
async exists(key) {
|
|
1643
|
-
const k = typeof key === "string" ? key : key.
|
|
2419
|
+
const k = typeof key === "string" ? key : key.mountPath;
|
|
1644
2420
|
const c = await this.cacheClient();
|
|
1645
2421
|
return await c.exists(`${this.dataPrefix}${k}`) > 0;
|
|
1646
2422
|
}
|
|
@@ -1651,6 +2427,7 @@ var RedisFileCacheStore = class extends RedisResource {
|
|
|
1651
2427
|
return fp === remoteFingerprint;
|
|
1652
2428
|
}
|
|
1653
2429
|
async clear() {
|
|
2430
|
+
this.drainTasks.clear();
|
|
1654
2431
|
const c = await this.cacheClient();
|
|
1655
2432
|
for (const pattern of [`${this.dataPrefix}*`, `${this.metaPrefix}*`]) {
|
|
1656
2433
|
const batch = [];
|
|
@@ -1831,208 +2608,218 @@ var REGISTRY = {
|
|
|
1831
2608
|
return new RAMResource();
|
|
1832
2609
|
},
|
|
1833
2610
|
disk: async (config) => {
|
|
1834
|
-
const { DiskResource: DiskResource2 } = await import("./disk-
|
|
2611
|
+
const { DiskResource: DiskResource2 } = await import("./disk-24NWTN2I.js");
|
|
1835
2612
|
const norm = normalizeFields(config);
|
|
1836
2613
|
return new DiskResource2(norm);
|
|
1837
2614
|
},
|
|
1838
2615
|
redis: async (config) => {
|
|
1839
|
-
const { RedisResource: RedisResource2 } = await import("./redis-
|
|
2616
|
+
const { RedisResource: RedisResource2 } = await import("./redis-6D55Q2WB.js");
|
|
1840
2617
|
const norm = normalizeFields(config);
|
|
1841
2618
|
return new RedisResource2(norm);
|
|
1842
2619
|
},
|
|
1843
2620
|
s3: async (config) => {
|
|
1844
|
-
const { S3Resource: S3Resource2 } = await import("./s3-
|
|
1845
|
-
const { normalizeS3Config } = await import("./config-
|
|
2621
|
+
const { S3Resource: S3Resource2 } = await import("./s3-XQBI2CXN.js");
|
|
2622
|
+
const { normalizeS3Config } = await import("./config-BBOLI7VE.js");
|
|
1846
2623
|
return new S3Resource2(normalizeS3Config(config));
|
|
1847
2624
|
},
|
|
2625
|
+
gridfs: async (config) => {
|
|
2626
|
+
const { GridFSResource: GridFSResource2 } = await import("./gridfs-KZRZ6SIB.js");
|
|
2627
|
+
const { normalizeGridFSConfig: normalizeGridFSConfig2 } = await import("./config-J2C53GOT.js");
|
|
2628
|
+
return new GridFSResource2(normalizeGridFSConfig2(config));
|
|
2629
|
+
},
|
|
1848
2630
|
gcs: async (config) => {
|
|
1849
|
-
const { GCSResource: GCSResource2 } = await import("./gcs-
|
|
1850
|
-
const { normalizeGcsConfig } = await import("./config-
|
|
2631
|
+
const { GCSResource: GCSResource2 } = await import("./gcs-PFWR6MIW.js");
|
|
2632
|
+
const { normalizeGcsConfig } = await import("./config-BIBFLUIR.js");
|
|
1851
2633
|
return new GCSResource2(normalizeGcsConfig(config));
|
|
1852
2634
|
},
|
|
1853
2635
|
oci: async (config) => {
|
|
1854
|
-
const { OCIResource: OCIResource2 } = await import("./oci-
|
|
1855
|
-
const { normalizeOciConfig } = await import("./config-
|
|
2636
|
+
const { OCIResource: OCIResource2 } = await import("./oci-CKYBSFZJ.js");
|
|
2637
|
+
const { normalizeOciConfig } = await import("./config-W7EVPJNK.js");
|
|
1856
2638
|
return new OCIResource2(normalizeOciConfig(config));
|
|
1857
2639
|
},
|
|
1858
2640
|
r2: async (config) => {
|
|
1859
|
-
const { R2Resource: R2Resource2 } = await import("./r2-
|
|
1860
|
-
const { normalizeR2Config } = await import("./config-
|
|
2641
|
+
const { R2Resource: R2Resource2 } = await import("./r2-C4XGEWQY.js");
|
|
2642
|
+
const { normalizeR2Config } = await import("./config-WVILHDFV.js");
|
|
1861
2643
|
return new R2Resource2(normalizeR2Config(config));
|
|
1862
2644
|
},
|
|
1863
2645
|
hf_buckets: async (config) => {
|
|
1864
|
-
const { HfBucketsResource: HfBucketsResource2 } = await import("./hf_buckets-
|
|
1865
|
-
const { normalizeHfBucketsConfig: normalizeHfBucketsConfig2 } = await import("./config-
|
|
2646
|
+
const { HfBucketsResource: HfBucketsResource2 } = await import("./hf_buckets-BK7NGJWS.js");
|
|
2647
|
+
const { normalizeHfBucketsConfig: normalizeHfBucketsConfig2 } = await import("./config-SPW6NESU.js");
|
|
1866
2648
|
return new HfBucketsResource2(normalizeHfBucketsConfig2(config));
|
|
1867
2649
|
},
|
|
1868
2650
|
hf_datasets: async (config) => {
|
|
1869
|
-
const { HfDatasetsResource: HfDatasetsResource2 } = await import("./hf_datasets-
|
|
1870
|
-
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-
|
|
2651
|
+
const { HfDatasetsResource: HfDatasetsResource2 } = await import("./hf_datasets-UQ5QGM4L.js");
|
|
2652
|
+
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-SPW6NESU.js");
|
|
1871
2653
|
return new HfDatasetsResource2(normalizeHfRepoConfig2(config));
|
|
1872
2654
|
},
|
|
1873
2655
|
hf_models: async (config) => {
|
|
1874
|
-
const { HfModelsResource: HfModelsResource2 } = await import("./hf_models-
|
|
1875
|
-
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-
|
|
2656
|
+
const { HfModelsResource: HfModelsResource2 } = await import("./hf_models-75LFCQCS.js");
|
|
2657
|
+
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-SPW6NESU.js");
|
|
1876
2658
|
return new HfModelsResource2(normalizeHfRepoConfig2(config));
|
|
1877
2659
|
},
|
|
1878
2660
|
hf_spaces: async (config) => {
|
|
1879
|
-
const { HfSpacesResource: HfSpacesResource2 } = await import("./hf_spaces-
|
|
1880
|
-
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-
|
|
2661
|
+
const { HfSpacesResource: HfSpacesResource2 } = await import("./hf_spaces-6T2KB3UC.js");
|
|
2662
|
+
const { normalizeHfRepoConfig: normalizeHfRepoConfig2 } = await import("./config-SPW6NESU.js");
|
|
1881
2663
|
return new HfSpacesResource2(normalizeHfRepoConfig2(config));
|
|
1882
2664
|
},
|
|
1883
2665
|
supabase: async (config) => {
|
|
1884
|
-
const { SupabaseResource: SupabaseResource2 } = await import("./supabase-
|
|
1885
|
-
const { normalizeSupabaseConfig } = await import("./config-
|
|
2666
|
+
const { SupabaseResource: SupabaseResource2 } = await import("./supabase-BBM44UTM.js");
|
|
2667
|
+
const { normalizeSupabaseConfig } = await import("./config-EX3ZJTZI.js");
|
|
1886
2668
|
return new SupabaseResource2(normalizeSupabaseConfig(config));
|
|
1887
2669
|
},
|
|
1888
2670
|
databricks_volume: async (config) => {
|
|
1889
|
-
const { DatabricksVolumeResource: DatabricksVolumeResource2 } = await import("./databricks_volume-
|
|
2671
|
+
const { DatabricksVolumeResource: DatabricksVolumeResource2 } = await import("./databricks_volume-ETRDJVVQ.js");
|
|
1890
2672
|
const { normalizeDatabricksVolumeConfig } = await import("@struktoai/mirage-core");
|
|
1891
2673
|
return DatabricksVolumeResource2.create(normalizeDatabricksVolumeConfig(config));
|
|
1892
2674
|
},
|
|
1893
2675
|
minio: async (config) => {
|
|
1894
|
-
const { MinIOResource: MinIOResource2 } = await import("./minio-
|
|
1895
|
-
const { normalizeMinIOConfig } = await import("./config-
|
|
2676
|
+
const { MinIOResource: MinIOResource2 } = await import("./minio-IZRZY4C5.js");
|
|
2677
|
+
const { normalizeMinIOConfig } = await import("./config-2LASFFRD.js");
|
|
1896
2678
|
return new MinIOResource2(normalizeMinIOConfig(config));
|
|
1897
2679
|
},
|
|
1898
2680
|
ceph: async (config) => {
|
|
1899
|
-
const { CephResource: CephResource2 } = await import("./ceph-
|
|
1900
|
-
const { normalizeCephConfig } = await import("./config-
|
|
2681
|
+
const { CephResource: CephResource2 } = await import("./ceph-C265UI5T.js");
|
|
2682
|
+
const { normalizeCephConfig } = await import("./config-54USUVSE.js");
|
|
1901
2683
|
return new CephResource2(normalizeCephConfig(config));
|
|
1902
2684
|
},
|
|
1903
2685
|
seaweedfs: async (config) => {
|
|
1904
|
-
const { SeaweedFSResource: SeaweedFSResource2 } = await import("./seaweedfs-
|
|
1905
|
-
const { normalizeSeaweedFSConfig } = await import("./config-
|
|
2686
|
+
const { SeaweedFSResource: SeaweedFSResource2 } = await import("./seaweedfs-3XYIAFU2.js");
|
|
2687
|
+
const { normalizeSeaweedFSConfig } = await import("./config-OJ2BPESH.js");
|
|
1906
2688
|
return new SeaweedFSResource2(normalizeSeaweedFSConfig(config));
|
|
1907
2689
|
},
|
|
1908
2690
|
wasabi: async (config) => {
|
|
1909
|
-
const { WasabiResource: WasabiResource2 } = await import("./wasabi-
|
|
1910
|
-
const { normalizeWasabiConfig } = await import("./config-
|
|
2691
|
+
const { WasabiResource: WasabiResource2 } = await import("./wasabi-O4MVIUFG.js");
|
|
2692
|
+
const { normalizeWasabiConfig } = await import("./config-T2IUIU5C.js");
|
|
1911
2693
|
return new WasabiResource2(normalizeWasabiConfig(config));
|
|
1912
2694
|
},
|
|
1913
2695
|
backblaze: async (config) => {
|
|
1914
|
-
const { BackblazeResource: BackblazeResource2 } = await import("./backblaze-
|
|
1915
|
-
const { normalizeBackblazeConfig } = await import("./config-
|
|
2696
|
+
const { BackblazeResource: BackblazeResource2 } = await import("./backblaze-TSPL6Y56.js");
|
|
2697
|
+
const { normalizeBackblazeConfig } = await import("./config-QO2XUME4.js");
|
|
1916
2698
|
return new BackblazeResource2(normalizeBackblazeConfig(config));
|
|
1917
2699
|
},
|
|
1918
2700
|
digitalocean: async (config) => {
|
|
1919
|
-
const { DigitalOceanResource: DigitalOceanResource2 } = await import("./digitalocean-
|
|
1920
|
-
const { normalizeDigitalOceanConfig } = await import("./config-
|
|
2701
|
+
const { DigitalOceanResource: DigitalOceanResource2 } = await import("./digitalocean-QP72DR4J.js");
|
|
2702
|
+
const { normalizeDigitalOceanConfig } = await import("./config-XU6D5C7E.js");
|
|
1921
2703
|
return new DigitalOceanResource2(normalizeDigitalOceanConfig(config));
|
|
1922
2704
|
},
|
|
1923
2705
|
tencent: async (config) => {
|
|
1924
|
-
const { TencentResource: TencentResource2 } = await import("./tencent-
|
|
1925
|
-
const { normalizeTencentConfig } = await import("./config-
|
|
2706
|
+
const { TencentResource: TencentResource2 } = await import("./tencent-X72USLJ7.js");
|
|
2707
|
+
const { normalizeTencentConfig } = await import("./config-FRK7ZL37.js");
|
|
1926
2708
|
return new TencentResource2(normalizeTencentConfig(config));
|
|
1927
2709
|
},
|
|
1928
2710
|
aliyun: async (config) => {
|
|
1929
|
-
const { AliyunResource: AliyunResource2 } = await import("./aliyun-
|
|
1930
|
-
const { normalizeAliyunConfig } = await import("./config-
|
|
2711
|
+
const { AliyunResource: AliyunResource2 } = await import("./aliyun-PGI57A43.js");
|
|
2712
|
+
const { normalizeAliyunConfig } = await import("./config-IPNWAJHH.js");
|
|
1931
2713
|
return new AliyunResource2(normalizeAliyunConfig(config));
|
|
1932
2714
|
},
|
|
1933
2715
|
scaleway: async (config) => {
|
|
1934
|
-
const { ScalewayResource: ScalewayResource2 } = await import("./scaleway-
|
|
1935
|
-
const { normalizeScalewayConfig } = await import("./config-
|
|
2716
|
+
const { ScalewayResource: ScalewayResource2 } = await import("./scaleway-SEZJVURB.js");
|
|
2717
|
+
const { normalizeScalewayConfig } = await import("./config-CPYFOUQO.js");
|
|
1936
2718
|
return new ScalewayResource2(normalizeScalewayConfig(config));
|
|
1937
2719
|
},
|
|
1938
2720
|
qingstor: async (config) => {
|
|
1939
|
-
const { QingStorResource: QingStorResource2 } = await import("./qingstor-
|
|
1940
|
-
const { normalizeQingStorConfig } = await import("./config-
|
|
2721
|
+
const { QingStorResource: QingStorResource2 } = await import("./qingstor-AP4IIPLY.js");
|
|
2722
|
+
const { normalizeQingStorConfig } = await import("./config-M3Z47VYU.js");
|
|
1941
2723
|
return new QingStorResource2(normalizeQingStorConfig(config));
|
|
1942
2724
|
},
|
|
1943
2725
|
postgres: async (config) => {
|
|
1944
|
-
const { PostgresResource: PostgresResource2 } = await import("./postgres-
|
|
2726
|
+
const { PostgresResource: PostgresResource2 } = await import("./postgres-WIQBVL5M.js");
|
|
1945
2727
|
const { normalizePostgresConfig } = await import("@struktoai/mirage-core");
|
|
1946
2728
|
return new PostgresResource2(normalizePostgresConfig(config));
|
|
1947
2729
|
},
|
|
1948
2730
|
mongodb: async (config) => {
|
|
1949
|
-
const { MongoDBResource: MongoDBResource2 } = await import("./mongodb-
|
|
2731
|
+
const { MongoDBResource: MongoDBResource2 } = await import("./mongodb-VMKPQCPX.js");
|
|
1950
2732
|
const { normalizeMongoDBConfig } = await import("@struktoai/mirage-core");
|
|
1951
2733
|
return new MongoDBResource2(normalizeMongoDBConfig(config));
|
|
1952
2734
|
},
|
|
1953
2735
|
slack: async (config) => {
|
|
1954
|
-
const { SlackResource: SlackResource2 } = await import("./slack-
|
|
1955
|
-
const { normalizeSlackConfig: normalizeSlackConfig2 } = await import("./config-
|
|
2736
|
+
const { SlackResource: SlackResource2 } = await import("./slack-ZHXDJQY4.js");
|
|
2737
|
+
const { normalizeSlackConfig: normalizeSlackConfig2 } = await import("./config-4QV4QYI5.js");
|
|
1956
2738
|
return new SlackResource2(normalizeSlackConfig2(config));
|
|
1957
2739
|
},
|
|
1958
2740
|
ssh: async (config) => {
|
|
1959
|
-
const { SSHResource: SSHResource2 } = await import("./ssh-
|
|
1960
|
-
const { normalizeSshConfig: normalizeSshConfig2 } = await import("./config-
|
|
2741
|
+
const { SSHResource: SSHResource2 } = await import("./ssh-X2MO7JOV.js");
|
|
2742
|
+
const { normalizeSshConfig: normalizeSshConfig2 } = await import("./config-VKKZGC7V.js");
|
|
1961
2743
|
return new SSHResource2(normalizeSshConfig2(config));
|
|
1962
2744
|
},
|
|
2745
|
+
nextcloud: async (config) => {
|
|
2746
|
+
const { NextcloudResource: NextcloudResource2 } = await import("./nextcloud-5RHQCGDO.js");
|
|
2747
|
+
const { normalizeNextcloudConfig: normalizeNextcloudConfig2 } = await import("./config-E22XAGYN.js");
|
|
2748
|
+
return new NextcloudResource2(normalizeNextcloudConfig2(config));
|
|
2749
|
+
},
|
|
1963
2750
|
discord: async (config) => {
|
|
1964
|
-
const { DiscordResource: DiscordResource2 } = await import("./discord-
|
|
1965
|
-
const { normalizeDiscordConfig: normalizeDiscordConfig2 } = await import("./config-
|
|
2751
|
+
const { DiscordResource: DiscordResource2 } = await import("./discord-BSN5RB3E.js");
|
|
2752
|
+
const { normalizeDiscordConfig: normalizeDiscordConfig2 } = await import("./config-EHE52ZTK.js");
|
|
1966
2753
|
return new DiscordResource2(normalizeDiscordConfig2(config));
|
|
1967
2754
|
},
|
|
1968
2755
|
trello: async (config) => {
|
|
1969
|
-
const { TrelloResource: TrelloResource2 } = await import("./trello-
|
|
1970
|
-
const { normalizeTrelloConfig: normalizeTrelloConfig2 } = await import("./config-
|
|
2756
|
+
const { TrelloResource: TrelloResource2 } = await import("./trello-EER5NG7L.js");
|
|
2757
|
+
const { normalizeTrelloConfig: normalizeTrelloConfig2 } = await import("./config-QWQGOXQ5.js");
|
|
1971
2758
|
return new TrelloResource2(normalizeTrelloConfig2(config));
|
|
1972
2759
|
},
|
|
1973
2760
|
linear: async (config) => {
|
|
1974
|
-
const { LinearResource: LinearResource2 } = await import("./linear-
|
|
1975
|
-
const { normalizeLinearConfig: normalizeLinearConfig2 } = await import("./config-
|
|
2761
|
+
const { LinearResource: LinearResource2 } = await import("./linear-V3TXO6CV.js");
|
|
2762
|
+
const { normalizeLinearConfig: normalizeLinearConfig2 } = await import("./config-LEALEMKA.js");
|
|
1976
2763
|
return new LinearResource2(normalizeLinearConfig2(config));
|
|
1977
2764
|
},
|
|
1978
2765
|
notion: async (config) => {
|
|
1979
|
-
const { NotionResource: NotionResource2 } = await import("./notion-
|
|
1980
|
-
const { normalizeNotionConfig: normalizeNotionConfig2 } = await import("./config-
|
|
2766
|
+
const { NotionResource: NotionResource2 } = await import("./notion-6PPNTQFM.js");
|
|
2767
|
+
const { normalizeNotionConfig: normalizeNotionConfig2 } = await import("./config-HTXOOAOD.js");
|
|
1981
2768
|
return new NotionResource2(normalizeNotionConfig2(config));
|
|
1982
2769
|
},
|
|
1983
2770
|
langfuse: async (config) => {
|
|
1984
|
-
const { LangfuseResource: LangfuseResource2 } = await import("./langfuse-
|
|
1985
|
-
const { normalizeLangfuseConfig: normalizeLangfuseConfig2 } = await import("./config-
|
|
2771
|
+
const { LangfuseResource: LangfuseResource2 } = await import("./langfuse-AMQCQWNE.js");
|
|
2772
|
+
const { normalizeLangfuseConfig: normalizeLangfuseConfig2 } = await import("./config-HQXNFQZS.js");
|
|
1986
2773
|
return new LangfuseResource2(normalizeLangfuseConfig2(config));
|
|
1987
2774
|
},
|
|
1988
2775
|
github: async (config) => {
|
|
1989
|
-
const { GitHubResource: GitHubResource2 } = await import("./github-
|
|
1990
|
-
const { normalizeGitHubConfig: normalizeGitHubConfig2 } = await import("./config-
|
|
2776
|
+
const { GitHubResource: GitHubResource2 } = await import("./github-EQ4NXUTA.js");
|
|
2777
|
+
const { normalizeGitHubConfig: normalizeGitHubConfig2 } = await import("./config-WKQ3FGTZ.js");
|
|
1991
2778
|
return GitHubResource2.create(normalizeGitHubConfig2(config));
|
|
1992
2779
|
},
|
|
1993
2780
|
github_ci: async (config) => {
|
|
1994
|
-
const { GitHubCIResource: GitHubCIResource2 } = await import("./github_ci-
|
|
1995
|
-
const { normalizeGitHubCIConfig: normalizeGitHubCIConfig2 } = await import("./config-
|
|
2781
|
+
const { GitHubCIResource: GitHubCIResource2 } = await import("./github_ci-QL5B2Q2N.js");
|
|
2782
|
+
const { normalizeGitHubCIConfig: normalizeGitHubCIConfig2 } = await import("./config-MZM3IPFM.js");
|
|
1996
2783
|
return new GitHubCIResource2(normalizeGitHubCIConfig2(config));
|
|
1997
2784
|
},
|
|
1998
2785
|
gdocs: async (config) => {
|
|
1999
|
-
const { GDocsResource: GDocsResource2 } = await import("./gdocs-
|
|
2000
|
-
const { normalizeGDocsConfig: normalizeGDocsConfig2 } = await import("./config-
|
|
2786
|
+
const { GDocsResource: GDocsResource2 } = await import("./gdocs-GPAZRQG5.js");
|
|
2787
|
+
const { normalizeGDocsConfig: normalizeGDocsConfig2 } = await import("./config-3WDIJPTG.js");
|
|
2001
2788
|
return new GDocsResource2(normalizeGDocsConfig2(config));
|
|
2002
2789
|
},
|
|
2003
2790
|
gsheets: async (config) => {
|
|
2004
|
-
const { GSheetsResource: GSheetsResource2 } = await import("./gsheets-
|
|
2005
|
-
const { normalizeGSheetsConfig: normalizeGSheetsConfig2 } = await import("./config-
|
|
2791
|
+
const { GSheetsResource: GSheetsResource2 } = await import("./gsheets-N53WEXN2.js");
|
|
2792
|
+
const { normalizeGSheetsConfig: normalizeGSheetsConfig2 } = await import("./config-5ZXN2T2H.js");
|
|
2006
2793
|
return new GSheetsResource2(normalizeGSheetsConfig2(config));
|
|
2007
2794
|
},
|
|
2008
2795
|
gslides: async (config) => {
|
|
2009
|
-
const { GSlidesResource: GSlidesResource2 } = await import("./gslides-
|
|
2010
|
-
const { normalizeGSlidesConfig: normalizeGSlidesConfig2 } = await import("./config-
|
|
2796
|
+
const { GSlidesResource: GSlidesResource2 } = await import("./gslides-TATSARTH.js");
|
|
2797
|
+
const { normalizeGSlidesConfig: normalizeGSlidesConfig2 } = await import("./config-RI7IEZUF.js");
|
|
2011
2798
|
return new GSlidesResource2(normalizeGSlidesConfig2(config));
|
|
2012
2799
|
},
|
|
2013
2800
|
gdrive: async (config) => {
|
|
2014
|
-
const { GDriveResource: GDriveResource2 } = await import("./gdrive-
|
|
2015
|
-
const { normalizeGDriveConfig: normalizeGDriveConfig2 } = await import("./config-
|
|
2801
|
+
const { GDriveResource: GDriveResource2 } = await import("./gdrive-XSX6A7B3.js");
|
|
2802
|
+
const { normalizeGDriveConfig: normalizeGDriveConfig2 } = await import("./config-K63RX6EU.js");
|
|
2016
2803
|
return new GDriveResource2(normalizeGDriveConfig2(config));
|
|
2017
2804
|
},
|
|
2018
2805
|
dropbox: async (config) => {
|
|
2019
|
-
const { DropboxResource: DropboxResource2 } = await import("./dropbox-
|
|
2020
|
-
const { normalizeDropboxConfig: normalizeDropboxConfig2 } = await import("./config-
|
|
2806
|
+
const { DropboxResource: DropboxResource2 } = await import("./dropbox-OSTZXSIE.js");
|
|
2807
|
+
const { normalizeDropboxConfig: normalizeDropboxConfig2 } = await import("./config-L7SBSH5L.js");
|
|
2021
2808
|
return new DropboxResource2(normalizeDropboxConfig2(config));
|
|
2022
2809
|
},
|
|
2023
2810
|
box: async (config) => {
|
|
2024
|
-
const { BoxResource: BoxResource2 } = await import("./box-
|
|
2025
|
-
const { normalizeBoxConfig: normalizeBoxConfig2 } = await import("./config-
|
|
2811
|
+
const { BoxResource: BoxResource2 } = await import("./box-7XTZYDSO.js");
|
|
2812
|
+
const { normalizeBoxConfig: normalizeBoxConfig2 } = await import("./config-A2GQYJDB.js");
|
|
2026
2813
|
return new BoxResource2(normalizeBoxConfig2(config));
|
|
2027
2814
|
},
|
|
2028
2815
|
gmail: async (config) => {
|
|
2029
|
-
const { GmailResource: GmailResource2 } = await import("./gmail-
|
|
2030
|
-
const { normalizeGmailConfig } = await import("./config-
|
|
2816
|
+
const { GmailResource: GmailResource2 } = await import("./gmail-2TBT4CVH.js");
|
|
2817
|
+
const { normalizeGmailConfig } = await import("./config-UU27ALAA.js");
|
|
2031
2818
|
return new GmailResource2(normalizeGmailConfig(config));
|
|
2032
2819
|
},
|
|
2033
2820
|
email: async (config) => {
|
|
2034
|
-
const { EmailResource: EmailResource2 } = await import("./email-
|
|
2035
|
-
const { normalizeEmailConfig: normalizeEmailConfig2 } = await import("./config-
|
|
2821
|
+
const { EmailResource: EmailResource2 } = await import("./email-4ZFPSWIN.js");
|
|
2822
|
+
const { normalizeEmailConfig: normalizeEmailConfig2 } = await import("./config-DWSJL3NH.js");
|
|
2036
2823
|
return new EmailResource2(normalizeEmailConfig2(config));
|
|
2037
2824
|
}
|
|
2038
2825
|
};
|
|
@@ -2059,6 +2846,7 @@ export {
|
|
|
2059
2846
|
BoxResource,
|
|
2060
2847
|
CEPH_PROMPT,
|
|
2061
2848
|
CephResource,
|
|
2849
|
+
DEFAULT_STATE_ROOT,
|
|
2062
2850
|
DIGITALOCEAN_PROMPT,
|
|
2063
2851
|
DISK_COMMANDS,
|
|
2064
2852
|
DISK_OPS,
|
|
@@ -2066,8 +2854,12 @@ export {
|
|
|
2066
2854
|
DatabricksVolumeResource,
|
|
2067
2855
|
DigitalOceanResource,
|
|
2068
2856
|
DiscordResource,
|
|
2857
|
+
DiskNamespaceStore,
|
|
2069
2858
|
DiskObserverStore,
|
|
2859
|
+
DiskRecordClient,
|
|
2070
2860
|
DiskResource,
|
|
2861
|
+
DiskSessionStore,
|
|
2862
|
+
DiskWorkspaceStateStore,
|
|
2071
2863
|
DropboxResource,
|
|
2072
2864
|
EMAIL_COMMANDS,
|
|
2073
2865
|
EMAIL_OPS,
|
|
@@ -2086,6 +2878,8 @@ export {
|
|
|
2086
2878
|
GitHubCIResource,
|
|
2087
2879
|
GitHubResource,
|
|
2088
2880
|
GmailResource,
|
|
2881
|
+
GridFSAccessor,
|
|
2882
|
+
GridFSResource,
|
|
2089
2883
|
HF_BUCKETS_PROMPT,
|
|
2090
2884
|
HF_COMMANDS,
|
|
2091
2885
|
HF_DATASETS_PROMPT,
|
|
@@ -2113,6 +2907,11 @@ export {
|
|
|
2113
2907
|
MongoDBResource,
|
|
2114
2908
|
MongoDBStore,
|
|
2115
2909
|
Mount,
|
|
2910
|
+
NEXTCLOUD_COMMANDS,
|
|
2911
|
+
NEXTCLOUD_OPS,
|
|
2912
|
+
NEXTCLOUD_PROMPT,
|
|
2913
|
+
NextcloudAccessor,
|
|
2914
|
+
NextcloudResource,
|
|
2116
2915
|
NotionResource,
|
|
2117
2916
|
OCIResource,
|
|
2118
2917
|
OCI_PROMPT,
|
|
@@ -2127,9 +2926,12 @@ export {
|
|
|
2127
2926
|
REDIS_PROMPT,
|
|
2128
2927
|
RedisAccessor,
|
|
2129
2928
|
RedisFileCacheStore,
|
|
2929
|
+
RedisNamespaceStore,
|
|
2130
2930
|
RedisObserverStore,
|
|
2131
2931
|
RedisResource,
|
|
2932
|
+
RedisSessionStore,
|
|
2132
2933
|
RedisStore,
|
|
2934
|
+
RedisWorkspaceStateStore,
|
|
2133
2935
|
S3Resource,
|
|
2134
2936
|
SCALEWAY_PROMPT,
|
|
2135
2937
|
SEAWEEDFS_PROMPT,
|
|
@@ -2171,11 +2973,13 @@ export {
|
|
|
2171
2973
|
normalizeGitHubCIConfig,
|
|
2172
2974
|
normalizeGitHubConfig,
|
|
2173
2975
|
normalizeGoogleConfig as normalizeGmailConfig,
|
|
2976
|
+
normalizeGridFSConfig,
|
|
2174
2977
|
normalizeHfBucketsConfig,
|
|
2175
2978
|
normalizeHfModelsConfig,
|
|
2176
2979
|
normalizeHfRepoConfig,
|
|
2177
2980
|
normalizeLangfuseConfig,
|
|
2178
2981
|
normalizeLinearConfig,
|
|
2982
|
+
normalizeNextcloudConfig,
|
|
2179
2983
|
normalizeNotionConfig,
|
|
2180
2984
|
normalizeSlackConfig,
|
|
2181
2985
|
normalizeSshConfig,
|
|
@@ -2204,6 +3008,7 @@ export {
|
|
|
2204
3008
|
redactLangfuseConfig,
|
|
2205
3009
|
redactLinearConfig,
|
|
2206
3010
|
redactMinIOConfig,
|
|
3011
|
+
redactNextcloudConfig,
|
|
2207
3012
|
redactNotionConfig,
|
|
2208
3013
|
redactOciConfig,
|
|
2209
3014
|
redactQingStorConfig,
|