@struktoai/mirage-node 0.0.3 → 0.0.5-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (465) hide show
  1. package/README.md +2 -1
  2. package/dist/aliyun-S62BR3TB.js +11 -0
  3. package/dist/append.lua +17 -0
  4. package/dist/backblaze-4EKSW63F.js +11 -0
  5. package/dist/box-ZPLZAGMK.js +8 -0
  6. package/dist/cas.lua +15 -0
  7. package/dist/ceph-ALKLD3MO.js +11 -0
  8. package/dist/{chunk-QCZ2XUKH.js → chunk-2A4YGVBM.js} +16 -23
  9. package/dist/chunk-2A4YGVBM.js.map +1 -0
  10. package/dist/chunk-2HCYLVGY.js +28 -0
  11. package/dist/chunk-2HCYLVGY.js.map +1 -0
  12. package/dist/chunk-2VPZAH5Q.js +20 -0
  13. package/dist/chunk-2VPZAH5Q.js.map +1 -0
  14. package/dist/{chunk-UT2OPSN4.js → chunk-3JZQ6VSZ.js} +5 -5
  15. package/dist/chunk-3JZQ6VSZ.js.map +1 -0
  16. package/dist/chunk-4IF4TGAI.js +11 -0
  17. package/dist/chunk-4IF4TGAI.js.map +1 -0
  18. package/dist/{chunk-47AVIIOT.js → chunk-5H6KNEPP.js} +4 -5
  19. package/dist/{chunk-47AVIIOT.js.map → chunk-5H6KNEPP.js.map} +1 -1
  20. package/dist/{chunk-I5THIMPP.js → chunk-5K2MWDCE.js} +6 -7
  21. package/dist/{chunk-I5THIMPP.js.map → chunk-5K2MWDCE.js.map} +1 -1
  22. package/dist/{chunk-3WIO7NBR.js → chunk-6SVXWRKX.js} +4 -5
  23. package/dist/{chunk-3WIO7NBR.js.map → chunk-6SVXWRKX.js.map} +1 -1
  24. package/dist/{chunk-RQK5UPMP.js → chunk-6VOIUGAD.js} +25 -12
  25. package/dist/chunk-6VOIUGAD.js.map +1 -0
  26. package/dist/{chunk-NOHWIBRX.js → chunk-7JYHFXXC.js} +15 -20
  27. package/dist/chunk-7JYHFXXC.js.map +1 -0
  28. package/dist/chunk-7VQQFWV6.js +20 -0
  29. package/dist/chunk-7VQQFWV6.js.map +1 -0
  30. package/dist/chunk-7ZP6TPHX.js +87 -0
  31. package/dist/chunk-7ZP6TPHX.js.map +1 -0
  32. package/dist/{chunk-SWCDFEUK.js → chunk-ADEXNSYU.js} +20 -22
  33. package/dist/chunk-ADEXNSYU.js.map +1 -0
  34. package/dist/chunk-AQSYAXL4.js +16 -0
  35. package/dist/chunk-AQSYAXL4.js.map +1 -0
  36. package/dist/{chunk-RO5IQEDQ.js → chunk-ATLXMNKD.js} +8 -4
  37. package/dist/chunk-ATLXMNKD.js.map +1 -0
  38. package/dist/{chunk-MPCCRRE6.js → chunk-BYCUGFRF.js} +16 -16
  39. package/dist/chunk-BYCUGFRF.js.map +1 -0
  40. package/dist/{chunk-HJJMP6IX.js → chunk-BZTVYOES.js} +3 -3
  41. package/dist/{chunk-B2ZOKNN4.js → chunk-CRC4YWXB.js} +27 -9
  42. package/dist/chunk-CRC4YWXB.js.map +1 -0
  43. package/dist/chunk-CTGXJHO5.js +39 -0
  44. package/dist/chunk-CTGXJHO5.js.map +1 -0
  45. package/dist/{chunk-Q2IAILVC.js → chunk-DCDBIXVZ.js} +14 -5
  46. package/dist/chunk-DCDBIXVZ.js.map +1 -0
  47. package/dist/chunk-DDAFNROK.js +750 -0
  48. package/dist/chunk-DDAFNROK.js.map +1 -0
  49. package/dist/chunk-DQIEWEAW.js +85 -0
  50. package/dist/chunk-DQIEWEAW.js.map +1 -0
  51. package/dist/{chunk-QGRDPSAH.js → chunk-EBI4IHDC.js} +23 -12
  52. package/dist/chunk-EBI4IHDC.js.map +1 -0
  53. package/dist/{chunk-JAGJTM3Q.js → chunk-EIUTZ6N7.js} +19 -34
  54. package/dist/chunk-EIUTZ6N7.js.map +1 -0
  55. package/dist/{chunk-TA3WMOMU.js → chunk-EJZG5VUF.js} +38 -32
  56. package/dist/chunk-EJZG5VUF.js.map +1 -0
  57. package/dist/{chunk-X5HF2OFP.js → chunk-ENW5BVYN.js} +3 -3
  58. package/dist/{chunk-HGCRXJGP.js → chunk-ETIAW4YD.js} +3 -3
  59. package/dist/chunk-EUPXAYPB.js +20 -0
  60. package/dist/chunk-EUPXAYPB.js.map +1 -0
  61. package/dist/{chunk-YAHRT6MB.js → chunk-FA6YNU75.js} +4 -5
  62. package/dist/{chunk-YAHRT6MB.js.map → chunk-FA6YNU75.js.map} +1 -1
  63. package/dist/{chunk-TWGVQLG2.js → chunk-FFH6R5VQ.js} +7 -3
  64. package/dist/chunk-FFH6R5VQ.js.map +1 -0
  65. package/dist/{chunk-JCC4CU2I.js → chunk-GE6H2COM.js} +15 -23
  66. package/dist/chunk-GE6H2COM.js.map +1 -0
  67. package/dist/{chunk-DM4GSE26.js → chunk-GMMQ3ZK4.js} +3 -3
  68. package/dist/{chunk-ZEGAMJO2.js → chunk-GSGE3M5P.js} +15 -23
  69. package/dist/chunk-GSGE3M5P.js.map +1 -0
  70. package/dist/{chunk-GCFYZSVR.js → chunk-H64SB6VO.js} +32 -13
  71. package/dist/chunk-H64SB6VO.js.map +1 -0
  72. package/dist/{chunk-N5FSLVKO.js → chunk-HCRYAFBI.js} +3 -3
  73. package/dist/{chunk-IDYHQQOH.js → chunk-HOPUP6LA.js} +358 -471
  74. package/dist/chunk-HOPUP6LA.js.map +1 -0
  75. package/dist/chunk-HS24BL6W.js +160 -0
  76. package/dist/chunk-HS24BL6W.js.map +1 -0
  77. package/dist/chunk-HVYVG5KQ.js +16 -0
  78. package/dist/chunk-HVYVG5KQ.js.map +1 -0
  79. package/dist/{chunk-FQ33BYFR.js → chunk-I7CPLZNW.js} +4 -5
  80. package/dist/{chunk-FQ33BYFR.js.map → chunk-I7CPLZNW.js.map} +1 -1
  81. package/dist/{chunk-VGLHY6BK.js → chunk-IFUCGI4I.js} +7 -3
  82. package/dist/chunk-IFUCGI4I.js.map +1 -0
  83. package/dist/{chunk-RNQN2FOU.js → chunk-IFYXSSKR.js} +24 -13
  84. package/dist/chunk-IFYXSSKR.js.map +1 -0
  85. package/dist/chunk-IXA4DQE4.js +20 -0
  86. package/dist/chunk-IXA4DQE4.js.map +1 -0
  87. package/dist/chunk-IZMKMD3O.js +11 -0
  88. package/dist/chunk-IZMKMD3O.js.map +1 -0
  89. package/dist/{chunk-7CW3BMPH.js → chunk-JJERW2BI.js} +4 -5
  90. package/dist/{chunk-7CW3BMPH.js.map → chunk-JJERW2BI.js.map} +1 -1
  91. package/dist/{chunk-EM4J5EQS.js → chunk-JQR4HVUX.js} +13 -16
  92. package/dist/chunk-JQR4HVUX.js.map +1 -0
  93. package/dist/{chunk-VWKUT4CW.js → chunk-JXOMDLFS.js} +21 -26
  94. package/dist/chunk-JXOMDLFS.js.map +1 -0
  95. package/dist/chunk-KIX6N7NT.js +1001 -0
  96. package/dist/chunk-KIX6N7NT.js.map +1 -0
  97. package/dist/{chunk-OZAEWZZ3.js → chunk-L42UTDFK.js} +12 -3
  98. package/dist/chunk-L42UTDFK.js.map +1 -0
  99. package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
  100. package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
  101. package/dist/chunk-M2UF2JHJ.js +11 -0
  102. package/dist/chunk-M2UF2JHJ.js.map +1 -0
  103. package/dist/{chunk-UGK4TAVK.js → chunk-MONC734W.js} +7 -3
  104. package/dist/chunk-MONC734W.js.map +1 -0
  105. package/dist/{chunk-IK2L4EN3.js → chunk-N72RLCMU.js} +4 -5
  106. package/dist/{chunk-IK2L4EN3.js.map → chunk-N72RLCMU.js.map} +1 -1
  107. package/dist/{chunk-H3I2KZIY.js → chunk-ND4IWJ4V.js} +7 -3
  108. package/dist/chunk-ND4IWJ4V.js.map +1 -0
  109. package/dist/chunk-NZ3EKGW4.js +1312 -0
  110. package/dist/chunk-NZ3EKGW4.js.map +1 -0
  111. package/dist/{chunk-XGJ2QERC.js → chunk-OAE57MNL.js} +27 -11
  112. package/dist/chunk-OAE57MNL.js.map +1 -0
  113. package/dist/{chunk-EZQ5HBAC.js → chunk-OHKGIQB4.js} +12 -16
  114. package/dist/chunk-OHKGIQB4.js.map +1 -0
  115. package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
  116. package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
  117. package/dist/{chunk-UINQOUZR.js → chunk-OXEQSPND.js} +3 -3
  118. package/dist/{chunk-A7IVFIOP.js → chunk-PKNE5J2B.js} +15 -23
  119. package/dist/chunk-PKNE5J2B.js.map +1 -0
  120. package/dist/chunk-PSXXEGYQ.js +16 -0
  121. package/dist/chunk-PSXXEGYQ.js.map +1 -0
  122. package/dist/{chunk-EGB7V74Z.js → chunk-QAOVABCR.js} +7 -4
  123. package/dist/chunk-QAOVABCR.js.map +1 -0
  124. package/dist/{chunk-X3G37FXT.js → chunk-QQ7FP4GD.js} +4 -5
  125. package/dist/{chunk-X3G37FXT.js.map → chunk-QQ7FP4GD.js.map} +1 -1
  126. package/dist/{chunk-WAR4Q2NM.js → chunk-QYLVMC6B.js} +13 -15
  127. package/dist/chunk-QYLVMC6B.js.map +1 -0
  128. package/dist/{chunk-KPULTUOK.js → chunk-RX3XR65X.js} +4 -5
  129. package/dist/{chunk-KPULTUOK.js.map → chunk-RX3XR65X.js.map} +1 -1
  130. package/dist/chunk-RYQJJB4C.js +30 -0
  131. package/dist/chunk-RYQJJB4C.js.map +1 -0
  132. package/dist/{chunk-QQBJC2FQ.js → chunk-TUF7TCN7.js} +4 -5
  133. package/dist/{chunk-QQBJC2FQ.js.map → chunk-TUF7TCN7.js.map} +1 -1
  134. package/dist/{chunk-AUHSTJJ3.js → chunk-TUX36JY5.js} +4 -5
  135. package/dist/{chunk-AUHSTJJ3.js.map → chunk-TUX36JY5.js.map} +1 -1
  136. package/dist/chunk-TWRQCQWU.js +1153 -0
  137. package/dist/chunk-TWRQCQWU.js.map +1 -0
  138. package/dist/chunk-U6DFQRG3.js +20 -0
  139. package/dist/chunk-U6DFQRG3.js.map +1 -0
  140. package/dist/chunk-VI5YTKNY.js +20 -0
  141. package/dist/chunk-VI5YTKNY.js.map +1 -0
  142. package/dist/chunk-WG5YS6TC.js +872 -0
  143. package/dist/chunk-WG5YS6TC.js.map +1 -0
  144. package/dist/{chunk-ZGSER5TG.js → chunk-WMJJ4WGF.js} +4 -5
  145. package/dist/{chunk-ZGSER5TG.js.map → chunk-WMJJ4WGF.js.map} +1 -1
  146. package/dist/{chunk-LV2G7VHL.js → chunk-WY4FNH42.js} +21 -18
  147. package/dist/chunk-WY4FNH42.js.map +1 -0
  148. package/dist/{chunk-LAJJPLEV.js → chunk-XIG5BWWH.js} +25 -12
  149. package/dist/chunk-XIG5BWWH.js.map +1 -0
  150. package/dist/chunk-XJBC3OYX.js +11 -0
  151. package/dist/chunk-XJBC3OYX.js.map +1 -0
  152. package/dist/{chunk-G2WCEUQL.js → chunk-XPRDXWK7.js} +21 -20
  153. package/dist/chunk-XPRDXWK7.js.map +1 -0
  154. package/dist/chunk-YKRQSZS7.js +96 -0
  155. package/dist/chunk-YKRQSZS7.js.map +1 -0
  156. package/dist/{chunk-M5FVUIYP.js → chunk-YMBL3VJB.js} +21 -19
  157. package/dist/chunk-YMBL3VJB.js.map +1 -0
  158. package/dist/chunk-YUJBXFYK.js +1205 -0
  159. package/dist/chunk-YUJBXFYK.js.map +1 -0
  160. package/dist/{chunk-JALIYI6M.js → chunk-YZ4ZJNOL.js} +28 -11
  161. package/dist/chunk-YZ4ZJNOL.js.map +1 -0
  162. package/dist/chunk-ZTHVEXIV.js +11 -0
  163. package/dist/chunk-ZTHVEXIV.js.map +1 -0
  164. package/dist/{chunk-GS5AUKUO.js → chunk-ZVSYUCYS.js} +11 -7
  165. package/dist/chunk-ZVSYUCYS.js.map +1 -0
  166. package/dist/{config-QAA646XB.js → config-2YBCHU2W.js} +2 -4
  167. package/dist/{config-IVY5EQQ2.js → config-3YRGRW72.js} +3 -4
  168. package/dist/config-4GSOMUMF.js +9 -0
  169. package/dist/config-5YBUWFUP.js +9 -0
  170. package/dist/{config-34LHOGLM.js → config-5ZRKJTKG.js} +3 -4
  171. package/dist/config-A25LTL5W.js +11 -0
  172. package/dist/config-CLU7JABG.js +9 -0
  173. package/dist/config-D2RF7L3N.js +9 -0
  174. package/dist/{config-LHFFXVYI.js → config-E55TKM6K.js} +2 -4
  175. package/dist/config-ELDOFRJW.js +9 -0
  176. package/dist/{config-GE4W4ZJC.js → config-FPC3RBFD.js} +2 -4
  177. package/dist/config-FPM3LAW7.js +9 -0
  178. package/dist/{config-HKRMKD76.js → config-G3F54CS4.js} +3 -4
  179. package/dist/config-G43HRUI3.js +9 -0
  180. package/dist/{config-WDAZFXYD.js → config-GG3WO5PB.js} +3 -4
  181. package/dist/config-JUYBWAZE.js +9 -0
  182. package/dist/{config-CVZ2AGCO.js → config-LJ5T6TVA.js} +2 -6
  183. package/dist/config-MDSAE4O3.js +11 -0
  184. package/dist/{config-EIHSP5DZ.js → config-NRIOKK5T.js} +2 -4
  185. package/dist/config-OYK2BSJK.js +9 -0
  186. package/dist/config-PB3KA2CE.js +9 -0
  187. package/dist/{config-ZFJYQZCH.js → config-QY4IL3PH.js} +3 -4
  188. package/dist/config-R4LAOEDS.js +9 -0
  189. package/dist/{config-QNMKWJ4M.js → config-RIAAD6RW.js} +3 -4
  190. package/dist/config-SYNEQAUB.js +9 -0
  191. package/dist/{config-Q45Y46YT.js → config-TJKGYA2B.js} +3 -4
  192. package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
  193. package/dist/{config-3IVQJBNW.js → config-UURRGA7U.js} +2 -2
  194. package/dist/{config-VM526IKB.js → config-VPLHQXVE.js} +2 -4
  195. package/dist/config-WRACCRPN.js +9 -0
  196. package/dist/{config-GHRUKEQ6.js → config-WVHKXEVE.js} +3 -4
  197. package/dist/{config-EO23EY62.js → config-XU7R36IE.js} +3 -4
  198. package/dist/config-Y2KOUYSS.js +9 -0
  199. package/dist/databricks_volume-CNCPTZHS.js +7 -0
  200. package/dist/digitalocean-DJZOUB6Q.js +11 -0
  201. package/dist/discord-ETB2CADR.js +7 -0
  202. package/dist/disk-WEHSTK3F.js +7 -0
  203. package/dist/dropbox-XN6PGLNE.js +8 -0
  204. package/dist/email-OV7XCP3T.js +8 -0
  205. package/dist/gcal-P56MRCGU.js +8 -0
  206. package/dist/gcs-HFBIAE2C.js +10 -0
  207. package/dist/gdocs-LQ3UXP3J.js +8 -0
  208. package/dist/gdrive-N6UBYLON.js +8 -0
  209. package/dist/github-BPZREGPI.js +8 -0
  210. package/dist/github_ci-7A4LUIZ7.js +8 -0
  211. package/dist/gmail-YED2MF6H.js +8 -0
  212. package/dist/gridfs-CPLQ4G62.js +9 -0
  213. package/dist/gsheets-4BNIJPQ6.js +8 -0
  214. package/dist/gslides-GDBYLO5A.js +8 -0
  215. package/dist/hf_buckets-FTJITQ3P.js +10 -0
  216. package/dist/hf_datasets-6GXVKQD7.js +10 -0
  217. package/dist/hf_models-PJPGZAC5.js +10 -0
  218. package/dist/hf_spaces-LFNFOLBF.js +10 -0
  219. package/dist/index.d.ts +1311 -569
  220. package/dist/index.js +3359 -964
  221. package/dist/index.js.map +1 -1
  222. package/dist/jaeger-GCA6MJ6E.js +8 -0
  223. package/dist/lancedb-TJ5YSJY5.js +7 -0
  224. package/dist/langfuse-RUMTUMXS.js +8 -0
  225. package/dist/linear-BCE4KEAC.js +7 -0
  226. package/dist/minio-5SO6KBTK.js +11 -0
  227. package/dist/mongodb-L5CMN2EE.js +7 -0
  228. package/dist/nextcloud-4O2LZVW2.js +9 -0
  229. package/dist/notion-RVKEAQ2M.js +7 -0
  230. package/dist/oci-OQXOIC62.js +10 -0
  231. package/dist/postgres-AV45GNRS.js +7 -0
  232. package/dist/qingstor-W277YA4K.js +11 -0
  233. package/dist/r2-FUA4IORE.js +10 -0
  234. package/dist/redis-LPS357NF.js +8 -0
  235. package/dist/s3-FPNWWIVM.js +8 -0
  236. package/dist/scaleway-BP3732U7.js +11 -0
  237. package/dist/seaweedfs-MC6HIEP4.js +11 -0
  238. package/dist/slack-JFGW7VLN.js +7 -0
  239. package/dist/ssh-UYPG42LM.js +8 -0
  240. package/dist/ssh-UYPG42LM.js.map +1 -0
  241. package/dist/supabase-A3KUFMDC.js +10 -0
  242. package/dist/supabase-A3KUFMDC.js.map +1 -0
  243. package/dist/tencent-5464UQ2X.js +11 -0
  244. package/dist/tencent-5464UQ2X.js.map +1 -0
  245. package/dist/trello-O2KB3FUO.js +8 -0
  246. package/dist/trello-O2KB3FUO.js.map +1 -0
  247. package/dist/wasabi-2IKBIWNO.js +10 -0
  248. package/dist/wasabi-2IKBIWNO.js.map +1 -0
  249. package/package.json +17 -3
  250. package/dist/aliyun-JMJ3PFYY.js +0 -10
  251. package/dist/backblaze-TDFD23QO.js +0 -10
  252. package/dist/box-GQ2U2R6R.js +0 -8
  253. package/dist/ceph-S2VOYO6G.js +0 -10
  254. package/dist/chunk-2CC5VW7K.js +0 -52
  255. package/dist/chunk-2CC5VW7K.js.map +0 -1
  256. package/dist/chunk-A7IVFIOP.js.map +0 -1
  257. package/dist/chunk-B2ZOKNN4.js.map +0 -1
  258. package/dist/chunk-DNBAMB5J.js +0 -18
  259. package/dist/chunk-DNBAMB5J.js.map +0 -1
  260. package/dist/chunk-DP2PP5V2.js +0 -26
  261. package/dist/chunk-DP2PP5V2.js.map +0 -1
  262. package/dist/chunk-DYXEITK3.js +0 -52
  263. package/dist/chunk-DYXEITK3.js.map +0 -1
  264. package/dist/chunk-EGB7V74Z.js.map +0 -1
  265. package/dist/chunk-EM4J5EQS.js.map +0 -1
  266. package/dist/chunk-EZQ5HBAC.js.map +0 -1
  267. package/dist/chunk-G2WCEUQL.js.map +0 -1
  268. package/dist/chunk-GCFYZSVR.js.map +0 -1
  269. package/dist/chunk-GS5AUKUO.js.map +0 -1
  270. package/dist/chunk-H3BST2LI.js +0 -26
  271. package/dist/chunk-H3BST2LI.js.map +0 -1
  272. package/dist/chunk-H3I2KZIY.js.map +0 -1
  273. package/dist/chunk-IDYHQQOH.js.map +0 -1
  274. package/dist/chunk-JAGJTM3Q.js.map +0 -1
  275. package/dist/chunk-JALIYI6M.js.map +0 -1
  276. package/dist/chunk-JCC4CU2I.js.map +0 -1
  277. package/dist/chunk-JZT4QGIP.js +0 -24
  278. package/dist/chunk-JZT4QGIP.js.map +0 -1
  279. package/dist/chunk-LAJJPLEV.js.map +0 -1
  280. package/dist/chunk-LV2G7VHL.js.map +0 -1
  281. package/dist/chunk-LW25LMIH.js +0 -26
  282. package/dist/chunk-LW25LMIH.js.map +0 -1
  283. package/dist/chunk-M5FVUIYP.js.map +0 -1
  284. package/dist/chunk-MPCCRRE6.js.map +0 -1
  285. package/dist/chunk-NJMGCT63.js +0 -54
  286. package/dist/chunk-NJMGCT63.js.map +0 -1
  287. package/dist/chunk-NOHWIBRX.js.map +0 -1
  288. package/dist/chunk-OHROA3FQ.js +0 -54
  289. package/dist/chunk-OHROA3FQ.js.map +0 -1
  290. package/dist/chunk-OPYQ5KIO.js +0 -52
  291. package/dist/chunk-OPYQ5KIO.js.map +0 -1
  292. package/dist/chunk-OZAEWZZ3.js.map +0 -1
  293. package/dist/chunk-Q2IAILVC.js.map +0 -1
  294. package/dist/chunk-QCZ2XUKH.js.map +0 -1
  295. package/dist/chunk-QGRDPSAH.js.map +0 -1
  296. package/dist/chunk-RNQN2FOU.js.map +0 -1
  297. package/dist/chunk-RO5IQEDQ.js.map +0 -1
  298. package/dist/chunk-RQK5UPMP.js.map +0 -1
  299. package/dist/chunk-S5OVP467.js +0 -1795
  300. package/dist/chunk-S5OVP467.js.map +0 -1
  301. package/dist/chunk-SFUCUARB.js +0 -21
  302. package/dist/chunk-SFUCUARB.js.map +0 -1
  303. package/dist/chunk-SWCDFEUK.js.map +0 -1
  304. package/dist/chunk-TA3WMOMU.js.map +0 -1
  305. package/dist/chunk-TURD42QO.js +0 -1782
  306. package/dist/chunk-TURD42QO.js.map +0 -1
  307. package/dist/chunk-TWGVQLG2.js.map +0 -1
  308. package/dist/chunk-U6QSXTUS.js +0 -7
  309. package/dist/chunk-U6QSXTUS.js.map +0 -1
  310. package/dist/chunk-UGK4TAVK.js.map +0 -1
  311. package/dist/chunk-UT2OPSN4.js.map +0 -1
  312. package/dist/chunk-VGLHY6BK.js.map +0 -1
  313. package/dist/chunk-VWKUT4CW.js.map +0 -1
  314. package/dist/chunk-W7FLHT65.js +0 -26
  315. package/dist/chunk-W7FLHT65.js.map +0 -1
  316. package/dist/chunk-WAR4Q2NM.js.map +0 -1
  317. package/dist/chunk-WHFUWWI6.js +0 -2097
  318. package/dist/chunk-WHFUWWI6.js.map +0 -1
  319. package/dist/chunk-XGJ2QERC.js.map +0 -1
  320. package/dist/chunk-XHCBHYN4.js +0 -54
  321. package/dist/chunk-XHCBHYN4.js.map +0 -1
  322. package/dist/chunk-XLQI4IT2.js +0 -54
  323. package/dist/chunk-XLQI4IT2.js.map +0 -1
  324. package/dist/chunk-XWVDS66D.js +0 -963
  325. package/dist/chunk-XWVDS66D.js.map +0 -1
  326. package/dist/chunk-YGZMVNN5.js +0 -54
  327. package/dist/chunk-YGZMVNN5.js.map +0 -1
  328. package/dist/chunk-YUK3X3B4.js +0 -27
  329. package/dist/chunk-YUK3X3B4.js.map +0 -1
  330. package/dist/chunk-ZEGAMJO2.js.map +0 -1
  331. package/dist/chunk-ZNWVJ6UW.js +0 -54
  332. package/dist/chunk-ZNWVJ6UW.js.map +0 -1
  333. package/dist/config-3BBWD5AB.js +0 -11
  334. package/dist/config-4UDVSUQJ.js +0 -11
  335. package/dist/config-CMDBAPDH.js +0 -11
  336. package/dist/config-D3RLSPNF.js +0 -11
  337. package/dist/config-DG65OEG3.js +0 -11
  338. package/dist/config-GCQK6NJY.js +0 -11
  339. package/dist/config-GVH27UPE.js +0 -11
  340. package/dist/config-HXVYIXP5.js +0 -11
  341. package/dist/config-IDZMEW73.js +0 -11
  342. package/dist/config-IJJXGLBQ.js +0 -11
  343. package/dist/config-KJOLGVB2.js +0 -11
  344. package/dist/config-KMVCVBYN.js +0 -15
  345. package/dist/config-KYTRXAB2.js +0 -15
  346. package/dist/config-OT2TQQCN.js +0 -11
  347. package/dist/config-QWCY3LBQ.js +0 -11
  348. package/dist/config-ZV6G2ZEC.js +0 -11
  349. package/dist/databricks_volume-7XOUYSTY.js +0 -7
  350. package/dist/digitalocean-3CQ4CPPZ.js +0 -10
  351. package/dist/discord-BG7OSRJG.js +0 -8
  352. package/dist/disk-XVLBCVKE.js +0 -8
  353. package/dist/dropbox-74GYLV3R.js +0 -8
  354. package/dist/email-5IZ7OBQ4.js +0 -8
  355. package/dist/gcs-EMEYU2XT.js +0 -10
  356. package/dist/gdocs-R67TDPON.js +0 -8
  357. package/dist/gdrive-PRN2ALRK.js +0 -8
  358. package/dist/github-DV7E6OFV.js +0 -8
  359. package/dist/github_ci-Q554V5PA.js +0 -8
  360. package/dist/gmail-OLN2LT4O.js +0 -8
  361. package/dist/gsheets-H4RYMQJ5.js +0 -8
  362. package/dist/gslides-YLCHKJOM.js +0 -8
  363. package/dist/hf_buckets-DTKXKKFF.js +0 -10
  364. package/dist/hf_datasets-55C4APKR.js +0 -10
  365. package/dist/hf_models-RO5JR36V.js +0 -10
  366. package/dist/hf_spaces-ZVZ3EDRX.js +0 -10
  367. package/dist/langfuse-ACASJZ7O.js +0 -8
  368. package/dist/linear-IC37LZV7.js +0 -8
  369. package/dist/minio-HZ576XFQ.js +0 -10
  370. package/dist/mongodb-JVR62OIO.js +0 -7
  371. package/dist/notion-HKRPQMJS.js +0 -8
  372. package/dist/oci-ZLVECXTW.js +0 -10
  373. package/dist/postgres-P36Z2YN4.js +0 -7
  374. package/dist/qingstor-YLP6K3L4.js +0 -10
  375. package/dist/r2-RPK25ANI.js +0 -10
  376. package/dist/redis-V5ULXULL.js +0 -8
  377. package/dist/s3-4OIOCAAT.js +0 -8
  378. package/dist/scaleway-CCWCLUHB.js +0 -10
  379. package/dist/seaweedfs-QSWKF2FN.js +0 -10
  380. package/dist/slack-YPS7PII3.js +0 -8
  381. package/dist/ssh-YFP3SMTJ.js +0 -9
  382. package/dist/supabase-6CFTOKGZ.js +0 -10
  383. package/dist/tencent-IWZZOSQ4.js +0 -10
  384. package/dist/trello-XYKWZD6P.js +0 -8
  385. package/dist/wasabi-6Z4DC5S5.js +0 -10
  386. /package/dist/{aliyun-JMJ3PFYY.js.map → aliyun-S62BR3TB.js.map} +0 -0
  387. /package/dist/{backblaze-TDFD23QO.js.map → backblaze-4EKSW63F.js.map} +0 -0
  388. /package/dist/{box-GQ2U2R6R.js.map → box-ZPLZAGMK.js.map} +0 -0
  389. /package/dist/{ceph-S2VOYO6G.js.map → ceph-ALKLD3MO.js.map} +0 -0
  390. /package/dist/{chunk-HJJMP6IX.js.map → chunk-BZTVYOES.js.map} +0 -0
  391. /package/dist/{chunk-X5HF2OFP.js.map → chunk-ENW5BVYN.js.map} +0 -0
  392. /package/dist/{chunk-HGCRXJGP.js.map → chunk-ETIAW4YD.js.map} +0 -0
  393. /package/dist/{chunk-DM4GSE26.js.map → chunk-GMMQ3ZK4.js.map} +0 -0
  394. /package/dist/{chunk-N5FSLVKO.js.map → chunk-HCRYAFBI.js.map} +0 -0
  395. /package/dist/{chunk-UINQOUZR.js.map → chunk-OXEQSPND.js.map} +0 -0
  396. /package/dist/{config-34LHOGLM.js.map → config-2YBCHU2W.js.map} +0 -0
  397. /package/dist/{config-3BBWD5AB.js.map → config-3YRGRW72.js.map} +0 -0
  398. /package/dist/{config-3IVQJBNW.js.map → config-4GSOMUMF.js.map} +0 -0
  399. /package/dist/{config-4UDVSUQJ.js.map → config-5YBUWFUP.js.map} +0 -0
  400. /package/dist/{config-CMDBAPDH.js.map → config-5ZRKJTKG.js.map} +0 -0
  401. /package/dist/{config-CVZ2AGCO.js.map → config-A25LTL5W.js.map} +0 -0
  402. /package/dist/{config-D3RLSPNF.js.map → config-CLU7JABG.js.map} +0 -0
  403. /package/dist/{config-DG65OEG3.js.map → config-D2RF7L3N.js.map} +0 -0
  404. /package/dist/{config-EIHSP5DZ.js.map → config-E55TKM6K.js.map} +0 -0
  405. /package/dist/{config-EO23EY62.js.map → config-ELDOFRJW.js.map} +0 -0
  406. /package/dist/{config-GCQK6NJY.js.map → config-FPC3RBFD.js.map} +0 -0
  407. /package/dist/{config-GE4W4ZJC.js.map → config-FPM3LAW7.js.map} +0 -0
  408. /package/dist/{config-GHRUKEQ6.js.map → config-G3F54CS4.js.map} +0 -0
  409. /package/dist/{config-GVH27UPE.js.map → config-G43HRUI3.js.map} +0 -0
  410. /package/dist/{config-HKRMKD76.js.map → config-GG3WO5PB.js.map} +0 -0
  411. /package/dist/{config-HXVYIXP5.js.map → config-JUYBWAZE.js.map} +0 -0
  412. /package/dist/{config-IDZMEW73.js.map → config-LJ5T6TVA.js.map} +0 -0
  413. /package/dist/{config-IJJXGLBQ.js.map → config-MDSAE4O3.js.map} +0 -0
  414. /package/dist/{config-IVY5EQQ2.js.map → config-NRIOKK5T.js.map} +0 -0
  415. /package/dist/{config-KJOLGVB2.js.map → config-OYK2BSJK.js.map} +0 -0
  416. /package/dist/{config-KMVCVBYN.js.map → config-PB3KA2CE.js.map} +0 -0
  417. /package/dist/{config-KYTRXAB2.js.map → config-QY4IL3PH.js.map} +0 -0
  418. /package/dist/{config-LHFFXVYI.js.map → config-R4LAOEDS.js.map} +0 -0
  419. /package/dist/{config-NV5WXP64.js.map → config-RIAAD6RW.js.map} +0 -0
  420. /package/dist/{config-OT2TQQCN.js.map → config-SYNEQAUB.js.map} +0 -0
  421. /package/dist/{config-Q45Y46YT.js.map → config-TJKGYA2B.js.map} +0 -0
  422. /package/dist/{config-QAA646XB.js.map → config-UU27ALAA.js.map} +0 -0
  423. /package/dist/{config-QNMKWJ4M.js.map → config-UURRGA7U.js.map} +0 -0
  424. /package/dist/{config-QWCY3LBQ.js.map → config-VPLHQXVE.js.map} +0 -0
  425. /package/dist/{config-VM526IKB.js.map → config-WRACCRPN.js.map} +0 -0
  426. /package/dist/{config-WDAZFXYD.js.map → config-WVHKXEVE.js.map} +0 -0
  427. /package/dist/{config-ZFJYQZCH.js.map → config-XU7R36IE.js.map} +0 -0
  428. /package/dist/{config-ZV6G2ZEC.js.map → config-Y2KOUYSS.js.map} +0 -0
  429. /package/dist/{databricks_volume-7XOUYSTY.js.map → databricks_volume-CNCPTZHS.js.map} +0 -0
  430. /package/dist/{digitalocean-3CQ4CPPZ.js.map → digitalocean-DJZOUB6Q.js.map} +0 -0
  431. /package/dist/{discord-BG7OSRJG.js.map → discord-ETB2CADR.js.map} +0 -0
  432. /package/dist/{disk-XVLBCVKE.js.map → disk-WEHSTK3F.js.map} +0 -0
  433. /package/dist/{dropbox-74GYLV3R.js.map → dropbox-XN6PGLNE.js.map} +0 -0
  434. /package/dist/{email-5IZ7OBQ4.js.map → email-OV7XCP3T.js.map} +0 -0
  435. /package/dist/{gcs-EMEYU2XT.js.map → gcal-P56MRCGU.js.map} +0 -0
  436. /package/dist/{gdocs-R67TDPON.js.map → gcs-HFBIAE2C.js.map} +0 -0
  437. /package/dist/{gdrive-PRN2ALRK.js.map → gdocs-LQ3UXP3J.js.map} +0 -0
  438. /package/dist/{github-DV7E6OFV.js.map → gdrive-N6UBYLON.js.map} +0 -0
  439. /package/dist/{github_ci-Q554V5PA.js.map → github-BPZREGPI.js.map} +0 -0
  440. /package/dist/{gmail-OLN2LT4O.js.map → github_ci-7A4LUIZ7.js.map} +0 -0
  441. /package/dist/{gsheets-H4RYMQJ5.js.map → gmail-YED2MF6H.js.map} +0 -0
  442. /package/dist/{gslides-YLCHKJOM.js.map → gridfs-CPLQ4G62.js.map} +0 -0
  443. /package/dist/{hf_buckets-DTKXKKFF.js.map → gsheets-4BNIJPQ6.js.map} +0 -0
  444. /package/dist/{hf_datasets-55C4APKR.js.map → gslides-GDBYLO5A.js.map} +0 -0
  445. /package/dist/{hf_models-RO5JR36V.js.map → hf_buckets-FTJITQ3P.js.map} +0 -0
  446. /package/dist/{hf_spaces-ZVZ3EDRX.js.map → hf_datasets-6GXVKQD7.js.map} +0 -0
  447. /package/dist/{langfuse-ACASJZ7O.js.map → hf_models-PJPGZAC5.js.map} +0 -0
  448. /package/dist/{linear-IC37LZV7.js.map → hf_spaces-LFNFOLBF.js.map} +0 -0
  449. /package/dist/{minio-HZ576XFQ.js.map → jaeger-GCA6MJ6E.js.map} +0 -0
  450. /package/dist/{mongodb-JVR62OIO.js.map → lancedb-TJ5YSJY5.js.map} +0 -0
  451. /package/dist/{notion-HKRPQMJS.js.map → langfuse-RUMTUMXS.js.map} +0 -0
  452. /package/dist/{oci-ZLVECXTW.js.map → linear-BCE4KEAC.js.map} +0 -0
  453. /package/dist/{postgres-P36Z2YN4.js.map → minio-5SO6KBTK.js.map} +0 -0
  454. /package/dist/{qingstor-YLP6K3L4.js.map → mongodb-L5CMN2EE.js.map} +0 -0
  455. /package/dist/{r2-RPK25ANI.js.map → nextcloud-4O2LZVW2.js.map} +0 -0
  456. /package/dist/{redis-V5ULXULL.js.map → notion-RVKEAQ2M.js.map} +0 -0
  457. /package/dist/{s3-4OIOCAAT.js.map → oci-OQXOIC62.js.map} +0 -0
  458. /package/dist/{scaleway-CCWCLUHB.js.map → postgres-AV45GNRS.js.map} +0 -0
  459. /package/dist/{seaweedfs-QSWKF2FN.js.map → qingstor-W277YA4K.js.map} +0 -0
  460. /package/dist/{slack-YPS7PII3.js.map → r2-FUA4IORE.js.map} +0 -0
  461. /package/dist/{ssh-YFP3SMTJ.js.map → redis-LPS357NF.js.map} +0 -0
  462. /package/dist/{supabase-6CFTOKGZ.js.map → s3-FPNWWIVM.js.map} +0 -0
  463. /package/dist/{tencent-IWZZOSQ4.js.map → scaleway-BP3732U7.js.map} +0 -0
  464. /package/dist/{trello-XYKWZD6P.js.map → seaweedfs-MC6HIEP4.js.map} +0 -0
  465. /package/dist/{wasabi-6Z4DC5S5.js.map → slack-JFGW7VLN.js.map} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,17 +1,30 @@
