@struktoai/mirage-node 0.0.3-alpha.0 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (433) hide show
  1. package/README.md +1 -1
  2. package/dist/aliyun-PGI57A43.js +10 -0
  3. package/dist/backblaze-TSPL6Y56.js +10 -0
  4. package/dist/box-7XTZYDSO.js +8 -0
  5. package/dist/cas.lua +15 -0
  6. package/dist/ceph-C265UI5T.js +10 -0
  7. package/dist/{chunk-IQVNVTOP.js → chunk-25W4XQJZ.js} +5 -5
  8. package/dist/{chunk-QGRDPSAH.js → chunk-2ERLWAGG.js} +4 -2
  9. package/dist/chunk-2ERLWAGG.js.map +1 -0
  10. package/dist/{chunk-NJMGCT63.js → chunk-2QNPKPZZ.js} +7 -2
  11. package/dist/chunk-2QNPKPZZ.js.map +1 -0
  12. package/dist/{chunk-ZNWVJ6UW.js → chunk-3ASOQTZB.js} +7 -2
  13. package/dist/chunk-3ASOQTZB.js.map +1 -0
  14. package/dist/{chunk-ERELJ7BS.js → chunk-3JZN3GYO.js} +14 -13
  15. package/dist/chunk-3JZN3GYO.js.map +1 -0
  16. package/dist/{chunk-DTAY7LPC.js → chunk-4GYB7DGC.js} +295 -706
  17. package/dist/chunk-4GYB7DGC.js.map +1 -0
  18. package/dist/{chunk-G5BZE7UA.js → chunk-4M73WHIE.js} +3 -3
  19. package/dist/{chunk-Q6CDMOM6.js → chunk-4X6CLF4F.js} +3 -3
  20. package/dist/{chunk-3IJSIVKT.js → chunk-5I7Q7RHW.js} +3 -3
  21. package/dist/{chunk-YPT4JBUY.js → chunk-5YRWF5RP.js} +18 -16
  22. package/dist/chunk-5YRWF5RP.js.map +1 -0
  23. package/dist/chunk-5ZHNPNDD.js +944 -0
  24. package/dist/chunk-5ZHNPNDD.js.map +1 -0
  25. package/dist/{chunk-VGLHY6BK.js → chunk-AULFV3KY.js} +1 -2
  26. package/dist/chunk-AULFV3KY.js.map +1 -0
  27. package/dist/{chunk-A4Z6DZ22.js → chunk-BWLUBJQG.js} +20 -16
  28. package/dist/chunk-BWLUBJQG.js.map +1 -0
  29. package/dist/{chunk-OYV2DN66.js → chunk-BWWU5T2D.js} +3 -3
  30. package/dist/chunk-C7TNKIK5.js +39 -0
  31. package/dist/chunk-C7TNKIK5.js.map +1 -0
  32. package/dist/{chunk-HEHERHQ5.js → chunk-CB76WPUS.js} +13 -14
  33. package/dist/chunk-CB76WPUS.js.map +1 -0
  34. package/dist/chunk-CGGO5NKD.js +1194 -0
  35. package/dist/chunk-CGGO5NKD.js.map +1 -0
  36. package/dist/{chunk-B2ZOKNN4.js → chunk-CQCTCW4S.js} +1 -2
  37. package/dist/chunk-CQCTCW4S.js.map +1 -0
  38. package/dist/{chunk-AJICZLHT.js → chunk-CXQGMFI7.js} +3 -3
  39. package/dist/{chunk-LW25LMIH.js → chunk-D3U7VQCG.js} +1 -2
  40. package/dist/{chunk-LW25LMIH.js.map → chunk-D3U7VQCG.js.map} +1 -1
  41. package/dist/{chunk-RQYEEA2O.js → chunk-DXU7NZPH.js} +3 -3
  42. package/dist/{chunk-XGJ2QERC.js → chunk-E3KXVEYI.js} +8 -4
  43. package/dist/chunk-E3KXVEYI.js.map +1 -0
  44. package/dist/{chunk-L6JPBJAS.js → chunk-EGZNOUMH.js} +3 -3
  45. package/dist/{chunk-DNBAMB5J.js → chunk-EVK6HH6Z.js} +1 -2
  46. package/dist/{chunk-DNBAMB5J.js.map → chunk-EVK6HH6Z.js.map} +1 -1
  47. package/dist/{chunk-BYTU2YC3.js → chunk-F5NWRF32.js} +3 -3
  48. package/dist/{chunk-RLGWMJD3.js → chunk-FRGTDZQT.js} +146 -11
  49. package/dist/chunk-FRGTDZQT.js.map +1 -0
  50. package/dist/{chunk-DYXEITK3.js → chunk-GF75O2EN.js} +4 -2
  51. package/dist/chunk-GF75O2EN.js.map +1 -0
  52. package/dist/{chunk-W7FLHT65.js → chunk-GTAS3QVC.js} +1 -2
  53. package/dist/{chunk-W7FLHT65.js.map → chunk-GTAS3QVC.js.map} +1 -1
  54. package/dist/{chunk-RQK5UPMP.js → chunk-H62XQZUM.js} +4 -3
  55. package/dist/chunk-H62XQZUM.js.map +1 -0
  56. package/dist/{chunk-UT2OPSN4.js → chunk-HCU3B6FW.js} +1 -2
  57. package/dist/chunk-HCU3B6FW.js.map +1 -0
  58. package/dist/chunk-HEDE2377.js +754 -0
  59. package/dist/chunk-HEDE2377.js.map +1 -0
  60. package/dist/{chunk-JZQHKDSY.js → chunk-HGIPWY5Y.js} +22 -11
  61. package/dist/chunk-HGIPWY5Y.js.map +1 -0
  62. package/dist/{chunk-Q2IAILVC.js → chunk-HSD24IP2.js} +8 -4
  63. package/dist/chunk-HSD24IP2.js.map +1 -0
  64. package/dist/{chunk-5YOCVEUB.js → chunk-HWQPEBID.js} +19 -15
  65. package/dist/chunk-HWQPEBID.js.map +1 -0
  66. package/dist/{chunk-SFUCUARB.js → chunk-IEHPTILN.js} +4 -4
  67. package/dist/chunk-IEHPTILN.js.map +1 -0
  68. package/dist/{chunk-C6NHEDHY.js → chunk-IEVLWEBO.js} +15 -14
  69. package/dist/chunk-IEVLWEBO.js.map +1 -0
  70. package/dist/{chunk-YUK3X3B4.js → chunk-IKJQOYI4.js} +1 -2
  71. package/dist/{chunk-YUK3X3B4.js.map → chunk-IKJQOYI4.js.map} +1 -1
  72. package/dist/{chunk-MHCMHKM6.js → chunk-IUXXZHY3.js} +17 -23
  73. package/dist/chunk-IUXXZHY3.js.map +1 -0
  74. package/dist/{chunk-ABTEGAFB.js → chunk-JBDFYIN2.js} +13 -14
  75. package/dist/chunk-JBDFYIN2.js.map +1 -0
  76. package/dist/{chunk-A7X4L4JM.js → chunk-JEBH5APX.js} +15 -15
  77. package/dist/chunk-JEBH5APX.js.map +1 -0
  78. package/dist/{chunk-H3BST2LI.js → chunk-JHI2PHHD.js} +1 -2
  79. package/dist/{chunk-H3BST2LI.js.map → chunk-JHI2PHHD.js.map} +1 -1
  80. package/dist/{chunk-EGB7V74Z.js → chunk-KAWDDS27.js} +1 -3
  81. package/dist/chunk-KAWDDS27.js.map +1 -0
  82. package/dist/{chunk-DP2PP5V2.js → chunk-KGC2OGXI.js} +5 -4
  83. package/dist/chunk-KGC2OGXI.js.map +1 -0
  84. package/dist/{chunk-FXFDBF3P.js → chunk-L4GMDSMB.js} +3 -3
  85. package/dist/{chunk-O7ODGJYL.js → chunk-L7FEZ7LU.js} +3 -3
  86. package/dist/{chunk-54NTYJEO.js → chunk-LPDLPRPS.js} +1 -3
  87. package/dist/{chunk-54NTYJEO.js.map → chunk-LPDLPRPS.js.map} +1 -1
  88. package/dist/{chunk-UGK4TAVK.js → chunk-LPLZLSMK.js} +1 -2
  89. package/dist/chunk-LPLZLSMK.js.map +1 -0
  90. package/dist/{chunk-5DLOHQJ2.js → chunk-M6E7VK4D.js} +14 -14
  91. package/dist/chunk-M6E7VK4D.js.map +1 -0
  92. package/dist/{chunk-2CC5VW7K.js → chunk-MIQ3ECZM.js} +4 -2
  93. package/dist/chunk-MIQ3ECZM.js.map +1 -0
  94. package/dist/chunk-MRXTUFBZ.js +30 -0
  95. package/dist/chunk-MRXTUFBZ.js.map +1 -0
  96. package/dist/{chunk-RO5IQEDQ.js → chunk-NJ42VNXG.js} +1 -2
  97. package/dist/chunk-NJ42VNXG.js.map +1 -0
  98. package/dist/{chunk-3T3RMDNX.js → chunk-NLXJMXVE.js} +3 -3
  99. package/dist/{chunk-E2ISWXLB.js → chunk-OQKNDS66.js} +1 -1
  100. package/dist/{chunk-E2ISWXLB.js.map → chunk-OQKNDS66.js.map} +1 -1
  101. package/dist/chunk-OSVZKYXS.js +946 -0
  102. package/dist/chunk-OSVZKYXS.js.map +1 -0
  103. package/dist/{chunk-LYDMMNL2.js → chunk-RHUEV4I7.js} +12 -13
  104. package/dist/chunk-RHUEV4I7.js.map +1 -0
  105. package/dist/{chunk-JALIYI6M.js → chunk-S4KVLPBR.js} +7 -2
  106. package/dist/chunk-S4KVLPBR.js.map +1 -0
  107. package/dist/{chunk-XRU5WXZX.js → chunk-SAOQW6ZJ.js} +15 -15
  108. package/dist/chunk-SAOQW6ZJ.js.map +1 -0
  109. package/dist/{chunk-CASCUFK2.js → chunk-SI4GMRXD.js} +14 -15
  110. package/dist/chunk-SI4GMRXD.js.map +1 -0
  111. package/dist/{chunk-HQ4KWN76.js → chunk-SYMNWNC3.js} +3 -3
  112. package/dist/{chunk-PJBQKMCD.js → chunk-TUNR4VUM.js} +3 -3
  113. package/dist/{chunk-XHCBHYN4.js → chunk-UAJYJP5C.js} +7 -2
  114. package/dist/chunk-UAJYJP5C.js.map +1 -0
  115. package/dist/{chunk-OPYQ5KIO.js → chunk-UYA3XL3J.js} +4 -2
  116. package/dist/chunk-UYA3XL3J.js.map +1 -0
  117. package/dist/{chunk-WL7HS7EM.js → chunk-V7JVMG63.js} +3 -3
  118. package/dist/{chunk-LAJJPLEV.js → chunk-VBYIDRNU.js} +7 -3
  119. package/dist/chunk-VBYIDRNU.js.map +1 -0
  120. package/dist/{chunk-NHS7WLEQ.js → chunk-VHED2STW.js} +11 -8
  121. package/dist/chunk-VHED2STW.js.map +1 -0
  122. package/dist/{chunk-JZT4QGIP.js → chunk-VIICUPWQ.js} +1 -2
  123. package/dist/{chunk-JZT4QGIP.js.map → chunk-VIICUPWQ.js.map} +1 -1
  124. package/dist/{chunk-TRTUHCS4.js → chunk-VLRSOWHP.js} +17 -15
  125. package/dist/chunk-VLRSOWHP.js.map +1 -0
  126. package/dist/chunk-W5ZLIQFR.js +764 -0
  127. package/dist/chunk-W5ZLIQFR.js.map +1 -0
  128. package/dist/{chunk-YGZMVNN5.js → chunk-WTSSEUOZ.js} +7 -2
  129. package/dist/chunk-WTSSEUOZ.js.map +1 -0
  130. package/dist/{chunk-OHROA3FQ.js → chunk-WWP2STF5.js} +7 -2
  131. package/dist/chunk-WWP2STF5.js.map +1 -0
  132. package/dist/{chunk-C6NHFMIP.js → chunk-XADEMW6B.js} +3 -3
  133. package/dist/{chunk-KTNDT45N.js → chunk-XEMLYWHK.js} +3 -3
  134. package/dist/{chunk-OZAEWZZ3.js → chunk-XFSEADPC.js} +6 -2
  135. package/dist/chunk-XFSEADPC.js.map +1 -0
  136. package/dist/{chunk-TWGVQLG2.js → chunk-XUUSWR4U.js} +1 -2
  137. package/dist/{chunk-TWGVQLG2.js.map → chunk-XUUSWR4U.js.map} +1 -1
  138. package/dist/{chunk-XLQI4IT2.js → chunk-YBVMZ7SR.js} +7 -2
  139. package/dist/chunk-YBVMZ7SR.js.map +1 -0
  140. package/dist/{chunk-E7RW3SBV.js → chunk-YRJICL2Q.js} +15 -15
  141. package/dist/chunk-YRJICL2Q.js.map +1 -0
  142. package/dist/{chunk-B6SXRCBO.js → chunk-ZM44MGC5.js} +3 -3
  143. package/dist/{chunk-YAVGCQUP.js → chunk-ZMREYTHA.js} +16 -15
  144. package/dist/chunk-ZMREYTHA.js.map +1 -0
  145. package/dist/{chunk-H3I2KZIY.js → chunk-ZPB3SLPK.js} +1 -2
  146. package/dist/{chunk-H3I2KZIY.js.map → chunk-ZPB3SLPK.js.map} +1 -1
  147. package/dist/chunk-ZPZQXHW2.js +1230 -0
  148. package/dist/chunk-ZPZQXHW2.js.map +1 -0
  149. package/dist/{config-34LHOGLM.js → config-2LASFFRD.js} +2 -4
  150. package/dist/config-3WDIJPTG.js +9 -0
  151. package/dist/config-4QV4QYI5.js +9 -0
  152. package/dist/{config-ZFJYQZCH.js → config-54USUVSE.js} +2 -4
  153. package/dist/config-5ZXN2T2H.js +9 -0
  154. package/dist/config-A2GQYJDB.js +9 -0
  155. package/dist/config-BBOLI7VE.js +9 -0
  156. package/dist/{config-VM526IKB.js → config-BIBFLUIR.js} +2 -4
  157. package/dist/{config-EO23EY62.js → config-CPYFOUQO.js} +2 -4
  158. package/dist/{config-3IVQJBNW.js → config-DWSJL3NH.js} +2 -4
  159. package/dist/config-E22XAGYN.js +9 -0
  160. package/dist/config-EHE52ZTK.js +9 -0
  161. package/dist/{config-GE4W4ZJC.js → config-EX3ZJTZI.js} +2 -4
  162. package/dist/{config-QNMKWJ4M.js → config-FRK7ZL37.js} +2 -4
  163. package/dist/{config-LHFFXVYI.js → config-HQXNFQZS.js} +2 -4
  164. package/dist/config-HTXOOAOD.js +9 -0
  165. package/dist/{config-HKRMKD76.js → config-IPNWAJHH.js} +2 -4
  166. package/dist/config-J2C53GOT.js +9 -0
  167. package/dist/config-K63RX6EU.js +9 -0
  168. package/dist/config-L7SBSH5L.js +9 -0
  169. package/dist/config-LEALEMKA.js +9 -0
  170. package/dist/{config-IVY5EQQ2.js → config-M3Z47VYU.js} +2 -4
  171. package/dist/{config-EIHSP5DZ.js → config-MZM3IPFM.js} +2 -4
  172. package/dist/{config-GHRUKEQ6.js → config-OJ2BPESH.js} +2 -4
  173. package/dist/{config-WDAZFXYD.js → config-QO2XUME4.js} +2 -4
  174. package/dist/config-QWQGOXQ5.js +9 -0
  175. package/dist/config-RI7IEZUF.js +9 -0
  176. package/dist/{config-CVZ2AGCO.js → config-SPW6NESU.js} +2 -6
  177. package/dist/{config-QAA646XB.js → config-T2IUIU5C.js} +2 -4
  178. package/dist/{config-NV5WXP64.js → config-UU27ALAA.js} +2 -4
  179. package/dist/config-VKKZGC7V.js +9 -0
  180. package/dist/config-W7EVPJNK.js +11 -0
  181. package/dist/config-WKQ3FGTZ.js +9 -0
  182. package/dist/config-WVILHDFV.js +11 -0
  183. package/dist/{config-Q45Y46YT.js → config-XU6D5C7E.js} +2 -4
  184. package/dist/databricks_volume-ETRDJVVQ.js +7 -0
  185. package/dist/digitalocean-QP72DR4J.js +10 -0
  186. package/dist/discord-BSN5RB3E.js +8 -0
  187. package/dist/disk-24NWTN2I.js +7 -0
  188. package/dist/dropbox-OSTZXSIE.js +8 -0
  189. package/dist/email-4ZFPSWIN.js +8 -0
  190. package/dist/gcs-PFWR6MIW.js +10 -0
  191. package/dist/gdocs-GPAZRQG5.js +8 -0
  192. package/dist/gdrive-XSX6A7B3.js +8 -0
  193. package/dist/github-EQ4NXUTA.js +8 -0
  194. package/dist/github_ci-QL5B2Q2N.js +8 -0
  195. package/dist/gmail-2TBT4CVH.js +8 -0
  196. package/dist/gridfs-KZRZ6SIB.js +9 -0
  197. package/dist/gsheets-N53WEXN2.js +8 -0
  198. package/dist/gslides-TATSARTH.js +8 -0
  199. package/dist/hf_buckets-BK7NGJWS.js +10 -0
  200. package/dist/hf_datasets-UQ5QGM4L.js +10 -0
  201. package/dist/hf_models-75LFCQCS.js +10 -0
  202. package/dist/hf_spaces-6T2KB3UC.js +10 -0
  203. package/dist/index.d.ts +599 -79
  204. package/dist/index.js +1515 -422
  205. package/dist/index.js.map +1 -1
  206. package/dist/langfuse-AMQCQWNE.js +8 -0
  207. package/dist/linear-V3TXO6CV.js +8 -0
  208. package/dist/minio-IZRZY4C5.js +10 -0
  209. package/dist/mongodb-VMKPQCPX.js +7 -0
  210. package/dist/nextcloud-5RHQCGDO.js +9 -0
  211. package/dist/notion-6PPNTQFM.js +8 -0
  212. package/dist/oci-CKYBSFZJ.js +10 -0
  213. package/dist/postgres-WIQBVL5M.js +7 -0
  214. package/dist/qingstor-AP4IIPLY.js +10 -0
  215. package/dist/r2-C4XGEWQY.js +10 -0
  216. package/dist/redis-6D55Q2WB.js +8 -0
  217. package/dist/s3-XQBI2CXN.js +8 -0
  218. package/dist/scaleway-SEZJVURB.js +10 -0
  219. package/dist/seaweedfs-3XYIAFU2.js +10 -0
  220. package/dist/slack-ZHXDJQY4.js +8 -0
  221. package/dist/ssh-X2MO7JOV.js +8 -0
  222. package/dist/supabase-BBM44UTM.js +10 -0
  223. package/dist/supabase-BBM44UTM.js.map +1 -0
  224. package/dist/tencent-X72USLJ7.js +10 -0
  225. package/dist/tencent-X72USLJ7.js.map +1 -0
  226. package/dist/trello-EER5NG7L.js +8 -0
  227. package/dist/trello-EER5NG7L.js.map +1 -0
  228. package/dist/wasabi-O4MVIUFG.js +10 -0
  229. package/dist/wasabi-O4MVIUFG.js.map +1 -0
  230. package/package.json +9 -5
  231. package/dist/aliyun-TMZRUYCG.js +0 -10
  232. package/dist/backblaze-OHW57DLK.js +0 -10
  233. package/dist/box-UXTCAFOZ.js +0 -8
  234. package/dist/ceph-TNN4I2FT.js +0 -10
  235. package/dist/chunk-2CC5VW7K.js.map +0 -1
  236. package/dist/chunk-5DLOHQJ2.js.map +0 -1
  237. package/dist/chunk-5HCVKTP3.js +0 -2086
  238. package/dist/chunk-5HCVKTP3.js.map +0 -1
  239. package/dist/chunk-5YOCVEUB.js.map +0 -1
  240. package/dist/chunk-A4Z6DZ22.js.map +0 -1
  241. package/dist/chunk-A7X4L4JM.js.map +0 -1
  242. package/dist/chunk-ABTEGAFB.js.map +0 -1
  243. package/dist/chunk-B2ZOKNN4.js.map +0 -1
  244. package/dist/chunk-C6NHEDHY.js.map +0 -1
  245. package/dist/chunk-CASCUFK2.js.map +0 -1
  246. package/dist/chunk-DP2PP5V2.js.map +0 -1
  247. package/dist/chunk-DTAY7LPC.js.map +0 -1
  248. package/dist/chunk-DYXEITK3.js.map +0 -1
  249. package/dist/chunk-E7RW3SBV.js.map +0 -1
  250. package/dist/chunk-EGB7V74Z.js.map +0 -1
  251. package/dist/chunk-ERELJ7BS.js.map +0 -1
  252. package/dist/chunk-HEHERHQ5.js.map +0 -1
  253. package/dist/chunk-JALIYI6M.js.map +0 -1
  254. package/dist/chunk-JZQHKDSY.js.map +0 -1
  255. package/dist/chunk-LAJJPLEV.js.map +0 -1
  256. package/dist/chunk-LYDMMNL2.js.map +0 -1
  257. package/dist/chunk-MHCMHKM6.js.map +0 -1
  258. package/dist/chunk-N72CAZEH.js +0 -1990
  259. package/dist/chunk-N72CAZEH.js.map +0 -1
  260. package/dist/chunk-NHS7WLEQ.js.map +0 -1
  261. package/dist/chunk-NJMGCT63.js.map +0 -1
  262. package/dist/chunk-OHROA3FQ.js.map +0 -1
  263. package/dist/chunk-OPYQ5KIO.js.map +0 -1
  264. package/dist/chunk-OZAEWZZ3.js.map +0 -1
  265. package/dist/chunk-PBBG7VFT.js +0 -1896
  266. package/dist/chunk-PBBG7VFT.js.map +0 -1
  267. package/dist/chunk-Q2IAILVC.js.map +0 -1
  268. package/dist/chunk-QGRDPSAH.js.map +0 -1
  269. package/dist/chunk-RLGWMJD3.js.map +0 -1
  270. package/dist/chunk-RO5IQEDQ.js.map +0 -1
  271. package/dist/chunk-RQK5UPMP.js.map +0 -1
  272. package/dist/chunk-SFUCUARB.js.map +0 -1
  273. package/dist/chunk-TRTUHCS4.js.map +0 -1
  274. package/dist/chunk-U6QSXTUS.js +0 -7
  275. package/dist/chunk-U6QSXTUS.js.map +0 -1
  276. package/dist/chunk-UGK4TAVK.js.map +0 -1
  277. package/dist/chunk-UT2OPSN4.js.map +0 -1
  278. package/dist/chunk-VGLHY6BK.js.map +0 -1
  279. package/dist/chunk-WSGEIVY3.js +0 -1766
  280. package/dist/chunk-WSGEIVY3.js.map +0 -1
  281. package/dist/chunk-XGJ2QERC.js.map +0 -1
  282. package/dist/chunk-XHCBHYN4.js.map +0 -1
  283. package/dist/chunk-XLQI4IT2.js.map +0 -1
  284. package/dist/chunk-XRU5WXZX.js.map +0 -1
  285. package/dist/chunk-YAVGCQUP.js.map +0 -1
  286. package/dist/chunk-YGZMVNN5.js.map +0 -1
  287. package/dist/chunk-YPT4JBUY.js.map +0 -1
  288. package/dist/chunk-ZNWVJ6UW.js.map +0 -1
  289. package/dist/config-3BBWD5AB.js +0 -11
  290. package/dist/config-4UDVSUQJ.js +0 -11
  291. package/dist/config-CMDBAPDH.js +0 -11
  292. package/dist/config-D3RLSPNF.js +0 -11
  293. package/dist/config-DG65OEG3.js +0 -11
  294. package/dist/config-GCQK6NJY.js +0 -11
  295. package/dist/config-GVH27UPE.js +0 -11
  296. package/dist/config-HXVYIXP5.js +0 -11
  297. package/dist/config-IDZMEW73.js +0 -11
  298. package/dist/config-IJJXGLBQ.js +0 -11
  299. package/dist/config-KJOLGVB2.js +0 -11
  300. package/dist/config-KMVCVBYN.js +0 -15
  301. package/dist/config-KYTRXAB2.js +0 -15
  302. package/dist/config-OT2TQQCN.js +0 -11
  303. package/dist/config-QWCY3LBQ.js +0 -11
  304. package/dist/config-ZV6G2ZEC.js +0 -11
  305. package/dist/databricks_volume-HNQ4DJVJ.js +0 -7
  306. package/dist/digitalocean-6SPR4S7V.js +0 -10
  307. package/dist/discord-SAV2RBJV.js +0 -8
  308. package/dist/disk-POACMF4G.js +0 -8
  309. package/dist/dropbox-CQ7MTYX2.js +0 -8
  310. package/dist/email-KBQ7CXS7.js +0 -8
  311. package/dist/gcs-SMIE4VMT.js +0 -10
  312. package/dist/gdocs-X5Y2SIQX.js +0 -8
  313. package/dist/gdrive-SIQPRIGI.js +0 -8
  314. package/dist/github-KBHWANKQ.js +0 -8
  315. package/dist/github_ci-HPITNK37.js +0 -8
  316. package/dist/gmail-DKHAGJNX.js +0 -8
  317. package/dist/gsheets-ZSUDIWGK.js +0 -8
  318. package/dist/gslides-GYXM7IMJ.js +0 -8
  319. package/dist/hf_buckets-RIOMV7WG.js +0 -10
  320. package/dist/hf_datasets-QF4BQ3OK.js +0 -10
  321. package/dist/hf_models-62GC2HPZ.js +0 -10
  322. package/dist/hf_spaces-NVSMUNRM.js +0 -10
  323. package/dist/langfuse-HUAYVPHF.js +0 -8
  324. package/dist/linear-2MM55KBC.js +0 -8
  325. package/dist/minio-L3XE6PQS.js +0 -10
  326. package/dist/mongodb-ZOX4FRHJ.js +0 -7
  327. package/dist/notion-UK4GTMT4.js +0 -8
  328. package/dist/oci-NURLWPL2.js +0 -10
  329. package/dist/postgres-JNFMPAO2.js +0 -7
  330. package/dist/qingstor-W55D5YFO.js +0 -10
  331. package/dist/r2-FSZK7IFI.js +0 -10
  332. package/dist/redis-S6GIPA4Z.js +0 -8
  333. package/dist/s3-GMPUJ65D.js +0 -8
  334. package/dist/scaleway-5VM55Y6D.js +0 -10
  335. package/dist/seaweedfs-J3EPUEPE.js +0 -10
  336. package/dist/slack-FVBXY7KD.js +0 -8
  337. package/dist/ssh-GCXETJ3Z.js +0 -9
  338. package/dist/supabase-HLWNHBBE.js +0 -10
  339. package/dist/tencent-YDO73XBD.js +0 -10
  340. package/dist/trello-CQ53BQUL.js +0 -8
  341. package/dist/wasabi-SOZKPMRQ.js +0 -10
  342. /package/dist/{aliyun-TMZRUYCG.js.map → aliyun-PGI57A43.js.map} +0 -0
  343. /package/dist/{backblaze-OHW57DLK.js.map → backblaze-TSPL6Y56.js.map} +0 -0
  344. /package/dist/{box-UXTCAFOZ.js.map → box-7XTZYDSO.js.map} +0 -0
  345. /package/dist/{ceph-TNN4I2FT.js.map → ceph-C265UI5T.js.map} +0 -0
  346. /package/dist/{chunk-IQVNVTOP.js.map → chunk-25W4XQJZ.js.map} +0 -0
  347. /package/dist/{chunk-G5BZE7UA.js.map → chunk-4M73WHIE.js.map} +0 -0
  348. /package/dist/{chunk-Q6CDMOM6.js.map → chunk-4X6CLF4F.js.map} +0 -0
  349. /package/dist/{chunk-3IJSIVKT.js.map → chunk-5I7Q7RHW.js.map} +0 -0
  350. /package/dist/{chunk-OYV2DN66.js.map → chunk-BWWU5T2D.js.map} +0 -0
  351. /package/dist/{chunk-AJICZLHT.js.map → chunk-CXQGMFI7.js.map} +0 -0
  352. /package/dist/{chunk-RQYEEA2O.js.map → chunk-DXU7NZPH.js.map} +0 -0
  353. /package/dist/{chunk-L6JPBJAS.js.map → chunk-EGZNOUMH.js.map} +0 -0
  354. /package/dist/{chunk-BYTU2YC3.js.map → chunk-F5NWRF32.js.map} +0 -0
  355. /package/dist/{chunk-FXFDBF3P.js.map → chunk-L4GMDSMB.js.map} +0 -0
  356. /package/dist/{chunk-O7ODGJYL.js.map → chunk-L7FEZ7LU.js.map} +0 -0
  357. /package/dist/{chunk-3T3RMDNX.js.map → chunk-NLXJMXVE.js.map} +0 -0
  358. /package/dist/{chunk-HQ4KWN76.js.map → chunk-SYMNWNC3.js.map} +0 -0
  359. /package/dist/{chunk-PJBQKMCD.js.map → chunk-TUNR4VUM.js.map} +0 -0
  360. /package/dist/{chunk-WL7HS7EM.js.map → chunk-V7JVMG63.js.map} +0 -0
  361. /package/dist/{chunk-C6NHFMIP.js.map → chunk-XADEMW6B.js.map} +0 -0
  362. /package/dist/{chunk-KTNDT45N.js.map → chunk-XEMLYWHK.js.map} +0 -0
  363. /package/dist/{chunk-B6SXRCBO.js.map → chunk-ZM44MGC5.js.map} +0 -0
  364. /package/dist/{config-34LHOGLM.js.map → config-2LASFFRD.js.map} +0 -0
  365. /package/dist/{config-3BBWD5AB.js.map → config-3WDIJPTG.js.map} +0 -0
  366. /package/dist/{config-3IVQJBNW.js.map → config-4QV4QYI5.js.map} +0 -0
  367. /package/dist/{config-4UDVSUQJ.js.map → config-54USUVSE.js.map} +0 -0
  368. /package/dist/{config-CMDBAPDH.js.map → config-5ZXN2T2H.js.map} +0 -0
  369. /package/dist/{config-CVZ2AGCO.js.map → config-A2GQYJDB.js.map} +0 -0
  370. /package/dist/{config-D3RLSPNF.js.map → config-BBOLI7VE.js.map} +0 -0
  371. /package/dist/{config-DG65OEG3.js.map → config-BIBFLUIR.js.map} +0 -0
  372. /package/dist/{config-EIHSP5DZ.js.map → config-CPYFOUQO.js.map} +0 -0
  373. /package/dist/{config-EO23EY62.js.map → config-DWSJL3NH.js.map} +0 -0
  374. /package/dist/{config-GCQK6NJY.js.map → config-E22XAGYN.js.map} +0 -0
  375. /package/dist/{config-GE4W4ZJC.js.map → config-EHE52ZTK.js.map} +0 -0
  376. /package/dist/{config-GHRUKEQ6.js.map → config-EX3ZJTZI.js.map} +0 -0
  377. /package/dist/{config-GVH27UPE.js.map → config-FRK7ZL37.js.map} +0 -0
  378. /package/dist/{config-HKRMKD76.js.map → config-HQXNFQZS.js.map} +0 -0
  379. /package/dist/{config-HXVYIXP5.js.map → config-HTXOOAOD.js.map} +0 -0
  380. /package/dist/{config-IDZMEW73.js.map → config-IPNWAJHH.js.map} +0 -0
  381. /package/dist/{config-IJJXGLBQ.js.map → config-J2C53GOT.js.map} +0 -0
  382. /package/dist/{config-IVY5EQQ2.js.map → config-K63RX6EU.js.map} +0 -0
  383. /package/dist/{config-KJOLGVB2.js.map → config-L7SBSH5L.js.map} +0 -0
  384. /package/dist/{config-KMVCVBYN.js.map → config-LEALEMKA.js.map} +0 -0
  385. /package/dist/{config-KYTRXAB2.js.map → config-M3Z47VYU.js.map} +0 -0
  386. /package/dist/{config-LHFFXVYI.js.map → config-MZM3IPFM.js.map} +0 -0
  387. /package/dist/{config-NV5WXP64.js.map → config-OJ2BPESH.js.map} +0 -0
  388. /package/dist/{config-OT2TQQCN.js.map → config-QO2XUME4.js.map} +0 -0
  389. /package/dist/{config-Q45Y46YT.js.map → config-QWQGOXQ5.js.map} +0 -0
  390. /package/dist/{config-QAA646XB.js.map → config-RI7IEZUF.js.map} +0 -0
  391. /package/dist/{config-QNMKWJ4M.js.map → config-SPW6NESU.js.map} +0 -0
  392. /package/dist/{config-QWCY3LBQ.js.map → config-T2IUIU5C.js.map} +0 -0
  393. /package/dist/{config-VM526IKB.js.map → config-UU27ALAA.js.map} +0 -0
  394. /package/dist/{config-WDAZFXYD.js.map → config-VKKZGC7V.js.map} +0 -0
  395. /package/dist/{config-ZFJYQZCH.js.map → config-W7EVPJNK.js.map} +0 -0
  396. /package/dist/{config-ZV6G2ZEC.js.map → config-WKQ3FGTZ.js.map} +0 -0
  397. /package/dist/{databricks_volume-HNQ4DJVJ.js.map → config-WVILHDFV.js.map} +0 -0
  398. /package/dist/{digitalocean-6SPR4S7V.js.map → config-XU6D5C7E.js.map} +0 -0
  399. /package/dist/{discord-SAV2RBJV.js.map → databricks_volume-ETRDJVVQ.js.map} +0 -0
  400. /package/dist/{disk-POACMF4G.js.map → digitalocean-QP72DR4J.js.map} +0 -0
  401. /package/dist/{dropbox-CQ7MTYX2.js.map → discord-BSN5RB3E.js.map} +0 -0
  402. /package/dist/{email-KBQ7CXS7.js.map → disk-24NWTN2I.js.map} +0 -0
  403. /package/dist/{gcs-SMIE4VMT.js.map → dropbox-OSTZXSIE.js.map} +0 -0
  404. /package/dist/{gdocs-X5Y2SIQX.js.map → email-4ZFPSWIN.js.map} +0 -0
  405. /package/dist/{gdrive-SIQPRIGI.js.map → gcs-PFWR6MIW.js.map} +0 -0
  406. /package/dist/{github-KBHWANKQ.js.map → gdocs-GPAZRQG5.js.map} +0 -0
  407. /package/dist/{github_ci-HPITNK37.js.map → gdrive-XSX6A7B3.js.map} +0 -0
  408. /package/dist/{gmail-DKHAGJNX.js.map → github-EQ4NXUTA.js.map} +0 -0
  409. /package/dist/{gsheets-ZSUDIWGK.js.map → github_ci-QL5B2Q2N.js.map} +0 -0
  410. /package/dist/{gslides-GYXM7IMJ.js.map → gmail-2TBT4CVH.js.map} +0 -0
  411. /package/dist/{hf_buckets-RIOMV7WG.js.map → gridfs-KZRZ6SIB.js.map} +0 -0
  412. /package/dist/{hf_datasets-QF4BQ3OK.js.map → gsheets-N53WEXN2.js.map} +0 -0
  413. /package/dist/{hf_models-62GC2HPZ.js.map → gslides-TATSARTH.js.map} +0 -0
  414. /package/dist/{hf_spaces-NVSMUNRM.js.map → hf_buckets-BK7NGJWS.js.map} +0 -0
  415. /package/dist/{langfuse-HUAYVPHF.js.map → hf_datasets-UQ5QGM4L.js.map} +0 -0
  416. /package/dist/{linear-2MM55KBC.js.map → hf_models-75LFCQCS.js.map} +0 -0
  417. /package/dist/{minio-L3XE6PQS.js.map → hf_spaces-6T2KB3UC.js.map} +0 -0
  418. /package/dist/{mongodb-ZOX4FRHJ.js.map → langfuse-AMQCQWNE.js.map} +0 -0
  419. /package/dist/{notion-UK4GTMT4.js.map → linear-V3TXO6CV.js.map} +0 -0
  420. /package/dist/{oci-NURLWPL2.js.map → minio-IZRZY4C5.js.map} +0 -0
  421. /package/dist/{postgres-JNFMPAO2.js.map → mongodb-VMKPQCPX.js.map} +0 -0
  422. /package/dist/{qingstor-W55D5YFO.js.map → nextcloud-5RHQCGDO.js.map} +0 -0
  423. /package/dist/{r2-FSZK7IFI.js.map → notion-6PPNTQFM.js.map} +0 -0
  424. /package/dist/{redis-S6GIPA4Z.js.map → oci-CKYBSFZJ.js.map} +0 -0
  425. /package/dist/{s3-GMPUJ65D.js.map → postgres-WIQBVL5M.js.map} +0 -0
  426. /package/dist/{scaleway-5VM55Y6D.js.map → qingstor-AP4IIPLY.js.map} +0 -0
  427. /package/dist/{seaweedfs-J3EPUEPE.js.map → r2-C4XGEWQY.js.map} +0 -0
  428. /package/dist/{slack-FVBXY7KD.js.map → redis-6D55Q2WB.js.map} +0 -0
  429. /package/dist/{ssh-GCXETJ3Z.js.map → s3-XQBI2CXN.js.map} +0 -0
  430. /package/dist/{supabase-HLWNHBBE.js.map → scaleway-SEZJVURB.js.map} +0 -0
  431. /package/dist/{tencent-YDO73XBD.js.map → seaweedfs-3XYIAFU2.js.map} +0 -0
  432. /package/dist/{trello-CQ53BQUL.js.map → slack-ZHXDJQY4.js.map} +0 -0
  433. /package/dist/{wasabi-SOZKPMRQ.js.map → ssh-X2MO7JOV.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/email/email.ts","../src/accessor/email.ts","../src/commands/builtin/email/index.ts","../src/commands/builtin/email/find.ts","../src/core/email/readdir.ts","../src/core/email/_parse.ts","../src/core/email/_client.ts","../src/core/email/folders.ts","../src/core/email/stat.ts","../src/core/email/read.ts","../src/commands/builtin/email/io.ts","../src/commands/builtin/email/provision.ts","../src/commands/builtin/email/email_forward.ts","../src/core/email/send.ts","../src/commands/builtin/email/grep.ts","../src/core/email/scope.ts","../src/core/email/search.ts","../src/commands/builtin/email/email_read.ts","../src/commands/builtin/email/email_reply.ts","../src/commands/builtin/email/rg.ts","../src/commands/builtin/email/email_send.ts","../src/commands/builtin/email/email_triage.ts","../src/ops/email/index.ts","../src/resource/email/prompt.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BaseResource,\n PathSpec,\n ResourceName,\n makeResolveGlob,\n mountKey,\n mountPrefixOf,\n type FileStat,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n} from '@struktoai/mirage-core'\nimport { EmailAccessor } from '../../accessor/email.ts'\nimport { EMAIL_COMMANDS } from '../../commands/builtin/email/index.ts'\nimport { read as emailRead } from '../../core/email/read.ts'\nimport { readdir as emailReaddir } from '../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../core/email/stat.ts'\nimport { EMAIL_OPS } from '../../ops/email/index.ts'\nimport { redactEmailConfig, type EmailConfig, type EmailConfigRedacted } from './config.ts'\nimport { EMAIL_PROMPT } from './prompt.ts'\n\nconst resolveGlob = makeResolveGlob(emailReaddir)\n\nexport interface EmailResourceState {\n type: string\n config: EmailConfigRedacted\n}\n\nexport class EmailResource extends BaseResource implements Resource {\n readonly kind: string = ResourceName.EMAIL\n readonly cachesReads: boolean = true\n override readonly indexTtl: number = 86_400\n readonly prompt: string = EMAIL_PROMPT\n readonly config: EmailConfig\n readonly accessor: EmailAccessor\n\n constructor(config: EmailConfig) {\n super()\n this.config = config\n this.accessor = new EmailAccessor(config)\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n async close(): Promise<void> {\n await this.accessor.close()\n }\n\n commands(): readonly RegisteredCommand[] {\n return EMAIL_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return EMAIL_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return emailRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return emailReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return emailStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<EmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactEmailConfig(this.config),\n })\n }\n\n loadState(_state: EmailResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { Accessor, loadOptionalPeer } from '@struktoai/mirage-core'\nimport type { ImapFlow } from 'imapflow'\nimport type { EmailConfig } from '../resource/email/config.ts'\n\nexport class EmailAccessor extends Accessor {\n readonly config: EmailConfig\n private clientPromise: Promise<ImapFlow> | null = null\n\n constructor(config: EmailConfig) {\n super()\n this.config = config\n }\n\n async getImap(): Promise<ImapFlow> {\n this.clientPromise ??= (async () => {\n const mod = await loadOptionalPeer(\n () =>\n import('imapflow') as unknown as Promise<{\n ImapFlow: typeof ImapFlow\n }>,\n { feature: 'EmailAccessor', packageName: 'imapflow' },\n )\n const client = new mod.ImapFlow({\n host: this.config.imapHost,\n port: this.config.imapPort,\n secure: this.config.useSsl,\n auth: { user: this.config.username, pass: this.config.password },\n logger: false,\n })\n await client.connect()\n return client\n })()\n try {\n return await this.clientPromise\n } catch (err) {\n this.clientPromise = null\n throw err\n }\n }\n\n async close(): Promise<void> {\n if (this.clientPromise === null) return\n try {\n const c = await this.clientPromise\n await c.logout()\n } catch {\n // ignore — best-effort cleanup\n }\n this.clientPromise = null\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { type RegisteredCommand, ResourceName, makeGenericCommands } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { EMAIL_FIND } from './find.ts'\nimport { EMAIL_FORWARD } from './email_forward.ts'\nimport { EMAIL_GREP } from './grep.ts'\nimport { EMAIL_IO } from './io.ts'\nimport { EMAIL_READ } from './email_read.ts'\nimport { EMAIL_REPLY } from './email_reply.ts'\nimport { EMAIL_RG } from './rg.ts'\nimport { EMAIL_SEND } from './email_send.ts'\nimport { EMAIL_TRIAGE } from './email_triage.ts'\n\nconst EMAIL_OVERRIDES = new Set(['find', 'grep', 'rg'])\n\nexport const EMAIL_COMMANDS: readonly RegisteredCommand[] = [\n ...makeGenericCommands<EmailAccessor>(ResourceName.EMAIL, EMAIL_IO, {\n overrides: EMAIL_OVERRIDES,\n }),\n ...EMAIL_FIND,\n ...EMAIL_GREP,\n ...EMAIL_RG,\n ...EMAIL_SEND,\n ...EMAIL_REPLY,\n ...EMAIL_FORWARD,\n ...EMAIL_TRIAGE,\n ...EMAIL_READ,\n]\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n formatRecords,\n mountKey,\n mountPrefixOf,\n resolveGlobOf,\n rstripSlash,\n specOf,\n stripSlash,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\nimport { EMAIL_IO } from './io.ts'\nimport { metadataProvision } from './provision.ts'\nimport { fnmatch } from '@struktoai/mirage-core'\nimport { findSizeMtimeError, invalidFindArg } from '@struktoai/mirage-core'\n\nconst resolveGlob = resolveGlobOf(EMAIL_IO)\n\nasync function walk(\n accessor: EmailAccessor,\n path: PathSpec,\n index: CommandOpts['index'],\n maxDepth: number | null,\n depth: number,\n): Promise<string[]> {\n if (maxDepth !== null && depth > maxDepth) return []\n let children: string[]\n try {\n children = await emailReaddir(accessor, path, index ?? undefined)\n } catch {\n return []\n }\n const results: string[] = []\n for (const child of children) {\n const trimmed = rstripSlash(child)\n results.push(trimmed)\n const childSpec = new PathSpec({\n virtual: trimmed,\n directory: trimmed,\n resolved: false,\n resourcePath: mountKey(trimmed, mountPrefixOf(path.virtual, path.resourcePath)),\n })\n // readdir emits plain names, so directory-ness comes from stat (served\n // from the index entries the readdir above just wrote).\n let st: FileStat\n try {\n st = await emailStat(accessor, childSpec, index ?? undefined)\n } catch {\n continue\n }\n if (st.type === FileType.DIRECTORY) {\n const sub = await walk(accessor, childSpec, index, maxDepth, depth + 1)\n results.push(...sub)\n }\n }\n return results\n}\n\nasync function findCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const p0 =\n resolved[0] ??\n new PathSpec({\n virtual: '/',\n directory: '/',\n resolved: false,\n resourcePath: '',\n })\n const nameFlag = typeof opts.flags.name === 'string' ? opts.flags.name : null\n const inameFlag = typeof opts.flags.iname === 'string' ? opts.flags.iname : null\n const maxDepthRaw = typeof opts.flags.maxdepth === 'string' ? opts.flags.maxdepth : null\n const minDepthRaw = typeof opts.flags.mindepth === 'string' ? opts.flags.mindepth : null\n const maxDepth = maxDepthRaw !== null ? Number.parseInt(maxDepthRaw, 10) : null\n const minDepth = minDepthRaw !== null ? Number.parseInt(minDepthRaw, 10) : null\n if (maxDepthRaw !== null && Number.isNaN(maxDepth))\n return invalidFindArg(maxDepthRaw, '-maxdepth')\n if (minDepthRaw !== null && Number.isNaN(minDepth))\n return invalidFindArg(minDepthRaw, '-mindepth')\n const sizeFlag = typeof opts.flags.size === 'string' ? opts.flags.size : null\n const mtimeFlag = typeof opts.flags.mtime === 'string' ? opts.flags.mtime : null\n const sizeMtimeErr = findSizeMtimeError(sizeFlag, mtimeFlag)\n if (sizeMtimeErr !== null) return sizeMtimeErr\n\n const allPaths = await walk(accessor, p0, opts.index, maxDepth, 0)\n const searchKey = stripSlash(p0.mountPath)\n const baseDepth = searchKey === '' ? -1 : searchKey.split('/').length - 1\n const results: string[] = []\n for (const p of [...allPaths].sort()) {\n const stripped = p.startsWith(mountPrefixOf(p0.virtual, p0.resourcePath))\n ? p.slice(mountPrefixOf(p0.virtual, p0.resourcePath).length)\n : p\n const trimmed = stripSlash(stripped)\n const depth = trimmed === '' ? -1 : trimmed.split('/').length - (baseDepth + 2)\n if (minDepth !== null && depth < minDepth) continue\n const entryName = p.split('/').pop() ?? p\n if (nameFlag !== null && !fnmatch(entryName, nameFlag)) continue\n if (inameFlag !== null && !fnmatch(entryName.toLowerCase(), inameFlag.toLowerCase())) continue\n results.push(p)\n }\n const out: ByteSource = formatRecords(results)\n return [out, new IOResult()]\n}\n\nexport const EMAIL_FIND = command({\n name: 'find',\n resource: ResourceName.EMAIL,\n spec: specOf('find'),\n fn: findCommand,\n provision: metadataProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport {\n IndexEntry,\n PathSpec as PathSpecCtor,\n mountKey,\n mountPrefixOf,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { fetchHeaders, listMessageUids } from './_client.ts'\nimport { listFolders } from './folders.ts'\nimport type { ParsedAttachment } from './_parse.ts'\n\nconst TITLE_MAX = 80\nconst UNSAFE = /[^\\w\\s\\-.]/g\nconst MULTI_UNDERSCORE = /_+/g\n\nfunction sanitize(text: string): string {\n if (text.trim() === '') return 'No_Subject'\n let cleaned = text.replace(UNSAFE, '_').replace(/ /g, '_')\n cleaned = cleaned.replace(MULTI_UNDERSCORE, '_').replace(/^_+|_+$/g, '')\n if (cleaned.length > TITLE_MAX) cleaned = `${cleaned.slice(0, TITLE_MAX - 3)}...`\n return cleaned\n}\n\nfunction msgFilename(subject: string, uid: string): string {\n return `${sanitize(subject)}__${uid}.email.json`\n}\n\nfunction dateFromHeader(dateStr: string): string {\n if (dateStr === '') return '1970-01-01'\n const d = new Date(dateStr)\n if (Number.isNaN(d.getTime())) return '1970-01-01'\n const yyyy = d.getUTCFullYear().toString().padStart(4, '0')\n const mm = (d.getUTCMonth() + 1).toString().padStart(2, '0')\n const dd = d.getUTCDate().toString().padStart(2, '0')\n return `${yyyy}-${mm}-${dd}`\n}\n\nfunction enoent(p: string): Error {\n const e = new Error(`ENOENT: ${p}`) as Error & { code: string }\n e.code = 'ENOENT'\n return e\n}\n\nexport async function readdir(\n accessor: EmailAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<string[]> {\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n const key = (path.pattern !== null ? path.dir : path).resourcePath\n const virtualKey = key !== '' ? `${prefix}/${key}` : prefix !== '' ? prefix : '/'\n const parts = key === '' ? [] : key.split('/')\n const depth = parts.length\n\n if (depth === 0) {\n if (index !== undefined) {\n const cached = await index.listDir(virtualKey)\n if (cached.entries !== undefined && cached.entries !== null) return cached.entries\n }\n const folders = await listFolders(accessor)\n const entries: [string, IndexEntry][] = []\n for (const folderName of folders) {\n const entry = new IndexEntry({\n id: folderName,\n name: folderName,\n resourceType: 'email/folder',\n vfsName: folderName,\n })\n entries.push([folderName, entry])\n }\n if (index !== undefined) await index.setDir(virtualKey, entries)\n return entries.map(([name]) => `${prefix}/${name}`)\n }\n\n if (depth === 1) {\n const folderName = parts[0] ?? ''\n if (index !== undefined) {\n const cached = await index.listDir(virtualKey)\n if (cached.entries !== undefined && cached.entries !== null) return cached.entries\n }\n if (index === undefined) throw enoent(path.virtual)\n const maxMessages = accessor.config.maxMessages\n const uids = await listMessageUids(accessor, folderName, 'ALL', maxMessages)\n const headersList = await fetchHeaders(accessor, folderName, uids)\n const dateGroups = new Map<string, typeof headersList>()\n for (const hdr of headersList) {\n const dateStr = dateFromHeader(hdr.date)\n let bucket = dateGroups.get(dateStr)\n if (bucket === undefined) {\n bucket = []\n dateGroups.set(dateStr, bucket)\n }\n bucket.push(hdr)\n }\n const sortedDates = [...dateGroups.keys()].sort().reverse()\n const dateEntries: [string, IndexEntry][] = []\n for (const dateStr of sortedDates) {\n const dateEntry = new IndexEntry({\n id: dateStr,\n name: dateStr,\n resourceType: 'email/date',\n vfsName: dateStr,\n })\n dateEntries.push([dateStr, dateEntry])\n const msgEntries: [string, IndexEntry][] = []\n for (const hdr of dateGroups.get(dateStr) ?? []) {\n const uid = hdr.uid\n const subject = hdr.subject || 'No Subject'\n const filename = msgFilename(subject, uid)\n const msgEntry = new IndexEntry({\n id: uid,\n name: subject,\n resourceType: 'email/message',\n vfsName: filename,\n })\n msgEntries.push([filename, msgEntry])\n const attachments: ParsedAttachment[] = hdr.attachments\n if (attachments.length > 0) {\n const attDirName = filename.replace('.email.json', '')\n const attDirEntry = new IndexEntry({\n id: uid,\n name: attDirName,\n resourceType: 'email/attachment_dir',\n vfsName: attDirName,\n })\n msgEntries.push([attDirName, attDirEntry])\n const attEntries: [string, IndexEntry][] = []\n for (const att of attachments) {\n const attEntry = new IndexEntry({\n id: att.filename,\n name: att.filename,\n resourceType: 'email/attachment',\n vfsName: att.filename,\n size: att.size,\n })\n attEntries.push([att.filename, attEntry])\n }\n const attDirVKey = `${virtualKey}/${dateStr}/${attDirName}`\n await index.setDir(attDirVKey, attEntries)\n }\n }\n const dateVKey = `${virtualKey}/${dateStr}`\n await index.setDir(dateVKey, msgEntries)\n }\n await index.setDir(virtualKey, dateEntries)\n return dateEntries.map(([name]) => `${prefix}/${key}/${name}`)\n }\n\n if (depth === 2 || depth === 3) {\n if (index === undefined) throw enoent(path.virtual)\n let cached = await index.listDir(virtualKey)\n if (cached.entries !== undefined && cached.entries !== null) return cached.entries\n const folderPath = prefix !== '' ? `${prefix}/${parts[0] ?? ''}` : `/${parts[0] ?? ''}`\n const folderSpec = new PathSpecCtor({\n virtual: folderPath,\n directory: folderPath,\n resourcePath: mountKey(folderPath, prefix),\n })\n await readdir(accessor, folderSpec, index)\n cached = await index.listDir(virtualKey)\n if (cached.entries !== undefined && cached.entries !== null) return cached.entries\n throw enoent(path.virtual)\n }\n\n throw enoent(path.virtual)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { loadOptionalPeer } from '@struktoai/mirage-core'\nimport type {\n AddressObject,\n EmailAddress as MailparserEmailAddress,\n ParsedMail,\n simpleParser,\n} from 'mailparser'\n\ninterface EmailAddress {\n name: string\n email: string\n}\n\nexport interface ParsedAttachment {\n filename: string\n content_type: string\n size: number\n}\n\nexport interface ParsedAttachmentWithPayload extends ParsedAttachment {\n payload: Uint8Array\n}\n\nexport interface ParsedRfc822 {\n from: EmailAddress\n to: EmailAddress[]\n cc: EmailAddress[]\n subject: string\n date: string\n body_text: string\n body_html: string\n snippet: string\n message_id: string\n in_reply_to: string | null\n references: string[]\n has_attachments: boolean\n attachments: ParsedAttachment[]\n}\n\nlet parserPromise: Promise<typeof simpleParser> | null = null\n\nasync function getParser(): Promise<typeof simpleParser> {\n parserPromise ??= (async () => {\n const mod = await loadOptionalPeer(\n () =>\n import('mailparser') as unknown as Promise<{\n simpleParser: typeof simpleParser\n }>,\n { feature: 'parseRfc822', packageName: 'mailparser' },\n )\n return mod.simpleParser\n })()\n return parserPromise\n}\n\nfunction toAddr(a: MailparserEmailAddress | undefined): EmailAddress {\n if (a === undefined) return { name: '', email: '' }\n return { name: a.name, email: a.address ?? '' }\n}\n\nfunction toAddrList(list: AddressObject | AddressObject[] | undefined): EmailAddress[] {\n if (list === undefined) return []\n const objs = Array.isArray(list) ? list : [list]\n return objs.flatMap((obj) => obj.value.map((a) => toAddr(a)))\n}\n\n// The rendered date must be the raw Date header text (python serves the\n// header untouched); mailparser's parsed.date would re-format it.\nfunction rawDateHeader(parsed: ParsedMail): string {\n const found = parsed.headerLines.find((h) => h.key === 'date')\n if (found === undefined) return ''\n const colon = found.line.indexOf(':')\n return colon === -1 ? '' : found.line.slice(colon + 1).trim()\n}\n\nfunction fromParsed(parsed: ParsedMail, headersOnly: boolean): ParsedRfc822 {\n const text = headersOnly ? '' : (parsed.text ?? '')\n const html = headersOnly ? '' : typeof parsed.html === 'string' ? parsed.html : ''\n const attachments = headersOnly\n ? []\n : parsed.attachments.map((a) => ({\n filename: a.filename ?? 'unnamed',\n content_type: a.contentType,\n size: a.size,\n }))\n const refsRaw = parsed.references\n const references =\n typeof refsRaw === 'string' ? refsRaw.split(/\\s+/).filter((s) => s !== '') : (refsRaw ?? [])\n return {\n from: toAddr(parsed.from?.value[0]),\n to: toAddrList(parsed.to),\n cc: toAddrList(parsed.cc),\n subject: parsed.subject ?? '',\n date: rawDateHeader(parsed),\n body_text: text,\n body_html: html,\n snippet: text.slice(0, 100),\n message_id: parsed.messageId ?? '',\n in_reply_to:\n typeof parsed.inReplyTo === 'string' && parsed.inReplyTo !== '' ? parsed.inReplyTo : null,\n references,\n has_attachments: attachments.length > 0,\n attachments,\n }\n}\n\nexport async function parseRfc822(raw: Uint8Array, headersOnly = false): Promise<ParsedRfc822> {\n const parser = await getParser()\n const parsed = await parser(Buffer.from(raw), { skipHtmlToText: false })\n return fromParsed(parsed, headersOnly)\n}\n\nexport async function parseWithPayloads(raw: Uint8Array): Promise<ParsedAttachmentWithPayload[]> {\n const parser = await getParser()\n const parsed = await parser(Buffer.from(raw))\n return parsed.attachments.map((a) => ({\n filename: a.filename ?? 'unnamed',\n content_type: a.contentType,\n size: a.size,\n payload: new Uint8Array(a.content),\n }))\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { parseRfc822, parseWithPayloads, type ParsedRfc822 } from './_parse.ts'\n\nexport interface FetchedMessage extends ParsedRfc822 {\n uid: string\n flags: string[]\n}\n\nexport async function listFolders(accessor: EmailAccessor): Promise<string[]> {\n const imap = await accessor.getImap()\n const tree = await imap.list()\n return tree.map((m) => m.pathAsListed)\n}\n\nexport async function listMessageUids(\n accessor: EmailAccessor,\n folder: string,\n searchCriteria = 'ALL',\n maxResults: number | null = null,\n): Promise<string[]> {\n const imap = await accessor.getImap()\n const lock = await imap.getMailboxLock(folder)\n try {\n const query = parseSearchCriteria(searchCriteria)\n const uidsRaw = await imap.search(query, { uid: true })\n if (uidsRaw === false) return []\n const uids = uidsRaw.map((n) => String(n))\n if (maxResults !== null && uids.length > maxResults) {\n return uids.slice(uids.length - maxResults)\n }\n return uids\n } finally {\n lock.release()\n }\n}\n\ninterface SearchQuery {\n all?: boolean\n unseen?: boolean\n body?: string\n text?: string\n subject?: string\n from?: string\n to?: string\n since?: Date\n before?: Date\n}\n\nfunction parseSearchCriteria(criteria: string): SearchQuery {\n if (criteria === 'ALL' || criteria === '') return { all: true }\n const out: SearchQuery = {}\n const tokens = tokenizeCriteria(criteria)\n let i = 0\n while (i < tokens.length) {\n const tok = (tokens[i] ?? '').toUpperCase()\n if (tok === 'UNSEEN') {\n out.unseen = true\n i += 1\n continue\n }\n if (\n tok === 'TEXT' ||\n tok === 'SUBJECT' ||\n tok === 'FROM' ||\n tok === 'TO' ||\n tok === 'SINCE' ||\n tok === 'BEFORE'\n ) {\n const v = tokens[i + 1] ?? ''\n if (tok === 'TEXT') out.text = v\n else if (tok === 'SUBJECT') out.subject = v\n else if (tok === 'FROM') out.from = v\n else if (tok === 'TO') out.to = v\n else if (tok === 'SINCE') {\n const d = parseImapDate(v)\n if (d !== null) out.since = d\n } else {\n const d = parseImapDate(v)\n if (d !== null) out.before = d\n }\n i += 2\n continue\n }\n i += 1\n }\n return out\n}\n\nfunction tokenizeCriteria(criteria: string): string[] {\n const tokens: string[] = []\n let i = 0\n while (i < criteria.length) {\n if (criteria[i] === ' ') {\n i += 1\n continue\n }\n if (criteria[i] === '\"') {\n const end = criteria.indexOf('\"', i + 1)\n if (end === -1) {\n tokens.push(criteria.slice(i + 1))\n break\n }\n tokens.push(criteria.slice(i + 1, end))\n i = end + 1\n continue\n }\n let end = criteria.indexOf(' ', i)\n if (end === -1) end = criteria.length\n tokens.push(criteria.slice(i, end))\n i = end\n }\n return tokens\n}\n\nfunction parseImapDate(s: string): Date | null {\n const m = /^(\\d{1,2})-([A-Za-z]{3})-(\\d{4})$/.exec(s)\n if (m === null) return null\n const months: Record<string, number> = {\n Jan: 0,\n Feb: 1,\n Mar: 2,\n Apr: 3,\n May: 4,\n Jun: 5,\n Jul: 6,\n Aug: 7,\n Sep: 8,\n Oct: 9,\n Nov: 10,\n Dec: 11,\n }\n const day = Number.parseInt(m[1] ?? '0', 10)\n const monKey = (m[2] ?? '').slice(0, 1).toUpperCase() + (m[2] ?? '').slice(1).toLowerCase()\n const mon = months[monKey] ?? 0\n const year = Number.parseInt(m[3] ?? '1970', 10)\n return new Date(Date.UTC(year, mon, day))\n}\n\nexport async function fetchMessage(\n accessor: EmailAccessor,\n folder: string,\n uid: string,\n): Promise<FetchedMessage> {\n const imap = await accessor.getImap()\n const lock = await imap.getMailboxLock(folder)\n try {\n const msg = await imap.fetchOne(uid, { source: true, flags: true, uid: true }, { uid: true })\n if (msg === false) {\n throw new Error(`email: uid ${uid} not found in ${folder}`)\n }\n const source = msg.source instanceof Buffer ? new Uint8Array(msg.source) : new Uint8Array(0)\n const parsed = await parseRfc822(source)\n return {\n ...parsed,\n uid,\n flags: msg.flags !== undefined ? [...msg.flags] : [],\n }\n } finally {\n lock.release()\n }\n}\n\nexport async function fetchHeaders(\n accessor: EmailAccessor,\n folder: string,\n uids: readonly string[],\n): Promise<FetchedMessage[]> {\n if (uids.length === 0) return []\n const imap = await accessor.getImap()\n const lock = await imap.getMailboxLock(folder)\n try {\n const results: FetchedMessage[] = []\n for (const uid of uids) {\n // Full source (not headers-only): listings need the MIME structure\n // to surface attachment dirs, mirroring the python backend.\n const msg = await imap.fetchOne(uid, { source: true, flags: true, uid: true }, { uid: true })\n if (msg === false) continue\n const source = msg.source instanceof Buffer ? new Uint8Array(msg.source) : new Uint8Array(0)\n const parsed = await parseRfc822(source)\n results.push({\n ...parsed,\n uid,\n flags: msg.flags !== undefined ? [...msg.flags] : [],\n })\n }\n return results\n } finally {\n lock.release()\n }\n}\n\nexport async function fetchAttachment(\n accessor: EmailAccessor,\n folder: string,\n uid: string,\n filename: string,\n): Promise<Uint8Array | null> {\n const imap = await accessor.getImap()\n const lock = await imap.getMailboxLock(folder)\n try {\n const msg = await imap.fetchOne(uid, { source: true }, { uid: true })\n if (msg === false) return null\n const source = msg.source instanceof Buffer ? new Uint8Array(msg.source) : new Uint8Array(0)\n const attachments = await parseWithPayloads(source)\n for (const att of attachments) {\n if (att.filename === filename) return att.payload\n }\n return null\n } finally {\n lock.release()\n }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { listFolders as clientListFolders } from './_client.ts'\n\nexport async function listFolders(accessor: EmailAccessor): Promise<string[]> {\n return clientListFolders(accessor)\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { IndexCacheStore } from '@struktoai/mirage-core'\nimport { FileStat, FileType, PathSpec, mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { listFolders } from './folders.ts'\nimport { readdir } from './readdir.ts'\n\nfunction guessType(name: string): FileType {\n const lower = name.toLowerCase()\n if (lower.endsWith('.json') || lower.endsWith('.email.json')) return FileType.JSON\n if (lower.endsWith('.csv')) return FileType.CSV\n if (lower.endsWith('.png')) return FileType.IMAGE_PNG\n if (lower.endsWith('.jpg') || lower.endsWith('.jpeg')) return FileType.IMAGE_JPEG\n if (lower.endsWith('.gif')) return FileType.IMAGE_GIF\n if (lower.endsWith('.zip')) return FileType.ZIP\n if (lower.endsWith('.gz') || lower.endsWith('.gzip')) return FileType.GZIP\n if (lower.endsWith('.pdf')) return FileType.PDF\n if (lower.endsWith('.txt') || lower.endsWith('.md') || lower.endsWith('.log')) {\n return FileType.TEXT\n }\n return FileType.BINARY\n}\n\nfunction enoent(p: string): Error {\n const e = new Error(`ENOENT: ${p}`) as Error & { code: string }\n e.code = 'ENOENT'\n return e\n}\n\nexport async function stat(\n accessor: EmailAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<FileStat> {\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n const key = path.resourcePath\n if (key === '') return new FileStat({ name: '/', type: FileType.DIRECTORY })\n\n if (index === undefined) throw enoent(path.virtual)\n const virtualKey = prefix !== '' ? `${prefix}/${key}` : `/${key}`\n let result = await index.get(virtualKey)\n if (result.entry === undefined || result.entry === null) {\n if (!key.includes('/')) {\n const folders = await listFolders(accessor)\n if (folders.includes(key)) return new FileStat({ name: key, type: FileType.DIRECTORY })\n throw enoent(path.virtual)\n }\n // Cold index: populate by listing the parent, mirroring the python\n // backend's stat fallback.\n const parentVirtual = virtualKey.slice(0, virtualKey.lastIndexOf('/')) || '/'\n try {\n await readdir(\n accessor,\n new PathSpec({\n virtual: parentVirtual,\n directory: parentVirtual,\n resolved: false,\n resourcePath: mountKey(parentVirtual, prefix),\n }),\n index,\n )\n } catch {\n throw enoent(path.virtual)\n }\n result = await index.get(virtualKey)\n if (result.entry === undefined || result.entry === null) throw enoent(path.virtual)\n }\n const rt = result.entry.resourceType\n const vfsName = result.entry.vfsName !== '' ? result.entry.vfsName : result.entry.name\n if (rt === 'email/folder') return new FileStat({ name: vfsName, type: FileType.DIRECTORY })\n if (rt === 'email/date') return new FileStat({ name: vfsName, type: FileType.DIRECTORY })\n if (rt === 'email/message') {\n return new FileStat({\n name: vfsName,\n type: FileType.JSON,\n size: result.entry.size,\n extra: { uid: result.entry.id },\n })\n }\n if (rt === 'email/attachment_dir') {\n return new FileStat({\n name: vfsName,\n type: FileType.DIRECTORY,\n extra: { uid: result.entry.id },\n })\n }\n if (rt === 'email/attachment') {\n return new FileStat({\n name: vfsName,\n type: guessType(vfsName),\n size: result.entry.size,\n extra: { attachment_id: result.entry.id },\n })\n }\n return new FileStat({ name: vfsName, type: FileType.JSON, extra: { uid: result.entry.id } })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { fetchAttachment, fetchMessage } from './_client.ts'\nimport { gnuDirname, mountPrefixOf, stripSlash } from '@struktoai/mirage-core'\n\nconst ENC = new TextEncoder()\n\nfunction enoent(p: string): Error {\n const e = new Error(`ENOENT: ${p}`) as Error & { code: string }\n e.code = 'ENOENT'\n return e\n}\n\nfunction eisdir(p: string): Error {\n const e = new Error(`EISDIR: ${p}`) as Error & { code: string }\n e.code = 'EISDIR'\n return e\n}\n\nexport async function read(\n accessor: EmailAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<Uint8Array> {\n const prefix = mountPrefixOf(path.virtual, path.resourcePath)\n const key = path.resourcePath\n if (index === undefined) throw enoent(path.virtual)\n const virtualKey = prefix !== '' ? `${prefix}/${key}` : `/${key}`\n const result = await index.get(virtualKey)\n if (result.entry === undefined || result.entry === null) throw enoent(path.virtual)\n const rt = result.entry.resourceType\n if (rt === 'email/folder' || rt === 'email/date' || rt === 'email/attachment_dir') {\n throw eisdir(path.virtual)\n }\n if (rt === 'email/attachment') {\n const parentKey = gnuDirname(virtualKey)\n const parentResult = await index.get(parentKey)\n if (parentResult.entry === undefined || parentResult.entry === null) {\n throw enoent(path.virtual)\n }\n const uid = parentResult.entry.id\n const parts = stripSlash(virtualKey).split('/')\n const folder = prefix !== '' ? (parts[1] ?? '') : (parts[0] ?? '')\n const filename = result.entry.vfsName !== '' ? result.entry.vfsName : result.entry.name\n const data = await fetchAttachment(accessor, folder, uid, filename)\n if (data === null) throw enoent(path.virtual)\n return data\n }\n const parts = stripSlash(virtualKey).split('/')\n const folder = prefix !== '' ? (parts[1] ?? '') : (parts[0] ?? '')\n const uid = result.entry.id\n const msg = await fetchMessage(accessor, folder, uid)\n return ENC.encode(JSON.stringify(msg))\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { CommandIO, IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\n\nasync function* emailReadStream(\n accessor: EmailAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): AsyncIterable<Uint8Array> {\n yield await emailRead(accessor, path, index)\n}\n\nexport const EMAIL_IO: CommandIO<EmailAccessor> = {\n readdir: emailReaddir,\n readBytes: emailRead,\n readStream: emailReadStream,\n stat: emailStat,\n isMounted: () => true,\n local: false,\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n Precision,\n ProvisionResult,\n type Accessor,\n type CommandOpts,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\n\nexport async function fileReadProvision(\n _accessor: Accessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<ProvisionResult> {\n if (paths.length === 0) return new ProvisionResult({ precision: Precision.UNKNOWN })\n const index: IndexCacheStore | undefined = opts.index ?? undefined\n let ops = 0\n if (index !== undefined) {\n for (const p of paths) {\n const lookup = await index.get(p.virtual)\n if (lookup.entry !== undefined && lookup.entry !== null) ops += 1\n }\n }\n return new ProvisionResult({\n networkReadLow: 0,\n networkReadHigh: 0,\n readOps: ops,\n precision: Precision.EXACT,\n })\n}\n\nexport function metadataProvision(\n _accessor: Accessor,\n _paths: PathSpec[],\n _texts: string[],\n _opts: CommandOpts,\n): ProvisionResult {\n return new ProvisionResult({\n networkReadLow: 0,\n networkReadHigh: 0,\n readOps: 0,\n precision: Precision.EXACT,\n })\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n CommandSpec,\n IOResult,\n OperandKind,\n Option,\n ResourceName,\n command,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { fetchMessage } from '../../../core/email/_client.ts'\nimport { forwardMessage } from '../../../core/email/send.ts'\n\nconst ENC = new TextEncoder()\n\nconst SPEC = new CommandSpec({\n options: [\n new Option({ long: '--uid', valueKind: OperandKind.TEXT }),\n new Option({ long: '--folder', valueKind: OperandKind.TEXT }),\n new Option({ long: '--to', valueKind: OperandKind.TEXT }),\n ],\n})\n\nasync function emailForwardCommand(\n accessor: EmailAccessor,\n _paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const uid = typeof opts.flags.uid === 'string' ? opts.flags.uid : ''\n const folder = typeof opts.flags.folder === 'string' ? opts.flags.folder : ''\n const to = typeof opts.flags.to === 'string' ? opts.flags.to : ''\n if (uid === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--uid is required\\n') })]\n }\n if (folder === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--folder is required\\n') })]\n }\n if (to === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--to is required\\n') })]\n }\n const original = await fetchMessage(accessor, folder, uid)\n const result = await forwardMessage(accessor.config, original, to)\n const out: ByteSource = ENC.encode(JSON.stringify(result))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_FORWARD = command({\n name: 'himalaya message forward',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailForwardCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport { loadOptionalPeer } from '@struktoai/mirage-core'\nimport type * as Nodemailer from 'nodemailer'\nimport type { EmailConfig } from '../../resource/email/config.ts'\nimport type { FetchedMessage } from './_client.ts'\n\nconst transporterCache = new WeakMap<EmailConfig, Nodemailer.Transporter>()\n\nasync function getTransporter(config: EmailConfig): Promise<Nodemailer.Transporter> {\n const existing = transporterCache.get(config)\n if (existing !== undefined) return existing\n const mod = await loadOptionalPeer(\n () => import('nodemailer') as unknown as Promise<typeof Nodemailer>,\n { feature: 'email send/reply/forward', packageName: 'nodemailer' },\n )\n const transporter = mod.createTransport({\n host: config.smtpHost,\n port: config.smtpPort,\n secure: config.smtpPort === 465,\n auth: { user: config.username, pass: config.password },\n })\n transporterCache.set(config, transporter)\n return transporter\n}\n\nexport interface SendResult {\n status: string\n to: string | string[]\n subject: string\n}\n\nexport async function sendMessage(\n config: EmailConfig,\n to: string,\n subject: string,\n body: string,\n): Promise<SendResult> {\n const t = await getTransporter(config)\n await t.sendMail({ from: config.username, to, subject, text: body })\n return { status: 'sent', to, subject }\n}\n\nexport async function replyMessage(\n config: EmailConfig,\n original: FetchedMessage,\n body: string,\n): Promise<SendResult> {\n const t = await getTransporter(config)\n const refs = [...original.references]\n if (original.message_id !== '') refs.push(original.message_id)\n const subject = `Re: ${original.subject}`\n await t.sendMail({\n from: config.username,\n to: original.from.email,\n subject,\n text: body,\n inReplyTo: original.message_id,\n references: refs,\n })\n return { status: 'sent', to: original.from.email, subject }\n}\n\nexport async function replyAllMessage(\n config: EmailConfig,\n original: FetchedMessage,\n body: string,\n): Promise<SendResult> {\n const t = await getTransporter(config)\n const all = new Set<string>()\n if (original.from.email !== '') all.add(original.from.email)\n for (const r of original.to) if (r.email !== '') all.add(r.email)\n for (const r of original.cc) if (r.email !== '') all.add(r.email)\n all.delete(config.username)\n const recipients = [...all].sort()\n const refs = [...original.references]\n if (original.message_id !== '') refs.push(original.message_id)\n const subject = `Re: ${original.subject}`\n await t.sendMail({\n from: config.username,\n to: recipients,\n subject,\n text: body,\n inReplyTo: original.message_id,\n references: refs,\n })\n return { status: 'sent', to: recipients, subject }\n}\n\nexport async function forwardMessage(\n config: EmailConfig,\n original: FetchedMessage,\n to: string,\n): Promise<SendResult> {\n const t = await getTransporter(config)\n const subject = `Fwd: ${original.subject}`\n const fwdBody =\n `---------- Forwarded message ----------\\n` +\n `From: ${original.from.name} <${original.from.email}>\\n` +\n `Date: ${original.date}\\n` +\n `Subject: ${original.subject}\\n\\n` +\n original.body_text\n await t.sendMail({ from: config.username, to, subject, text: fwdBody })\n return { status: 'sent', to, subject }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n compilePattern,\n grepGeneric,\n grepLines,\n mountPrefixOf,\n prefixAggregate,\n resolveGlobOf,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\nimport { detectScope } from '../../../core/email/scope.ts'\nimport { searchAndFormat } from '../../../core/email/search.ts'\nimport { EMAIL_IO } from './io.ts'\nimport { fileReadProvision } from './provision.ts'\n\nconst resolveGlob = resolveGlobOf(EMAIL_IO)\n\nconst ENC = new TextEncoder()\n\nasync function* emailStream(\n accessor: EmailAccessor,\n p: PathSpec,\n index?: IndexCacheStore,\n): AsyncIterable<Uint8Array> {\n yield await emailRead(accessor, p, index)\n}\n\ninterface FlagSet {\n ignoreCase: boolean\n invert: boolean\n lineNumbers: boolean\n countOnly: boolean\n filesOnly: boolean\n wholeWord: boolean\n fixedString: boolean\n onlyMatching: boolean\n maxCount: number | null\n quiet: boolean\n afterContext: number\n beforeContext: number\n}\n\nfunction parseFlags(flags: Record<string, string | boolean | string[]>): FlagSet {\n const toInt = (v: string | boolean | string[] | undefined): number | null =>\n typeof v === 'string' ? Number.parseInt(v, 10) : null\n const aCtx = toInt(flags.A)\n const bCtx = toInt(flags.B)\n const cCtx = toInt(flags.C)\n return {\n ignoreCase: flags.i === true,\n invert: flags.v === true,\n lineNumbers: flags.n === true,\n countOnly: flags.c === true,\n filesOnly: flags.args_l === true || flags.l === true,\n wholeWord: flags.w === true,\n fixedString: flags.F === true,\n onlyMatching: flags.o === true,\n maxCount: toInt(flags.m),\n quiet: flags.q === true,\n afterContext: aCtx ?? cCtx ?? 0,\n beforeContext: bCtx ?? cCtx ?? 0,\n }\n}\n\nfunction getPattern(\n texts: readonly string[],\n flags: Record<string, string | boolean | string[]>,\n): string {\n if (typeof flags.e === 'string') return flags.e\n if (texts.length > 0 && texts[0] !== undefined) return texts[0]\n throw new Error('grep: usage: grep [flags] pattern [path]')\n}\n\nasync function grepCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n let pattern: string\n try {\n pattern = getPattern(texts, opts.flags)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode(`${msg}\\n`) })]\n }\n const f = parseFlags(opts.flags)\n\n if (paths.length > 0) {\n const first = paths[0]\n if (first !== undefined) {\n const scope = detectScope(first)\n if (scope.useNative && !pattern.includes('\\n')) {\n const filePrefix =\n mountPrefixOf(first.virtual, first.resourcePath) !== ''\n ? mountPrefixOf(first.virtual, first.resourcePath)\n : ''\n const pairs = await searchAndFormat(accessor, scope, pattern, filePrefix, f.maxCount ?? 50)\n const lines: string[] = []\n for (const [vfsPath, msgText] of pairs) {\n const matched = grepLines(\n vfsPath,\n [msgText],\n compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord),\n f,\n )\n for (const line of matched) lines.push(`${vfsPath}:${line}`)\n }\n if (lines.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n }\n }\n }\n\n const resolved =\n paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? undefined) : []\n const stat = (p: PathSpec): Promise<FileStat> => emailStat(accessor, p, opts.index ?? undefined)\n const readdir = (p: PathSpec): Promise<string[]> =>\n emailReaddir(accessor, p, opts.index ?? undefined)\n return grepGeneric('grep', resolved, texts, opts, stat, readdir, (p) =>\n emailStream(accessor, p, opts.index ?? undefined),\n )\n}\n\nexport const EMAIL_GREP = command({\n name: 'grep',\n resource: ResourceName.EMAIL,\n spec: specOf('grep'),\n fn: grepCommand,\n aggregate: prefixAggregate,\n provision: fileReadProvision,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { PathSpec } from '@struktoai/mirage-core'\nimport { stripSlash } from '@struktoai/mirage-core'\n\nexport interface EmailScope {\n useNative: boolean\n folder: string | null\n resourcePath: string\n}\n\nexport function detectScope(path: PathSpec): EmailScope {\n const key = stripSlash(path.mountPath)\n if (key === '') {\n return { useNative: false, folder: null, resourcePath: '/' }\n }\n const parts = key.split('/').filter((s) => s !== '')\n if (parts.length === 0) {\n return { useNative: false, folder: null, resourcePath: '/' }\n }\n if (key.endsWith('.email.json')) {\n return { useNative: false, folder: parts[0] ?? null, resourcePath: key }\n }\n if (parts.length <= 2) {\n return { useNative: true, folder: parts[0] ?? null, resourcePath: key }\n }\n return { useNative: false, folder: parts[0] ?? null, resourcePath: key }\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { fetchMessage, listMessageUids, type FetchedMessage } from './_client.ts'\nimport type { EmailScope } from './scope.ts'\n\nconst TITLE_MAX = 80\nconst UNSAFE = /[^\\w\\s\\-.]/g\nconst MULTI_UNDERSCORE = /_+/g\n\nfunction sanitize(text: string): string {\n if (text.trim() === '') return 'No_Subject'\n let cleaned = text.replace(UNSAFE, '_').replace(/ /g, '_')\n cleaned = cleaned.replace(MULTI_UNDERSCORE, '_').replace(/^_+|_+$/g, '')\n if (cleaned.length > TITLE_MAX) cleaned = `${cleaned.slice(0, TITLE_MAX - 3)}...`\n return cleaned\n}\n\nfunction dateFromHeader(dateStr: string): string {\n if (dateStr === '') return '1970-01-01'\n const d = new Date(dateStr)\n if (Number.isNaN(d.getTime())) return '1970-01-01'\n const yyyy = d.getUTCFullYear().toString().padStart(4, '0')\n const mm = (d.getUTCMonth() + 1).toString().padStart(2, '0')\n const dd = d.getUTCDate().toString().padStart(2, '0')\n return `${yyyy}-${mm}-${dd}`\n}\n\nexport interface SearchOptions {\n text?: string | null\n subject?: string | null\n fromAddr?: string | null\n toAddr?: string | null\n since?: string | null\n before?: string | null\n unseen?: boolean\n}\n\nfunction buildSearchCriteria(opts: SearchOptions): string {\n const parts: string[] = []\n if (opts.unseen === true) parts.push('UNSEEN')\n if (opts.text !== undefined && opts.text !== null && opts.text !== '') {\n parts.push(`TEXT \"${opts.text}\"`)\n }\n if (opts.subject !== undefined && opts.subject !== null && opts.subject !== '') {\n parts.push(`SUBJECT \"${opts.subject}\"`)\n }\n if (opts.fromAddr !== undefined && opts.fromAddr !== null && opts.fromAddr !== '') {\n parts.push(`FROM \"${opts.fromAddr}\"`)\n }\n if (opts.toAddr !== undefined && opts.toAddr !== null && opts.toAddr !== '') {\n parts.push(`TO \"${opts.toAddr}\"`)\n }\n if (opts.since !== undefined && opts.since !== null && opts.since !== '') {\n parts.push(`SINCE ${opts.since}`)\n }\n if (opts.before !== undefined && opts.before !== null && opts.before !== '') {\n parts.push(`BEFORE ${opts.before}`)\n }\n return parts.length > 0 ? parts.join(' ') : 'ALL'\n}\n\nexport async function searchMessages(\n accessor: EmailAccessor,\n folder: string,\n opts: SearchOptions = {},\n maxResults: number | null = null,\n): Promise<string[]> {\n const criteria = buildSearchCriteria(opts)\n return listMessageUids(accessor, folder, criteria, maxResults)\n}\n\nfunction buildVfsPath(prefix: string, folder: string, msg: FetchedMessage): string {\n const dateStr = dateFromHeader(msg.date)\n const subject = sanitize(msg.subject !== '' ? msg.subject : 'No Subject')\n const filename = `${subject}__${msg.uid}.email.json`\n return [prefix, folder, dateStr, filename].filter((p) => p !== '').join('/')\n}\n\nexport async function searchAndFormat(\n accessor: EmailAccessor,\n scope: EmailScope,\n pattern: string,\n prefix: string,\n maxResults: number | null = null,\n): Promise<[string, string][]> {\n const folder = scope.folder ?? ''\n if (folder === '') return []\n const uids = await searchMessages(accessor, folder, { text: pattern }, maxResults)\n const pairs: [string, string][] = []\n for (const uid of uids) {\n const msg = await fetchMessage(accessor, folder, uid)\n const msgText = JSON.stringify(msg)\n const vfsPath = buildVfsPath(prefix, folder, msg)\n pairs.push([vfsPath, msgText])\n }\n return pairs\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n CommandSpec,\n IOResult,\n OperandKind,\n Option,\n ResourceName,\n command,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { fetchMessage } from '../../../core/email/_client.ts'\n\nconst ENC = new TextEncoder()\n\nconst SPEC = new CommandSpec({\n options: [\n new Option({ long: '--uid', valueKind: OperandKind.TEXT }),\n new Option({ long: '--folder', valueKind: OperandKind.TEXT }),\n ],\n})\n\nasync function emailReadCommand(\n accessor: EmailAccessor,\n _paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const uid = typeof opts.flags.uid === 'string' ? opts.flags.uid : ''\n const folder = typeof opts.flags.folder === 'string' ? opts.flags.folder : ''\n if (uid === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--uid is required\\n') })]\n }\n if (folder === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--folder is required\\n') })]\n }\n const processed = await fetchMessage(accessor, folder, uid)\n const out: ByteSource = ENC.encode(JSON.stringify(processed))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_READ = command({\n name: 'himalaya message read',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailReadCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n CommandSpec,\n IOResult,\n OperandKind,\n Option,\n ResourceName,\n command,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { fetchMessage } from '../../../core/email/_client.ts'\nimport { replyAllMessage, replyMessage } from '../../../core/email/send.ts'\n\nconst ENC = new TextEncoder()\n\nconst SPEC = new CommandSpec({\n options: [\n new Option({ long: '--uid', valueKind: OperandKind.TEXT }),\n new Option({ long: '--folder', valueKind: OperandKind.TEXT }),\n new Option({ long: '--body', valueKind: OperandKind.TEXT }),\n new Option({ long: '--all' }),\n ],\n})\n\nasync function emailReplyCommand(\n accessor: EmailAccessor,\n _paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const uid = typeof opts.flags.uid === 'string' ? opts.flags.uid : ''\n const folder = typeof opts.flags.folder === 'string' ? opts.flags.folder : ''\n const body = typeof opts.flags.body === 'string' ? opts.flags.body : ''\n if (uid === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--uid is required\\n') })]\n }\n if (folder === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--folder is required\\n') })]\n }\n if (body === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--body is required\\n') })]\n }\n const original = await fetchMessage(accessor, folder, uid)\n const result =\n opts.flags.all === true\n ? await replyAllMessage(accessor.config, original, body)\n : await replyMessage(accessor.config, original, body)\n const out: ByteSource = ENC.encode(JSON.stringify(result))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_REPLY = command({\n name: 'himalaya message reply',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailReplyCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n ResourceName,\n command,\n compilePattern,\n grepLines,\n mountPrefixOf,\n patternArg,\n resolveGlobOf,\n rgGeneric,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n type GrepLinesOptions,\n type IndexCacheStore,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\nimport { detectScope } from '../../../core/email/scope.ts'\nimport { searchAndFormat } from '../../../core/email/search.ts'\nimport { EMAIL_IO } from './io.ts'\n\nconst resolveGlob = resolveGlobOf(EMAIL_IO)\n\nconst ENC = new TextEncoder()\n\nasync function* emailStream(\n accessor: EmailAccessor,\n p: PathSpec,\n index: IndexCacheStore | undefined,\n): AsyncIterable<Uint8Array> {\n yield await emailRead(accessor, p, index)\n}\n\nasync function rgCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const pattern = patternArg(texts, opts.flags)\n if (pattern === null) {\n return [\n null,\n new IOResult({ exitCode: 2, stderr: ENC.encode('rg: usage: rg [flags] pattern [path]\\n') }),\n ]\n }\n const ignoreCase = opts.flags.i === true\n const invert = opts.flags.v === true\n const lineNumbers = opts.flags.n === true\n const countOnly = opts.flags.c === true\n const filesOnly = opts.flags.args_l === true || opts.flags.l === true\n const wholeWord = opts.flags.w === true\n const fixedString = opts.flags.F === true\n const onlyMatching = opts.flags.o === true\n const maxCount = typeof opts.flags.m === 'string' ? Number.parseInt(opts.flags.m, 10) : null\n const pat = compilePattern(pattern, ignoreCase, fixedString, wholeWord)\n\n const lineOpts: GrepLinesOptions = {\n invert,\n lineNumbers,\n countOnly,\n filesOnly,\n onlyMatching,\n maxCount,\n }\n\n if (paths.length > 0) {\n const first = paths[0]\n if (first !== undefined) {\n const scope = detectScope(first)\n if (scope.useNative && !pattern.includes('\\n')) {\n const filePrefix =\n mountPrefixOf(first.virtual, first.resourcePath) !== ''\n ? mountPrefixOf(first.virtual, first.resourcePath)\n : ''\n const pairs = await searchAndFormat(accessor, scope, pattern, filePrefix, maxCount ?? 50)\n const lines: string[] = []\n for (const [vfsPath, msgText] of pairs) {\n const matched = grepLines(vfsPath, [msgText], pat, lineOpts)\n for (const line of matched) lines.push(`${vfsPath}:${line}`)\n }\n if (lines.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n }\n }\n }\n\n const resolved =\n paths.length > 0 ? await resolveGlob(accessor, paths, opts.index ?? undefined) : []\n const stat = (p: PathSpec): Promise<FileStat> => emailStat(accessor, p, opts.index ?? undefined)\n const readdir = (p: PathSpec): Promise<string[]> =>\n emailReaddir(accessor, p, opts.index ?? undefined)\n return rgGeneric(resolved, texts, opts, stat, readdir, (p) =>\n emailStream(accessor, p, opts.index ?? undefined),\n )\n}\n\nexport const EMAIL_RG = command({\n name: 'rg',\n resource: ResourceName.EMAIL,\n spec: specOf('rg'),\n fn: rgCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n CommandSpec,\n IOResult,\n OperandKind,\n Option,\n ResourceName,\n command,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { sendMessage } from '../../../core/email/send.ts'\n\nconst ENC = new TextEncoder()\n\nconst SPEC = new CommandSpec({\n options: [\n new Option({ long: '--to', valueKind: OperandKind.TEXT }),\n new Option({ long: '--subject', valueKind: OperandKind.TEXT }),\n new Option({ long: '--body', valueKind: OperandKind.TEXT }),\n ],\n})\n\nasync function emailSendCommand(\n accessor: EmailAccessor,\n _paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const to = typeof opts.flags.to === 'string' ? opts.flags.to : ''\n const subject = typeof opts.flags.subject === 'string' ? opts.flags.subject : ''\n const body = typeof opts.flags.body === 'string' ? opts.flags.body : ''\n if (to === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--to is required\\n') })]\n }\n if (subject === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--subject is required\\n') })]\n }\n if (body === '') {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('--body is required\\n') })]\n }\n const result = await sendMessage(accessor.config, to, subject, body)\n const out: ByteSource = ENC.encode(JSON.stringify(result))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_SEND = command({\n name: 'himalaya message send',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailSendCommand,\n write: true,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n CommandSpec,\n IOResult,\n OperandKind,\n Option,\n ResourceName,\n command,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { fetchHeaders } from '../../../core/email/_client.ts'\nimport { searchMessages } from '../../../core/email/search.ts'\n\nconst ENC = new TextEncoder()\n\nconst SPEC = new CommandSpec({\n options: [\n new Option({ long: '--folder', valueKind: OperandKind.TEXT }),\n new Option({ long: '--max', valueKind: OperandKind.TEXT }),\n new Option({ long: '--unseen' }),\n new Option({ long: '--subject', valueKind: OperandKind.TEXT }),\n new Option({ long: '--from', valueKind: OperandKind.TEXT }),\n new Option({ long: '--to', valueKind: OperandKind.TEXT }),\n new Option({ long: '--body', valueKind: OperandKind.TEXT }),\n new Option({ long: '--since', valueKind: OperandKind.TEXT }),\n new Option({ long: '--before', valueKind: OperandKind.TEXT }),\n ],\n})\n\nasync function emailTriageCommand(\n accessor: EmailAccessor,\n _paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const folder = typeof opts.flags.folder === 'string' ? opts.flags.folder : 'INBOX'\n const maxResults = typeof opts.flags.max === 'string' ? Number.parseInt(opts.flags.max, 10) : 20\n const uids = await searchMessages(\n accessor,\n folder,\n {\n text: typeof opts.flags.body === 'string' ? opts.flags.body : null,\n subject: typeof opts.flags.subject === 'string' ? opts.flags.subject : null,\n fromAddr: typeof opts.flags.from === 'string' ? opts.flags.from : null,\n toAddr: typeof opts.flags.to === 'string' ? opts.flags.to : null,\n since: typeof opts.flags.since === 'string' ? opts.flags.since : null,\n before: typeof opts.flags.before === 'string' ? opts.flags.before : null,\n unseen: opts.flags.unseen === true,\n },\n maxResults,\n )\n if (uids.length === 0) {\n const out: ByteSource = ENC.encode('[]')\n return [out, new IOResult()]\n }\n const headers = await fetchHeaders(accessor, folder, uids)\n const out: ByteSource = ENC.encode(JSON.stringify(headers))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_TRIAGE = command({\n name: 'himalaya envelope list',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailTriageCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName, makeGenericOps } from '@struktoai/mirage-core'\nimport { EMAIL_IO } from '../../commands/builtin/email/io.ts'\n\nexport const EMAIL_OPS: readonly RegisteredOp[] = makeGenericOps(ResourceName.EMAIL, EMAIL_IO)\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nexport const 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 Read commands:\n himalaya envelope list --folder INBOX --unseen # id/from/subject/date\n himalaya message read --folder INBOX --uid <uid> # one message as JSON`\n\nexport const EMAIL_WRITE_PROMPT = ` Write commands:\n himalaya message send --to \"to@email.com\" --subject \"Hi\" --body \"...\"\n himalaya message reply --folder INBOX --uid <uid> --body \"...\" [--all]\n himalaya message forward --folder INBOX --uid <uid> --to \"to@email.com\"`\n"],"mappings":"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","names":["PathSpec","ResourceName","mountKey","mountPrefixOf","ResourceName","FileType","PathSpec","mountKey","mountPrefixOf","stripSlash","loadOptionalPeer","end","listFolders","listFolders","mountKey","mountPrefixOf","enoent","mountPrefixOf","listFolders","mountKey","mountPrefixOf","enoent","uid","parts","folder","PathSpec","mountKey","mountPrefixOf","FileType","stripSlash","IOResult","ResourceName","command","loadOptionalPeer","ENC","IOResult","command","ResourceName","IOResult","ResourceName","command","mountPrefixOf","resolveGlobOf","specOf","stripSlash","TITLE_MAX","UNSAFE","MULTI_UNDERSCORE","sanitize","dateFromHeader","resolveGlob","resolveGlobOf","ENC","IOResult","mountPrefixOf","stat","readdir","command","ResourceName","specOf","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","IOResult","command","ResourceName","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","IOResult","command","ResourceName","IOResult","ResourceName","command","compilePattern","grepLines","mountPrefixOf","resolveGlobOf","specOf","resolveGlob","resolveGlobOf","ENC","emailStream","IOResult","compilePattern","mountPrefixOf","grepLines","stat","readdir","command","ResourceName","specOf","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","IOResult","command","ResourceName","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","out","IOResult","command","ResourceName","ResourceName","ResourceName","ResourceName","resolveGlob","ResourceName","mountPrefixOf","PathSpec","mountKey"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  HfBucketsAccessor,
3
3
  HfResource
4
- } from "./chunk-WSGEIVY3.js";
4
+ } from "./chunk-HEDE2377.js";
5
5
  import {
6
6
  assertHfRepoId,
7
7
  redactHfBucketsConfig
8
- } from "./chunk-EGB7V74Z.js";
8
+ } from "./chunk-KAWDDS27.js";
9
9
 
10
10
  // src/resource/hf_buckets/hf_buckets.ts
11
11
  import { normalizeKeyPrefix, ResourceName } from "@struktoai/mirage-core";
@@ -47,4 +47,4 @@ export {
47
47
  HF_BUCKETS_PROMPT,
48
48
  HfBucketsResource
49
49
  };
50
- //# sourceMappingURL=chunk-G5BZE7UA.js.map
50
+ //# sourceMappingURL=chunk-4M73WHIE.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  minioToS3Config,
3
3
  redactMinIOConfig
4
- } from "./chunk-DYXEITK3.js";
4
+ } from "./chunk-GF75O2EN.js";
5
5
  import {
6
6
  S3Resource
7
- } from "./chunk-MHCMHKM6.js";
7
+ } from "./chunk-IUXXZHY3.js";
8
8
 