1
- import { Resource, MountMode, CommandSafeguard, WorkspaceOptions, Workspace as Workspace$1, ExecuteOptions, ExecuteResult, ProvisionResult, Accessor, BaseResource, RegisteredOp, RegisteredCommand, PathSpec, FileStat, FindOptions, ObserverStore, REDACTED_SECRET, CommandOpts, FileCache, OpRecord, S3Config as S3Config$1, S3ConfigRedacted as S3ConfigRedacted$1, S3Accessor, DatabricksVolumeConfig, DatabricksVolumeAccessor, DatabricksVolumeConfigRedacted, ResourceName, PgDriver, PostgresConfigResolved, PgQueryResult, PostgresAccessor, PostgresConfig, MongoDriver, EntityKind, MongoCollectionSpec, MongoFindOptions, MongoIterOptions, MongoIndexAccess, MongoDBConfigResolved, MongoDBAccessor, MongoDBConfig, LanceDriver, LanceDBConfigResolved, LanceRow, LanceDBAccessor, LanceDBConfig, SlackAccessor, DiscordAccessor, TrelloAccessor, LinearAccessor, NotionAccessor, LangfuseAccessor, GitHubAccessor, GitHubCIAccessor, GDocsAccessor, GSheetsAccessor, GSlidesAccessor, GDriveAccessor, DropboxAccessor, BoxAccessor, GoogleConfig, GmailAccessor, GoogleConfigRedacted } from '@struktoai/mirage-core';
1
+ import * as _struktoai_mirage_core from '@struktoai/mirage-core';
2
+ import { Resource, MountMode, MountBackend, Limit, SandboxConfig, RemoteSandbox, RuntimeOptions, RunResult, WorkspaceOptions, Workspace as Workspace$1, MountSpec, ExecuteOptions, ExecuteResult, ProvisionResult, Accessor, BaseResource, CapacityResult, RegisteredOp, RegisteredCommand, PathSpec, FileStat, FindOptions, ObserverStoreBase, ConsoleStore, Channel, ConsoleChunk, ReadResult, NamespaceStore, NodeFields, SessionStore, SessionFields, WorkspaceStateStore, WorkspaceStateStoreOverrides, ObserverStore, WorkspaceFields, REDACTED_SECRET, CommandOpts, FileCache, Session, Ops, FileTable, OpRecord, S3Config as S3Config$1, RedactedConfig, ConfigOf, z, S3Accessor, DatabricksVolumeConfig, DatabricksVolumeAccessor, DatabricksVolumeConfigRedacted, ResourceName, PgDriver, PostgresConfigResolved, PgQueryResult, PostgresAccessor, PostgresConfig, MongoDriver, EntityKind, MongoCollectionSpec, MongoFindOptions, MongoIterOptions, MongoIndexAccess, MongoDBConfigResolved, MongoDBAccessor, MongoDBConfig, LanceDriver, LanceDBConfigResolved, LanceRow, LanceDBAccessor, LanceDBConfig, SlackConfig, SlackAccessor, SlackConfigRedacted, DeltaHook, WalkEntry, DiscordConfig, DiscordAccessor, DiscordConfigRedacted, TrelloAccessor, LinearConfig, LinearAccessor, LinearConfigRedacted, NotionConfig, NotionAccessor, NotionConfigRedacted, LangfuseAccessor, JaegerAccessor, GitHubAccessor, GitHubCIAccessor, GoogleConfig, GDocsAccessor, GoogleConfigRedacted, GSheetsAccessor, GSlidesAccessor, GDriveAccessor, DropboxAccessor, BoxAccessor, GmailAccessor, GCalAccessor, CLISpec, PythonRuntime, RunArgs } from '@struktoai/mirage-core';
2
3
  export * from '@struktoai/mirage-core';
3
- export { GoogleConfig as GmailConfig, GoogleConfigRedacted as GmailConfigRedacted, normalizeGoogleConfig as normalizeGmailConfig, redactGoogleConfig as redactGmailConfig } from '@struktoai/mirage-core';
4
+ export { DiscordConfig, DiscordConfigRedacted, GoogleConfig as GCalConfig, GoogleConfigRedacted as GCalConfigRedacted, GoogleConfig as GDocsConfig, GoogleConfigRedacted as GDocsConfigRedacted, GoogleConfig as GDriveConfig, GoogleConfigRedacted as GDriveConfigRedacted, GoogleConfig as GSheetsConfig, GoogleConfigRedacted as GSheetsConfigRedacted, GoogleConfig as GSlidesConfig, GoogleConfigRedacted as GSlidesConfigRedacted, GoogleConfig as GmailConfig, GoogleConfigRedacted as GmailConfigRedacted, LinearConfig, LinearConfigRedacted, Mem0Config, Mem0Resource, NotionConfig, NotionConfigRedacted, OneDriveConfig, OneDriveResource, SharePointConfig, SharePointResource, SlackConfig, SlackConfigRedacted, normalizeDiscordConfig, normalizeGoogleConfig as normalizeGCalConfig, normalizeGoogleConfig as normalizeGDocsConfig, normalizeGoogleConfig as normalizeGDriveConfig, normalizeGoogleConfig as normalizeGSheetsConfig, normalizeGoogleConfig as normalizeGSlidesConfig, normalizeGoogleConfig as normalizeGmailConfig, normalizeLinearConfig, normalizeNotionConfig, normalizeSlackConfig, redactDiscordConfig, redactGoogleConfig as redactGCalConfig, redactGoogleConfig as redactGDocsConfig, redactGoogleConfig as redactGDriveConfig, redactGoogleConfig as redactGSheetsConfig, redactGoogleConfig as redactGSlidesConfig, redactGoogleConfig as redactGmailConfig, redactLinearConfig, redactNotionConfig, redactSlackConfig } from '@struktoai/mirage-core';
5
+ import { FileHandle } from 'node:fs/promises';
4
6
  import { RedisClientType } from 'redis';
7
+ import { MongoClient, Db } from 'mongodb';
5
8
  import { Operator } from 'opendal';
6
9
  import { SFTPWrapper } from 'ssh2';
7
10
  import { ImapFlow } from 'imapflow';
11
+ import * as daytonaSdk from '@daytonaio/sdk';
12
+ import * as e2bSdk from 'e2b';
8
13
 
9
14
  interface MountSpecOptions {
10
15
  /** Per-mount mode override; falls back to the workspace default when unset. */
11
16
  mode?: MountMode;
12
- /** `true` mounts at a temp dir; a string pins the mountpoint to that path. */
13
- fuse?: boolean | string;
14
- commandSafeguards?: Record<string, CommandSafeguard>;
17
+ /**
18
+ * How the mount is exposed. `vfs` (the default) keeps it inside mirage's
19
+ * own filesystem; `fuse` and `fskit` also register a real mountpoint.
20
+ */
21
+ backend?: MountBackend;
22
+ /**
23
+ * Where to mount, for the kernel backends. Omitted picks a temporary
24
+ * directory appropriate for the backend. Ignored when backend is `vfs`.
25
+ */
26
+ mountpoint?: string;
27
+ commandLimits?: Record<string, Limit>;
15
28
  }