9
9
  // src/resource/minio/minio.ts
10
10
  import {
@@ -54,4 +54,4 @@ export {
54
54
  MINIO_PROMPT,
55
55
  MinIOResource
56
56
  };
57
- //# sourceMappingURL=chunk-Q6CDMOM6.js.map
57
+ //# sourceMappingURL=chunk-4X6CLF4F.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  qingStorToS3Config,
3
3
  redactQingStorConfig
4
- } from "./chunk-OHROA3FQ.js";
4
+ } from "./chunk-WWP2STF5.js";
5
5
  import {
6
6
  S3Resource
7
- } from "./chunk-MHCMHKM6.js";
7
+ } from "./chunk-IUXXZHY3.js";
8
8
 
9
9
  // src/resource/qingstor/qingstor.ts
10
10
  import {
@@ -54,4 +54,4 @@ export {
54
54
  QINGSTOR_PROMPT,
55
55
  QingStorResource
56
56
  };
57
- //# sourceMappingURL=chunk-3IJSIVKT.js.map
57
+ //# sourceMappingURL=chunk-5I7Q7RHW.js.map
@@ -1,29 +1,35 @@
1
1
  import {
2
2
  redactGitHubConfig
3
- } from "./chunk-TWGVQLG2.js";
3
+ } from "./chunk-XUUSWR4U.js";
4
4
 