16
29
  declare class Mount {
17
30
  readonly resource: Resource;
@@ -19,21 +32,63 @@ declare class Mount {
19
32
  constructor(resource: Resource, options?: MountSpecOptions);
20
33
  }
21
34
 
35
+ /** How to reach the user's live Daytona sandbox. */
36
+ interface DaytonaConfig extends SandboxConfig {
37
+ /**
38
+ * Id of a sandbox you created (dashboard, `daytona sandbox create`,
39
+ * or the SDK). Boot it from an image or snapshot with fuse3 and
40
+ * mirage installed.
41
+ */
42
+ sandboxId: string;
43
+ /** Daytona credential; absent reads DAYTONA_API_KEY. */
44
+ apiKey?: string;
45
+ }
46
+ declare const DAYTONA_CONFIG_KEYS: readonly string[];
47
+
48
+ type DaytonaSdk = typeof daytonaSdk;
49
+ /**
50
+ * A Daytona sandbox the user runs as a whole-line runtime.
51
+ *
52
+ * You create the sandbox yourself (dashboard, `daytona sandbox
53
+ * create`, or the SDK); mirage only connects by `sandboxId` and execs
54
+ * lines. `apiKey` falls back to DAYTONA_API_KEY. Daytona's exec has
55
+ * no stdin and reports combined output, so piped bytes are uploaded
56
+ * and redirected in, and stderr comes back null. close() releases the
57
+ * SDK client and never touches the sandbox.
58
+ */
59
+ declare class DaytonaRuntime extends RemoteSandbox<DaytonaConfig> {
60
+ readonly name = "daytona";
61
+ private client;
62
+ private sandbox;
63
+ constructor(options?: RuntimeOptions<DaytonaConfig> | Record<string, unknown>);
64
+ protected loadSdk(): Promise<DaytonaSdk>;
65
+ connect(): Promise<void>;
66
+ execLine(line: string, stdin: Uint8Array | null, env: Record<string, string>, cwd: string): Promise<RunResult>;
67
+ private upload;
68
+ /** Release the SDK client; the sandbox itself is the user's. */
69
+ close(): Promise<void>;
70
+ }
71
+
22
72
  type NodeWorkspaceOptions = WorkspaceOptions;
23
73
  declare class Workspace extends Workspace$1 {
24
74
  private fuseSetupPromise;
25
75
  private readonly fuseMountpointsMap;
26
76
  private readonly fuseManagers;
27
- constructor(resources: Record<string, Resource | Mount>, options?: NodeWorkspaceOptions);
77
+ constructor(resources: Record<string, MountSpec | Mount>, options?: NodeWorkspaceOptions);
28
78
  private registerFuseMount;
29
79
  /**
30
80
  * Mount a workspace subtree under FUSE and own its lifecycle. Each mount gets
31
81
  * its own {@link FuseManager}, so a workspace can expose any number of FUSE
32
82
  * subtrees at once. A pinned mountpoint is collision-checked BEFORE mounting,
33
83
  * so a clash never leaves a partial kernel mount.
84
+ *
85
+ * A session-bound mount (`sessionId` given) runs every op under that
86
+ * session's mount grants (the kernel-tier primitive: bind-mount the tree
87
+ * into a container and the narrowing travels with it); it is keyed
88
+ * separately so the same prefix can also be exposed unbound.
34
89
  */
35
- addFuseMount(prefix: string, mountpoint?: string): Promise<string>;
36
- removeFuseMount(prefix: string): Promise<void>;
90
+ addFuseMount(prefix: string, mountpoint?: string, sessionId?: string, backend?: MountBackend): Promise<string>;
91
+ removeFuseMount(prefix: string, sessionId?: string): Promise<void>;
37
92
  get fuseMountpoints(): Record<string, string>;
38
93
  get fuseMountpoint(): string | null;
39
94
  /** Await the eager per-mount fuse mounts started in the constructor. */
@@ -59,18 +114,21 @@ interface DiskResourceOptions {
59
114
  interface DiskResourceState {
60
115
  type: string;
61
116
  files: Record<string, Uint8Array>;
117
+ modes?: Record<string, number>;
62
118
  }
63
119
  declare class DiskResource extends BaseResource implements Resource {
64
120
  readonly kind: "disk";
65
121
  readonly cachesReads: boolean;
122
+ readonly sizesAlwaysKnown: boolean;
66
123
  readonly indexTtl: number;
67
124
  readonly prompt = "{prefix}\n Local disk filesystem. Mirrors the configured root directory.\n Standard commands: ls, cat, head, tail, grep, wc, find, tree, mkdir, touch, cp, mv, rm, tee.";
68
125
  readonly root: string;
69
126
  readonly accessor: DiskAccessor;
70
127
  readonly opsMap: Record<string, unknown>;
71
128
  constructor(options: DiskResourceOptions);
129
+ storageId(): string;
72
130
  open(): Promise<void>;
73
- close(): Promise<void>;
131
+ statfs(): Promise<CapacityResult>;
74
132
  ops(): readonly RegisteredOp[];
75
133
  commands(): readonly RegisteredCommand[];
76
134
  streamPath(p: PathSpec): AsyncIterable<Uint8Array>;
@@ -91,7 +149,6 @@ declare class DiskResource extends BaseResource implements Resource {
91
149
  rmR(p: PathSpec): Promise<void>;
92
150
  du(p: PathSpec): Promise<number>;
93
151
  find(p: PathSpec, options?: FindOptions): Promise<string[]>;
94
- fingerprint(p: PathSpec): Promise<string | null>;
95
152
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
96
153
  getState(): Promise<DiskResourceState>;
97
154
  loadState(state: DiskResourceState): Promise<void>;
@@ -105,16 +162,15 @@ declare const DISK_OPS: readonly RegisteredOp[];
105
162
  * ObserverStore backed by a directory of JSONL files. Created lazily on
106
163
  * first append. Mirrors the Python DiskObserverStore.
107
164
  */
108
- declare class DiskObserverStore implements ObserverStore {
165
+ declare class DiskObserverStore extends ObserverStoreBase {
109
166
  private readonly root;
110
167
  constructor(root: string);
111
168
  private abs;
112
169
  append(key: string, data: Uint8Array): Promise<void>;
113
170
  write(key: string, data: Uint8Array): Promise<void>;
114
- readAll(): Promise<Map<string, Uint8Array>>;
115
171
  readMatching(suffix: string): Promise<Map<string, Uint8Array>>;
116
172
  clear(): Promise<void>;
117
- close(): Promise<void>;
173
+ private rootIsDir;
118
174
  private walk;
119
175
  }
120
176
 
@@ -129,7 +185,7 @@ interface RedisObserverStoreOptions {
129
185
  * file keys exist so readAll needs no SCAN. Mirrors the Python
130
186
  * RedisObserverStore.
131
187
  */
132
- declare class RedisObserverStore implements ObserverStore {
188
+ declare class RedisObserverStore extends ObserverStoreBase {
133
189
  readonly url: string;
134
190
  private readonly prefix;
135
191
  private readonly indexKey;
@@ -138,7 +194,6 @@ declare class RedisObserverStore implements ObserverStore {
138
194
  private client;
139
195
  append(key: string, data: Uint8Array): Promise<void>;
140
196
  write(key: string, data: Uint8Array): Promise<void>;
141
- readAll(): Promise<Map<string, Uint8Array>>;
142
197
  readMatching(suffix: string): Promise<Map<string, Uint8Array>>;
143
198
  private indexedPaths;
144
199
  private readPaths;
@@ -146,6 +201,300 @@ declare class RedisObserverStore implements ObserverStore {
146
201
  close(): Promise<void>;
147
202
  }
148
203
 
204
+ interface RedisConsoleStoreOptions {
205
+ url?: string;
206
+ keyPrefix?: string;
207
+ /** Expire the keys this long after the last append; absent keeps them. */
208
+ ttlSeconds?: number;
209
+ }
210
+ /**
211
+ * Console storage on a Redis stream, for readers in other processes.
212
+ *
213
+ * One stream per job: chunk seq maps to stream id `(seq+1)-0`, with the
214
+ * channel, payload and timestamp as entry fields (`c`/`d`/`t`). The
215
+ * job's process appends through its store instance; a reader anywhere
216
+ * else attaches its own instance on the same keyPrefix and follows
217
+ * live, which is what RAM cannot offer. The schema matches the Python
218
+ * RedisConsoleStore byte for byte, so the reader does not have to be
219
+ * the writer's language.
220
+ *
221
+ * The job owns its keys: a factory must hand every job a prefix nothing
222
+ * else has written, because a reused stream replays the previous job's
223
+ * chunks, ending chunk included. `keyPrefix` stays public because it is
224
+ * the console's address: an embedder reads it off a job's store and
225
+ * hands it to the process that should attach.
226
+ *
227
+ * The ending chunk is terminal in the store itself, not only in this
228
+ * process: the append script refuses any append once a CONTROL chunk
229
+ * landed, so an emit that raced a kill past `JobConsole`'s local guard
230
+ * is dropped server-side instead of landing after the ending.
231
+ *
232
+ * `wait` polls the seq counter rather than blocking server-side the way
233
+ * Python's XREAD BLOCK does: node-redis serializes commands on one
234
+ * connection, so a blocking read would wedge the job's own appends
235
+ * behind it, and a second connection costs more than a short poll.
236
+ * There is no retention trim, so readFrom never reports a truncated
237
+ * cursor; retention is bounded by `ttlSeconds` instead, refreshed on
238
+ * every append, so a console expires that long after its job's last
239
+ * write.
240
+ */
241
+ declare class RedisConsoleStore implements ConsoleStore {
242
+ readonly url: string;
243
+ readonly keyPrefix: string;
244
+ private readonly streamKey;
245
+ private readonly counterKey;
246
+ private readonly endedKey;
247
+ private readonly ttlSeconds;
248
+ private clientPromise;
249
+ private isClosed;
250
+ constructor(options?: RedisConsoleStoreOptions);
251
+ get closed(): boolean;
252
+ private client;
253
+ /**
254
+ * Append one chunk, atomically against the console's ending.
255
+ *
256
+ * A dropped append (the console already ended) reports the last real
257
+ * chunk's seq; `JobConsole.emit` ignores the return and the drop is
258
+ * exactly its documented after-the-ending semantics.
259
+ */
260
+ append(channel: Channel, data: Uint8Array): Promise<ConsoleChunk>;
261
+ readFrom(seq: number, limit?: number): Promise<ReadResult>;
262
+ wait(seq: number): Promise<void>;
263
+ close(): Promise<void>;
264
+ /** Delete the console's keys (test and integ teardown only). */
265
+ clear(): Promise<void>;
266
+ private chunk;
267
+ }
268
+
269
+ /**
270
+ * NamespaceStore backed by one `namespace.json` per workspace.
271
+ *
272
+ * The whole plane is one human-readable record
273
+ * `{"nodes": {path: fields}, "user": ...}`: the namespace is bound to
274
+ * the workspace, so it serializes as one JSON file, not per-node
275
+ * files. Read-modify-writes take the record's lockfile so concurrent
276
+ * local processes never lose a node upsert; the write itself stays
277
+ * tmp-then-rename atomic, so readers never see a torn file. Mirrors
278
+ * the Python DiskNamespaceStore byte-for-byte on disk.
279
+ */
280
+ declare class DiskNamespaceStore extends NamespaceStore {
281
+ private readonly records;
282
+ constructor(root: string);
283
+ private state;
284
+ private write;
285
+ load(): Promise<Map<string, NodeFields>>;
286
+ set(path: string, fields: NodeFields): Promise<void>;
287
+ delete(paths: readonly string[]): Promise<void>;
288
+ replaceAll(entries: Map<string, NodeFields>): Promise<void>;
289
+ loadUser(): Promise<string | null>;
290
+ setUser(user: string): Promise<void>;
291
+ clear(): Promise<void>;
292
+ close(): Promise<void>;
293
+ }
294
+
295
+ interface RedisNamespaceStoreOptions {
296
+ url?: string;
297
+ keyPrefix?: string;
298
+ }
299
+ /**
300
+ * NamespaceStore backed by one Redis hash (path -> JSON fields).
301
+ *
302
+ * Symlinks and attribute overlays survive process restarts and are visible
303
+ * to any workspace pointed at the same key prefix. Writes are
304
+ * single-command (HSET/HDEL) so mutations stay one round trip. Mirrors the
305
+ * Python RedisNamespaceStore.
306
+ */
307
+ declare class RedisNamespaceStore extends NamespaceStore {
308
+ readonly url: string;
309
+ private readonly key;
310
+ private readonly userKey;
311
+ private clientPromise;
312
+ constructor(options?: RedisNamespaceStoreOptions);
313
+ private client;
314
+ load(): Promise<Map<string, NodeFields>>;
315
+ set(path: string, fields: NodeFields): Promise<void>;
316
+ delete(paths: readonly string[]): Promise<void>;
317
+ replaceAll(entries: Map<string, NodeFields>): Promise<void>;
318
+ loadUser(): Promise<string | null>;
319
+ setUser(user: string): Promise<void>;
320
+ clear(): Promise<void>;
321
+ close(): Promise<void>;
322
+ }
323
+
324
+ /**
325
+ * One JSON-record-per-file client with lockfile CAS.
326
+ *
327
+ * The disk twin of `S3RecordClient`: a record is one file at
328
+ * `{root}/{prefix}{name}.json`, written atomically (tmp then rename(2))
329
+ * so readers never see a torn record. The conditional write serializes
330
+ * on a `{record}.lock` created with O_CREAT|O_EXCL, so compare and
331
+ * write hit the same stored version. Record names are percent-encoded
332
+ * into filenames, so any id is safe. Mirrors the Python
333
+ * DiskRecordClient byte-for-byte on disk.
334
+ */
335
+ declare class DiskRecordClient {
336
+ private readonly dir;
337
+ constructor(root: string, prefix: string);
338
+ recordPath(name: string): string;
339
+ get(name: string): Promise<[Record<string, unknown> | null, string]>;
340
+ put(name: string, fields: Record<string, unknown>): Promise<void>;
341
+ /**
342
+ * Write one record iff its stored generation matches.
343
+ *
344
+ * Take the record's lockfile, re-read under the lock, check the
345
+ * generation, then tmp-write + rename. Losing the lock race or the
346
+ * generation check resolves false; the caller adopts and retries.
347
+ */
348
+ casPut(name: string, fields: Record<string, unknown>, expectedGeneration: number): Promise<boolean>;
349
+ listNames(): Promise<string[]>;
350
+ loadAll(): Promise<Map<string, Record<string, unknown>>>;
351
+ delete(names: Iterable<string>): Promise<void>;
352
+ clear(): Promise<void>;
353
+ close(): Promise<void>;
354
+ /**
355
+ * Block until this record's lockfile is held; handle to release.
356
+ *
357
+ * For callers doing a read-modify-write that is not generation-CAS
358
+ * (e.g. the single-file namespace plane); spins past contention and
359
+ * reclaims stale locks, throwing only if a live writer holds the
360
+ * lock for the whole retry budget (~10s).
361
+ */
362
+ lock(name: string): Promise<FileHandle>;
363
+ unlock(name: string, fh: FileHandle): Promise<void>;
364
+ private acquireLock;
365
+ private reclaimStaleLock;
366
+ private releaseLock;
367
+ private writeRecord;
368
+ }
369
+
370
+ /**
371
+ * SessionStore backed by per-session files under one directory.
372
+ *
373
+ * One file per session at `{root}/sessions/{session_id}.json`, lockfile
374
+ * CAS per record, so multiple local processes share one session table
375
+ * with the same generation contract as the Redis Lua script, with zero
376
+ * infrastructure. Mirrors the Python DiskSessionStore.
377
+ */
378
+ declare class DiskSessionStore extends SessionStore {
379
+ private readonly records;
380
+ constructor(root: string);
381
+ load(): Promise<Map<string, SessionFields>>;
382
+ set(sessionId: string, fields: SessionFields): Promise<void>;
383
+ casSet(sessionId: string, fields: SessionFields, expectedGeneration: number): Promise<boolean>;
384
+ delete(sessionIds: readonly string[]): Promise<void>;
385
+ replaceAll(entries: Map<string, SessionFields>): Promise<void>;
386
+ clear(): Promise<void>;
387
+ close(): Promise<void>;
388
+ }
389
+
390
+ interface RedisSessionStoreOptions {
391
+ url?: string;
392
+ keyPrefix?: string;
393
+ }
394
+ /**
395
+ * SessionStore backed by one Redis hash (session id -> JSON fields).
396
+ *
397
+ * Sessions and the mount grants they carry survive restarts and are
398
+ * visible to every workspace pointed at the same key prefix — the seam
399
+ * that lets one process create a session and another (a kernel tier, a
400
+ * sibling daemon) bind a mountpoint to it. Writes are single-command
401
+ * (HSET/HDEL) so mutations stay one round trip. Mirrors the Python
402
+ * RedisSessionStore.
403
+ */
404
+ declare class RedisSessionStore extends SessionStore {
405
+ readonly url: string;
406
+ private readonly key;
407
+ private clientPromise;
408
+ constructor(options?: RedisSessionStoreOptions);
409
+ private client;
410
+ casSet(sessionId: string, fields: SessionFields, expectedGeneration: number): Promise<boolean>;
411
+ load(): Promise<Map<string, SessionFields>>;
412
+ set(sessionId: string, fields: SessionFields): Promise<void>;
413
+ delete(sessionIds: readonly string[]): Promise<void>;
414
+ replaceAll(entries: Map<string, SessionFields>): Promise<void>;
415
+ clear(): Promise<void>;
416
+ close(): Promise<void>;
417
+ }
418
+
419
+ declare const DEFAULT_STATE_ROOT = "~/.mirage/state";
420
+ interface DiskWorkspaceStateStoreOptions extends WorkspaceStateStoreOverrides {
421
+ root?: string;
422
+ }
423
+ /**
424
+ * WorkspaceStateStore backed by a directory tree.
425
+ *
426
+ * Each workspace is one self-contained directory (delete a workspace
427
+ * by removing its folder):
428
+ *
429
+ * - `{root}/workspaces/{ws}/workspace.json` — metadata record
430
+ * - `{root}/workspaces/{ws}/sessions/{sid}.json` — session table
431
+ * - `{root}/workspaces/{ws}/namespace.json` — nodes + user, one JSON
432
+ * - `{root}/workspaces/{ws}/history/<day>/<sid>.jsonl` — history
433
+ *
434
+ * The layout mirrors the S3 store file-for-object; mutable records get
435
+ * the same generation-CAS contract via the lockfile protocol
436
+ * (O_CREAT|O_EXCL mutex, tmp write, rename(2)), so multiple local
437
+ * processes share one workspace with zero infrastructure: a CLI-created
438
+ * workspace survives restart like `git init`. Local filesystems only;
439
+ * anything cross-machine belongs on redis or s3. Mirrors the Python
440
+ * DiskWorkspaceStateStore byte-for-byte on disk.
441
+ */
442
+ declare class DiskWorkspaceStateStore extends WorkspaceStateStore {
443
+ private readonly root;
444
+ private readonly meta;
445
+ private readonly namespaces;
446
+ private readonly observers;
447
+ private readonly sessionTables;
448
+ constructor(options?: DiskWorkspaceStateStoreOptions);
449
+ private wsRoot;
450
+ private metaClient;
451
+ protected makeNamespace(workspaceId: string): NamespaceStore;
452
+ protected makeObserver(workspaceId: string): ObserverStore;
453
+ protected makeSessions(workspaceId: string): SessionStore;
454
+ protected readMeta(workspaceId: string): Promise<WorkspaceFields | null>;
455
+ protected writeMeta(workspaceId: string, fields: WorkspaceFields): Promise<void>;
456
+ protected casWriteMeta(workspaceId: string, fields: WorkspaceFields, expectedGeneration: number): Promise<boolean>;
457
+ protected closeSelf(): Promise<void>;
458
+ }
459
+
460
+ interface RedisWorkspaceStateStoreOptions extends WorkspaceStateStoreOverrides {
461
+ url?: string;
462
+ keyPrefix?: string;
463
+ }
464
+ /**
465
+ * WorkspaceStateStore backed by one Redis server.
466
+ *
467
+ * Key layout under one prefix, everything scoped by workspace id:
468
+ *
469
+ * - `{prefix}workspaces` — hash, workspace id -> metadata JSON
470
+ * - `{prefix}{ws}:namespace:nodes` (+ `:user`) — namespace plane
471
+ * - `{prefix}{ws}:observer:*` — observer plane
472
+ * - `{prefix}{ws}:sessions` — session table
473
+ *
474
+ * All plane state survives restarts and is visible to every process
475
+ * pointed at the same url and prefix, so a workspace rebuilt from its
476
+ * config alone gets identical overlays, history, sessions, and grants.
477
+ * Mirrors the Python RedisWorkspaceStateStore.
478
+ */
479
+ declare class RedisWorkspaceStateStore extends WorkspaceStateStore {
480
+ readonly url: string;
481
+ private readonly prefix;
482
+ private readonly metaKey;
483
+ private clientPromise;
484
+ private readonly namespaces;
485
+ private readonly observers;
486
+ private readonly sessionTables;
487
+ constructor(options?: RedisWorkspaceStateStoreOptions);
488
+ private client;
489
+ protected makeNamespace(workspaceId: string): NamespaceStore;
490
+ protected makeObserver(workspaceId: string): ObserverStore;
491
+ protected makeSessions(workspaceId: string): SessionStore;
492
+ protected readMeta(workspaceId: string): Promise<WorkspaceFields | null>;
493
+ protected writeMeta(workspaceId: string, fields: WorkspaceFields): Promise<void>;
494
+ protected casWriteMeta(workspaceId: string, fields: WorkspaceFields, expectedGeneration: number): Promise<boolean>;
495
+ protected closeSelf(): Promise<void>;
496
+ }
497
+
149
498
  /**
150
499
  * Monkey-patch Node's `fs` module so that paths under any mirage mount
151
500
  * route through the workspace. Paths NOT under a mount fall through to
@@ -170,6 +519,7 @@ declare class RedisStore {
170
519
  fk(path: string): string;
171
520
  dk(): string;
172
521
  mk(path: string): string;
522
+ ak(path: string): string;
173
523
  client(): Promise<RedisClientType>;
174
524
  getFile(path: string): Promise<Uint8Array | null>;
175
525
  setFile(path: string, data: Uint8Array): Promise<void>;
@@ -177,7 +527,6 @@ declare class RedisStore {
177
527
  hasFile(path: string): Promise<boolean>;
178
528
  listFiles(prefix?: string): Promise<string[]>;
179
529
  fileLen(path: string): Promise<number>;
180
- getRange(path: string, start: number, end: number): Promise<Uint8Array>;
181
530
  hasDir(path: string): Promise<boolean>;
182
531
  addDir(path: string): Promise<void>;
183
532
  removeDir(path: string): Promise<void>;
@@ -185,6 +534,9 @@ declare class RedisStore {
185
534
  getModified(path: string): Promise<string | null>;
186
535
  setModified(path: string, ts: string): Promise<void>;
187
536
  delModified(path: string): Promise<void>;
537
+ getAttrs(path: string): Promise<Record<string, string>>;
538
+ setAttrs(path: string, fields: Record<string, string>): Promise<void>;
539
+ delAttrs(path: string): Promise<void>;
188
540
  clear(): Promise<void>;
189
541
  close(): Promise<void>;
190
542
  }
@@ -215,10 +567,13 @@ interface RedisResourceState {
215
567
  keyPrefix: string;
216
568
  files: Record<string, Uint8Array>;
217
569
  dirs: string[];
570
+ attrs?: Record<string, Record<string, string>>;
571
+ modified?: Record<string, string>;
218
572
  }
219
573
  declare class RedisResource extends BaseResource implements Resource {
220
574
  readonly kind: string;
221
575
  readonly cachesReads: boolean;
576
+ readonly sizesAlwaysKnown: boolean;
222
577
  readonly indexTtl: number;
223
578
  readonly prompt: string;
224
579
  readonly url: string;
@@ -227,6 +582,7 @@ declare class RedisResource extends BaseResource implements Resource {
227
582
  readonly accessor: RedisAccessor;
228
583
  readonly opsMap: Record<string, unknown>;
229
584
  constructor(options?: RedisResourceOptions);
585
+ storageId(): string;
230
586
  open(): Promise<void>;
231
587
  close(): Promise<void>;
232
588
  client(): Promise<RedisClientType>;
@@ -275,9 +631,13 @@ declare class RedisFileCacheStore extends RedisResource implements FileCache {
275
631
  private readonly limit;
276
632
  private readonly dataPrefix;
277
633
  private readonly metaPrefix;
278
- maxDrainBytes: number | null;
634
+ private maxDrainBytesValue;
635
+ readonly drainTasks: Map<string, Promise<void>>;
279
636
  constructor(options?: RedisFileCacheOptions);
280
- readonly cacheSize = 0;
637
+ get maxDrainBytes(): number | null;
638
+ set maxDrainBytes(value: number | null);
639
+ readonly cacheSize: number | null;
640
+ readonly cacheEntries: number | null;
281
641
  get cacheLimit(): number;
282
642
  cacheClient(): Promise<RedisClientType>;
283
643
  get(key: string): Promise<Uint8Array | null>;
@@ -292,6 +652,8 @@ declare class RedisFileCacheStore extends RedisResource implements FileCache {
292
652
  remove(key: string): Promise<void>;
293
653
  exists(key: string | PathSpec): Promise<boolean>;
294
654
  isFresh(key: string, remoteFingerprint: string): Promise<boolean>;
655
+ evictPrefix(prefix: string): Promise<void>;
656
+ evictPaths(_paths: Iterable<string>): void;
295
657
  clear(): Promise<void>;
296
658
  allCached(keys: readonly string[]): Promise<boolean>;
297
659
  multiGet(keys: readonly string[]): Promise<(Uint8Array | null)[]>;
@@ -306,9 +668,10 @@ interface FuseHandle {
306
668
  interface MountOptions {
307
669
  /** Caller/deployment-owned mountpoint. Mirage mounts here but does not delete it. */
308
670
  mountpoint?: string;
309
- agentId?: string;
310
671
  /** Scope the mount to a single workspace mount prefix (subtree exposure). */
311
672
  rootPrefix?: string;
673
+ /** Run every op under this session's mount grants (session-bound mountpoint). */
674
+ session?: Session;
312
675
  /**
313
676
  * When true, `@zkochan/fuse-native`'s `autoUnmount` flag is set so the
314
677
  * kernel releases the mount if the process exits abnormally. Defaults to
@@ -317,8 +680,19 @@ interface MountOptions {
317
680
  * FuseManager runs `diskutil unmount force` instead.
318
681
  */
319
682
  autoUnmount?: boolean;
320
- /** Extra options forwarded verbatim to `@zkochan/fuse-native`. */
683
+ /**
684
+ * Extra options forwarded verbatim to `@zkochan/fuse-native`.
685
+ * `directIO: false` additionally skips the `direct_io` mount option that
686
+ * Mirage appends by default (see appendDirectIO).
687
+ */
321
688
  fuseOptions?: Record<string, unknown>;
689
+ /**
690
+ * Which kernel interface serves the mount: 'fuse' (default) or 'fskit'.
691
+ * 'fskit' routes through macFUSE 5.x's FSKit backend (no kernel
692
+ * extension); macOS-only, mounts under /Volumes, and every mounted
693
+ * resource must report exact sizes. See backend.ts for the guards.
694
+ */
695
+ backend?: MountBackend;
322
696
  }
323
697
  declare function mount(ws: Workspace$1, options?: MountOptions): Promise<FuseHandle>;
324
698
  declare function mountBackground(ws: Workspace$1, options?: MountOptions): Promise<FuseHandle>;
@@ -342,43 +716,149 @@ interface FuseAttr {
342
716
  uid: number;
343
717
  gid: number;
344
718
  }
345
- interface MirageFSOptions {
346
- agentId?: string;
719
+ interface Handle {
720
+ path: string;
721
+ data?: Uint8Array;
722
+ writeBuf?: [number, Uint8Array][];
723
+ }
724
+ interface PrefetchEntry {
725
+ data: Uint8Array;
726
+ expires: number;
727
+ }
728
+ interface MountCoreOptions {
347
729
  rootPrefix?: string;
730
+ /**
731
+ * Bind every op to this session's mount grants. The kernel-tier
732
+ * primitive: bind-mount the tree into a container and the narrowing
733
+ * travels with it. Enforcement happens inside dispatch/Ops via the
734
+ * session context, so binding at the op entry point is sufficient.
735
+ */
736
+ session?: Session;
348
737
  }
349
- declare class MirageFS {
350
- private readonly ws;
351
- readonly agentId: string;
738
+ /**
739
+ * Protocol-neutral mount logic shared by every kernel adapter.
740
+ *
741
+ * Everything here is expressed in POSIX terms (attribute records, ordinary
742
+ * thrown errors) and imports nothing from `@zkochan/fuse-native`, so it is
743
+ * reusable by a non-FUSE adapter and unit-testable without a kernel.
744
+ *
745
+ * The division of labour: this class decides *what* the filesystem
746
+ * contains, an adapter decides *how* to say it to a particular kernel
747
+ * interface. Adapters translate the errors thrown here into their own
748
+ * error codes with `classifyErrno`. Mirrors Python's `MountCore`.
749
+ *
750
+ * Every op goes through `ws.fs`, which delegates to the dispatcher, so
751
+ * a mount walks the same door as a shell line (mount modes, policies,
752
+ * cache, invalidation) and every op it runs lands in `ws.records` for
753
+ * `drainOps`. Reaching `ws.dispatch` from here instead would skip the
754
+ * record; reaching a backend directly would skip the door.
755
+ */
756
+ declare class MountCore {
757
+ readonly ops: Ops;
758
+ readonly session: Session | null;
352
759
  private readonly now;
353
760
  private readonly root;
354
- private readonly prefixes;
355
- private readonly handles;
356
- private readonly xattrs;
357
- private readonly prefetchCache;
761
+ readonly handles: FileTable<Handle>;
762
+ readonly xattrs: Map<string, Map<string, Buffer<ArrayBufferLike>>>;
763
+ readonly prefetchCache: Map<string, PrefetchEntry>;
358
764
  private readonly prefetchInflight;
359
- private nextFh;
360
765
  private readonly uid;
361
766
  private readonly gid;
362
- constructor(ws: Workspace$1, options?: MirageFSOptions);
363
- private resolve;
364
- private whoamiContent;
365
- private dirStat;
366
- private fileStat;
367
- private isVirtualDir;
368
- private virtualChildren;
369
- private cachedSize;
370
- private cachedData;
767
+ constructor(ops: Ops, options?: MountCoreOptions);
768
+ resolve(path: string): string;
769
+ dirStat(): FuseAttr;
770
+ fileStat(size: number): FuseAttr;
771
+ /**
772
+ * Fold merged stat attributes into an attr record. The workspace stat
773
+ * already carries the namespace overlay (chmod bits, chown ids, touched
774
+ * mtime), so honoring these fields here is what makes metadata ops
775
+ * visible through a mount. String uid/gid (names) are skipped: the kernel
776
+ * wants numeric ids and there is no user db to map against.
777
+ */
778
+ applyStatAttrs(entry: FuseAttr, s: FileStat): FuseAttr;
779
+ /**
780
+ * The target to present for a namespace link at a mount path, or null
781
+ * when not a link. Relative targets are stored verbatim and returned
782
+ * as-is. Absolute targets name virtual paths, so they are rewritten
783
+ * relative to the link's directory: returned raw, the kernel would
784
+ * resolve them against the host root and escape the mountpoint.
785
+ */
786
+ linkTarget(path: string): string | null;
787
+ linkStat(target: string): FuseAttr;
788
+ cachedSize(path: string): number | null;
789
+ cachedData(path: string): Uint8Array | null;
371
790
  /**
372
- * Fetch bytes for a size-unknown file and cache them so the immediate
373
- * getattr → open → read burst (and subsequent stats within the TTL) reuse
374
- * the same fetch. Required because @zkochan/fuse-native doesn't expose
375
- * libfuse's `direct_io` flag — without a real size from getattr, the kernel
376
- * decides the file is empty and never issues read().
791
+ * Fetch bytes for a size-unknown file and cache them so the open → read →
792
+ * fstat burst (and subsequent stats within the TTL) reuse the same fetch.
793
+ * With getattr reporting 0 pre-open, this hydration is what lets fgetattr
794
+ * answer with the real byte length after open (mirrors Python's
795
+ * `prefetch_read`).
377
796
  */
378
- private prefetch;
379
- /** Drain and return accumulated op records (mirrors Python's drain_ops). */
797
+ prefetch(path: string): Promise<Uint8Array | null>;
798
+ /** Drain and return accumulated op records (mirrors Python's drainOps). */
380
799
  drainOps(): OpRecord[];
381
800
  private writeFile;
801
+ /**
802
+ * Merge buffered writes over the raw base and persist the result.
803
+ * The base is read raw so a flush never stores a rendered view back
804
+ * into the mount.
805
+ */
806
+ private applyWrites;
807
+ getattr(path: string): Promise<FuseAttr>;
808
+ /** Attributes through an open handle, or path-based when not hydrated. */
809
+ fgetattr(path: string, fd: number): Promise<FuseAttr>;
810
+ readdir(path: string): Promise<string[]>;
811
+ read(path: string, fd: number, pos: number, len: number): Promise<Uint8Array>;
812
+ /** Buffer a write on its handle, or apply it directly when there is none. */
813
+ write(path: string, fd: number, data: Uint8Array, pos: number): Promise<void>;
814
+ create(path: string): Promise<number>;
815
+ mkdir(path: string): Promise<void>;
816
+ readlink(path: string): string;
817
+ /**
818
+ * Create namespace link `dest -> src` (ln -s src dest; libfuse passes
819
+ * the pointee first). Relative sources are stored verbatim (resolved
820
+ * at follow time, exactly like the shell `ln -s`); absolute sources
821
+ * are mapped into virtual space so a scoped mount stores the path it
822
+ * will later follow.
823
+ */
824
+ symlink(src: string, dest: string): Promise<void>;
825
+ unlink(path: string): Promise<void>;
826
+ rename(src: string, dst: string): Promise<void>;
827
+ rmdir(path: string): Promise<void>;
828
+ truncate(path: string, size: number): Promise<void>;
829
+ statfs(): Record<string, number>;
830
+ setxattr(path: string, name: string, value: Buffer): void;
831
+ getxattr(path: string, name: string): Buffer | undefined;
832
+ listxattr(path: string): string[];
833
+ removexattr(path: string, name: string): void;
834
+ open(path: string): Promise<number>;
835
+ release(fd: number): Promise<void>;
836
+ flush(path: string, fd: number): Promise<void>;
837
+ }
838
+
839
+ interface MirageFSOptions {
840
+ rootPrefix?: string;
841
+ /**
842
+ * Bind every FUSE op to this session's mount grants. The kernel-tier
843
+ * primitive: bind-mount the tree into a container and the narrowing
844
+ * travels with it. Enforcement happens inside dispatch/Ops via the
845
+ * session context, so binding at the op entry point is sufficient.
846
+ */
847
+ session?: Session;
848
+ }
849
+ /**
850
+ * libfuse adapter over MountCore.
851
+ *
852
+ * Owns exactly the FUSE-specific concerns: the `@zkochan/fuse-native`
853
+ * callback signatures and the translation of mirage-native errors into
854
+ * negative errno codes. All filesystem semantics live in MountCore, so a
855
+ * non-FUSE adapter can reuse them unchanged. Mirrors Python's `MirageFS`.
856
+ */
857
+ declare class MirageFS {
858
+ readonly core: MountCore;
859
+ constructor(ops: Ops, options?: MirageFSOptions);
860
+ /** Drain and return accumulated op records (mirrors Python's drainOps). */
861
+ drainOps(): OpRecord[];
382
862
  ops(): Record<string, unknown>;
383
863
  private getattr;
384
864
  private fgetattr;
@@ -387,6 +867,8 @@ declare class MirageFS {
387
867
  private write;
388
868
  private create;
389
869
  private mkdir;
870
+ private readlink;
871
+ private symlink;
390
872
  private unlink;
391
873
  private rename;
392
874
  private rmdir;
@@ -400,22 +882,123 @@ declare class MirageFS {
400
882
  private getxattr;
401
883
  private listxattr;
402
884
  private removexattr;
403
- private getattrValidate;
885
+ private validate;
404
886
  private open;
405
887
  private release;
406
888
  private flush;
407
889
  private fsync;
408
890
  }
409
891
 
892
+ /**
893
+ * Map a mirage-native error onto a positive POSIX errno.
894
+ *
895
+ * Mirrors Python's `mirage.fuse.errors.classify_error` so both languages
896
+ * report the same errno for the same backend failure. The naming lives in
897
+ * core's `classify` (shared with the wasi shim and the monty encoders);
898
+ * this adapter only renders the condition in host numbers. A stamped code
899
+ * outside the vocabulary is passed through in the host's own numbering
900
+ * (Python's raw OSError.errno passthrough), and the message needles are a
901
+ * last resort for unstamped errors, not a classification channel.
902
+ */
903
+ declare function classifyErrno(err: unknown): number;
904
+ /** Same classification, negated for `@zkochan/fuse-native` callbacks. */
905
+ declare function classifyError(err: unknown): number;
906
+
907
+ /**
908
+ * FSKit mounts only under /Volumes. Anywhere else the mount fails with an
909
+ * opaque driver error, so the rule is enforced up front rather than
910
+ * discovered at run time (github.com/strukto-ai/mirage#82).
911
+ */
912
+ declare const FSKIT_MOUNT_ROOT = "/Volumes";
913
+ /**
914
+ * Coerce a user-supplied backend name into a MountBackend.
915
+ *
916
+ * Missing means vfs, everywhere: an absent `backend` in YAML, `undefined`
917
+ * here, and the `MountSpecOptions` default all resolve to the same thing.
918
+ * Callers that need a kernel mount say so explicitly rather than relying on
919
+ * this function to reinterpret an absent value.
920
+ */
921
+ declare function resolveBackend(value?: string | null): MountBackend;
922
+ /** Reject a backend that registers nothing with the kernel. */
923
+ declare function requireKernelBackend(backend: MountBackend): void;
924
+ /**
925
+ * Reject a backend the current platform cannot serve.
926
+ *
927
+ * FSKit works from TypeScript: `fuse.node` links `/usr/local/lib/
928
+ * libfuse.2.dylib` by absolute path (the `libosxfuse.2.dylib` it ships is a
929
+ * stub with that install name), so on a machine with macFUSE 5.x the
930
+ * `backend=fskit` option reaches the same libfuse Python uses. Verified
931
+ * with a live mount; see examples/typescript/fuse/fskit.ts.
932
+ */
933
+ declare function checkPlatform(backend: MountBackend): void;
934
+ /** Reject a mountpoint the backend cannot mount on. */
935
+ declare function checkMountpoint(backend: MountBackend, mountpoint: string): void;
936
+ /**
937
+ * Mounts under `rootPrefix` whose files cannot be sized without reading
938
+ * them. Mirrors Python's `Ops.unsized_mounts`.
939
+ */
940
+ declare function unsizedMounts(ws: Workspace$1, rootPrefix?: string): [string, string][];
941
+ /**
942
+ * Warn when an fskit mount will serve size-unknown files as empty.
943
+ *
944
+ * FSKit drives reads from the size the filesystem reports and has no
945
+ * `direct_io` escape hatch, so a resource that cannot size a file without
946
+ * fetching it reports 0, the kernel issues no reads, and every such file
947
+ * comes back empty with exit code 0 (verified on a live fskit mount: the
948
+ * read clamp is pinned at lookup-time size and never refreshed). The mount
949
+ * proceeds anyway: per-backend size push-down is closing this gap, so the
950
+ * degraded mounts are named loudly here rather than refused.
951
+ */
952
+ declare function checkSizes(backend: MountBackend, ws: Workspace$1, rootPrefix?: string): void;
953
+ /**
954
+ * Resolve a backend for a kernel mount and run every guard it implies.
955
+ *
956
+ * One entry point, so a new mount path cannot pick up fskit support while
957
+ * silently skipping the macOS, /Volumes, or size checks.
958
+ */
959
+ declare function prepareBackend(value: string | undefined, ws?: Workspace$1, mountpoint?: string, rootPrefix?: string): MountBackend;
960
+
410
961
  declare function isMacosMetadata(name: string): boolean;
411
962
 
412
963
  interface S3Config extends S3Config$1 {
413
964
  profile?: string;
414
- }
415
- interface S3ConfigRedacted extends S3ConfigRedacted$1 {
416
- profile?: string;
417
- }
965
+ proxy?: string;
966
+ }
967
+ declare const S3ConfigSchema: z.ZodObject<{
968
+ bucket: z.ZodString;
969
+ region: z.ZodOptional<z.ZodString>;
970
+ endpoint: z.ZodOptional<z.ZodString>;
971
+ accessKeyId: z.ZodOptional<z.ZodString>;
972
+ secretAccessKey: z.ZodOptional<z.ZodString>;
973
+ sessionToken: z.ZodOptional<z.ZodString>;
974
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
975
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
976
+ presignedUrlProvider: z.ZodOptional<z.ZodCustom<_struktoai_mirage_core.S3BrowserPresignedUrlProvider, _struktoai_mirage_core.S3BrowserPresignedUrlProvider>>;
977
+ httpAgentProvider: z.ZodOptional<z.ZodCustom<_struktoai_mirage_core.S3HttpAgentProvider, _struktoai_mirage_core.S3HttpAgentProvider>>;
978
+ defaultContentType: z.ZodOptional<z.ZodString>;
979
+ keyPrefix: z.ZodOptional<z.ZodString>;
980
+ profile: z.ZodOptional<z.ZodString>;
981
+ proxy: z.ZodOptional<z.ZodString>;
982
+ }, z.core.$strip>;
983
+ type S3ConfigRedacted = RedactedConfig<ConfigOf<typeof S3ConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'presignedUrlProvider' | 'httpAgentProvider' | 'proxy'>;
418
984
  declare function redactConfig(config: S3Config): S3ConfigRedacted;
985
+ /**
986
+ * Translate Python-style snake_case keys (as used in YAML configs and the
987
+ * Python `S3Config`) to the TS-idiomatic camelCase fields. Already-camelCase
988
+ * keys pass through unchanged so user code that constructs `S3Config`
989
+ * directly keeps working.
990
+ *
991
+ * Python ↔ TS mapping:
992
+ * aws_access_key_id ↔ accessKeyId
993
+ * aws_secret_access_key ↔ secretAccessKey
994
+ * aws_session_token ↔ sessionToken
995
+ * aws_profile ↔ profile
996
+ * endpoint_url ↔ endpoint
997
+ * path_style ↔ forcePathStyle
998
+ * timeout (sec, int) ↔ timeoutMs (ms, number — converted ×1000)
999
+ * proxy ↔ proxy
1000
+ */
1001
+ declare function normalizeS3Config(input: Record<string, unknown>): S3Config;
419
1002
 
420
1003
  interface S3ResourceState {
421
1004
  type: string;
@@ -425,14 +1008,15 @@ declare class S3Resource extends BaseResource implements Resource {
425
1008
  readonly kind: string;
426
1009
  readonly cachesReads: boolean;
427
1010
  readonly supportsSnapshot: boolean;
1011
+ readonly sizesAlwaysKnown: boolean;
428
1012
  readonly indexTtl: number;
429
1013
  readonly prompt: string;
430
1014
  readonly config: S3Config;
431
1015
  readonly accessor: S3Accessor;
432
1016
  readonly opsMap: Record<string, unknown>;
433
1017
  constructor(config: S3Config);
1018
+ storageId(): string;
434
1019
  open(): Promise<void>;
435
- close(): Promise<void>;
436
1020
  commands(): readonly RegisteredCommand[];
437
1021
  ops(): readonly RegisteredOp[];
438
1022
  streamPath(p: PathSpec): AsyncIterable<Uint8Array>;
@@ -452,11 +1036,76 @@ declare class S3Resource extends BaseResource implements Resource {
452
1036
  du(p: PathSpec): Promise<number>;
453
1037
  find(p: PathSpec, options?: FindOptions): Promise<string[]>;
454
1038
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
455
- fingerprint(p: PathSpec): Promise<string | null>;
456
1039
  getState(): Promise<S3ResourceState>;
457
1040
  loadState(_state: S3ResourceState): Promise<void>;
458
1041
  }
459
1042
 
1043
+ declare const GridFSConfigSchema: z.ZodObject<{
1044
+ uri: z.ZodString;
1045
+ database: z.ZodString;
1046
+ bucket: z.ZodOptional<z.ZodString>;
1047
+ keyPrefix: z.ZodOptional<z.ZodString>;
1048
+ chunkSizeBytes: z.ZodOptional<z.ZodNumber>;
1049
+ }, z.core.$strip>;
1050
+ type GridFSConfig = ConfigOf<typeof GridFSConfigSchema>;
1051
+ type GridFSConfigRedacted = RedactedConfig<GridFSConfig, 'uri'>;
1052
+ /**
1053
+ * Translate Python-style snake_case keys (as used in YAML configs and the
1054
+ * Python `GridFSConfig`) to the TS-idiomatic camelCase fields, and
1055
+ * normalize the key prefix the way the accessor expects.
1056
+ */
1057
+ declare function normalizeGridFSConfig(input: Record<string, unknown>): GridFSConfig;
1058
+
1059
+ declare class GridFSAccessor extends Accessor {
1060
+ readonly config: GridFSConfig;
1061
+ private clientPromise;
1062
+ constructor(config: GridFSConfig);
1063
+ client(): Promise<MongoClient>;
1064
+ db(): Promise<Db>;
1065
+ private _connect;
1066
+ close(): Promise<void>;
1067
+ }
1068
+
1069
+ interface GridFSResourceState {
1070
+ type: string;
1071
+ config: GridFSConfigRedacted;
1072
+ }
1073
+ declare class GridFSResource extends BaseResource implements Resource {
1074
+ readonly kind: string;
1075
+ readonly cachesReads: boolean;
1076
+ readonly supportsSnapshot: boolean;
1077
+ readonly sizesAlwaysKnown: boolean;
1078
+ readonly indexTtl: number;
1079
+ readonly prompt: string;
1080
+ readonly config: GridFSConfig;
1081
+ readonly accessor: GridFSAccessor;
1082
+ readonly opsMap: Record<string, unknown>;
1083
+ constructor(config: GridFSConfig);
1084
+ open(): Promise<void>;
1085
+ close(): Promise<void>;
1086
+ commands(): readonly RegisteredCommand[];
1087
+ ops(): readonly RegisteredOp[];
1088
+ streamPath(p: PathSpec): AsyncIterable<Uint8Array>;
1089
+ readFile(p: PathSpec): Promise<Uint8Array>;
1090
+ writeFile(p: PathSpec, data: Uint8Array): Promise<void>;
1091
+ appendFile(p: PathSpec, data: Uint8Array): Promise<void>;
1092
+ readdir(p: PathSpec): Promise<string[]>;
1093
+ stat(p: PathSpec): Promise<FileStat>;
1094
+ exists(p: PathSpec): Promise<boolean>;
1095
+ mkdir(p: PathSpec): Promise<void>;
1096
+ rmdir(p: PathSpec): Promise<void>;
1097
+ unlink(p: PathSpec): Promise<void>;
1098
+ rename(src: PathSpec, dst: PathSpec): Promise<void>;
1099
+ truncate(p: PathSpec, length: number): Promise<void>;
1100
+ copy(src: PathSpec, dst: PathSpec): Promise<void>;
1101
+ rmR(p: PathSpec): Promise<void>;
1102
+ du(p: PathSpec): Promise<number>;
1103
+ find(p: PathSpec, options?: FindOptions): Promise<string[]>;
1104
+ glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1105
+ getState(): Promise<GridFSResourceState>;
1106
+ loadState(_state: GridFSResourceState): Promise<void>;
1107
+ }
1108
+
460
1109
  interface DatabricksVolumeResourceState {
461
1110
  type: string;
462
1111
  config: DatabricksVolumeConfigRedacted;
@@ -464,6 +1113,7 @@ interface DatabricksVolumeResourceState {
464
1113
  declare class DatabricksVolumeResource extends BaseResource implements Resource {
465
1114
  readonly kind: string;
466
1115
  readonly cachesReads: boolean;
1116
+ readonly sizesAlwaysKnown: boolean;
467
1117
  readonly indexTtl: number;
468
1118
  readonly prompt: string;
469
1119
  readonly config: DatabricksVolumeConfig;
@@ -472,7 +1122,6 @@ declare class DatabricksVolumeResource extends BaseResource implements Resource
472
1122
  private constructor();
473
1123
  static create(config: DatabricksVolumeConfig): Promise<DatabricksVolumeResource>;
474
1124
  open(): Promise<void>;
475
- close(): Promise<void>;
476
1125
  commands(): readonly RegisteredCommand[];
477
1126
  ops(): readonly RegisteredOp[];
478
1127
  streamPath(p: PathSpec): AsyncIterable<Uint8Array>;
@@ -504,21 +1153,31 @@ declare function loadDatabricksProfile(profile: string): Promise<DatabricksProfi
504
1153
  declare const GCS_ENDPOINT = "https://storage.googleapis.com";
505
1154
  interface GCSConfig {
506
1155
  bucket: string;
507
- accessKeyId: string;
508
- secretAccessKey: string;
1156
+ accessKeyId?: string;
1157
+ secretAccessKey?: string;
1158
+ sessionToken?: string;
1159
+ profile?: string;
509
1160
  endpoint?: string;
510
1161
  region?: string;
511
1162
  timeoutMs?: number;
512
1163
  forcePathStyle?: boolean;
513
- }
514
- interface GCSConfigRedacted {
515
- bucket: string;
516
- accessKeyId: string;
517
- secretAccessKey: string;
518
- endpoint: string;
519
- region: string;
520
- timeoutMs?: number;
521
- }
1164
+ keyPrefix?: string;
1165
+ proxy?: string;
1166
+ }
1167
+ declare const GCSConfigSchema: z.ZodObject<{
1168
+ bucket: z.ZodString;
1169
+ accessKeyId: z.ZodOptional<z.ZodString>;
1170
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1171
+ sessionToken: z.ZodOptional<z.ZodString>;
1172
+ profile: z.ZodOptional<z.ZodString>;
1173
+ endpoint: z.ZodString;
1174
+ region: z.ZodString;
1175
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1176
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
1177
+ keyPrefix: z.ZodOptional<z.ZodString>;
1178
+ proxy: z.ZodOptional<z.ZodString>;
1179
+ }, z.core.$strip>;
1180
+ type GCSConfigRedacted = RedactedConfig<ConfigOf<typeof GCSConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
522
1181
  declare function redactGcsConfig(config: GCSConfig): GCSConfigRedacted;
523
1182
 
524
1183
  interface GCSResourceState {
@@ -538,26 +1197,35 @@ declare class GCSResource extends S3Resource {
538
1197
  loadState(_state: GCSResourceState): Promise<void>;
539
1198
  }
540
1199
 
541
- declare const GCS_PROMPT = "{prefix}\n Remote Google Cloud Storage bucket.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1200
+ declare const GCS_PROMPT = "{prefix}\n Remote Google Cloud Storage bucket.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
542
1201
 
543
1202
  interface OCIConfig {
544
1203
  bucket: string;
545
1204
  namespace: string;
546
1205
  region: string;
547
- accessKeyId: string;
548
- secretAccessKey: string;
1206
+ accessKeyId?: string;
1207
+ secretAccessKey?: string;
1208
+ sessionToken?: string;
1209
+ profile?: string;
549
1210
  endpoint?: string;
1211
+ keyPrefix?: string;
550
1212
  timeoutMs?: number;
551
- }
552
- interface OCIConfigRedacted {
553
- bucket: string;
554
- namespace: string;
555
- region: string;
556
- accessKeyId: string;
557
- secretAccessKey: string;
558
- endpoint: string;
559
- timeoutMs?: number;
560
- }
1213
+ proxy?: string;
1214
+ }
1215
+ declare const OCIConfigSchema: z.ZodObject<{
1216
+ bucket: z.ZodString;
1217
+ namespace: z.ZodString;
1218
+ region: z.ZodString;
1219
+ accessKeyId: z.ZodOptional<z.ZodString>;
1220
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1221
+ sessionToken: z.ZodOptional<z.ZodString>;
1222
+ profile: z.ZodOptional<z.ZodString>;
1223
+ endpoint: z.ZodString;
1224
+ keyPrefix: z.ZodOptional<z.ZodString>;
1225
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1226
+ proxy: z.ZodOptional<z.ZodString>;
1227
+ }, z.core.$strip>;
1228
+ type OCIConfigRedacted = RedactedConfig<ConfigOf<typeof OCIConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
561
1229
  declare function redactOciConfig(config: OCIConfig): OCIConfigRedacted;
562
1230
 
563
1231
  interface OCIResourceState {
@@ -581,24 +1249,33 @@ declare const OCI_PROMPT = "{prefix}\n Remote Oracle Cloud Object Storage.\n I
581
1249
 
582
1250
  interface R2Config {
583
1251
  bucket: string;
584
- accessKeyId: string;
585
- secretAccessKey: string;
1252
+ accessKeyId?: string;
1253
+ secretAccessKey?: string;
1254
+ sessionToken?: string;
586
1255
  accountId?: string;
587
1256
  endpoint?: string;
588
1257
  region?: string;
589
1258
  profile?: string;
1259
+ forcePathStyle?: boolean;
1260
+ keyPrefix?: string;
590
1261
  timeoutMs?: number;
591
- }
592
- interface R2ConfigRedacted {
593
- bucket: string;
594
- accessKeyId: string;
595
- secretAccessKey: string;
596
- accountId?: string;
597
- endpoint: string;
598
- region: string;
599
- profile?: string;
600
- timeoutMs?: number;
601
- }
1262
+ proxy?: string;
1263
+ }
1264
+ declare const R2ConfigSchema: z.ZodObject<{
1265
+ bucket: z.ZodString;
1266
+ accessKeyId: z.ZodOptional<z.ZodString>;
1267
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1268
+ sessionToken: z.ZodOptional<z.ZodString>;
1269
+ accountId: z.ZodOptional<z.ZodString>;
1270
+ endpoint: z.ZodString;
1271
+ region: z.ZodString;
1272
+ profile: z.ZodOptional<z.ZodString>;
1273
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
1274
+ keyPrefix: z.ZodOptional<z.ZodString>;
1275
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1276
+ proxy: z.ZodOptional<z.ZodString>;
1277
+ }, z.core.$strip>;
1278
+ type R2ConfigRedacted = RedactedConfig<ConfigOf<typeof R2ConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
602
1279
  declare function redactR2Config(config: R2Config): R2ConfigRedacted;
603
1280
 
604
1281
  interface R2ResourceState {
@@ -618,28 +1295,35 @@ declare class R2Resource extends S3Resource {
618
1295
  loadState(_state: R2ResourceState): Promise<void>;
619
1296
  }
620
1297
 
621
- declare const R2_PROMPT = "{prefix}\n Remote Cloudflare R2 bucket.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1298
+ declare const R2_PROMPT = "{prefix}\n Remote Cloudflare R2 bucket.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
622
1299
 
623
1300
  interface SupabaseConfig {
624
1301
  bucket: string;
625
1302
  region: string;
626
- accessKeyId: string;
627
- secretAccessKey: string;
1303
+ accessKeyId?: string;
1304
+ secretAccessKey?: string;
628
1305
  projectRef?: string;
629
1306
  endpoint?: string;
630
1307
  sessionToken?: string;
1308
+ profile?: string;
1309
+ keyPrefix?: string;
631
1310
  timeoutMs?: number;
632
- }
633
- interface SupabaseConfigRedacted {
634
- bucket: string;
635
- region: string;
636
- projectRef?: string;
637
- endpoint: string;
638
- accessKeyId: string;
639
- secretAccessKey: string;
640
- sessionToken?: string;
641
- timeoutMs?: number;
642
- }
1311
+ proxy?: string;
1312
+ }
1313
+ declare const SupabaseConfigSchema: z.ZodObject<{
1314
+ bucket: z.ZodString;
1315
+ region: z.ZodString;
1316
+ projectRef: z.ZodOptional<z.ZodString>;
1317
+ endpoint: z.ZodString;
1318
+ accessKeyId: z.ZodOptional<z.ZodString>;
1319
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1320
+ sessionToken: z.ZodOptional<z.ZodString>;
1321
+ profile: z.ZodOptional<z.ZodString>;
1322
+ keyPrefix: z.ZodOptional<z.ZodString>;
1323
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1324
+ proxy: z.ZodOptional<z.ZodString>;
1325
+ }, z.core.$strip>;
1326
+ type SupabaseConfigRedacted = RedactedConfig<ConfigOf<typeof SupabaseConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
643
1327
  declare function resolvedSupabaseEndpoint(config: SupabaseConfig): string;
644
1328
  declare function redactSupabaseConfig(config: SupabaseConfig): SupabaseConfigRedacted;
645
1329
 
@@ -671,13 +1355,14 @@ interface HfBucketsConfig {
671
1355
  timeoutMs?: number;
672
1356
  keyPrefix?: string;
673
1357
  }
674
- interface HfBucketsConfigRedacted {
675
- bucket: string;
676
- token?: string;
677
- endpoint: string;
678
- timeoutMs?: number;
679
- keyPrefix?: string;
680
- }
1358
+ declare const HfBucketsConfigSchema: z.ZodObject<{
1359
+ bucket: z.ZodString;
1360
+ token: z.ZodOptional<z.ZodString>;
1361
+ endpoint: z.ZodString;
1362
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1363
+ keyPrefix: z.ZodOptional<z.ZodString>;
1364
+ }, z.core.$strip>;
1365
+ type HfBucketsConfigRedacted = RedactedConfig<ConfigOf<typeof HfBucketsConfigSchema>, 'token'>;
681
1366
  declare function redactHfBucketsConfig(config: HfBucketsConfig): HfBucketsConfigRedacted;
682
1367
  declare function normalizeHfBucketsConfig(input: Record<string, unknown>): HfBucketsConfig;
683
1368
  interface HfRepoConfig {
@@ -688,14 +1373,15 @@ interface HfRepoConfig {
688
1373
  keyPrefix?: string;
689
1374
  revision?: string;
690
1375
  }
691
- interface HfRepoConfigRedacted {
692
- repoId: string;
693
- token?: string;
694
- endpoint: string;
695
- timeoutMs?: number;
696
- keyPrefix?: string;
697
- revision?: string;
698
- }
1376
+ declare const HfRepoConfigSchema: z.ZodObject<{
1377
+ repoId: z.ZodString;
1378
+ token: z.ZodOptional<z.ZodString>;
1379
+ endpoint: z.ZodString;
1380
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1381
+ keyPrefix: z.ZodOptional<z.ZodString>;
1382
+ revision: z.ZodOptional<z.ZodString>;
1383
+ }, z.core.$strip>;
1384
+ type HfRepoConfigRedacted = RedactedConfig<ConfigOf<typeof HfRepoConfigSchema>, 'token'>;
699
1385
  declare function redactHfRepoConfig(config: HfRepoConfig): HfRepoConfigRedacted;
700
1386
  declare function normalizeHfRepoConfig(input: Record<string, unknown>): HfRepoConfig;
701
1387
 
@@ -738,10 +1424,10 @@ declare abstract class HfResource extends BaseResource implements Resource {
738
1424
  abstract readonly prompt: string;
739
1425
  abstract readonly accessor: HfAccessor;
740
1426
  readonly cachesReads: boolean;
1427
+ readonly sizesAlwaysKnown: boolean;
741
1428
  readonly supportsSnapshot: boolean;
742
1429
  readonly opsMap: Record<string, unknown>;
743
1430
  open(): Promise<void>;
744
- close(): Promise<void>;
745
1431
  commands(): readonly RegisteredCommand[];
746
1432
  ops(): readonly RegisteredOp[];
747
1433
  streamPath(p: PathSpec): AsyncIterable<Uint8Array>;
@@ -755,7 +1441,6 @@ declare abstract class HfResource extends BaseResource implements Resource {
755
1441
  du(p: PathSpec): Promise<number>;
756
1442
  find(p: PathSpec, options?: FindOptions): Promise<string[]>;
757
1443
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
758
- fingerprint(p: PathSpec): Promise<string | null>;
759
1444
  loadState(_state: unknown): Promise<void>;
760
1445
  }
761
1446
 
@@ -828,25 +1513,56 @@ declare const HF_COMMANDS: readonly RegisteredCommand[];
828
1513
 
829
1514
  declare const HF_OPS: readonly RegisteredOp[];
830
1515
 
831
- interface MinIOConfig {
1516
+ /**
1517
+ * Shared shape for the S3-compatible providers.
1518
+ *
1519
+ * Every alias is the same credentials plus one endpoint rule, so the
1520
+ * fields, the zod schema that drives redaction, the snake_case mapping and
1521
+ * the conversion to S3Config live here once. A provider declares only its
1522
+ * endpoint rule and whatever it genuinely adds. Mirrors Python's
1523
+ * `mirage/resource/s3_alias.py`.
1524
+ *
1525
+ * Only `bucket` and whatever the endpoint genuinely needs are required.
1526
+ * Credentials are optional because `S3Config` leaves them optional too, so
1527
+ * omitting them falls through to the usual AWS resolution order: `profile`,
1528
+ * then the `AWS_ACCESS_KEY_ID` / `AWS_SECRET_ACCESS_KEY` environment
1529
+ * variables, then the shared credentials file, then an instance role.
1530
+ * `sessionToken` and `profile` live here rather than on the one provider
1531
+ * that first needed them, so every alias accepts them.
1532
+ */
1533
+ interface S3AliasConfig {
832
1534
  bucket: string;
833
- endpoint: string;
834
- accessKeyId: string;
835
- secretAccessKey: string;
1535
+ accessKeyId?: string;
1536
+ secretAccessKey?: string;
1537
+ sessionToken?: string;
1538
+ profile?: string;
836
1539
  region?: string;
1540
+ endpoint?: string;
837
1541
  forcePathStyle?: boolean;
1542
+ keyPrefix?: string;
838
1543
  timeoutMs?: number;
839
- }
840
- interface MinIOConfigRedacted {
841
- bucket: string;
1544
+ proxy?: string;
1545
+ }
1546
+ declare const ALIAS_SCHEMA: z.ZodObject<{
1547
+ bucket: z.ZodString;
1548
+ accessKeyId: z.ZodOptional<z.ZodString>;
1549
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1550
+ sessionToken: z.ZodOptional<z.ZodString>;
1551
+ profile: z.ZodOptional<z.ZodString>;
1552
+ region: z.ZodString;
1553
+ endpoint: z.ZodString;
1554
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
1555
+ keyPrefix: z.ZodOptional<z.ZodString>;
1556
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1557
+ proxy: z.ZodOptional<z.ZodString>;
1558
+ }, z.core.$strip>;
1559
+ type S3AliasConfigRedacted = RedactedConfig<ConfigOf<typeof ALIAS_SCHEMA>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
1560
+
1561
+ interface MinIOConfig extends S3AliasConfig {
842
1562
  endpoint: string;
843
- accessKeyId: string;
844
- secretAccessKey: string;
845
- region: string;
846
- forcePathStyle: boolean;
847
- timeoutMs?: number;
848
1563
  }
849
- declare function redactMinIOConfig(config: MinIOConfig): MinIOConfigRedacted;
1564
+ type MinIOConfigRedacted = S3AliasConfigRedacted;
1565
+ declare const redactMinIOConfig: (config: MinIOConfig) => S3AliasConfigRedacted;
850
1566
 
851
1567
  interface MinIOResourceState {
852
1568
  type: string;
@@ -865,27 +1581,13 @@ declare class MinIOResource extends S3Resource {
865
1581
  loadState(_state: MinIOResourceState): Promise<void>;
866
1582
  }
867
1583
 
868
- declare const MINIO_PROMPT = "{prefix}\n Remote MinIO bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1584
+ declare const MINIO_PROMPT = "{prefix}\n Remote MinIO bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
869
1585
 
870
- interface SeaweedFSConfig {
871
- bucket: string;
1586
+ interface SeaweedFSConfig extends S3AliasConfig {
872
1587
  endpoint: string;
873
- accessKeyId: string;
874
- secretAccessKey: string;
875
- region?: string;
876
- forcePathStyle?: boolean;
877
- timeoutMs?: number;
878
- }
879
- interface SeaweedFSConfigRedacted {
880
- bucket: string;
881
- endpoint: string;
882
- accessKeyId: string;
883
- secretAccessKey: string;
884
- region: string;
885
- forcePathStyle: boolean;
886
- timeoutMs?: number;
887
1588
  }
888
- declare function redactSeaweedFSConfig(config: SeaweedFSConfig): SeaweedFSConfigRedacted;
1589
+ type SeaweedFSConfigRedacted = S3AliasConfigRedacted;
1590
+ declare const redactSeaweedFSConfig: (config: SeaweedFSConfig) => S3AliasConfigRedacted;
889
1591
 
890
1592
  interface SeaweedFSResourceState {
891
1593
  type: string;
@@ -903,28 +1605,14 @@ declare class SeaweedFSResource extends S3Resource {
903
1605
  getState(): Promise<SeaweedFSResourceState>;
904
1606
  loadState(_state: SeaweedFSResourceState): Promise<void>;
905
1607
  }
906
-
907
- declare const SEAWEEDFS_PROMPT = "{prefix}\n Remote SeaweedFS bucket (S3-compatible gateway).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.feather returns a formatted table.";
908
-
909
- interface CephConfig {
910
- bucket: string;
911
- endpoint: string;
912
- accessKeyId: string;
913
- secretAccessKey: string;
914
- region?: string;
915
- forcePathStyle?: boolean;
916
- timeoutMs?: number;
917
- }
918
- interface CephConfigRedacted {
919
- bucket: string;
1608
+
1609
+ declare const SEAWEEDFS_PROMPT = "{prefix}\n Remote SeaweedFS bucket (S3-compatible gateway).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1610
+
1611
+ interface CephConfig extends S3AliasConfig {
920
1612
  endpoint: string;
921
- accessKeyId: string;
922
- secretAccessKey: string;
923
- region: string;
924
- forcePathStyle: boolean;
925
- timeoutMs?: number;
926
1613
  }
927
- declare function redactCephConfig(config: CephConfig): CephConfigRedacted;
1614
+ type CephConfigRedacted = S3AliasConfigRedacted;
1615
+ declare const redactCephConfig: (config: CephConfig) => S3AliasConfigRedacted;
928
1616
 
929
1617
  interface CephResourceState {
930
1618
  type: string;
@@ -943,24 +1631,35 @@ declare class CephResource extends S3Resource {
943
1631
  loadState(_state: CephResourceState): Promise<void>;
944
1632
  }
945
1633
 
946
- declare const CEPH_PROMPT = "{prefix}\n Remote Ceph Rados Gateway bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1634
+ declare const CEPH_PROMPT = "{prefix}\n Remote Ceph Rados Gateway bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
947
1635
 
948
1636
  interface WasabiConfig {
949
1637
  bucket: string;
950
- accessKeyId: string;
951
- secretAccessKey: string;
1638
+ accessKeyId?: string;
1639
+ secretAccessKey?: string;
1640
+ sessionToken?: string;
1641
+ profile?: string;
952
1642
  region?: string;
953
1643
  endpoint?: string;
1644
+ forcePathStyle?: boolean;
1645
+ keyPrefix?: string;
954
1646
  timeoutMs?: number;
955
- }
956
- interface WasabiConfigRedacted {
957
- bucket: string;
958
- accessKeyId: string;
959
- secretAccessKey: string;
960
- region: string;
961
- endpoint: string;
962
- timeoutMs?: number;
963
- }
1647
+ proxy?: string;
1648
+ }
1649
+ declare const WasabiConfigSchema: z.ZodObject<{
1650
+ bucket: z.ZodString;
1651
+ accessKeyId: z.ZodOptional<z.ZodString>;
1652
+ secretAccessKey: z.ZodOptional<z.ZodString>;
1653
+ sessionToken: z.ZodOptional<z.ZodString>;
1654
+ profile: z.ZodOptional<z.ZodString>;
1655
+ region: z.ZodString;
1656
+ endpoint: z.ZodString;
1657
+ forcePathStyle: z.ZodOptional<z.ZodBoolean>;
1658
+ keyPrefix: z.ZodOptional<z.ZodString>;
1659
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
1660
+ proxy: z.ZodOptional<z.ZodString>;
1661
+ }, z.core.$strip>;
1662
+ type WasabiConfigRedacted = RedactedConfig<ConfigOf<typeof WasabiConfigSchema>, 'accessKeyId' | 'secretAccessKey' | 'sessionToken' | 'proxy'>;
964
1663
  declare function resolvedWasabiEndpoint(config: WasabiConfig): string;
965
1664
  declare function redactWasabiConfig(config: WasabiConfig): WasabiConfigRedacted;
966
1665
 
@@ -981,26 +1680,14 @@ declare class WasabiResource extends S3Resource {
981
1680
  loadState(_state: WasabiResourceState): Promise<void>;
982
1681
  }
983
1682
 
984
- declare const WASABI_PROMPT = "{prefix}\n Remote Wasabi bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1683
+ declare const WASABI_PROMPT = "{prefix}\n Remote Wasabi bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
985
1684
 
986
- interface BackblazeConfig {
987
- bucket: string;
988
- accessKeyId: string;
989
- secretAccessKey: string;
990
- region: string;
991
- endpoint?: string;
992
- timeoutMs?: number;
993
- }
994
- interface BackblazeConfigRedacted {
995
- bucket: string;
996
- accessKeyId: string;
997
- secretAccessKey: string;
1685
+ interface BackblazeConfig extends S3AliasConfig {
998
1686
  region: string;
999
- endpoint: string;
1000
- timeoutMs?: number;
1001
1687
  }
1002
- declare function resolvedBackblazeEndpoint(config: BackblazeConfig): string;
1003
- declare function redactBackblazeConfig(config: BackblazeConfig): BackblazeConfigRedacted;
1688
+ type BackblazeConfigRedacted = S3AliasConfigRedacted;
1689
+ declare const resolvedBackblazeEndpoint: (config: BackblazeConfig) => string;
1690
+ declare const redactBackblazeConfig: (config: BackblazeConfig) => S3AliasConfigRedacted;
1004
1691
 
1005
1692
  interface BackblazeResourceState {
1006
1693
  type: string;
@@ -1019,26 +1706,14 @@ declare class BackblazeResource extends S3Resource {
1019
1706
  loadState(_state: BackblazeResourceState): Promise<void>;
1020
1707
  }
1021
1708
 
1022
- declare const BACKBLAZE_PROMPT = "{prefix}\n Remote Backblaze B2 bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1709
+ declare const BACKBLAZE_PROMPT = "{prefix}\n Remote Backblaze B2 bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1023
1710
 
1024
- interface DigitalOceanConfig {
1025
- bucket: string;
1026
- accessKeyId: string;
1027
- secretAccessKey: string;
1028
- region: string;
1029
- endpoint?: string;
1030
- timeoutMs?: number;
1031
- }
1032
- interface DigitalOceanConfigRedacted {
1033
- bucket: string;
1034
- accessKeyId: string;
1035
- secretAccessKey: string;
1711
+ interface DigitalOceanConfig extends S3AliasConfig {
1036
1712
  region: string;
1037
- endpoint: string;
1038
- timeoutMs?: number;
1039
1713
  }
1040
- declare function resolvedDigitalOceanEndpoint(config: DigitalOceanConfig): string;
1041
- declare function redactDigitalOceanConfig(config: DigitalOceanConfig): DigitalOceanConfigRedacted;
1714
+ type DigitalOceanConfigRedacted = S3AliasConfigRedacted;
1715
+ declare const resolvedDigitalOceanEndpoint: (config: DigitalOceanConfig) => string;
1716
+ declare const redactDigitalOceanConfig: (config: DigitalOceanConfig) => S3AliasConfigRedacted;
1042
1717
 
1043
1718
  interface DigitalOceanResourceState {
1044
1719
  type: string;
@@ -1057,26 +1732,14 @@ declare class DigitalOceanResource extends S3Resource {
1057
1732
  loadState(_state: DigitalOceanResourceState): Promise<void>;
1058
1733
  }
1059
1734
 
1060
- declare const DIGITALOCEAN_PROMPT = "{prefix}\n Remote DigitalOcean Spaces bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1735
+ declare const DIGITALOCEAN_PROMPT = "{prefix}\n Remote DigitalOcean Spaces bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1061
1736
 
1062
- interface TencentConfig {
1063
- bucket: string;
1064
- accessKeyId: string;
1065
- secretAccessKey: string;
1066
- region: string;
1067
- endpoint?: string;
1068
- timeoutMs?: number;
1069
- }
1070
- interface TencentConfigRedacted {
1071
- bucket: string;
1072
- accessKeyId: string;
1073
- secretAccessKey: string;
1737
+ interface TencentConfig extends S3AliasConfig {
1074
1738
  region: string;
1075
- endpoint: string;
1076
- timeoutMs?: number;
1077
1739
  }
1078
- declare function resolvedTencentEndpoint(config: TencentConfig): string;
1079
- declare function redactTencentConfig(config: TencentConfig): TencentConfigRedacted;
1740
+ type TencentConfigRedacted = S3AliasConfigRedacted;
1741
+ declare const resolvedTencentEndpoint: (config: TencentConfig) => string;
1742
+ declare const redactTencentConfig: (config: TencentConfig) => S3AliasConfigRedacted;
1080
1743
 
1081
1744
  interface TencentResourceState {
1082
1745
  type: string;
@@ -1095,26 +1758,14 @@ declare class TencentResource extends S3Resource {
1095
1758
  loadState(_state: TencentResourceState): Promise<void>;
1096
1759
  }
1097
1760
 
1098
- declare const TENCENT_PROMPT = "{prefix}\n Remote Tencent Cloud COS bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1761
+ declare const TENCENT_PROMPT = "{prefix}\n Remote Tencent Cloud COS bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1099
1762
 
1100
- interface AliyunConfig {
1101
- bucket: string;
1102
- accessKeyId: string;
1103
- secretAccessKey: string;
1104
- region: string;
1105
- endpoint?: string;
1106
- timeoutMs?: number;
1107
- }
1108
- interface AliyunConfigRedacted {
1109
- bucket: string;
1110
- accessKeyId: string;
1111
- secretAccessKey: string;
1763
+ interface AliyunConfig extends S3AliasConfig {
1112
1764
  region: string;
1113
- endpoint: string;
1114
- timeoutMs?: number;
1115
1765
  }
1116
- declare function resolvedAliyunEndpoint(config: AliyunConfig): string;
1117
- declare function redactAliyunConfig(config: AliyunConfig): AliyunConfigRedacted;
1766
+ type AliyunConfigRedacted = S3AliasConfigRedacted;
1767
+ declare const resolvedAliyunEndpoint: (config: AliyunConfig) => string;
1768
+ declare const redactAliyunConfig: (config: AliyunConfig) => S3AliasConfigRedacted;
1118
1769
 
1119
1770
  interface AliyunResourceState {
1120
1771
  type: string;
@@ -1133,26 +1784,14 @@ declare class AliyunResource extends S3Resource {
1133
1784
  loadState(_state: AliyunResourceState): Promise<void>;
1134
1785
  }
1135
1786
 
1136
- declare const ALIYUN_PROMPT = "{prefix}\n Remote Alibaba Cloud OSS bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1787
+ declare const ALIYUN_PROMPT = "{prefix}\n Remote Alibaba Cloud OSS bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1137
1788
 
1138
- interface ScalewayConfig {
1139
- bucket: string;
1140
- accessKeyId: string;
1141
- secretAccessKey: string;
1142
- region: string;
1143
- endpoint?: string;
1144
- timeoutMs?: number;
1145
- }
1146
- interface ScalewayConfigRedacted {
1147
- bucket: string;
1148
- accessKeyId: string;
1149
- secretAccessKey: string;
1789
+ interface ScalewayConfig extends S3AliasConfig {
1150
1790
  region: string;
1151
- endpoint: string;
1152
- timeoutMs?: number;
1153
1791
  }
1154
- declare function resolvedScalewayEndpoint(config: ScalewayConfig): string;
1155
- declare function redactScalewayConfig(config: ScalewayConfig): ScalewayConfigRedacted;
1792
+ type ScalewayConfigRedacted = S3AliasConfigRedacted;
1793
+ declare const resolvedScalewayEndpoint: (config: ScalewayConfig) => string;
1794
+ declare const redactScalewayConfig: (config: ScalewayConfig) => S3AliasConfigRedacted;
1156
1795
 
1157
1796
  interface ScalewayResourceState {
1158
1797
  type: string;
@@ -1171,26 +1810,14 @@ declare class ScalewayResource extends S3Resource {
1171
1810
  loadState(_state: ScalewayResourceState): Promise<void>;
1172
1811
  }
1173
1812
 
1174
- declare const SCALEWAY_PROMPT = "{prefix}\n Remote Scaleway Object Storage bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1813
+ declare const SCALEWAY_PROMPT = "{prefix}\n Remote Scaleway Object Storage bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1175
1814
 
1176
- interface QingStorConfig {
1177
- bucket: string;
1178
- accessKeyId: string;
1179
- secretAccessKey: string;
1180
- region: string;
1181
- endpoint?: string;
1182
- timeoutMs?: number;
1183
- }
1184
- interface QingStorConfigRedacted {
1185
- bucket: string;
1186
- accessKeyId: string;
1187
- secretAccessKey: string;
1815
+ interface QingStorConfig extends S3AliasConfig {
1188
1816
  region: string;
1189
- endpoint: string;
1190
- timeoutMs?: number;
1191
1817
  }
1192
- declare function resolvedQingStorEndpoint(config: QingStorConfig): string;
1193
- declare function redactQingStorConfig(config: QingStorConfig): QingStorConfigRedacted;
1818
+ type QingStorConfigRedacted = S3AliasConfigRedacted;
1819
+ declare const resolvedQingStorEndpoint: (config: QingStorConfig) => string;
1820
+ declare const redactQingStorConfig: (config: QingStorConfig) => S3AliasConfigRedacted;
1194
1821
 
1195
1822
  interface QingStorResourceState {
1196
1823
  type: string;
@@ -1209,7 +1836,7 @@ declare class QingStorResource extends S3Resource {
1209
1836
  loadState(_state: QingStorResourceState): Promise<void>;
1210
1837
  }
1211
1838
 
1212
- declare const QINGSTOR_PROMPT = "{prefix}\n Remote QingStor bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.";
1839
+ declare const QINGSTOR_PROMPT = "{prefix}\n Remote QingStor bucket (S3-compatible).\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.";
1213
1840
 
1214
1841
  interface PgPoolLike {
1215
1842
  query: (sql: string, params?: readonly unknown[]) => Promise<{
@@ -1352,6 +1979,7 @@ declare class LanceDBStore implements LanceDriver {
1352
1979
  private table;
1353
1980
  listTables(): Promise<string[]>;
1354
1981
  distinct(table: string, column: string, filters: Record<string, string>, limit: number): Promise<string[]>;
1982
+ tableColumns(table: string): Promise<string[]>;
1355
1983
  rowsMatching(table: string, filters: Record<string, string>, columns: string[], limit: number): Promise<LanceRow[]>;
1356
1984
  rowRecord(table: string, idColumn: string, rowId: string): Promise<LanceRow | null>;
1357
1985
  search(table: string, query: string, limit: number): Promise<LanceRow[]>;
@@ -1364,6 +1992,7 @@ interface LanceDBResourceOptions {
1364
1992
  declare class LanceDBResource extends BaseResource implements Resource {
1365
1993
  readonly kind: string;
1366
1994
  readonly cachesReads: boolean;
1995
+ readonly sizesAlwaysKnown: boolean;
1367
1996
  readonly indexTtl: number;
1368
1997
  readonly prompt: string;
1369
1998
  readonly config: LanceDBConfigResolved;
@@ -1379,17 +2008,6 @@ declare class LanceDBResource extends BaseResource implements Resource {
1379
2008
  stat(p: PathSpec): Promise<FileStat>;
1380
2009
  }
1381
2010
 
1382
- interface SlackConfig {
1383
- token: string;
1384
- searchToken?: string;
1385
- }
1386
- interface SlackConfigRedacted {
1387
- token: '<REDACTED>';
1388
- searchToken?: '<REDACTED>';
1389
- }
1390
- declare function redactSlackConfig(config: SlackConfig): SlackConfigRedacted;
1391
- declare function normalizeSlackConfig(input: Record<string, unknown>): SlackConfig;
1392
-
1393
2011
  interface SlackResourceState {
1394
2012
  type: string;
1395
2013
  config: SlackConfigRedacted;
@@ -1397,6 +2015,7 @@ interface SlackResourceState {
1397
2015
  declare class SlackResource extends BaseResource implements Resource {
1398
2016
  readonly kind: string;
1399
2017
  readonly cachesReads: boolean;
2018
+ readonly sizesAlwaysKnown: boolean;
1400
2019
  readonly indexTtl: number;
1401
2020
  readonly prompt: string;
1402
2021
  readonly writePrompt: string;
@@ -1404,42 +2023,30 @@ declare class SlackResource extends BaseResource implements Resource {
1404
2023
  readonly accessor: SlackAccessor;
1405
2024
  constructor(config: SlackConfig);
1406
2025
  open(): Promise<void>;
1407
- close(): Promise<void>;
1408
2026
  commands(): readonly RegisteredCommand[];
1409
2027
  ops(): readonly RegisteredOp[];
1410
2028
  readFile(p: PathSpec): Promise<Uint8Array>;
1411
2029
  readdir(p: PathSpec): Promise<string[]>;
1412
2030
  stat(p: PathSpec): Promise<FileStat>;
1413
- fingerprint(p: PathSpec): Promise<string | null>;
1414
2031
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1415
2032
  getState(): Promise<SlackResourceState>;
1416
2033
  loadState(_state: SlackResourceState): Promise<void>;
1417
2034
  }
1418
2035
 
1419
- interface SSHConfig {
1420
- host: string;
1421
- hostname?: string;
1422
- port?: number;
1423
- username?: string;
1424
- password?: string;
1425
- identityFile?: string;
1426
- passphrase?: string;
1427
- root?: string;
1428
- timeout?: number;
1429
- knownHosts?: string;
1430
- }
1431
- interface SSHConfigRedacted {
1432
- host: string;
1433
- hostname?: string;
1434
- port?: number;
1435
- username?: string;
1436
- password?: '<REDACTED>';
1437
- identityFile?: string;
1438
- passphrase?: '<REDACTED>';
1439
- root?: string;
1440
- timeout?: number;
1441
- knownHosts?: string;
1442
- }
2036
+ declare const SSHConfigSchema: z.ZodObject<{
2037
+ host: z.ZodString;
2038
+ hostname: z.ZodOptional<z.ZodString>;
2039
+ port: z.ZodOptional<z.ZodNumber>;
2040
+ username: z.ZodOptional<z.ZodString>;
2041
+ password: z.ZodOptional<z.ZodString>;
2042
+ identityFile: z.ZodOptional<z.ZodString>;
2043
+ passphrase: z.ZodOptional<z.ZodString>;
2044
+ root: z.ZodOptional<z.ZodString>;
2045
+ timeout: z.ZodOptional<z.ZodNumber>;
2046
+ knownHosts: z.ZodOptional<z.ZodString>;
2047
+ }, z.core.$strip>;
2048
+ type SSHConfig = ConfigOf<typeof SSHConfigSchema>;
2049
+ type SSHConfigRedacted = RedactedConfig<SSHConfig, 'password' | 'passphrase'>;
1443
2050
  declare function redactSshConfig(config: SSHConfig): SSHConfigRedacted;
1444
2051
  declare function normalizeSshConfig(input: Record<string, unknown>): SSHConfig;
1445
2052
 
@@ -1461,6 +2068,7 @@ interface SSHResourceState {
1461
2068
  declare class SSHResource extends BaseResource implements Resource {
1462
2069
  readonly kind: "ssh";
1463
2070
  readonly cachesReads: boolean;
2071
+ readonly sizesAlwaysKnown: boolean;
1464
2072
  readonly indexTtl: number;
1465
2073
  readonly prompt = "{prefix}\n Remote filesystem via SSH/SFTP.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, stat, mkdir, touch, cp, mv, rm, tee.";
1466
2074
  readonly config: SSHConfig;
@@ -1489,7 +2097,6 @@ declare class SSHResource extends BaseResource implements Resource {
1489
2097
  rmR(p: PathSpec): Promise<void>;
1490
2098
  du(p: PathSpec): Promise<number>;
1491
2099
  find(p: PathSpec, options?: FindOptions): Promise<string[]>;
1492
- fingerprint(p: PathSpec): Promise<string | null>;
1493
2100
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1494
2101
  getState(): Promise<SSHResourceState>;
1495
2102
  loadState(_state: SSHResourceState): Promise<void>;
@@ -1501,14 +2108,77 @@ declare const SSH_COMMANDS: readonly RegisteredCommand[];
1501
2108
 
1502
2109
  declare const SSH_OPS: readonly RegisteredOp[];
1503
2110
 
1504
- interface DiscordConfig {
1505
- token: string;
2111
+ interface NextcloudConfig {
2112
+ url: string;
2113
+ username?: string;
2114
+ password?: string;
2115
+ verifySsl?: boolean;
2116
+ timeout?: number;
2117
+ }
2118
+ type NextcloudConfigRedacted = RedactedConfig<NextcloudConfig, 'password'>;
2119
+ declare function normalizeNextcloudConfig(config: Record<string, unknown>): NextcloudConfig;
2120
+ declare function redactNextcloudConfig(config: NextcloudConfig): NextcloudConfigRedacted;
2121
+
2122
+ declare class NextcloudAccessor extends Accessor {
2123
+ readonly config: NextcloudConfig;
2124
+ readonly resourceName: "nextcloud";
2125
+ private operatorPromise;
2126
+ constructor(config: NextcloudConfig);
2127
+ operator(): Promise<Operator>;
2128
+ private createOperator;
2129
+ }
2130
+
2131
+ interface NextcloudResourceState {
2132
+ type: string;
2133
+ config: NextcloudConfigRedacted;
2134
+ }
2135
+ declare class NextcloudResource extends BaseResource implements Resource {
2136
+ readonly config: NextcloudConfig;
2137
+ readonly kind: "nextcloud";
2138
+ readonly cachesReads = true;
2139
+ readonly sizesAlwaysKnown: boolean;
2140
+ readonly supportsSnapshot = true;
2141
+ readonly prompt = "You have access to files stored in Nextcloud.";
2142
+ readonly accessor: NextcloudAccessor;
2143
+ readonly opsMap: Record<string, unknown>;
2144
+ constructor(config: NextcloudConfig);
2145
+ open(): Promise<void>;
2146
+ commands(): readonly RegisteredCommand[];
2147
+ ops(): readonly RegisteredOp[];
2148
+ streamPath(path: PathSpec): AsyncIterable<Uint8Array>;
2149
+ readFile(path: PathSpec): Promise<Uint8Array>;
2150
+ writeFile(path: PathSpec, data: Uint8Array): Promise<void>;
2151
+ appendFile(path: PathSpec, data: Uint8Array): Promise<void>;
2152
+ readdir(path: PathSpec): Promise<string[]>;
2153
+ stat(path: PathSpec): Promise<FileStat>;
2154
+ exists(path: PathSpec): Promise<boolean>;
2155
+ mkdir(path: PathSpec): Promise<void>;
2156
+ rmdir(path: PathSpec): Promise<void>;
2157
+ unlink(path: PathSpec): Promise<void>;
2158
+ rename(source: PathSpec, destination: PathSpec): Promise<void>;
2159
+ truncate(path: PathSpec, length: number): Promise<void>;
2160
+ copy(source: PathSpec, destination: PathSpec): Promise<void>;
2161
+ rmR(path: PathSpec): Promise<void>;
2162
+ du(path: PathSpec): Promise<number>;
2163
+ find(path: PathSpec, options?: FindOptions): Promise<string[]>;
2164
+ glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2165
+ deltaHook(): DeltaHook;
2166
+ getState(): Promise<NextcloudResourceState>;
2167
+ loadState(_state: NextcloudResourceState): Promise<void>;
1506
2168
  }
1507
- interface DiscordConfigRedacted {
1508
- token: '<REDACTED>';
2169
+
2170
+ declare const NEXTCLOUD_PROMPT = "You have access to files stored in Nextcloud.";
2171
+
2172
+ declare const NEXTCLOUD_COMMANDS: readonly RegisteredCommand[];
2173
+
2174
+ declare const NEXTCLOUD_OPS: readonly RegisteredOp[];
2175
+
2176
+ declare class NextcloudWalk {
2177
+ private readonly accessor;
2178
+ constructor(accessor: NextcloudAccessor);
2179
+ walk(root: PathSpec): AsyncGenerator<WalkEntry>;
1509
2180
  }
1510
- declare function redactDiscordConfig(config: DiscordConfig): DiscordConfigRedacted;
1511
- declare function normalizeDiscordConfig(input: Record<string, unknown>): DiscordConfig;
2181
+ declare function buildDeltaHook(accessor: NextcloudAccessor): DeltaHook;
1512
2182
 
1513
2183
  interface DiscordResourceState {
1514
2184
  type: string;
@@ -1517,6 +2187,7 @@ interface DiscordResourceState {
1517
2187
  declare class DiscordResource extends BaseResource implements Resource {
1518
2188
  readonly kind: string;
1519
2189
  readonly cachesReads: boolean;
2190
+ readonly sizesAlwaysKnown: boolean;
1520
2191
  readonly indexTtl: number;
1521
2192
  readonly prompt: string;
1522
2193
  readonly writePrompt: string;
@@ -1524,32 +2195,25 @@ declare class DiscordResource extends BaseResource implements Resource {
1524
2195
  readonly accessor: DiscordAccessor;
1525
2196
  constructor(config: DiscordConfig);
1526
2197
  open(): Promise<void>;
1527
- close(): Promise<void>;
1528
2198
  commands(): readonly RegisteredCommand[];
1529
2199
  ops(): readonly RegisteredOp[];
1530
2200
  readFile(p: PathSpec): Promise<Uint8Array>;
1531
2201
  readdir(p: PathSpec): Promise<string[]>;
1532
2202
  stat(p: PathSpec): Promise<FileStat>;
1533
- fingerprint(p: PathSpec): Promise<string | null>;
1534
2203
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1535
2204
  getState(): Promise<DiscordResourceState>;
1536
2205
  loadState(_state: DiscordResourceState): Promise<void>;
1537
2206
  }
1538
2207
 
1539
- interface TrelloConfig {
1540
- apiKey: string;
1541
- apiToken: string;
1542
- workspaceId?: string;
1543
- boardIds?: readonly string[];
1544
- baseUrl?: string;
1545
- }
1546
- interface TrelloConfigRedacted {
1547
- apiKey: '<REDACTED>';
1548
- apiToken: '<REDACTED>';
1549
- workspaceId?: string;
1550
- boardIds?: readonly string[];
1551
- baseUrl?: string;
1552
- }
2208
+ declare const TrelloConfigSchema: z.ZodObject<{
2209
+ apiKey: z.ZodString;
2210
+ apiToken: z.ZodString;
2211
+ workspaceId: z.ZodOptional<z.ZodString>;
2212
+ boardIds: z.ZodOptional<z.ZodReadonly<z.ZodArray<z.ZodString>>>;
2213
+ baseUrl: z.ZodOptional<z.ZodString>;
2214
+ }, z.core.$strip>;
2215
+ type TrelloConfig = ConfigOf<typeof TrelloConfigSchema>;
2216
+ type TrelloConfigRedacted = RedactedConfig<TrelloConfig, 'apiKey' | 'apiToken'>;
1553
2217
  declare function redactTrelloConfig(config: TrelloConfig): TrelloConfigRedacted;
1554
2218
  declare function normalizeTrelloConfig(input: Record<string, unknown>): TrelloConfig;
1555
2219
 
@@ -1567,34 +2231,17 @@ declare class TrelloResource extends BaseResource implements Resource {
1567
2231
  readonly accessor: TrelloAccessor;
1568
2232
  constructor(config: TrelloConfig);
1569
2233
  open(): Promise<void>;
1570
- close(): Promise<void>;
1571
2234
  commands(): readonly RegisteredCommand[];
1572
2235
  ops(): readonly RegisteredOp[];
1573
2236
  private filter;
1574
2237
  readFile(p: PathSpec): Promise<Uint8Array>;
1575
2238
  readdir(p: PathSpec): Promise<string[]>;
1576
2239
  stat(p: PathSpec): Promise<FileStat>;
1577
- fingerprint(p: PathSpec): Promise<string | null>;
1578
2240
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1579
2241
  getState(): Promise<TrelloResourceState>;
1580
2242
  loadState(_state: TrelloResourceState): Promise<void>;
1581
2243
  }
1582
2244
 
1583
- interface LinearConfig {
1584
- apiKey: string;
1585
- workspace?: string;
1586
- teamIds?: readonly string[];
1587
- baseUrl?: string;
1588
- }
1589
- interface LinearConfigRedacted {
1590
- apiKey: '<REDACTED>';
1591
- workspace?: string;
1592
- teamIds?: readonly string[];
1593
- baseUrl?: string;
1594
- }
1595
- declare function redactLinearConfig(config: LinearConfig): LinearConfigRedacted;
1596
- declare function normalizeLinearConfig(input: Record<string, unknown>): LinearConfig;
1597
-
1598
2245
  interface LinearResourceState {
1599
2246
  type: string;
1600
2247
  config: LinearConfigRedacted;
@@ -1602,6 +2249,7 @@ interface LinearResourceState {
1602
2249
  declare class LinearResource extends BaseResource implements Resource {
1603
2250
  readonly kind: string;
1604
2251
  readonly cachesReads: boolean;
2252
+ readonly sizesAlwaysKnown: boolean;
1605
2253
  readonly indexTtl: number;
1606
2254
  readonly prompt: string;
1607
2255
  readonly writePrompt: string;
@@ -1609,30 +2257,17 @@ declare class LinearResource extends BaseResource implements Resource {
1609
2257
  readonly accessor: LinearAccessor;
1610
2258
  constructor(config: LinearConfig);
1611
2259
  open(): Promise<void>;
1612
- close(): Promise<void>;
1613
2260
  commands(): readonly RegisteredCommand[];
1614
2261
  ops(): readonly RegisteredOp[];
1615
2262
  private filter;
1616
2263
  readFile(p: PathSpec): Promise<Uint8Array>;
1617
2264
  readdir(p: PathSpec): Promise<string[]>;
1618
2265
  stat(p: PathSpec): Promise<FileStat>;
1619
- fingerprint(p: PathSpec): Promise<string | null>;
1620
2266
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1621
2267
  getState(): Promise<LinearResourceState>;
1622
2268
  loadState(_state: LinearResourceState): Promise<void>;
1623
2269
  }
1624
2270
 
1625
- interface NotionConfig {
1626
- apiKey: string;
1627
- baseUrl?: string;
1628
- }
1629
- interface NotionConfigRedacted {
1630
- apiKey: '<REDACTED>';
1631
- baseUrl?: string;
1632
- }
1633
- declare function redactNotionConfig(config: NotionConfig): NotionConfigRedacted;
1634
- declare function normalizeNotionConfig(input: Record<string, unknown>): NotionConfig;
1635
-
1636
2271
  interface NotionResourceState {
1637
2272
  type: string;
1638
2273
  config: NotionConfigRedacted;
@@ -1647,34 +2282,26 @@ declare class NotionResource extends BaseResource implements Resource {
1647
2282
  readonly accessor: NotionAccessor;
1648
2283
  constructor(config: NotionConfig);
1649
2284
  open(): Promise<void>;
1650
- close(): Promise<void>;
1651
2285
  commands(): readonly RegisteredCommand[];
1652
2286
  ops(): readonly RegisteredOp[];
1653
2287
  readFile(p: PathSpec): Promise<Uint8Array>;
1654
2288
  readdir(p: PathSpec): Promise<string[]>;
1655
2289
  stat(p: PathSpec): Promise<FileStat>;
1656
- fingerprint(p: PathSpec): Promise<string | null>;
1657
2290
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1658
2291
  getState(): Promise<NotionResourceState>;
1659
2292
  loadState(_state: NotionResourceState): Promise<void>;
1660
2293
  }
1661
2294
 
1662
- interface LangfuseConfig {
1663
- publicKey: string;
1664
- secretKey: string;
1665
- host?: string;
1666
- defaultTraceLimit?: number;
1667
- defaultSearchLimit?: number;
1668
- defaultFromTimestamp?: string;
1669
- }
1670
- interface LangfuseConfigRedacted {
1671
- publicKey: string;
1672
- secretKey: '<REDACTED>';
1673
- host?: string;
1674
- defaultTraceLimit?: number;
1675
- defaultSearchLimit?: number;
1676
- defaultFromTimestamp?: string;
1677
- }
2295
+ declare const LangfuseConfigSchema: z.ZodObject<{
2296
+ publicKey: z.ZodString;
2297
+ secretKey: z.ZodString;
2298
+ host: z.ZodOptional<z.ZodString>;
2299
+ defaultTraceLimit: z.ZodOptional<z.ZodNumber>;
2300
+ defaultSearchLimit: z.ZodOptional<z.ZodNumber>;
2301
+ defaultFromTimestamp: z.ZodOptional<z.ZodString>;
2302
+ }, z.core.$strip>;
2303
+ type LangfuseConfig = ConfigOf<typeof LangfuseConfigSchema>;
2304
+ type LangfuseConfigRedacted = RedactedConfig<LangfuseConfig, 'secretKey'>;
1678
2305
  declare function redactLangfuseConfig(config: LangfuseConfig): LangfuseConfigRedacted;
1679
2306
  declare function normalizeLangfuseConfig(input: Record<string, unknown>): LangfuseConfig;
1680
2307
 
@@ -1691,32 +2318,59 @@ declare class LangfuseResource extends BaseResource implements Resource {
1691
2318
  readonly accessor: LangfuseAccessor;
1692
2319
  constructor(config: LangfuseConfig);
1693
2320
  open(): Promise<void>;
1694
- close(): Promise<void>;
1695
2321
  commands(): readonly RegisteredCommand[];
1696
2322
  ops(): readonly RegisteredOp[];
1697
2323
  readFile(p: PathSpec): Promise<Uint8Array>;
1698
2324
  readdir(p: PathSpec): Promise<string[]>;
1699
2325
  stat(p: PathSpec): Promise<FileStat>;
1700
- fingerprint(_p: PathSpec): Promise<string | null>;
1701
2326
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1702
2327
  getState(): Promise<LangfuseResourceState>;
1703
2328
  loadState(_state: LangfuseResourceState): Promise<void>;
1704
2329
  }
1705
2330
 
1706
- interface GitHubConfig {
1707
- token: string;
1708
- owner: string;
1709
- repo: string;
1710
- ref?: string;
1711
- baseUrl?: string;
1712
- }
1713
- interface GitHubConfigRedacted {
1714
- token: '<REDACTED>';
1715
- owner: string;
1716
- repo: string;
1717
- ref?: string;
1718
- baseUrl?: string;
2331
+ declare const JaegerConfigSchema: z.ZodObject<{
2332
+ host: z.ZodOptional<z.ZodString>;
2333
+ defaultTraceLimit: z.ZodOptional<z.ZodNumber>;
2334
+ defaultFromTimestamp: z.ZodOptional<z.ZodString>;
2335
+ defaultToTimestamp: z.ZodOptional<z.ZodString>;
2336
+ requestTimeout: z.ZodOptional<z.ZodNumber>;
2337
+ }, z.core.$strip>;
2338
+ type JaegerConfig = ConfigOf<typeof JaegerConfigSchema>;
2339
+ type JaegerConfigRedacted = JaegerConfig;
2340
+
2341
+ interface JaegerResourceState {
2342
+ type: string;
2343
+ config: JaegerConfigRedacted;
1719
2344
  }
2345
+ declare class JaegerResource extends BaseResource implements Resource {
2346
+ readonly kind: string;
2347
+ readonly cachesReads: boolean;
2348
+ readonly sizesAlwaysKnown: boolean;
2349
+ readonly indexTtl: number;
2350
+ readonly prompt: string;
2351
+ readonly config: JaegerConfig;
2352
+ readonly accessor: JaegerAccessor;
2353
+ constructor(config: JaegerConfig);
2354
+ open(): Promise<void>;
2355
+ commands(): readonly RegisteredCommand[];
2356
+ ops(): readonly RegisteredOp[];
2357
+ readFile(p: PathSpec): Promise<Uint8Array>;
2358
+ readdir(p: PathSpec): Promise<string[]>;
2359
+ stat(p: PathSpec): Promise<FileStat>;
2360
+ glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2361
+ getState(): Promise<JaegerResourceState>;
2362
+ loadState(_state: JaegerResourceState): Promise<void>;
2363
+ }
2364
+
2365
+ declare const GitHubConfigSchema: z.ZodObject<{
2366
+ token: z.ZodString;
2367
+ owner: z.ZodString;
2368
+ repo: z.ZodString;
2369
+ ref: z.ZodOptional<z.ZodString>;
2370
+ baseUrl: z.ZodOptional<z.ZodString>;
2371
+ }, z.core.$strip>;
2372
+ type GitHubConfig = ConfigOf<typeof GitHubConfigSchema>;
2373
+ type GitHubConfigRedacted = RedactedConfig<GitHubConfig, 'token'>;
1720
2374
  declare function redactGitHubConfig(config: GitHubConfig): GitHubConfigRedacted;
1721
2375
  declare function normalizeGitHubConfig(input: Record<string, unknown>): GitHubConfig;
1722
2376
 
@@ -1729,40 +2383,34 @@ interface GitHubResourceState {
1729
2383
  declare class GitHubResource extends BaseResource implements Resource {
1730
2384
  readonly kind: string;
1731
2385
  readonly cachesReads: boolean;
2386
+ readonly sizesAlwaysKnown: boolean;
2387
+ readonly supportsSnapshot: boolean;
1732
2388
  readonly indexTtl: number;
1733
2389
  readonly config: GitHubConfig;
1734
2390
  readonly accessor: GitHubAccessor;
1735
2391
  private constructor();
1736
2392
  static create(config: GitHubConfig): Promise<GitHubResource>;
1737
2393
  open(): Promise<void>;
1738
- close(): Promise<void>;
1739
2394
  commands(): readonly RegisteredCommand[];
1740
2395
  ops(): readonly RegisteredOp[];
1741
2396
  readFile(p: PathSpec): Promise<Uint8Array>;
1742
2397
  readdir(p: PathSpec): Promise<string[]>;
1743
2398
  stat(p: PathSpec): Promise<FileStat>;
1744
- fingerprint(p: PathSpec): Promise<string | null>;
1745
2399
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1746
2400
  getState(): Promise<GitHubResourceState>;
1747
2401
  loadState(_state: GitHubResourceState): Promise<void>;
1748
2402
  }
1749
2403
 
1750
- interface GitHubCIConfig {
1751
- token: string;
1752
- owner: string;
1753
- repo: string;
1754
- days?: number;
1755
- maxRuns?: number;
1756
- baseUrl?: string;
1757
- }
1758
- interface GitHubCIConfigRedacted {
1759
- token: '<REDACTED>';
1760
- owner: string;
1761
- repo: string;
1762
- days?: number;
1763
- maxRuns?: number;
1764
- baseUrl?: string;
1765
- }
2404
+ declare const GitHubCIConfigSchema: z.ZodObject<{
2405
+ token: z.ZodString;
2406
+ owner: z.ZodString;
2407
+ repo: z.ZodString;
2408
+ days: z.ZodOptional<z.ZodNumber>;
2409
+ maxRuns: z.ZodOptional<z.ZodNumber>;
2410
+ baseUrl: z.ZodOptional<z.ZodString>;
2411
+ }, z.core.$strip>;
2412
+ type GitHubCIConfig = ConfigOf<typeof GitHubCIConfigSchema>;
2413
+ type GitHubCIConfigRedacted = RedactedConfig<GitHubCIConfig, 'token'>;
1766
2414
  declare function redactGitHubCIConfig(config: GitHubCIConfig): GitHubCIConfigRedacted;
1767
2415
  declare function normalizeGitHubCIConfig(input: Record<string, unknown>): GitHubCIConfig;
1768
2416
 
@@ -1779,38 +2427,19 @@ declare class GitHubCIResource extends BaseResource implements Resource {
1779
2427
  readonly accessor: GitHubCIAccessor;
1780
2428
  constructor(config: GitHubCIConfig);
1781
2429
  open(): Promise<void>;
1782
- close(): Promise<void>;
1783
2430
  commands(): readonly RegisteredCommand[];
1784
2431
  ops(): readonly RegisteredOp[];
1785
2432
  readFile(p: PathSpec): Promise<Uint8Array>;
1786
2433
  readdir(p: PathSpec): Promise<string[]>;
1787
2434
  stat(p: PathSpec): Promise<FileStat>;
1788
- fingerprint(p: PathSpec): Promise<string | null>;
1789
2435
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1790
2436
  getState(): Promise<GitHubCIResourceState>;
1791
2437
  loadState(_state: GitHubCIResourceState): Promise<void>;
1792
2438
  }
1793
2439
 
1794
- interface GDocsConfig {
1795
- clientId: string;
1796
- clientSecret: string;
1797
- refreshToken: string;
1798
- refreshFn?: (refreshToken: string) => Promise<{
1799
- accessToken: string;
1800
- expiresIn: number;
1801
- }>;
1802
- }
1803
- interface GDocsConfigRedacted {
1804
- clientId: string;
1805
- clientSecret: '<REDACTED>';
1806
- refreshToken: '<REDACTED>';
1807
- }
1808
- declare function redactGDocsConfig(config: GDocsConfig): GDocsConfigRedacted;
1809
- declare function normalizeGDocsConfig(input: Record<string, unknown>): GDocsConfig;
1810
-
1811
2440
  interface GDocsResourceState {
1812
2441
  type: string;
1813
- config: GDocsConfigRedacted;
2442
+ config: GoogleConfigRedacted;
1814
2443
  }
1815
2444
  declare class GDocsResource extends BaseResource implements Resource {
1816
2445
  readonly kind: string;
@@ -1818,42 +2447,23 @@ declare class GDocsResource extends BaseResource implements Resource {
1818
2447
  readonly indexTtl: number;
1819
2448
  readonly prompt: string;
1820
2449
  readonly writePrompt: string;
1821
- readonly config: GDocsConfig;
2450
+ readonly config: GoogleConfig;
1822
2451
  readonly accessor: GDocsAccessor;
1823
- constructor(config: GDocsConfig);
2452
+ constructor(config: GoogleConfig);
1824
2453
  open(): Promise<void>;
1825
- close(): Promise<void>;
1826
2454
  commands(): readonly RegisteredCommand[];
1827
2455
  ops(): readonly RegisteredOp[];
1828
2456
  readFile(p: PathSpec): Promise<Uint8Array>;
1829
2457
  readdir(p: PathSpec): Promise<string[]>;
1830
2458
  stat(p: PathSpec): Promise<FileStat>;
1831
- fingerprint(p: PathSpec): Promise<string | null>;
1832
2459
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1833
2460
  getState(): Promise<GDocsResourceState>;
1834
2461
  loadState(_state: GDocsResourceState): Promise<void>;
1835
2462
  }
1836
2463
 
1837
- interface GSheetsConfig {
1838
- clientId: string;
1839
- clientSecret: string;
1840
- refreshToken: string;
1841
- refreshFn?: (refreshToken: string) => Promise<{
1842
- accessToken: string;
1843
- expiresIn: number;
1844
- }>;
1845
- }
1846
- interface GSheetsConfigRedacted {
1847
- clientId: string;
1848
- clientSecret: '<REDACTED>';
1849
- refreshToken: '<REDACTED>';
1850
- }
1851
- declare function redactGSheetsConfig(config: GSheetsConfig): GSheetsConfigRedacted;
1852
- declare function normalizeGSheetsConfig(input: Record<string, unknown>): GSheetsConfig;
1853
-
1854
2464
  interface GSheetsResourceState {
1855
2465
  type: string;
1856
- config: GSheetsConfigRedacted;
2466
+ config: GoogleConfigRedacted;
1857
2467
  }
1858
2468
  declare class GSheetsResource extends BaseResource implements Resource {
1859
2469
  readonly kind: string;
@@ -1861,42 +2471,23 @@ declare class GSheetsResource extends BaseResource implements Resource {
1861
2471
  readonly indexTtl: number;
1862
2472
  readonly prompt: string;
1863
2473
  readonly writePrompt: string;
1864
- readonly config: GSheetsConfig;
2474
+ readonly config: GoogleConfig;
1865
2475
  readonly accessor: GSheetsAccessor;
1866
- constructor(config: GSheetsConfig);
2476
+ constructor(config: GoogleConfig);
1867
2477
  open(): Promise<void>;
1868
- close(): Promise<void>;
1869
2478
  commands(): readonly RegisteredCommand[];
1870
2479
  ops(): readonly RegisteredOp[];
1871
2480
  readFile(p: PathSpec): Promise<Uint8Array>;
1872
2481
  readdir(p: PathSpec): Promise<string[]>;
1873
2482
  stat(p: PathSpec): Promise<FileStat>;
1874
- fingerprint(p: PathSpec): Promise<string | null>;
1875
2483
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1876
2484
  getState(): Promise<GSheetsResourceState>;
1877
2485
  loadState(_state: GSheetsResourceState): Promise<void>;
1878
2486
  }
1879
2487
 
1880
- interface GSlidesConfig {
1881
- clientId: string;
1882
- clientSecret: string;
1883
- refreshToken: string;
1884
- refreshFn?: (refreshToken: string) => Promise<{
1885
- accessToken: string;
1886
- expiresIn: number;
1887
- }>;
1888
- }
1889
- interface GSlidesConfigRedacted {
1890
- clientId: string;
1891
- clientSecret: '<REDACTED>';
1892
- refreshToken: '<REDACTED>';
1893
- }
1894
- declare function redactGSlidesConfig(config: GSlidesConfig): GSlidesConfigRedacted;
1895
- declare function normalizeGSlidesConfig(input: Record<string, unknown>): GSlidesConfig;
1896
-
1897
2488
  interface GSlidesResourceState {
1898
2489
  type: string;
1899
- config: GSlidesConfigRedacted;
2490
+ config: GoogleConfigRedacted;
1900
2491
  }
1901
2492
  declare class GSlidesResource extends BaseResource implements Resource {
1902
2493
  readonly kind: string;
@@ -1904,59 +2495,39 @@ declare class GSlidesResource extends BaseResource implements Resource {
1904
2495
  readonly indexTtl: number;
1905
2496
  readonly prompt: string;
1906
2497
  readonly writePrompt: string;
1907
- readonly config: GSlidesConfig;
2498
+ readonly config: GoogleConfig;
1908
2499
  readonly accessor: GSlidesAccessor;
1909
- constructor(config: GSlidesConfig);
2500
+ constructor(config: GoogleConfig);
1910
2501
  open(): Promise<void>;
1911
- close(): Promise<void>;
1912
2502
  commands(): readonly RegisteredCommand[];
1913
2503
  ops(): readonly RegisteredOp[];
1914
2504
  readFile(p: PathSpec): Promise<Uint8Array>;
1915
2505
  readdir(p: PathSpec): Promise<string[]>;
1916
2506
  stat(p: PathSpec): Promise<FileStat>;
1917
- fingerprint(p: PathSpec): Promise<string | null>;
1918
2507
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1919
2508
  getState(): Promise<GSlidesResourceState>;
1920
2509
  loadState(_state: GSlidesResourceState): Promise<void>;
1921
2510
  }
1922
2511
 
1923
- interface GDriveConfig {
1924
- clientId: string;
1925
- clientSecret: string;
1926
- refreshToken: string;
1927
- refreshFn?: (refreshToken: string) => Promise<{
1928
- accessToken: string;
1929
- expiresIn: number;
1930
- }>;
1931
- }
1932
- interface GDriveConfigRedacted {
1933
- clientId: string;
1934
- clientSecret: '<REDACTED>';
1935
- refreshToken: '<REDACTED>';
1936
- }
1937
- declare function redactGDriveConfig(config: GDriveConfig): GDriveConfigRedacted;
1938
- declare function normalizeGDriveConfig(input: Record<string, unknown>): GDriveConfig;
1939
-
1940
2512
  interface GDriveResourceState {
1941
2513
  type: string;
1942
- config: GDriveConfigRedacted;
2514
+ config: GoogleConfigRedacted;
1943
2515
  }
1944
2516
  declare class GDriveResource extends BaseResource implements Resource {
1945
2517
  readonly kind: string;
1946
2518
  readonly cachesReads: boolean;
2519
+ readonly supportsSnapshot: boolean;
1947
2520
  readonly indexTtl: number;
1948
2521
  readonly prompt: string;
1949
- readonly config: GDriveConfig;
2522
+ readonly config: GoogleConfig;
1950
2523
  readonly accessor: GDriveAccessor;
1951
- constructor(config: GDriveConfig);
2524
+ constructor(config: GoogleConfig);
1952
2525
  open(): Promise<void>;
1953
- close(): Promise<void>;
1954
2526
  commands(): readonly RegisteredCommand[];
1955
2527
  ops(): readonly RegisteredOp[];
1956
2528
  readFile(p: PathSpec): Promise<Uint8Array>;
1957
2529
  readdir(p: PathSpec): Promise<string[]>;
1958
2530
  stat(p: PathSpec): Promise<FileStat>;
1959
- fingerprint(p: PathSpec): Promise<string | null>;
1960
2531
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
1961
2532
  getState(): Promise<GDriveResourceState>;
1962
2533
  loadState(_state: GDriveResourceState): Promise<void>;
@@ -1966,16 +2537,23 @@ interface DropboxConfig {
1966
2537
  clientId: string;
1967
2538
  clientSecret: string;
1968
2539
  refreshToken: string;
2540
+ rootPath?: string;
2541
+ contentSearch?: boolean;
2542
+ endpoint?: string;
1969
2543
  refreshFn?: (refreshToken: string) => Promise<{
1970
2544
  accessToken: string;
1971
2545
  expiresIn: number;
1972
2546
  }>;
1973
2547
  }
1974
- interface DropboxConfigRedacted {
1975
- clientId: string;
1976
- clientSecret: '<REDACTED>';
1977
- refreshToken: '<REDACTED>';
1978
- }
2548
+ declare const DropboxConfigSchema: z.ZodObject<{
2549
+ clientId: z.ZodString;
2550
+ clientSecret: z.ZodString;
2551
+ refreshToken: z.ZodString;
2552
+ rootPath: z.ZodOptional<z.ZodString>;
2553
+ contentSearch: z.ZodOptional<z.ZodBoolean>;
2554
+ endpoint: z.ZodOptional<z.ZodString>;
2555
+ }, z.core.$strip>;
2556
+ type DropboxConfigRedacted = RedactedConfig<ConfigOf<typeof DropboxConfigSchema>, 'clientSecret' | 'refreshToken'>;
1979
2557
  declare function redactDropboxConfig(config: DropboxConfig): DropboxConfigRedacted;
1980
2558
  declare function normalizeDropboxConfig(input: Record<string, unknown>): DropboxConfig;
1981
2559
 
@@ -1986,25 +2564,27 @@ interface DropboxResourceState {
1986
2564
  declare class DropboxResource extends BaseResource implements Resource {
1987
2565
  readonly kind: string;
1988
2566
  readonly cachesReads: boolean;
2567
+ readonly sizesAlwaysKnown: boolean;
1989
2568
  readonly indexTtl: number;
1990
2569
  readonly prompt: string;
1991
2570
  readonly config: DropboxConfig;
1992
2571
  readonly accessor: DropboxAccessor;
1993
2572
  constructor(config: DropboxConfig);
1994
2573
  open(): Promise<void>;
1995
- close(): Promise<void>;
1996
2574
  commands(): readonly RegisteredCommand[];
1997
2575
  ops(): readonly RegisteredOp[];
1998
2576
  readFile(p: PathSpec): Promise<Uint8Array>;
1999
2577
  readdir(p: PathSpec): Promise<string[]>;
2000
2578
  stat(p: PathSpec): Promise<FileStat>;
2001
- fingerprint(p: PathSpec): Promise<string | null>;
2002
2579
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2003
2580
  getState(): Promise<DropboxResourceState>;
2004
2581
  loadState(_state: DropboxResourceState): Promise<void>;
2005
2582
  }
2006
2583
 
2007
2584
  interface BoxConfig {
2585
+ endpoint?: string;
2586
+ rootFolderId?: string;
2587
+ contentSearch?: boolean;
2008
2588
  clientId?: string;
2009
2589
  clientSecret?: string;
2010
2590
  refreshToken?: string;
@@ -2017,13 +2597,17 @@ interface BoxConfig {
2017
2597
  }>;
2018
2598
  onRefreshTokenRotated?: (newRefreshToken: string) => void | Promise<void>;
2019
2599
  }
2020
- interface BoxConfigRedacted {
2021
- clientId?: string;
2022
- clientSecret?: '<REDACTED>';
2023
- refreshToken?: '<REDACTED>';
2024
- enterpriseId?: string;
2025
- accessToken?: '<REDACTED>';
2026
- }
2600
+ declare const BoxConfigSchema: z.ZodObject<{
2601
+ endpoint: z.ZodOptional<z.ZodString>;
2602
+ rootFolderId: z.ZodOptional<z.ZodString>;
2603
+ contentSearch: z.ZodOptional<z.ZodBoolean>;
2604
+ clientId: z.ZodOptional<z.ZodString>;
2605
+ clientSecret: z.ZodOptional<z.ZodString>;
2606
+ refreshToken: z.ZodOptional<z.ZodString>;
2607
+ enterpriseId: z.ZodOptional<z.ZodString>;
2608
+ accessToken: z.ZodOptional<z.ZodString>;
2609
+ }, z.core.$strip>;
2610
+ type BoxConfigRedacted = RedactedConfig<ConfigOf<typeof BoxConfigSchema>, 'clientSecret' | 'refreshToken' | 'accessToken'>;
2027
2611
  declare function redactBoxConfig(config: BoxConfig): BoxConfigRedacted;
2028
2612
  declare function normalizeBoxConfig(input: Record<string, unknown>): BoxConfig;
2029
2613
 
@@ -2034,19 +2618,18 @@ interface BoxResourceState {
2034
2618
  declare class BoxResource extends BaseResource implements Resource {
2035
2619
  readonly kind: string;
2036
2620
  readonly cachesReads: boolean;
2621
+ readonly sizesAlwaysKnown: boolean;
2037
2622
  readonly indexTtl: number;
2038
2623
  readonly prompt: string;
2039
2624
  readonly config: BoxConfig;
2040
2625
  readonly accessor: BoxAccessor;
2041
2626
  constructor(config: BoxConfig);
2042
2627
  open(): Promise<void>;
2043
- close(): Promise<void>;
2044
2628
  commands(): readonly RegisteredCommand[];
2045
2629
  ops(): readonly RegisteredOp[];
2046
2630
  readFile(p: PathSpec): Promise<Uint8Array>;
2047
2631
  readdir(p: PathSpec): Promise<string[]>;
2048
2632
  stat(p: PathSpec): Promise<FileStat>;
2049
- fingerprint(p: PathSpec): Promise<string | null>;
2050
2633
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2051
2634
  getState(): Promise<BoxResourceState>;
2052
2635
  loadState(_state: BoxResourceState): Promise<void>;
@@ -2059,6 +2642,7 @@ interface GmailResourceState {
2059
2642
  declare class GmailResource extends BaseResource implements Resource {
2060
2643
  readonly kind: string;
2061
2644
  readonly cachesReads: boolean;
2645
+ readonly sizesAlwaysKnown: boolean;
2062
2646
  readonly indexTtl: number;
2063
2647
  readonly prompt: string;
2064
2648
  readonly writePrompt: string;
@@ -2066,42 +2650,56 @@ declare class GmailResource extends BaseResource implements Resource {
2066
2650
  readonly accessor: GmailAccessor;
2067
2651
  constructor(config: GoogleConfig);
2068
2652
  open(): Promise<void>;
2069
- close(): Promise<void>;
2070
2653
  commands(): readonly RegisteredCommand[];
2071
2654
  ops(): readonly RegisteredOp[];
2072
2655
  readFile(p: PathSpec): Promise<Uint8Array>;
2073
2656
  readdir(p: PathSpec): Promise<string[]>;
2074
2657
  stat(p: PathSpec): Promise<FileStat>;
2075
- fingerprint(p: PathSpec): Promise<string | null>;
2076
2658
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2077
2659
  getState(): Promise<GmailResourceState>;
2078
2660
  loadState(_state: GmailResourceState): Promise<void>;
2079
2661
  }
2080
2662
 
2081
- interface EmailConfig {
2082
- imapHost: string;
2083
- imapPort: number;
2084
- smtpHost: string;
2085
- smtpPort: number;
2086
- username: string;
2087
- password: string;
2088
- useSsl: boolean;
2089
- maxMessages: number;
2090
- }
2091
- interface EmailConfigRedacted extends Omit<EmailConfig, 'password'> {
2092
- password: '<REDACTED>';
2663
+ interface GCalResourceState {
2664
+ type: string;
2665
+ config: GoogleConfigRedacted;
2093
2666
  }
2667
+ declare class GCalResource extends BaseResource implements Resource {
2668
+ readonly kind: string;
2669
+ readonly cachesReads: boolean;
2670
+ readonly indexTtl: number;
2671
+ readonly prompt: string;
2672
+ readonly writePrompt: string;
2673
+ readonly config: GoogleConfig;
2674
+ readonly accessor: GCalAccessor;
2675
+ constructor(config: GoogleConfig);
2676
+ open(): Promise<void>;
2677
+ commands(): readonly RegisteredCommand[];
2678
+ ops(): readonly RegisteredOp[];
2679
+ readFile(p: PathSpec): Promise<Uint8Array>;
2680
+ readdir(p: PathSpec): Promise<string[]>;
2681
+ stat(p: PathSpec): Promise<FileStat>;
2682
+ glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2683
+ getState(): Promise<GCalResourceState>;
2684
+ loadState(_state: GCalResourceState): Promise<void>;
2685
+ }
2686
+
2687
+ declare const EmailConfigSchema: z.ZodObject<{
2688
+ imapHost: z.ZodString;
2689
+ imapPort: z.ZodDefault<z.ZodNumber>;
2690
+ smtpHost: z.ZodString;
2691
+ smtpPort: z.ZodDefault<z.ZodNumber>;
2692
+ username: z.ZodString;
2693
+ password: z.ZodString;
2694
+ useSsl: z.ZodDefault<z.ZodBoolean>;
2695
+ maxMessages: z.ZodDefault<z.ZodNumber>;
2696
+ saveCopy: z.ZodDefault<z.ZodBoolean>;
2697
+ sentFolder: z.ZodDefault<z.ZodNullable<z.ZodString>>;
2698
+ }, z.core.$strip>;
2699
+ type EmailConfig = ConfigOf<typeof EmailConfigSchema>;
2700
+ type EmailConfigRedacted = RedactedConfig<EmailConfig, 'password'>;
2094
2701
  declare function redactEmailConfig(config: EmailConfig): EmailConfigRedacted;
2095
- interface EmailConfigInput {
2096
- imapHost: string;
2097
- imapPort?: number;
2098
- smtpHost: string;
2099
- smtpPort?: number;
2100
- username: string;
2101
- password: string;
2102
- useSsl?: boolean;
2103
- maxMessages?: number;
2104
- }
2702
+ type EmailConfigInput = z.input<typeof EmailConfigSchema>;
2105
2703
  declare function buildEmailConfig(input: EmailConfigInput): EmailConfig;
2106
2704
  declare function normalizeEmailConfig(input: Record<string, unknown>): EmailConfig;
2107
2705
 
@@ -2120,6 +2718,7 @@ interface EmailResourceState {
2120
2718
  declare class EmailResource extends BaseResource implements Resource {
2121
2719
  readonly kind: string;
2122
2720
  readonly cachesReads: boolean;
2721
+ readonly sizesAlwaysKnown: boolean;
2123
2722
  readonly indexTtl: number;
2124
2723
  readonly prompt: string;
2125
2724
  readonly config: EmailConfig;
@@ -2132,19 +2731,111 @@ declare class EmailResource extends BaseResource implements Resource {
2132
2731
  readFile(p: PathSpec): Promise<Uint8Array>;
2133
2732
  readdir(p: PathSpec): Promise<string[]>;
2134
2733
  stat(p: PathSpec): Promise<FileStat>;
2135
- fingerprint(p: PathSpec): Promise<string | null>;
2136
2734
  glob(paths: readonly PathSpec[], prefix?: string): Promise<PathSpec[]>;
2137
2735
  getState(): Promise<EmailResourceState>;
2138
2736
  loadState(_state: EmailResourceState): Promise<void>;
2139
2737
  }
2140
2738
 
2141
- declare const EMAIL_PROMPT = "{prefix}\n <folder>/\n <yyyy-mm-dd>/\n <subject>__<uid>.email.json\n <subject>__<uid>/ # if attachments exist\n <attachment-filename>\n Folders include: INBOX, Sent, Drafts, etc. cat shows email as JSON.";
2142
- declare const EMAIL_WRITE_PROMPT = " Write commands:\n email-send \"to@email.com\" \"subject\" \"body\"\n email-reply <email-path> \"reply body\"\n email-forward <email-path> \"to@email.com\"";
2739
+ declare const EMAIL_PROMPT = "{prefix}\n <folder>/\n <yyyy-mm-dd>/\n <subject>__<uid>.email.json\n <subject>__<uid>/ # if attachments exist\n <attachment-filename>\n Folders include: INBOX, Sent, Drafts, etc. cat shows email as JSON.\n\n To act on mail (list/read/send/reply/forward), use the himalaya CLI\n if installed: himalaya --help";
2740
+ declare const EMAIL_WRITE_PROMPT = " Sending mail goes through the himalaya CLI if installed:\n himalaya message send --to \"to@email.com\" --subject \"Hi\" --body \"...\"";
2143
2741
 
2144
2742
  declare const EMAIL_COMMANDS: readonly RegisteredCommand[];
2145
2743
 
2744
+ declare const HIMALAYA: CLISpec;
2745
+
2146
2746
  declare const EMAIL_OPS: readonly RegisteredOp[];
2147
2747
 
2748
+ /**
2749
+ * Run Python code on a host interpreter as a subprocess.
2750
+ *
2751
+ * Each run spawns `<interpreter> -c <code>`; the code sees the host
2752
+ * filesystem and environment, not the workspace mounts. Mirrors the
2753
+ * python LocalRuntime: the interpreter defaults to `python3` on PATH
2754
+ * (node has no embedded python, unlike the python package which
2755
+ * defaults to its own interpreter); point the config `home` or the
2756
+ * MIRAGE_LOCAL_HOME environment variable at another binary, e.g. a
2757
+ * project venv whose packages the code needs.
2758
+ */
2759
+ declare class LocalRuntime extends PythonRuntime {
2760
+ readonly name = "local";
2761
+ readonly reach = "process";
2762
+ private readonly python;
2763
+ private readonly children;
2764
+ constructor(options?: RuntimeOptions);
2765
+ run(args: RunArgs): Promise<RunResult>;
2766
+ close(): Promise<void>;
2767
+ }
2768
+
2769
+ /** How to reach the user's live E2B sandbox. */
2770
+ interface E2BConfig extends SandboxConfig {
2771
+ /**
2772
+ * Id of a sandbox you created (`e2b sandbox spawn` or the SDK),
2773
+ * booted from a template with fuse3 and mirage installed.
2774
+ */
2775
+ sandboxId: string;
2776
+ /** E2B credential; absent reads E2B_API_KEY. */
2777
+ apiKey?: string;
2778
+ }
2779
+ declare const E2B_CONFIG_KEYS: readonly string[];
2780
+
2781
+ type E2bSdk = typeof e2bSdk;
2782
+ /**
2783
+ * An E2B sandbox the user runs as a whole-line runtime.
2784
+ *
2785
+ * You create the sandbox yourself (`e2b sandbox spawn` or the SDK);
2786
+ * mirage only connects by `sandboxId` and execs lines. `apiKey` falls
2787
+ * back to E2B_API_KEY. E2B's exec reports stdout and stderr
2788
+ * separately, so both stream back real; it takes no stdin, so piped
2789
+ * bytes are uploaded and redirected in.
2790
+ */
2791
+ declare class E2BRuntime extends RemoteSandbox<E2BConfig> {
2792
+ readonly name = "e2b";
2793
+ private sdk;
2794
+ private sandbox;
2795
+ constructor(options?: RuntimeOptions<E2BConfig> | Record<string, unknown>);
2796
+ protected loadSdk(): Promise<E2bSdk>;
2797
+ private ensureSdk;
2798
+ private apiParams;
2799
+ connect(): Promise<void>;
2800
+ execLine(line: string, stdin: Uint8Array | null, env: Record<string, string>, cwd: string): Promise<RunResult>;
2801
+ private upload;
2802
+ }
2803
+
2804
+ /** How to reach the user's running container. */
2805
+ interface DockerConfig extends SandboxConfig {
2806
+ /**
2807
+ * Id or name of a running container. You start it yourself
2808
+ * (`docker run -d ... sleep infinity`); live FUSE mounts need
2809
+ * `--cap-add SYS_ADMIN --device /dev/fuse` and an image with mirage
2810
+ * installed.
2811
+ */
2812
+ container: string;
2813
+ }
2814
+ declare const DOCKER_CONFIG_KEYS: readonly string[];
2815
+
2816
+ interface DockerResult {
2817
+ stdout: Uint8Array;
2818
+ stderr: Uint8Array;
2819
+ code: number;
2820
+ }
2821
+ /**
2822
+ * A container the user runs as a whole-line runtime.
2823
+ *
2824
+ * You start the container yourself; mirage only connects to it and
2825
+ * execs lines. The docker CLI is the transport (Docker Desktop,
2826
+ * colima, or a podman alias all work), so there is no SDK dependency
2827
+ * and no daemon socket wiring; each line is one `docker exec -i` with
2828
+ * the merged environment, the rebased cwd, real stdin, and separated
2829
+ * stderr.
2830
+ */
2831
+ declare class DockerRuntime extends RemoteSandbox<DockerConfig> {
2832
+ readonly name = "docker";
2833
+ constructor(options?: RuntimeOptions<DockerConfig> | Record<string, unknown>);
2834
+ protected docker(args: string[], stdin?: Uint8Array | null): Promise<DockerResult>;
2835
+ connect(): Promise<void>;
2836
+ execLine(line: string, stdin: Uint8Array | null, env: Record<string, string>, cwd: string): Promise<RunResult>;
2837
+ }
2838
+
2148
2839
  /**
2149
2840
  * Construct a resource by registry name. Mirrors Python's
2150
2841
  * `mirage.resource.registry.build_resource`.
@@ -2160,23 +2851,74 @@ declare const EMAIL_OPS: readonly RegisteredOp[];
2160
2851
  */
2161
2852
  type ResourceFactory = (config: Record<string, unknown>) => Promise<Resource>;
2162
2853
  /**
2163
- * Look up the registered names. Lazily-mutated by `register()` so users
2164
- * can extend the registry with custom resources.
2854
+ * Look up every constructible name: builtins plus whatever `register()`
2855
+ * has added.
2165
2856
  */
2166
2857
  declare function knownResources(): string[];
2167
2858
  /**
2168
- * Register a custom resource factory under `name`. Existing entries
2169
- * are overwritten, mirroring Python's mutable REGISTRY dict.
2859
+ * Register a custom resource factory under `name`. Builtin names cannot
2860
+ * be shadowed; re-registering a custom name replaces it. Mirrors
2861
+ * Python's `mirage.resource.registry.register_resource`, which keeps
2862
+ * builtins in REGISTRY and custom entries in a separate _CUSTOM dict so
2863
+ * a plugin cannot replace the builtin `s3` factory.
2170
2864
  */
2171
2865
  declare function register(name: string, factory: ResourceFactory): void;
2172
2866
  /**
2173
- * Build a resource instance by registry name. Throws if the name is
2174
- * unknown.
2867
+ * Build a resource instance by registry name. Builtins win over custom
2868
+ * registrations. Throws if the name is unknown.
2175
2869
  */
2176
2870
  declare function buildResource(name: string, config?: Record<string, unknown>): Promise<Resource>;
2177
2871
 
2872
+ /**
2873
+ * Extensions Node will import from disk. Python's twin tests for a
2874
+ * single one (`.py`) because it has one module language; here `.ts` and
2875
+ * `.mts` ride on Node's own type stripping, which is strip-only: a file
2876
+ * using `enum`, a parameter property, a runtime `namespace` or a legacy
2877
+ * decorator is refused at load with ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX.
2878
+ * `.mjs` is the spelling with no caveats.
2879
+ */
2880
+ declare const MODULE_SUFFIXES: string[];
2881
+ /**
2882
+ * True when a ref's source is a file on disk rather than a package
2883
+ * specifier Node resolves for itself.
2884
+ *
2885
+ * This is Node's own rule, deliberately NOT Python's. Python's twin asks
2886
+ * `"/" in source`, which is sound there because a module dotpath is
2887
+ * dotted, so a slash can only mean a path. In Node a bare specifier
2888
+ * carries slashes all the time (`@scope/pkg`, `pkg/subpath`), so the
2889
+ * same test would rebase an installed package under the config
2890
+ * directory and then report it as a missing file. A path is what Node
2891
+ * calls a path: relative (`./`, `../`) or absolute. The one addition is
2892
+ * a bare filename carrying a module suffix (`tool.mjs`), which mirrors
2893
+ * the convenience Python allows for `tool.py`; it is restricted to
2894
+ * sources with no slash so that `pkg/dist/index.js` stays a subpath
2895
+ * export, and `./dist/index.js` says path by saying so.
2896
+ *
2897
+ * The config loader's `absolutizeCliRef` calls this same function, so
2898
+ * the two cannot disagree about what a path is.
2899
+ */
2900
+ declare function isModulePath(source: string): boolean;
2901
+ /** Split a `source:exportName` ref on its last colon. */
2902
+ declare function splitRef(spec: string): [string, string];
2903
+ /**
2904
+ * Load a module export from a `source:exportName` reference.
2905
+ *
2906
+ * Two forms, auto-detected the way Python's `load_attr` detects them:
2907
+ * a file (`"./my_cli.mjs:TALLY"`) or a package specifier
2908
+ * (`"my-package/clis:JIRA"`). Only a missing file is reworded; every
2909
+ * other load failure propagates with Node's own diagnostic, because a
2910
+ * syntax error in the user's file is the message they need to read.
2911
+ *
2912
+ * A CommonJS file resolves through `default` as well as through named
2913
+ * exports, since cjs-module-lexer only detects some assignment shapes
2914
+ * and `module.exports = { TALLY }` is one it can miss.
2915
+ */
2916
+ declare function loadAttr(spec: string): Promise<unknown>;
2917
+
2178
2918
  declare const DISK_COMMANDS: readonly RegisteredCommand[];
2179
2919
 
2180
2920
  declare const REDIS_COMMANDS: readonly RegisteredCommand[];
2181
2921
 
2182
- export { ALIYUN_PROMPT, type AliyunConfig, type AliyunConfigRedacted, AliyunResource, type AliyunResourceState, BACKBLAZE_PROMPT, type BackblazeConfig, type BackblazeConfigRedacted, BackblazeResource, type BackblazeResourceState, type BoxConfig, type BoxConfigRedacted, BoxResource, type BoxResourceState, CEPH_PROMPT, type CephConfig, type CephConfigRedacted, CephResource, type CephResourceState, DIGITALOCEAN_PROMPT, DISK_COMMANDS, DISK_OPS, DISK_PROMPT, type DatabricksProfile, DatabricksVolumeResource, type DatabricksVolumeResourceState, type DigitalOceanConfig, type DigitalOceanConfigRedacted, DigitalOceanResource, type DigitalOceanResourceState, type DiscordConfig, type DiscordConfigRedacted, DiscordResource, type DiscordResourceState, DiskObserverStore, DiskResource, type DiskResourceOptions, type DiskResourceState, type DropboxConfig, type DropboxConfigRedacted, DropboxResource, type DropboxResourceState, EMAIL_COMMANDS, EMAIL_OPS, EMAIL_PROMPT, EMAIL_WRITE_PROMPT, EmailAccessor, type EmailConfig, type EmailConfigInput, type EmailConfigRedacted, EmailResource, type EmailResourceState, type FuseAttr, type FuseHandle, FuseManager, type MountOptions as FuseMountOptions, type GCSConfig, type GCSConfigRedacted, GCSResource, type GCSResourceState, GCS_ENDPOINT, GCS_PROMPT, type GDocsConfig, type GDocsConfigRedacted, GDocsResource, type GDocsResourceState, type GDriveConfig, type GDriveConfigRedacted, GDriveResource, type GDriveResourceState, type GSheetsConfig, type GSheetsConfigRedacted, GSheetsResource, type GSheetsResourceState, type GSlidesConfig, type GSlidesConfigRedacted, GSlidesResource, type GSlidesResourceState, type GitHubCIConfig, type GitHubCIConfigRedacted, GitHubCIResource, type GitHubCIResourceState, type GitHubConfig, type GitHubConfigRedacted, GitHubResource, type GitHubResourceState, GmailResource, type GmailResourceState, HF_BUCKETS_PROMPT, HF_COMMANDS, HF_DATASETS_PROMPT, HF_ENDPOINT, HF_MODELS_PROMPT, HF_OPS, HF_RESOURCES, HF_SPACES_PROMPT, HfAccessor, HfBucketsAccessor, type HfBucketsConfig, type HfBucketsConfigRedacted, HfBucketsResource, type HfBucketsResourceState, HfDatasetsAccessor, HfDatasetsResource, type HfDatasetsResourceState, HfModelsAccessor, type HfModelsConfig, type HfModelsConfigRedacted, HfModelsResource, type HfModelsResourceState, type HfRepoConfig, type HfRepoConfigRedacted, HfSpacesAccessor, HfSpacesResource, type HfSpacesResourceState, LanceDBResource, type LanceDBResourceOptions, LanceDBStore, type LangfuseConfig, type LangfuseConfigRedacted, LangfuseResource, type LangfuseResourceState, type LinearConfig, type LinearConfigRedacted, LinearResource, type LinearResourceState, MINIO_PROMPT, type MinIOConfig, type MinIOConfigRedacted, MinIOResource, type MinIOResourceState, MirageFS, type MirageFSOptions, MongoDBResource, type MongoDBResourceOptions, MongoDBStore, Mount, type MountSpecOptions, type NodeWorkspaceOptions, type NotionConfig, type NotionConfigRedacted, NotionResource, type NotionResourceState, type OCIConfig, type OCIConfigRedacted, OCIResource, type OCIResourceState, OCI_PROMPT, PostgresResource, type PostgresResourceOptions, PostgresStore, QINGSTOR_PROMPT, type QingStorConfig, type QingStorConfigRedacted, QingStorResource, type QingStorResourceState, type R2Config, type R2ConfigRedacted, R2Resource, type R2ResourceState, R2_PROMPT, REDIS_COMMANDS, REDIS_OPS, REDIS_PROMPT, RedisAccessor, type RedisFileCacheOptions, RedisFileCacheStore, RedisObserverStore, type RedisObserverStoreOptions, RedisResource, type RedisResourceLike, type RedisResourceOptions, type RedisResourceState, RedisStore, type RedisStoreOptions, type ResourceFactory, type S3Config, type S3ConfigRedacted, S3Resource, type S3ResourceState, SCALEWAY_PROMPT, SEAWEEDFS_PROMPT, SSHAccessor, type SSHConfig, type SSHConfigRedacted, SSHResource, type SSHResourceState, SSH_COMMANDS, SSH_OPS, SSH_PROMPT, SUPABASE_PROMPT, type ScalewayConfig, type ScalewayConfigRedacted, ScalewayResource, type ScalewayResourceState, type SeaweedFSConfig, type SeaweedFSConfigRedacted, SeaweedFSResource, type SeaweedFSResourceState, type SlackConfig, type SlackConfigRedacted, SlackResource, type SlackResourceState, type SupabaseConfig, type SupabaseConfigRedacted, SupabaseResource, type SupabaseResourceState, TENCENT_PROMPT, type TencentConfig, type TencentConfigRedacted, TencentResource, type TencentResourceState, type TrelloConfig, type TrelloConfigRedacted, TrelloResource, type TrelloResourceState, WASABI_PROMPT, type WasabiConfig, type WasabiConfigRedacted, WasabiResource, type WasabiResourceState, Workspace, assertHfRepoId, buildEmailConfig, buildResource, fileReadProvision, mount as fuseMount, mountBackground as fuseMountBackground, headTailProvision, isMacosMetadata, knownResources, loadDatabricksProfile, metadataProvision, normalizeBoxConfig, normalizeDiscordConfig, normalizeDropboxConfig, normalizeEmailConfig, normalizeGDocsConfig, normalizeGDriveConfig, normalizeGSheetsConfig, normalizeGSlidesConfig, normalizeGitHubCIConfig, normalizeGitHubConfig, normalizeHfBucketsConfig, normalizeHfModelsConfig, normalizeHfRepoConfig, normalizeLangfuseConfig, normalizeLinearConfig, normalizeNotionConfig, normalizeSlackConfig, normalizeSshConfig, normalizeTrelloConfig, parseDatabricksCfg, patchNodeFs, redactAliyunConfig, redactBackblazeConfig, redactBoxConfig, redactCephConfig, redactDigitalOceanConfig, redactDiscordConfig, redactDropboxConfig, redactEmailConfig, redactGDocsConfig, redactGDriveConfig, redactGSheetsConfig, redactGSlidesConfig, redactGcsConfig, redactGitHubCIConfig, redactGitHubConfig, redactHfBucketsConfig, redactHfModelsConfig, redactHfRepoConfig, redactLangfuseConfig, redactLinearConfig, redactMinIOConfig, redactNotionConfig, redactOciConfig, redactQingStorConfig, redactR2Config, redactConfig as redactS3Config, redactScalewayConfig, redactSeaweedFSConfig, redactSlackConfig, redactSshConfig, redactSupabaseConfig, redactTencentConfig, redactTrelloConfig, redactWasabiConfig, register as registerResourceFactory, resolvedAliyunEndpoint, resolvedBackblazeEndpoint, resolvedDigitalOceanEndpoint, resolvedQingStorEndpoint, resolvedScalewayEndpoint, resolvedSupabaseEndpoint, resolvedTencentEndpoint, resolvedWasabiEndpoint };
2922
+ declare const GRIDFS_COMMANDS: readonly RegisteredCommand[];
2923
+
2924
+ export { ALIYUN_PROMPT, type AliyunConfig, type AliyunConfigRedacted, AliyunResource, type AliyunResourceState, BACKBLAZE_PROMPT, type BackblazeConfig, type BackblazeConfigRedacted, BackblazeResource, type BackblazeResourceState, type BoxConfig, type BoxConfigRedacted, BoxResource, type BoxResourceState, CEPH_PROMPT, type CephConfig, type CephConfigRedacted, CephResource, type CephResourceState, DAYTONA_CONFIG_KEYS, DEFAULT_STATE_ROOT, DIGITALOCEAN_PROMPT, DISK_COMMANDS, DISK_OPS, DISK_PROMPT, DOCKER_CONFIG_KEYS, type DatabricksProfile, DatabricksVolumeResource, type DatabricksVolumeResourceState, type DaytonaConfig, DaytonaRuntime, type DigitalOceanConfig, type DigitalOceanConfigRedacted, DigitalOceanResource, type DigitalOceanResourceState, DiscordResource, type DiscordResourceState, DiskNamespaceStore, DiskObserverStore, DiskRecordClient, DiskResource, type DiskResourceOptions, type DiskResourceState, DiskSessionStore, DiskWorkspaceStateStore, type DiskWorkspaceStateStoreOptions, type DockerConfig, DockerRuntime, type DropboxConfig, type DropboxConfigRedacted, DropboxResource, type DropboxResourceState, type E2BConfig, E2BRuntime, E2B_CONFIG_KEYS, EMAIL_COMMANDS, EMAIL_OPS, EMAIL_PROMPT, EMAIL_WRITE_PROMPT, EmailAccessor, type EmailConfig, type EmailConfigInput, type EmailConfigRedacted, EmailResource, type EmailResourceState, FSKIT_MOUNT_ROOT, type FuseAttr, type FuseHandle, FuseManager, type MountOptions as FuseMountOptions, type GCSConfig, type GCSConfigRedacted, GCSResource, type GCSResourceState, GCS_ENDPOINT, GCS_PROMPT, GCalResource, type GCalResourceState, GDocsResource, type GDocsResourceState, GDriveResource, type GDriveResourceState, GRIDFS_COMMANDS, GSheetsResource, type GSheetsResourceState, GSlidesResource, type GSlidesResourceState, type GitHubCIConfig, type GitHubCIConfigRedacted, GitHubCIResource, type GitHubCIResourceState, type GitHubConfig, type GitHubConfigRedacted, GitHubResource, type GitHubResourceState, GmailResource, type GmailResourceState, GridFSAccessor, type GridFSConfig, type GridFSConfigRedacted, GridFSResource, type GridFSResourceState, HF_BUCKETS_PROMPT, HF_COMMANDS, HF_DATASETS_PROMPT, HF_ENDPOINT, HF_MODELS_PROMPT, HF_OPS, HF_RESOURCES, HF_SPACES_PROMPT, HIMALAYA, HfAccessor, HfBucketsAccessor, type HfBucketsConfig, type HfBucketsConfigRedacted, HfBucketsResource, type HfBucketsResourceState, HfDatasetsAccessor, HfDatasetsResource, type HfDatasetsResourceState, HfModelsAccessor, type HfModelsConfig, type HfModelsConfigRedacted, HfModelsResource, type HfModelsResourceState, type HfRepoConfig, type HfRepoConfigRedacted, HfSpacesAccessor, HfSpacesResource, type HfSpacesResourceState, JaegerResource, type JaegerResourceState, LanceDBResource, type LanceDBResourceOptions, LanceDBStore, type LangfuseConfig, type LangfuseConfigRedacted, LangfuseResource, type LangfuseResourceState, LinearResource, type LinearResourceState, LocalRuntime, MINIO_PROMPT, MODULE_SUFFIXES, type MinIOConfig, type MinIOConfigRedacted, MinIOResource, type MinIOResourceState, MirageFS, type MirageFSOptions, MongoDBResource, type MongoDBResourceOptions, MongoDBStore, Mount, MountCore, type MountCoreOptions, type MountSpecOptions, NEXTCLOUD_COMMANDS, NEXTCLOUD_OPS, NEXTCLOUD_PROMPT, NextcloudAccessor, type NextcloudConfig, type NextcloudConfigRedacted, NextcloudResource, type NextcloudResourceState, NextcloudWalk, type NodeWorkspaceOptions, NotionResource, type NotionResourceState, type OCIConfig, type OCIConfigRedacted, OCIResource, type OCIResourceState, OCI_PROMPT, PostgresResource, type PostgresResourceOptions, PostgresStore, QINGSTOR_PROMPT, type QingStorConfig, type QingStorConfigRedacted, QingStorResource, type QingStorResourceState, type R2Config, type R2ConfigRedacted, R2Resource, type R2ResourceState, R2_PROMPT, REDIS_COMMANDS, REDIS_OPS, REDIS_PROMPT, RedisAccessor, RedisConsoleStore, type RedisConsoleStoreOptions, type RedisFileCacheOptions, RedisFileCacheStore, RedisNamespaceStore, type RedisNamespaceStoreOptions, RedisObserverStore, type RedisObserverStoreOptions, RedisResource, type RedisResourceLike, type RedisResourceOptions, type RedisResourceState, RedisSessionStore, type RedisSessionStoreOptions, RedisStore, type RedisStoreOptions, RedisWorkspaceStateStore, type RedisWorkspaceStateStoreOptions, type ResourceFactory, type S3Config, type S3ConfigRedacted, S3Resource, type S3ResourceState, SCALEWAY_PROMPT, SEAWEEDFS_PROMPT, SSHAccessor, type SSHConfig, type SSHConfigRedacted, SSHResource, type SSHResourceState, SSH_COMMANDS, SSH_OPS, SSH_PROMPT, SUPABASE_PROMPT, type ScalewayConfig, type ScalewayConfigRedacted, ScalewayResource, type ScalewayResourceState, type SeaweedFSConfig, type SeaweedFSConfigRedacted, SeaweedFSResource, type SeaweedFSResourceState, SlackResource, type SlackResourceState, type SupabaseConfig, type SupabaseConfigRedacted, SupabaseResource, type SupabaseResourceState, TENCENT_PROMPT, type TencentConfig, type TencentConfigRedacted, TencentResource, type TencentResourceState, type TrelloConfig, type TrelloConfigRedacted, TrelloResource, type TrelloResourceState, WASABI_PROMPT, type WasabiConfig, type WasabiConfigRedacted, WasabiResource, type WasabiResourceState, Workspace, assertHfRepoId, buildEmailConfig, buildDeltaHook as buildNextcloudDeltaHook, buildResource, checkMountpoint, checkPlatform, checkSizes, classifyErrno, classifyError, fileReadProvision, mount as fuseMount, mountBackground as fuseMountBackground, headTailProvision, isMacosMetadata, isModulePath, knownResources, loadAttr, loadDatabricksProfile, metadataProvision, normalizeBoxConfig, normalizeDropboxConfig, normalizeEmailConfig, normalizeGitHubCIConfig, normalizeGitHubConfig, normalizeGridFSConfig, normalizeHfBucketsConfig, normalizeHfModelsConfig, normalizeHfRepoConfig, normalizeLangfuseConfig, normalizeNextcloudConfig, normalizeS3Config, normalizeSshConfig, normalizeTrelloConfig, parseDatabricksCfg, patchNodeFs, prepareBackend, redactAliyunConfig, redactBackblazeConfig, redactBoxConfig, redactCephConfig, redactDigitalOceanConfig, redactDropboxConfig, redactEmailConfig, redactGcsConfig, redactGitHubCIConfig, redactGitHubConfig, redactHfBucketsConfig, redactHfModelsConfig, redactHfRepoConfig, redactLangfuseConfig, redactMinIOConfig, redactNextcloudConfig, redactOciConfig, redactQingStorConfig, redactR2Config, redactConfig as redactS3Config, redactScalewayConfig, redactSeaweedFSConfig, redactSshConfig, redactSupabaseConfig, redactTencentConfig, redactTrelloConfig, redactWasabiConfig, register as registerResourceFactory, requireKernelBackend, resolveBackend, resolvedAliyunEndpoint, resolvedBackblazeEndpoint, resolvedDigitalOceanEndpoint, resolvedQingStorEndpoint, resolvedScalewayEndpoint, resolvedSupabaseEndpoint, resolvedTencentEndpoint, resolvedWasabiEndpoint, splitRef, unsizedMounts };