5
5
  // src/resource/github/github.ts
6
6
  import {
7
7
  BaseResource,
8
- fetchGitHubRepoInfo,
9
- fetchGitHubTree,
10
8
  GITHUB_COMMANDS,
11
- GITHUB_VFS_OPS,
9
+ GITHUB_OPS,
12
10
  GitHubAccessor,
13
11
  HttpGitHubTransport,
14
12
  PathSpec,
15
13
  RAMIndexCacheStore,
16
14
  ResourceName,
15
+ fetchGitHubRepoInfo,
16
+ fetchGitHubTree,
17
17
  githubBuildTreeMap,
18
18
  githubPopulateIndex,
19
19
  githubRead,
20
20
  githubReaddir,
21
- githubResolveGlob,
22
- githubStat
21
+ makeResolveGlob,
22
+ githubStat,
23
+ mountKey,
24
+ mountPrefixOf
23
25
  } from "@struktoai/mirage-core";
26
+ var githubResolveGlob = makeResolveGlob(githubReaddir);
24
27
  var GitHubResource = class _GitHubResource extends BaseResource {
25
28
  kind = ResourceName.GITHUB;
26
- isRemote = true;
29
+ cachesReads = true;
30
+ // Blob shas are stable per-path markers, so cached reads can be
31
+ // probe-verified under ALWAYS and snapshots carry drift fingerprints.
32
+ supportsSnapshot = true;
27
33
  indexTtl = 86400;
28
34
  config;
29
35
  accessor;
@@ -64,7 +70,7 @@ var GitHubResource = class _GitHubResource extends BaseResource {
64
70
  return GITHUB_COMMANDS;
65
71
  }
66
72
  ops() {
67
- return GITHUB_VFS_OPS;
73
+ return GITHUB_OPS;
68
74
  }
69
75
  readFile(p) {
70
76
  return githubRead(this.accessor, p, this.index);
@@ -75,18 +81,14 @@ var GitHubResource = class _GitHubResource extends BaseResource {
75
81
  stat(p) {
76
82
  return githubStat(this.accessor, p, this.index);
77
83
  }
78
- async fingerprint(p) {
79
- const lookup = await this.index.get(p.original);
80
- return lookup.entry?.id ?? null;
81
- }
82
84
  glob(paths, prefix = "") {
83
85
  const effective = prefix !== "" ? paths.map(
84
- (p) => p.prefix !== "" ? p : new PathSpec({
85
- original: p.original,
86
+ (p) => mountPrefixOf(p.virtual, p.resourcePath) !== "" ? p : new PathSpec({
87
+ virtual: p.virtual,
86
88
  directory: p.directory,
87
89
  ...p.pattern !== null ? { pattern: p.pattern } : {},
88
90
  resolved: p.resolved,
89
- prefix
91
+ resourcePath: mountKey(p.virtual, prefix)
90
92
  })
91
93
  ) : paths;
92
94
  return githubResolveGlob(this.accessor, effective, this.index);
@@ -107,4 +109,4 @@ var GitHubResource = class _GitHubResource extends BaseResource {
107
109
  export {
108
110
  GitHubResource
109
111
  };
110
- //# sourceMappingURL=chunk-YPT4JBUY.js.map
112
+ //# sourceMappingURL=chunk-5YRWF5RP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/github/github.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n BaseResource,\n GITHUB_COMMANDS,\n GITHUB_OPS,\n GitHubAccessor,\n HttpGitHubTransport,\n PathSpec,\n RAMIndexCacheStore,\n ResourceName,\n fetchGitHubRepoInfo,\n fetchGitHubTree,\n githubBuildTreeMap,\n githubPopulateIndex,\n githubRead,\n githubReaddir,\n makeResolveGlob,\n githubStat,\n mountKey,\n mountPrefixOf,\n type FileStat,\n type IndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n} from '@struktoai/mirage-core'\nimport { redactGitHubConfig, type GitHubConfig, type GitHubConfigRedacted } from './config.ts'\n\nconst githubResolveGlob = makeResolveGlob(githubReaddir)\n\nexport interface GitHubResourceState {\n type: string\n config: GitHubConfigRedacted\n defaultBranch: string\n truncated: boolean\n}\n\nexport class GitHubResource extends BaseResource implements Resource {\n readonly kind: string = ResourceName.GITHUB\n readonly cachesReads: boolean = true\n // Blob shas are stable per-path markers, so cached reads can be\n // probe-verified under ALWAYS and snapshots carry drift fingerprints.\n readonly supportsSnapshot: boolean = true\n override readonly indexTtl: number = 86_400\n readonly config: GitHubConfig\n readonly accessor: GitHubAccessor\n\n private constructor(config: GitHubConfig, accessor: GitHubAccessor, index: IndexCacheStore) {\n super()\n this.config = config\n this.accessor = accessor\n this._index = index\n }\n\n static async create(config: GitHubConfig): Promise<GitHubResource> {\n const transportOpts: { token: string; baseUrl?: string } = { token: config.token }\n if (config.baseUrl !== undefined) transportOpts.baseUrl = config.baseUrl\n const transport = new HttpGitHubTransport(transportOpts)\n const repoInfo = await fetchGitHubRepoInfo(transport, config.owner, config.repo)\n const ref = config.ref ?? repoInfo.default_branch\n const { tree, truncated } = await fetchGitHubTree(transport, config.owner, config.repo, ref)\n const treeMap = githubBuildTreeMap(tree)\n const accessor = new GitHubAccessor({\n transport,\n owner: config.owner,\n repo: config.repo,\n ref,\n defaultBranch: repoInfo.default_branch,\n truncated,\n tree: treeMap,\n })\n const index = new RAMIndexCacheStore({ ttl: 86_400 })\n await githubPopulateIndex(index, tree)\n return new GitHubResource(config, accessor, index)\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GITHUB_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GITHUB_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return githubRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return githubReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return githubStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return githubResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GitHubResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGitHubConfig(this.config),\n defaultBranch: this.accessor.defaultBranch,\n truncated: this.accessor.truncated,\n })\n }\n\n loadState(_state: GitHubResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":"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","names":[]}