@struktoai/mirage-node 0.0.1 → 0.0.2

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 (407) hide show
  1. package/README.md +63 -129
  2. package/dist/aliyun-TMZRUYCG.js +10 -0
  3. package/dist/backblaze-OHW57DLK.js +10 -0
  4. package/dist/box-UXTCAFOZ.js +8 -0
  5. package/dist/ceph-TNN4I2FT.js +10 -0
  6. package/dist/chunk-2CC5VW7K.js +52 -0
  7. package/dist/chunk-2CC5VW7K.js.map +1 -0
  8. package/dist/chunk-3IJSIVKT.js +57 -0
  9. package/dist/chunk-3IJSIVKT.js.map +1 -0
  10. package/dist/chunk-3T3RMDNX.js +57 -0
  11. package/dist/chunk-3T3RMDNX.js.map +1 -0
  12. package/dist/chunk-54NTYJEO.js +13 -0
  13. package/dist/chunk-54NTYJEO.js.map +1 -0
  14. package/dist/{chunk-DCJQ2PIX.js → chunk-5DLOHQJ2.js} +5 -8
  15. package/dist/chunk-5DLOHQJ2.js.map +1 -0
  16. package/dist/chunk-5HCVKTP3.js +2086 -0
  17. package/dist/chunk-5HCVKTP3.js.map +1 -0
  18. package/dist/{chunk-5E6BULAK.js → chunk-5YOCVEUB.js} +5 -8
  19. package/dist/chunk-5YOCVEUB.js.map +1 -0
  20. package/dist/{chunk-6M2NL363.js → chunk-A4Z6DZ22.js} +6 -8
  21. package/dist/chunk-A4Z6DZ22.js.map +1 -0
  22. package/dist/{chunk-NOZZFJEB.js → chunk-A7X4L4JM.js} +5 -8
  23. package/dist/chunk-A7X4L4JM.js.map +1 -0
  24. package/dist/{chunk-GCB4JUF7.js → chunk-ABTEGAFB.js} +5 -8
  25. package/dist/chunk-ABTEGAFB.js.map +1 -0
  26. package/dist/chunk-AJICZLHT.js +57 -0
  27. package/dist/chunk-AJICZLHT.js.map +1 -0
  28. package/dist/{chunk-H74QYTN7.js → chunk-B2ZOKNN4.js} +14 -3
  29. package/dist/chunk-B2ZOKNN4.js.map +1 -0
  30. package/dist/{chunk-ICSS5ETT.js → chunk-B6SXRCBO.js} +8 -18
  31. package/dist/chunk-B6SXRCBO.js.map +1 -0
  32. package/dist/{chunk-HEQL3LPK.js → chunk-BYTU2YC3.js} +8 -18
  33. package/dist/chunk-BYTU2YC3.js.map +1 -0
  34. package/dist/{chunk-V5OLWE7F.js → chunk-C6NHEDHY.js} +5 -8
  35. package/dist/chunk-C6NHEDHY.js.map +1 -0
  36. package/dist/chunk-C6NHFMIP.js +57 -0
  37. package/dist/chunk-C6NHFMIP.js.map +1 -0
  38. package/dist/chunk-CASCUFK2.js +87 -0
  39. package/dist/chunk-CASCUFK2.js.map +1 -0
  40. package/dist/chunk-DNBAMB5J.js +18 -0
  41. package/dist/chunk-DNBAMB5J.js.map +1 -0
  42. package/dist/chunk-DP2PP5V2.js +26 -0
  43. package/dist/chunk-DP2PP5V2.js.map +1 -0
  44. package/dist/{chunk-OYJXYJTE.js → chunk-DTAY7LPC.js} +303 -866
  45. package/dist/chunk-DTAY7LPC.js.map +1 -0
  46. package/dist/chunk-DYXEITK3.js +52 -0
  47. package/dist/chunk-DYXEITK3.js.map +1 -0
  48. package/dist/chunk-E2ISWXLB.js +7 -0
  49. package/dist/chunk-E2ISWXLB.js.map +1 -0
  50. package/dist/{chunk-XDEEOTVK.js → chunk-E7RW3SBV.js} +5 -8
  51. package/dist/chunk-E7RW3SBV.js.map +1 -0
  52. package/dist/chunk-EGB7V74Z.js +76 -0
  53. package/dist/chunk-EGB7V74Z.js.map +1 -0
  54. package/dist/{chunk-LBBM3LKK.js → chunk-ERELJ7BS.js} +5 -8
  55. package/dist/chunk-ERELJ7BS.js.map +1 -0
  56. package/dist/chunk-FXFDBF3P.js +57 -0
  57. package/dist/chunk-FXFDBF3P.js.map +1 -0
  58. package/dist/chunk-G5BZE7UA.js +50 -0
  59. package/dist/chunk-G5BZE7UA.js.map +1 -0
  60. package/dist/chunk-H3BST2LI.js +26 -0
  61. package/dist/chunk-H3BST2LI.js.map +1 -0
  62. package/dist/chunk-H3I2KZIY.js +25 -0
  63. package/dist/chunk-H3I2KZIY.js.map +1 -0
  64. package/dist/{chunk-UWMOTOXA.js → chunk-HEHERHQ5.js} +8 -15
  65. package/dist/chunk-HEHERHQ5.js.map +1 -0
  66. package/dist/chunk-HQ4KWN76.js +57 -0
  67. package/dist/chunk-HQ4KWN76.js.map +1 -0
  68. package/dist/{chunk-MY3NUJJD.js → chunk-IQVNVTOP.js} +8 -18
  69. package/dist/chunk-IQVNVTOP.js.map +1 -0
  70. package/dist/chunk-JALIYI6M.js +55 -0
  71. package/dist/chunk-JALIYI6M.js.map +1 -0
  72. package/dist/chunk-JZQHKDSY.js +216 -0
  73. package/dist/chunk-JZQHKDSY.js.map +1 -0
  74. package/dist/chunk-JZT4QGIP.js +24 -0
  75. package/dist/chunk-JZT4QGIP.js.map +1 -0
  76. package/dist/chunk-KTNDT45N.js +57 -0
  77. package/dist/chunk-KTNDT45N.js.map +1 -0
  78. package/dist/chunk-L6JPBJAS.js +57 -0
  79. package/dist/chunk-L6JPBJAS.js.map +1 -0
  80. package/dist/{chunk-6VKNSO6U.js → chunk-LAJJPLEV.js} +17 -11
  81. package/dist/chunk-LAJJPLEV.js.map +1 -0
  82. package/dist/chunk-LW25LMIH.js +26 -0
  83. package/dist/chunk-LW25LMIH.js.map +1 -0
  84. package/dist/{chunk-WSDQ2MRG.js → chunk-LYDMMNL2.js} +5 -8
  85. package/dist/chunk-LYDMMNL2.js.map +1 -0
  86. package/dist/{chunk-G7O6DAWU.js → chunk-MHCMHKM6.js} +15 -9
  87. package/dist/chunk-MHCMHKM6.js.map +1 -0
  88. package/dist/chunk-N72CAZEH.js +1990 -0
  89. package/dist/chunk-N72CAZEH.js.map +1 -0
  90. package/dist/{chunk-XQUQSNCA.js → chunk-NHS7WLEQ.js} +4 -5
  91. package/dist/chunk-NHS7WLEQ.js.map +1 -0
  92. package/dist/chunk-NJMGCT63.js +54 -0
  93. package/dist/chunk-NJMGCT63.js.map +1 -0
  94. package/dist/chunk-O7ODGJYL.js +57 -0
  95. package/dist/chunk-O7ODGJYL.js.map +1 -0
  96. package/dist/chunk-OHROA3FQ.js +54 -0
  97. package/dist/chunk-OHROA3FQ.js.map +1 -0
  98. package/dist/chunk-OPYQ5KIO.js +52 -0
  99. package/dist/chunk-OPYQ5KIO.js.map +1 -0
  100. package/dist/chunk-OYV2DN66.js +50 -0
  101. package/dist/chunk-OYV2DN66.js.map +1 -0
  102. package/dist/chunk-OZAEWZZ3.js +31 -0
  103. package/dist/chunk-OZAEWZZ3.js.map +1 -0
  104. package/dist/chunk-PBBG7VFT.js +1896 -0
  105. package/dist/chunk-PBBG7VFT.js.map +1 -0
  106. package/dist/{chunk-HXWGG4K7.js → chunk-PJBQKMCD.js} +10 -20
  107. package/dist/chunk-PJBQKMCD.js.map +1 -0
  108. package/dist/chunk-Q2IAILVC.js +26 -0
  109. package/dist/chunk-Q2IAILVC.js.map +1 -0
  110. package/dist/chunk-Q6CDMOM6.js +57 -0
  111. package/dist/chunk-Q6CDMOM6.js.map +1 -0
  112. package/dist/{chunk-ALAMUIGJ.js → chunk-QGRDPSAH.js} +17 -12
  113. package/dist/chunk-QGRDPSAH.js.map +1 -0
  114. package/dist/{chunk-7QXJ4KWQ.js → chunk-RLGWMJD3.js} +63 -9
  115. package/dist/chunk-RLGWMJD3.js.map +1 -0
  116. package/dist/chunk-RO5IQEDQ.js +30 -0
  117. package/dist/chunk-RO5IQEDQ.js.map +1 -0
  118. package/dist/{chunk-ZC4KNEOQ.js → chunk-RQK5UPMP.js} +16 -11
  119. package/dist/chunk-RQK5UPMP.js.map +1 -0
  120. package/dist/chunk-RQYEEA2O.js +50 -0
  121. package/dist/chunk-RQYEEA2O.js.map +1 -0
  122. package/dist/chunk-SFUCUARB.js +21 -0
  123. package/dist/chunk-SFUCUARB.js.map +1 -0
  124. package/dist/{chunk-MVE5VVMQ.js → chunk-TRTUHCS4.js} +5 -8
  125. package/dist/chunk-TRTUHCS4.js.map +1 -0
  126. package/dist/chunk-TWGVQLG2.js +24 -0
  127. package/dist/chunk-TWGVQLG2.js.map +1 -0
  128. package/dist/chunk-UGK4TAVK.js +32 -0
  129. package/dist/chunk-UGK4TAVK.js.map +1 -0
  130. package/dist/{chunk-LPMPTQYP.js → chunk-UT2OPSN4.js} +12 -10
  131. package/dist/chunk-UT2OPSN4.js.map +1 -0
  132. package/dist/chunk-VGLHY6BK.js +31 -0
  133. package/dist/chunk-VGLHY6BK.js.map +1 -0
  134. package/dist/chunk-W7FLHT65.js +26 -0
  135. package/dist/chunk-W7FLHT65.js.map +1 -0
  136. package/dist/chunk-WL7HS7EM.js +50 -0
  137. package/dist/chunk-WL7HS7EM.js.map +1 -0
  138. package/dist/chunk-WSGEIVY3.js +1766 -0
  139. package/dist/chunk-WSGEIVY3.js.map +1 -0
  140. package/dist/{chunk-H3JR7MN3.js → chunk-XGJ2QERC.js} +17 -10
  141. package/dist/chunk-XGJ2QERC.js.map +1 -0
  142. package/dist/chunk-XHCBHYN4.js +54 -0
  143. package/dist/chunk-XHCBHYN4.js.map +1 -0
  144. package/dist/chunk-XLQI4IT2.js +54 -0
  145. package/dist/chunk-XLQI4IT2.js.map +1 -0
  146. package/dist/{chunk-3PBSL7BS.js → chunk-XRU5WXZX.js} +5 -8
  147. package/dist/chunk-XRU5WXZX.js.map +1 -0
  148. package/dist/{chunk-UZZD4MRJ.js → chunk-YAVGCQUP.js} +5 -8
  149. package/dist/chunk-YAVGCQUP.js.map +1 -0
  150. package/dist/chunk-YGZMVNN5.js +54 -0
  151. package/dist/chunk-YGZMVNN5.js.map +1 -0
  152. package/dist/{chunk-PEZYBKZH.js → chunk-YPT4JBUY.js} +10 -24
  153. package/dist/chunk-YPT4JBUY.js.map +1 -0
  154. package/dist/chunk-YUK3X3B4.js +27 -0
  155. package/dist/chunk-YUK3X3B4.js.map +1 -0
  156. package/dist/chunk-ZNWVJ6UW.js +54 -0
  157. package/dist/chunk-ZNWVJ6UW.js.map +1 -0
  158. package/dist/config-34LHOGLM.js +13 -0
  159. package/dist/config-3BBWD5AB.js +11 -0
  160. package/dist/{config-FNR6LJ5H.js → config-3IVQJBNW.js} +4 -2
  161. package/dist/config-4UDVSUQJ.js +11 -0
  162. package/dist/config-CMDBAPDH.js +11 -0
  163. package/dist/config-CVZ2AGCO.js +21 -0
  164. package/dist/config-D3RLSPNF.js +11 -0
  165. package/dist/config-DG65OEG3.js +11 -0
  166. package/dist/{config-HNSDNQZH.js → config-EIHSP5DZ.js} +4 -2
  167. package/dist/config-EO23EY62.js +15 -0
  168. package/dist/config-GCQK6NJY.js +11 -0
  169. package/dist/{config-5ZPGISS6.js → config-GE4W4ZJC.js} +4 -2
  170. package/dist/config-GHRUKEQ6.js +13 -0
  171. package/dist/config-GVH27UPE.js +11 -0
  172. package/dist/config-HKRMKD76.js +15 -0
  173. package/dist/config-HXVYIXP5.js +11 -0
  174. package/dist/config-IDZMEW73.js +11 -0
  175. package/dist/config-IJJXGLBQ.js +11 -0
  176. package/dist/config-IVY5EQQ2.js +15 -0
  177. package/dist/config-KJOLGVB2.js +11 -0
  178. package/dist/{config-S47UDVRZ.js → config-KMVCVBYN.js} +4 -2
  179. package/dist/{config-UKZ72IDO.js → config-KYTRXAB2.js} +4 -2
  180. package/dist/{config-MOLWOSRG.js → config-LHFFXVYI.js} +4 -2
  181. package/dist/config-NV5WXP64.js +11 -0
  182. package/dist/config-OT2TQQCN.js +11 -0
  183. package/dist/config-Q45Y46YT.js +15 -0
  184. package/dist/config-QAA646XB.js +15 -0
  185. package/dist/config-QNMKWJ4M.js +15 -0
  186. package/dist/config-QWCY3LBQ.js +11 -0
  187. package/dist/{config-HIZHA5VD.js → config-VM526IKB.js} +4 -2
  188. package/dist/config-WDAZFXYD.js +15 -0
  189. package/dist/config-ZFJYQZCH.js +13 -0
  190. package/dist/config-ZV6G2ZEC.js +11 -0
  191. package/dist/databricks_volume-HNQ4DJVJ.js +7 -0
  192. package/dist/digitalocean-6SPR4S7V.js +10 -0
  193. package/dist/discord-SAV2RBJV.js +8 -0
  194. package/dist/{disk-C7TJNU2B.js → disk-POACMF4G.js} +2 -2
  195. package/dist/dropbox-CQ7MTYX2.js +8 -0
  196. package/dist/email-KBQ7CXS7.js +8 -0
  197. package/dist/gcs-SMIE4VMT.js +10 -0
  198. package/dist/gdocs-X5Y2SIQX.js +8 -0
  199. package/dist/gdrive-SIQPRIGI.js +8 -0
  200. package/dist/github-KBHWANKQ.js +8 -0
  201. package/dist/github-KBHWANKQ.js.map +1 -0
  202. package/dist/github_ci-HPITNK37.js +8 -0
  203. package/dist/github_ci-HPITNK37.js.map +1 -0
  204. package/dist/gmail-DKHAGJNX.js +8 -0
  205. package/dist/gmail-DKHAGJNX.js.map +1 -0
  206. package/dist/gsheets-ZSUDIWGK.js +8 -0
  207. package/dist/gsheets-ZSUDIWGK.js.map +1 -0
  208. package/dist/gslides-GYXM7IMJ.js +8 -0
  209. package/dist/gslides-GYXM7IMJ.js.map +1 -0
  210. package/dist/hf_buckets-RIOMV7WG.js +10 -0
  211. package/dist/hf_buckets-RIOMV7WG.js.map +1 -0
  212. package/dist/hf_datasets-QF4BQ3OK.js +10 -0
  213. package/dist/hf_datasets-QF4BQ3OK.js.map +1 -0
  214. package/dist/hf_models-62GC2HPZ.js +10 -0
  215. package/dist/hf_models-62GC2HPZ.js.map +1 -0
  216. package/dist/hf_spaces-NVSMUNRM.js +10 -0
  217. package/dist/hf_spaces-NVSMUNRM.js.map +1 -0
  218. package/dist/index.d.ts +722 -277
  219. package/dist/index.js +646 -2268
  220. package/dist/index.js.map +1 -1
  221. package/dist/langfuse-HUAYVPHF.js +8 -0
  222. package/dist/langfuse-HUAYVPHF.js.map +1 -0
  223. package/dist/linear-2MM55KBC.js +8 -0
  224. package/dist/linear-2MM55KBC.js.map +1 -0
  225. package/dist/minio-L3XE6PQS.js +10 -0
  226. package/dist/minio-L3XE6PQS.js.map +1 -0
  227. package/dist/mongodb-ZOX4FRHJ.js +7 -0
  228. package/dist/mongodb-ZOX4FRHJ.js.map +1 -0
  229. package/dist/notion-UK4GTMT4.js +8 -0
  230. package/dist/notion-UK4GTMT4.js.map +1 -0
  231. package/dist/oci-NURLWPL2.js +10 -0
  232. package/dist/oci-NURLWPL2.js.map +1 -0
  233. package/dist/postgres-JNFMPAO2.js +7 -0
  234. package/dist/postgres-JNFMPAO2.js.map +1 -0
  235. package/dist/qingstor-W55D5YFO.js +10 -0
  236. package/dist/qingstor-W55D5YFO.js.map +1 -0
  237. package/dist/r2-FSZK7IFI.js +10 -0
  238. package/dist/r2-FSZK7IFI.js.map +1 -0
  239. package/dist/redis-S6GIPA4Z.js +8 -0
  240. package/dist/redis-S6GIPA4Z.js.map +1 -0
  241. package/dist/s3-GMPUJ65D.js +8 -0
  242. package/dist/s3-GMPUJ65D.js.map +1 -0
  243. package/dist/scaleway-5VM55Y6D.js +10 -0
  244. package/dist/scaleway-5VM55Y6D.js.map +1 -0
  245. package/dist/seaweedfs-J3EPUEPE.js +10 -0
  246. package/dist/seaweedfs-J3EPUEPE.js.map +1 -0
  247. package/dist/slack-FVBXY7KD.js +8 -0
  248. package/dist/slack-FVBXY7KD.js.map +1 -0
  249. package/dist/ssh-GCXETJ3Z.js +9 -0
  250. package/dist/ssh-GCXETJ3Z.js.map +1 -0
  251. package/dist/supabase-HLWNHBBE.js +10 -0
  252. package/dist/supabase-HLWNHBBE.js.map +1 -0
  253. package/dist/tencent-YDO73XBD.js +10 -0
  254. package/dist/tencent-YDO73XBD.js.map +1 -0
  255. package/dist/trello-CQ53BQUL.js +8 -0
  256. package/dist/trello-CQ53BQUL.js.map +1 -0
  257. package/dist/wasabi-SOZKPMRQ.js +10 -0
  258. package/dist/wasabi-SOZKPMRQ.js.map +1 -0
  259. package/package.json +39 -13
  260. package/dist/box-4P7DCJH7.js +0 -8
  261. package/dist/chunk-35PVZRWU.js +0 -24
  262. package/dist/chunk-35PVZRWU.js.map +0 -1
  263. package/dist/chunk-3PBSL7BS.js.map +0 -1
  264. package/dist/chunk-3Y625AUP.js +0 -24
  265. package/dist/chunk-3Y625AUP.js.map +0 -1
  266. package/dist/chunk-5E6BULAK.js.map +0 -1
  267. package/dist/chunk-5ITBZN55.js +0 -24
  268. package/dist/chunk-5ITBZN55.js.map +0 -1
  269. package/dist/chunk-6M2NL363.js.map +0 -1
  270. package/dist/chunk-6M3QVVOH.js +0 -32
  271. package/dist/chunk-6M3QVVOH.js.map +0 -1
  272. package/dist/chunk-6VKNSO6U.js.map +0 -1
  273. package/dist/chunk-6Y6GWMFF.js +0 -24
  274. package/dist/chunk-6Y6GWMFF.js.map +0 -1
  275. package/dist/chunk-7QXJ4KWQ.js.map +0 -1
  276. package/dist/chunk-ALAMUIGJ.js.map +0 -1
  277. package/dist/chunk-DCJQ2PIX.js.map +0 -1
  278. package/dist/chunk-EKPH4MMD.js +0 -27
  279. package/dist/chunk-EKPH4MMD.js.map +0 -1
  280. package/dist/chunk-FZ2GJ4BJ.js +0 -29
  281. package/dist/chunk-FZ2GJ4BJ.js.map +0 -1
  282. package/dist/chunk-G7O6DAWU.js.map +0 -1
  283. package/dist/chunk-GCB4JUF7.js.map +0 -1
  284. package/dist/chunk-GKQNMLQU.js +0 -7757
  285. package/dist/chunk-GKQNMLQU.js.map +0 -1
  286. package/dist/chunk-GO67AOYK.js +0 -24
  287. package/dist/chunk-GO67AOYK.js.map +0 -1
  288. package/dist/chunk-GPF66TH2.js +0 -24
  289. package/dist/chunk-GPF66TH2.js.map +0 -1
  290. package/dist/chunk-H3JR7MN3.js.map +0 -1
  291. package/dist/chunk-H74QYTN7.js.map +0 -1
  292. package/dist/chunk-HEQL3LPK.js.map +0 -1
  293. package/dist/chunk-HXWGG4K7.js.map +0 -1
  294. package/dist/chunk-I4RRGZGB.js +0 -24
  295. package/dist/chunk-I4RRGZGB.js.map +0 -1
  296. package/dist/chunk-ICSS5ETT.js.map +0 -1
  297. package/dist/chunk-KINMBZHC.js +0 -18
  298. package/dist/chunk-KINMBZHC.js.map +0 -1
  299. package/dist/chunk-LBBM3LKK.js.map +0 -1
  300. package/dist/chunk-LPMPTQYP.js.map +0 -1
  301. package/dist/chunk-M42JTWPR.js +0 -2794
  302. package/dist/chunk-M42JTWPR.js.map +0 -1
  303. package/dist/chunk-MVE5VVMQ.js.map +0 -1
  304. package/dist/chunk-MY3NUJJD.js.map +0 -1
  305. package/dist/chunk-NOZZFJEB.js.map +0 -1
  306. package/dist/chunk-OYJXYJTE.js.map +0 -1
  307. package/dist/chunk-PEZYBKZH.js.map +0 -1
  308. package/dist/chunk-QWWOBAYU.js +0 -26
  309. package/dist/chunk-QWWOBAYU.js.map +0 -1
  310. package/dist/chunk-RQYYYBQG.js +0 -24
  311. package/dist/chunk-RQYYYBQG.js.map +0 -1
  312. package/dist/chunk-T2WWAEKH.js +0 -7591
  313. package/dist/chunk-T2WWAEKH.js.map +0 -1
  314. package/dist/chunk-UWMOTOXA.js.map +0 -1
  315. package/dist/chunk-UZZD4MRJ.js.map +0 -1
  316. package/dist/chunk-V5OLWE7F.js.map +0 -1
  317. package/dist/chunk-VCLMTMSO.js +0 -23
  318. package/dist/chunk-VCLMTMSO.js.map +0 -1
  319. package/dist/chunk-WSDQ2MRG.js.map +0 -1
  320. package/dist/chunk-XDEEOTVK.js.map +0 -1
  321. package/dist/chunk-XQUQSNCA.js.map +0 -1
  322. package/dist/chunk-XVYZO2FG.js +0 -14
  323. package/dist/chunk-XVYZO2FG.js.map +0 -1
  324. package/dist/chunk-ZC4KNEOQ.js.map +0 -1
  325. package/dist/config-6HWSKHEU.js +0 -9
  326. package/dist/config-6TNFPYZF.js +0 -9
  327. package/dist/config-BHLXQ3OL.js +0 -9
  328. package/dist/config-E7UOEWEP.js +0 -9
  329. package/dist/config-IXLFUSMQ.js +0 -9
  330. package/dist/config-J3TM7NIS.js +0 -9
  331. package/dist/config-JXLZ4XEW.js +0 -9
  332. package/dist/config-KQCEMLNZ.js +0 -9
  333. package/dist/config-R3XJ5OW4.js +0 -9
  334. package/dist/config-V7XI5UTG.js +0 -9
  335. package/dist/config-YLIX3ZBT.js +0 -9
  336. package/dist/config-Z5JGDOKE.js +0 -9
  337. package/dist/config-ZCZZAH5W.js +0 -9
  338. package/dist/config-ZZGIWDUC.js +0 -9
  339. package/dist/discord-2PWP2MGX.js +0 -8
  340. package/dist/dropbox-L5DPYGKR.js +0 -8
  341. package/dist/email-HASRFBKC.js +0 -8
  342. package/dist/gcs-P5QMKTPR.js +0 -10
  343. package/dist/gdocs-IF2I35HZ.js +0 -8
  344. package/dist/gdrive-TAETVCKP.js +0 -8
  345. package/dist/github-5E6GSCNZ.js +0 -8
  346. package/dist/github_ci-2DSZI3Y7.js +0 -8
  347. package/dist/gmail-F5VYGKOT.js +0 -8
  348. package/dist/gsheets-BAO54CQ7.js +0 -8
  349. package/dist/gslides-A62CEEMR.js +0 -8
  350. package/dist/langfuse-YKBYRQLU.js +0 -8
  351. package/dist/linear-WJDQ6JDE.js +0 -8
  352. package/dist/mongodb-MK4DVSIK.js +0 -7
  353. package/dist/oci-KZ7XFZ2X.js +0 -10
  354. package/dist/postgres-M2N2APFZ.js +0 -7
  355. package/dist/r2-X4DDNSAZ.js +0 -10
  356. package/dist/redis-NVCXUUIO.js +0 -7
  357. package/dist/s3-HVAL7ZX3.js +0 -8
  358. package/dist/slack-GUQMDGLP.js +0 -8
  359. package/dist/ssh-LY6WYVVD.js +0 -9
  360. package/dist/supabase-H3ZP4Y3W.js +0 -10
  361. package/dist/trello-WR6TEDYD.js +0 -8
  362. /package/dist/{box-4P7DCJH7.js.map → aliyun-TMZRUYCG.js.map} +0 -0
  363. /package/dist/{config-5ZPGISS6.js.map → backblaze-OHW57DLK.js.map} +0 -0
  364. /package/dist/{config-6HWSKHEU.js.map → box-UXTCAFOZ.js.map} +0 -0
  365. /package/dist/{config-6TNFPYZF.js.map → ceph-TNN4I2FT.js.map} +0 -0
  366. /package/dist/{config-BHLXQ3OL.js.map → config-34LHOGLM.js.map} +0 -0
  367. /package/dist/{config-E7UOEWEP.js.map → config-3BBWD5AB.js.map} +0 -0
  368. /package/dist/{config-FNR6LJ5H.js.map → config-3IVQJBNW.js.map} +0 -0
  369. /package/dist/{config-HIZHA5VD.js.map → config-4UDVSUQJ.js.map} +0 -0
  370. /package/dist/{config-HNSDNQZH.js.map → config-CMDBAPDH.js.map} +0 -0
  371. /package/dist/{config-IXLFUSMQ.js.map → config-CVZ2AGCO.js.map} +0 -0
  372. /package/dist/{config-J3TM7NIS.js.map → config-D3RLSPNF.js.map} +0 -0
  373. /package/dist/{config-JXLZ4XEW.js.map → config-DG65OEG3.js.map} +0 -0
  374. /package/dist/{config-KQCEMLNZ.js.map → config-EIHSP5DZ.js.map} +0 -0
  375. /package/dist/{config-MOLWOSRG.js.map → config-EO23EY62.js.map} +0 -0
  376. /package/dist/{config-R3XJ5OW4.js.map → config-GCQK6NJY.js.map} +0 -0
  377. /package/dist/{config-S47UDVRZ.js.map → config-GE4W4ZJC.js.map} +0 -0
  378. /package/dist/{config-UKZ72IDO.js.map → config-GHRUKEQ6.js.map} +0 -0
  379. /package/dist/{config-V7XI5UTG.js.map → config-GVH27UPE.js.map} +0 -0
  380. /package/dist/{config-YLIX3ZBT.js.map → config-HKRMKD76.js.map} +0 -0
  381. /package/dist/{config-Z5JGDOKE.js.map → config-HXVYIXP5.js.map} +0 -0
  382. /package/dist/{config-ZCZZAH5W.js.map → config-IDZMEW73.js.map} +0 -0
  383. /package/dist/{config-ZZGIWDUC.js.map → config-IJJXGLBQ.js.map} +0 -0
  384. /package/dist/{discord-2PWP2MGX.js.map → config-IVY5EQQ2.js.map} +0 -0
  385. /package/dist/{disk-C7TJNU2B.js.map → config-KJOLGVB2.js.map} +0 -0
  386. /package/dist/{dropbox-L5DPYGKR.js.map → config-KMVCVBYN.js.map} +0 -0
  387. /package/dist/{email-HASRFBKC.js.map → config-KYTRXAB2.js.map} +0 -0
  388. /package/dist/{gcs-P5QMKTPR.js.map → config-LHFFXVYI.js.map} +0 -0
  389. /package/dist/{gdocs-IF2I35HZ.js.map → config-NV5WXP64.js.map} +0 -0
  390. /package/dist/{gdrive-TAETVCKP.js.map → config-OT2TQQCN.js.map} +0 -0
  391. /package/dist/{github-5E6GSCNZ.js.map → config-Q45Y46YT.js.map} +0 -0
  392. /package/dist/{github_ci-2DSZI3Y7.js.map → config-QAA646XB.js.map} +0 -0
  393. /package/dist/{gmail-F5VYGKOT.js.map → config-QNMKWJ4M.js.map} +0 -0
  394. /package/dist/{gsheets-BAO54CQ7.js.map → config-QWCY3LBQ.js.map} +0 -0
  395. /package/dist/{gslides-A62CEEMR.js.map → config-VM526IKB.js.map} +0 -0
  396. /package/dist/{langfuse-YKBYRQLU.js.map → config-WDAZFXYD.js.map} +0 -0
  397. /package/dist/{linear-WJDQ6JDE.js.map → config-ZFJYQZCH.js.map} +0 -0
  398. /package/dist/{mongodb-MK4DVSIK.js.map → config-ZV6G2ZEC.js.map} +0 -0
  399. /package/dist/{oci-KZ7XFZ2X.js.map → databricks_volume-HNQ4DJVJ.js.map} +0 -0
  400. /package/dist/{postgres-M2N2APFZ.js.map → digitalocean-6SPR4S7V.js.map} +0 -0
  401. /package/dist/{r2-X4DDNSAZ.js.map → discord-SAV2RBJV.js.map} +0 -0
  402. /package/dist/{redis-NVCXUUIO.js.map → disk-POACMF4G.js.map} +0 -0
  403. /package/dist/{s3-HVAL7ZX3.js.map → dropbox-CQ7MTYX2.js.map} +0 -0
  404. /package/dist/{slack-GUQMDGLP.js.map → email-KBQ7CXS7.js.map} +0 -0
  405. /package/dist/{ssh-LY6WYVVD.js.map → gcs-SMIE4VMT.js.map} +0 -0
  406. /package/dist/{supabase-H3ZP4Y3W.js.map → gdocs-X5Y2SIQX.js.map} +0 -0
  407. /package/dist/{trello-WR6TEDYD.js.map → gdrive-SIQPRIGI.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/resource/gcs/gcs.ts","../src/resource/gcs/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 { ResourceName, type RegisteredCommand, type RegisteredOp } from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport { gcsToS3Config, redactGcsConfig, type GCSConfig, type GCSConfigRedacted } from './config.ts'\nimport { GCS_PROMPT } from './prompt.ts'\n\nexport interface GCSResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GCSConfigRedacted\n}\n\nfunction remapOpsResource(ops: readonly RegisteredOp[], to: string): RegisteredOp[] {\n return ops.map((op) => (op.resource === ResourceName.S3 ? { ...op, resource: to } : op))\n}\n\nfunction remapCommandsResource(\n commands: readonly RegisteredCommand[],\n to: string,\n): RegisteredCommand[] {\n return commands.map((cmd) => {\n if (cmd.resource !== ResourceName.S3) return cmd\n const proto = Object.getPrototypeOf(cmd) as object\n const copy = Object.assign(Object.create(proto) as RegisteredCommand, cmd)\n Object.assign(copy, { resource: to })\n return copy\n })\n}\n\nexport class GCSResource extends S3Resource {\n override readonly kind: string = ResourceName.GCS\n override readonly prompt: string = GCS_PROMPT\n readonly gcsConfig: GCSConfig\n private readonly gcsOps: readonly RegisteredOp[]\n private readonly gcsCommands: readonly RegisteredCommand[]\n\n constructor(config: GCSConfig) {\n super(gcsToS3Config(config))\n this.gcsConfig = config\n this.gcsOps = remapOpsResource(super.ops(), ResourceName.GCS)\n this.gcsCommands = remapCommandsResource(super.commands(), ResourceName.GCS)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.gcsOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.gcsCommands\n }\n\n override getState(): Promise<GCSResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['accessKeyId', 'secretAccessKey'],\n config: redactGcsConfig(this.gcsConfig),\n })\n }\n\n override loadState(_state: GCSResourceState): 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\nexport const GCS_PROMPT = `\\\n{prefix}\n Remote Google Cloud Storage bucket.\n IMPORTANT: This is a remote mount. Prefer targeted reads over full scans.\n Supports: ls, cat, head, tail, grep, rg, wc, find, tree, jq, stat.\n cat on .parquet/.orc/.feather returns a formatted table.`\n"],"mappings":";;;;;;;;;AAcA,SAAS,oBAA+D;;;ACAjE,IAAM,aAAa;AAAA;AAAA;AAAA;AAAA;;;ADY1B,SAAS,iBAAiB,KAA8B,IAA4B;AAClF,SAAO,IAAI,IAAI,CAAC,OAAQ,GAAG,aAAa,aAAa,KAAK,EAAE,GAAG,IAAI,UAAU,GAAG,IAAI,EAAG;AACzF;AAEA,SAAS,sBACP,UACA,IACqB;AACrB,SAAO,SAAS,IAAI,CAAC,QAAQ;AAC3B,QAAI,IAAI,aAAa,aAAa,GAAI,QAAO;AAC7C,UAAM,QAAQ,OAAO,eAAe,GAAG;AACvC,UAAM,OAAO,OAAO,OAAO,OAAO,OAAO,KAAK,GAAwB,GAAG;AACzE,WAAO,OAAO,MAAM,EAAE,UAAU,GAAG,CAAC;AACpC,WAAO;AAAA,EACT,CAAC;AACH;AAEO,IAAM,cAAN,cAA0B,WAAW;AAAA,EACxB,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAmB;AAC7B,UAAM,cAAc,MAAM,CAAC;AAC3B,SAAK,YAAY;AACjB,SAAK,SAAS,iBAAiB,MAAM,IAAI,GAAG,aAAa,GAAG;AAC5D,SAAK,cAAc,sBAAsB,MAAM,SAAS,GAAG,aAAa,GAAG;AAAA,EAC7E;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAsC;AAC7C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,eAAe,iBAAiB;AAAA,MACjD,QAAQ,gBAAgB,KAAK,SAAS;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAAyC;AAC1D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/resource/gdocs/gdocs.ts"],"sourcesContent":["// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n type FileStat,\n GDOCS_COMMANDS,\n GDOCS_PROMPT,\n GDOCS_VFS_OPS,\n GDOCS_WRITE_PROMPT,\n GDocsAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gdocsRead,\n gdocsReaddir,\n gdocsResolveGlob,\n gdocsStat,\n} from '@struktoai/mirage-core'\nimport { redactGDocsConfig, type GDocsConfig, type GDocsConfigRedacted } from './config.ts'\n\nexport interface GDocsResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GDocsConfigRedacted\n}\n\nexport class GDocsResource implements Resource {\n readonly kind: string = ResourceName.GDOCS\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GDOCS_PROMPT\n readonly writePrompt: string = GDOCS_WRITE_PROMPT\n readonly config: GDocsConfig\n readonly accessor: GDocsAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GDocsConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken: config.refreshToken,\n })\n this.accessor = new GDocsAccessor({ tokenManager: tm })\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GDOCS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GDOCS_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gdocsRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gdocsReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gdocsStat(this.accessor, p, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return gdocsResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GDocsResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\n config: redactGDocsConfig(this.config),\n })\n }\n\n loadState(_state: GDocsResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB,CAAC;AACD,SAAK,WAAW,IAAI,cAAc,EAAE,cAAc,GAAG,CAAC;AACtD,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,MAAO,CAAC;AAAA,EACrD;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,iBAAiB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC9D;AAAA,EAEA,WAAwC;AACtC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/resource/email/email.ts","../src/accessor/email.ts","../src/commands/builtin/email/basename.ts","../src/commands/builtin/email/cat.ts","../src/core/email/glob.ts","../src/core/email/readdir.ts","../src/core/email/_parse.ts","../src/core/email/_client.ts","../src/core/email/folders.ts","../src/core/email/read.ts","../src/commands/builtin/email/provision.ts","../src/commands/builtin/email/dirname.ts","../src/commands/builtin/email/find.ts","../src/commands/builtin/email/email_forward.ts","../src/core/email/send.ts","../src/commands/builtin/email/grep.ts","../src/core/email/stat.ts","../src/core/email/scope.ts","../src/core/email/search.ts","../src/commands/builtin/email/head.ts","../src/commands/builtin/email/jq.ts","../src/commands/builtin/email/ls.ts","../src/commands/builtin/email/nl.ts","../src/commands/builtin/email/email_read.ts","../src/commands/builtin/email/realpath.ts","../src/commands/builtin/email/email_reply.ts","../src/commands/builtin/email/email_reply_all.ts","../src/commands/builtin/email/rg.ts","../src/commands/builtin/email/email_send.ts","../src/commands/builtin/email/stat.ts","../src/commands/builtin/email/tail.ts","../src/commands/builtin/email/tree.ts","../src/commands/builtin/email/email_triage.ts","../src/commands/builtin/email/wc.ts","../src/commands/builtin/email/index.ts","../src/ops/email/read.ts","../src/ops/email/readdir.ts","../src/ops/email/stat.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 PathSpec,\n RAMIndexCacheStore,\n ResourceName,\n type FileStat,\n type IndexCacheStore,\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 { resolveGlob } from '../../core/email/glob.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\nexport interface EmailResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: EmailConfigRedacted\n}\n\nexport class EmailResource implements Resource {\n readonly kind: string = ResourceName.EMAIL\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = EMAIL_PROMPT\n readonly config: EmailConfig\n readonly accessor: EmailAccessor\n readonly index: IndexCacheStore\n\n constructor(config: EmailConfig) {\n this.config = config\n this.accessor = new EmailAccessor(config)\n this.index = new RAMIndexCacheStore({ ttl: 86_400 })\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 async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.remoteTime ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return resolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<EmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['password'],\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 return this.clientPromise\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 {\n IOResult,\n ResourceName,\n command,\n specOf,\n type Accessor,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\n\nconst ENC = new TextEncoder()\n\nfunction basenameOf(p: string): string {\n const trimmed = p.replace(/\\/+$/, '')\n const idx = trimmed.lastIndexOf('/')\n return idx === -1 ? trimmed : trimmed.slice(idx + 1)\n}\n\nfunction basenameCommand(\n _accessor: Accessor,\n _paths: PathSpec[],\n texts: string[],\n _opts: CommandOpts,\n): CommandFnResult {\n const lines = texts.map((t) => basenameOf(t))\n const out: ByteSource = ENC.encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n}\n\nexport const EMAIL_BASENAME = command({\n name: 'basename',\n resource: ResourceName.EMAIL,\n spec: specOf('basename'),\n fn: basenameCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n AsyncLineIterator,\n IOResult,\n ResourceName,\n command,\n resolveSource,\n specOf,\n wrapBytes,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { fileReadProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nasync function* numberLinesStream(source: AsyncIterable<Uint8Array>): AsyncIterable<Uint8Array> {\n let num = 1\n const lineIter = new AsyncLineIterator(source)\n for await (const line of lineIter) {\n yield ENC.encode(` ${String(num)}\\t`)\n yield line\n yield ENC.encode('\\n')\n num += 1\n }\n}\n\nasync function catCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const nFlag = opts.flags.n === true\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n const data = await emailRead(accessor, first, opts.index ?? undefined)\n const io = new IOResult({ reads: { [first.stripPrefix]: data }, cache: [first.stripPrefix] })\n if (nFlag) return [numberLinesStream(wrapBytes(data)), io]\n return [data, io]\n }\n try {\n const source = resolveSource(opts.stdin, 'cat: missing operand')\n if (nFlag) return [numberLinesStream(source), new IOResult()]\n return [source, new IOResult()]\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(`${msg}\\n`) })]\n }\n}\n\nexport const EMAIL_CAT = command({\n name: 'cat',\n resource: ResourceName.EMAIL,\n spec: specOf('cat'),\n fn: catCommand,\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 { IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport { PathSpec as PathSpecCtor } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { readdir } from './readdir.ts'\n\nconst SCOPE_ERROR = 1000\n\nfunction fnmatch(name: string, pattern: string): boolean {\n const re = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\?/g, '.')\n .replace(/\\*/g, '.*')\n return new RegExp(`^${re}$`).test(name)\n}\n\nexport async function resolveGlob(\n accessor: EmailAccessor,\n paths: readonly PathSpec[],\n index?: IndexCacheStore,\n): Promise<PathSpec[]> {\n const result: PathSpec[] = []\n for (const p of paths) {\n if (p.resolved) {\n result.push(p)\n continue\n }\n if (p.pattern !== null && p.pattern !== '') {\n const entries = await readdir(accessor, p, index)\n const matched: PathSpec[] = []\n for (const entry of entries) {\n const trimmed = entry.replace(/\\/+$/, '')\n const base = trimmed.split('/').pop() ?? trimmed\n if (!fnmatch(base, p.pattern)) continue\n matched.push(PathSpecCtor.fromStrPath(trimmed, p.prefix))\n }\n const truncated = matched.length > SCOPE_ERROR ? matched.slice(0, SCOPE_ERROR) : matched\n result.push(...truncated)\n } else {\n result.push(p)\n }\n }\n return result\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport { IndexEntry, PathSpec as PathSpecCtor } 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 = path.prefix\n const raw = path.pattern !== null ? path.directory : path.original\n let p = raw\n if (prefix !== '' && p.startsWith(prefix)) p = p.slice(prefix.length) || '/'\n const key = p.replace(/^\\/+|\\/+$/g, '')\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.original)\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.original)\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({ original: folderPath, directory: folderPath, prefix })\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.original)\n }\n\n throw enoent(path.original)\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\nexport interface 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\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: parsed.date instanceof Date ? parsed.date.toUTCString() : '',\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.path)\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 const msg = await imap.fetchOne(uid, { headers: true, flags: true, uid: true }, { uid: true })\n if (msg === false) continue\n const headers =\n msg.headers instanceof Buffer ? new Uint8Array(msg.headers) : new Uint8Array(0)\n const parsed = await parseRfc822(headers, true)\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, PathSpec } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { fetchAttachment, fetchMessage } from './_client.ts'\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\nfunction dirname(p: string): string {\n const norm = p.replace(/\\/+$/, '')\n const idx = norm.lastIndexOf('/')\n if (idx <= 0) return '/'\n return norm.slice(0, idx)\n}\n\nexport async function read(\n accessor: EmailAccessor,\n path: PathSpec,\n index?: IndexCacheStore,\n): Promise<Uint8Array> {\n const prefix = path.prefix\n let p = path.original\n if (prefix !== '' && p.startsWith(prefix)) p = p.slice(prefix.length) || '/'\n const key = p.replace(/^\\/+|\\/+$/g, '')\n if (index === undefined) throw enoent(path.original)\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.original)\n const rt = result.entry.resourceType\n if (rt === 'email/folder' || rt === 'email/date' || rt === 'email/attachment_dir') {\n throw eisdir(path.original)\n }\n if (rt === 'email/attachment') {\n const parentKey = dirname(virtualKey)\n const parentResult = await index.get(parentKey)\n if (parentResult.entry === undefined || parentResult.entry === null) {\n throw enoent(path.original)\n }\n const uid = parentResult.entry.id\n const parts = virtualKey.replace(/^\\/+|\\/+$/g, '').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.original)\n return data\n }\n const parts = virtualKey.replace(/^\\/+|\\/+$/g, '').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 {\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.original)\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 IOResult,\n ResourceName,\n command,\n specOf,\n type Accessor,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\n\nconst ENC = new TextEncoder()\n\nfunction dirnameOf(p: string): string {\n const trimmed = p.replace(/\\/+$/, '')\n const idx = trimmed.lastIndexOf('/')\n if (idx === -1) return '.'\n if (idx === 0) return '/'\n return trimmed.slice(0, idx)\n}\n\nfunction dirnameCommand(\n _accessor: Accessor,\n _paths: PathSpec[],\n texts: string[],\n _opts: CommandOpts,\n): CommandFnResult {\n const lines = texts.map((t) => dirnameOf(t))\n const out: ByteSource = ENC.encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n}\n\nexport const EMAIL_DIRNAME = command({\n name: 'dirname',\n resource: ResourceName.EMAIL,\n spec: specOf('dirname'),\n fn: dirnameCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { metadataProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nfunction fnmatch(name: string, pattern: string): boolean {\n const re = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\?/g, '.')\n .replace(/\\*/g, '.*')\n return new RegExp(`^${re}$`).test(name)\n}\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 isFolder = child.endsWith('/')\n const trimmed = isFolder ? child.replace(/\\/+$/, '') : child\n results.push(trimmed)\n if (isFolder) {\n const childSpec = new PathSpec({\n original: trimmed,\n directory: trimmed,\n resolved: false,\n prefix: path.prefix,\n })\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 original: '/',\n directory: '/',\n resolved: false,\n prefix: opts.mountPrefix ?? '',\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\n const allPaths = await walk(accessor, p0, opts.index, maxDepth, 0)\n const searchKey = p0.stripPrefix.replace(/^\\/+|\\/+$/g, '')\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(p0.prefix) ? p.slice(p0.prefix.length) : p\n const trimmed = stripped.replace(/^\\/+|\\/+$/g, '')\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 = ENC.encode(results.join('\\n'))\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 {\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: 'email-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\nlet 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\nexport function _resetTransporterCacheForTests(): void {\n transporterCache = new WeakMap()\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n IOResult,\n PathSpec,\n ResourceName,\n command,\n compilePattern,\n exitOnEmpty,\n grepFilesOnly,\n grepLines,\n grepStream,\n prefixAggregate,\n quietMatch,\n resolveSource,\n specOf,\n yieldBytes,\n type AsyncReadBytesFn,\n type AsyncReaddirFn,\n type AsyncStatFn,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.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 { fileReadProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\ninterface FlagSet {\n ignoreCase: boolean\n invert: boolean\n lineNumbers: boolean\n countOnly: boolean\n filesOnly: boolean\n wholeWord: boolean\n fixedString: boolean\n onlyMatching: boolean\n maxCount: number | null\n quiet: boolean\n afterContext: number\n beforeContext: number\n}\n\nfunction parseFlags(flags: Record<string, string | boolean>): FlagSet {\n const toInt = (v: string | boolean | undefined): number | null =>\n typeof v === 'string' ? Number.parseInt(v, 10) : null\n const aCtx = toInt(flags.A)\n const bCtx = toInt(flags.B)\n const cCtx = toInt(flags.C)\n return {\n ignoreCase: flags.i === true,\n invert: flags.v === true,\n lineNumbers: flags.n === true,\n countOnly: flags.c === true,\n filesOnly: flags.args_l === true || flags.l === true,\n wholeWord: flags.w === true,\n fixedString: flags.F === true,\n onlyMatching: flags.o === true,\n maxCount: toInt(flags.m),\n quiet: flags.q === true,\n afterContext: aCtx ?? cCtx ?? 0,\n beforeContext: bCtx ?? cCtx ?? 0,\n }\n}\n\nfunction getPattern(texts: readonly string[], flags: Record<string, string | boolean>): string {\n if (typeof flags.e === 'string') return flags.e\n if (texts.length > 0 && texts[0] !== undefined) return texts[0]\n throw new Error('grep: usage: grep [flags] pattern [path]')\n}\n\nfunction splitLinesNoTrailing(text: string): string[] {\n const stripped = text.endsWith('\\n') ? text.slice(0, -1) : text\n return stripped === '' ? [] : stripped.split('\\n')\n}\n\nasync function 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 const recursive = opts.flags.r === true || opts.flags.R === true\n\n if (paths.length > 0) {\n const first = paths[0]\n if (first !== undefined) {\n const scope = detectScope(first)\n if (scope.useNative) {\n const filePrefix = first.prefix !== '' ? first.prefix : ''\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 const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n if (resolved.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const filePrefix = resolved[0]?.prefix ?? ''\n const readdirFn: AsyncReaddirFn = async (path) => {\n const spec = new PathSpec({\n original: path,\n directory: path,\n resolved: false,\n prefix: filePrefix,\n })\n return emailReaddir(accessor, spec, opts.index ?? undefined)\n }\n const statFn: AsyncStatFn = async (path) => {\n const spec = new PathSpec({\n original: path,\n directory: path,\n resolved: false,\n prefix: filePrefix,\n })\n return emailStat(accessor, spec, opts.index ?? undefined)\n }\n const readBytesFn: AsyncReadBytesFn = async (path) => {\n const spec = new PathSpec({\n original: path,\n directory: path,\n resolved: true,\n prefix: filePrefix,\n })\n return emailRead(accessor, spec, opts.index ?? undefined)\n }\n\n if (f.filesOnly) {\n const warnings: string[] = []\n const firstResolved = resolved[0]\n if (firstResolved === undefined) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const results = await grepFilesOnly(\n readdirFn,\n statFn,\n readBytesFn,\n firstResolved.original,\n pattern,\n {\n recursive,\n ignoreCase: f.ignoreCase,\n invert: f.invert,\n lineNumbers: f.lineNumbers,\n countOnly: f.countOnly,\n fixedString: f.fixedString,\n onlyMatching: f.onlyMatching,\n maxCount: f.maxCount,\n wholeWord: f.wholeWord,\n },\n warnings,\n )\n const stderr = warnings.length > 0 ? ENC.encode(warnings.join('\\n')) : null\n if (results.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1, stderr })]\n const out: ByteSource = ENC.encode(results.join('\\n'))\n return [out, new IOResult({ stderr })]\n }\n\n const pat = compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord)\n\n if (resolved.length > 1) {\n const allResults: string[] = []\n for (const p of resolved) {\n const data = splitLinesNoTrailing(\n DEC.decode(await emailRead(accessor, p, opts.index ?? undefined)),\n )\n const hits = grepLines(p.original, data, pat, f)\n if (f.countOnly) {\n if (hits.length > 0) allResults.push(`${p.original}:${hits[0] ?? ''}`)\n } else {\n for (const h of hits) allResults.push(`${p.original}:${h}`)\n }\n }\n if (allResults.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(allResults.join('\\n'))\n return [out, new IOResult()]\n }\n\n const firstResolved = resolved[0]\n if (firstResolved === undefined) return [null, new IOResult()]\n const data = await emailRead(accessor, firstResolved, opts.index ?? undefined)\n const source = yieldBytes(data)\n const stream = grepStream(source, pat, f)\n if (f.quiet) {\n const io = new IOResult({ exitCode: 1 })\n return [quietMatch(stream, io), io]\n }\n const io = new IOResult()\n return [exitOnEmpty(stream, io), io]\n }\n\n let source: AsyncIterable<Uint8Array>\n try {\n source = resolveSource(opts.stdin, 'grep: usage: grep [flags] pattern [path]')\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode(`${msg}\\n`) })]\n }\n const pat = compilePattern(pattern, f.ignoreCase, f.fixedString, f.wholeWord)\n const stream = grepStream(source, pat, f)\n if (f.quiet) {\n const io = new IOResult({ exitCode: 1 })\n return [quietMatch(stream, io), io]\n }\n const io = new IOResult()\n return [exitOnEmpty(stream, io), io]\n}\n\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 { IndexCacheStore, PathSpec } from '@struktoai/mirage-core'\nimport { FileStat, FileType } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { listFolders } from './folders.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 = path.prefix\n let p = path.original\n if (prefix !== '' && p.startsWith(prefix)) p = p.slice(prefix.length) || '/'\n const key = p.replace(/^\\/+|\\/+$/g, '')\n if (key === '') return new FileStat({ name: '/', type: FileType.DIRECTORY })\n\n if (index === undefined) throw enoent(path.original)\n const virtualKey = prefix !== '' ? `${prefix}/${key}` : `/${key}`\n const 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.original)\n }\n throw enoent(path.original)\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 { PathSpec } 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 = path.stripPrefix.replace(/^\\/+|\\/+$/g, '')\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\nexport function extractFolder(paths: readonly PathSpec[]): string | null {\n if (paths.length === 0) return null\n const p = paths[0]\n if (p === undefined) return null\n const key = p.stripPrefix.replace(/^\\/+|\\/+$/g, '')\n const parts = key.split('/').filter((s) => s !== '')\n return parts[0] ?? null\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\nexport function 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 IOResult,\n ResourceName,\n command,\n readStdinAsync,\n specOf,\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 { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { fileReadProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nfunction headBytes(data: Uint8Array, lines: number, bytesMode: number | null): Uint8Array {\n if (bytesMode !== null) return data.slice(0, bytesMode)\n let count = 0\n let end = 0\n for (let i = 0; i < data.byteLength && count < lines; i++) {\n if (data[i] === 0x0a) {\n count += 1\n end = i + 1\n }\n }\n if (count < lines) return data\n return data.slice(0, end - 1)\n}\n\nasync function headCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const lines = typeof opts.flags.n === 'string' ? Number.parseInt(opts.flags.n, 10) : 10\n const bytesMode = typeof opts.flags.c === 'string' ? Number.parseInt(opts.flags.c, 10) : null\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n const data = await emailRead(accessor, first, opts.index ?? undefined)\n const out: ByteSource = headBytes(data, lines, bytesMode)\n return [out, new IOResult()]\n }\n const raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('head: missing operand\\n') })]\n }\n const out: ByteSource = headBytes(raw, lines, bytesMode)\n return [out, new IOResult()]\n}\n\nexport const EMAIL_HEAD = command({\n name: 'head',\n resource: ResourceName.EMAIL,\n spec: specOf('head'),\n fn: headCommand,\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 {\n IOResult,\n ResourceName,\n command,\n jqEval,\n parseJsonAuto,\n parseJsonPath,\n readStdinAsync,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\n\nconst ENC = new TextEncoder()\n\nfunction formatResult(result: unknown, raw: boolean, compact: boolean): Uint8Array {\n if (raw && typeof result === 'string') return ENC.encode(result + '\\n')\n const json = compact ? JSON.stringify(result) : JSON.stringify(result, null, 2)\n return ENC.encode(json + '\\n')\n}\n\nfunction formatResults(\n results: unknown,\n raw: boolean,\n compact: boolean,\n spread: boolean,\n): Uint8Array {\n if (spread && Array.isArray(results)) {\n const parts: Uint8Array[] = []\n for (const item of results) parts.push(formatResult(item, raw, compact))\n let total = 0\n for (const p of parts) total += p.byteLength\n const out = new Uint8Array(total)\n let offset = 0\n for (const p of parts) {\n out.set(p, offset)\n offset += p.byteLength\n }\n return out\n }\n return formatResult(results, raw, compact)\n}\n\nasync function jqCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (texts.length === 0 || texts[0] === undefined) {\n return [\n null,\n new IOResult({ exitCode: 2, stderr: ENC.encode('jq: usage: jq EXPRESSION [path]\\n') }),\n ]\n }\n const expression = texts[0]\n const r = opts.flags.r === true\n const c = opts.flags.c === true\n const s = opts.flags.s === true\n const spread = expression.includes('[]')\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const parts: Uint8Array[] = []\n for (const p of resolved) {\n const raw = await emailRead(accessor, p, opts.index ?? undefined)\n let data = parseJsonPath(raw, p.original)\n if (s) data = Array.isArray(data) ? data : [data]\n const result = await jqEval(data, expression.trim())\n parts.push(formatResults(result, r, c, spread))\n }\n let total = 0\n for (const part of parts) total += part.byteLength\n const out = new Uint8Array(total)\n let offset = 0\n for (const part of parts) {\n out.set(part, offset)\n offset += part.byteLength\n }\n const result: ByteSource = out\n return [result, new IOResult()]\n }\n const raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [null, new IOResult({ exitCode: 2, stderr: ENC.encode('jq: missing input\\n') })]\n }\n let data = parseJsonAuto(raw)\n if (s && !Array.isArray(data)) data = [data]\n const result = await jqEval(data, expression.trim())\n const out: ByteSource = formatResults(result, r, c, spread)\n return [out, new IOResult()]\n}\n\nexport const EMAIL_JQ = command({\n name: 'jq',\n resource: ResourceName.EMAIL,\n spec: specOf('jq'),\n fn: jqCommand,\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 humanSize,\n specOf,\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 { resolveGlob } from '../../../core/email/glob.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\nimport { metadataProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nasync function lsEntries(\n accessor: EmailAccessor,\n path: PathSpec,\n allFiles: boolean,\n sortBy: 'name' | 'size',\n reverse: boolean,\n recursive: boolean,\n listDir: boolean,\n warnings: string[],\n indexCache: CommandOpts['index'],\n): Promise<FileStat[]> {\n if (listDir) {\n const s = await emailStat(accessor, path, indexCache ?? undefined)\n return [s]\n }\n let entries: string[]\n try {\n entries = await emailReaddir(accessor, path, indexCache ?? undefined)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${path.original}': ${msg}`)\n return []\n }\n const stats: FileStat[] = []\n for (const entry of entries) {\n try {\n const eSpec = new PathSpec({\n original: entry,\n directory: entry,\n resolved: false,\n prefix: path.prefix,\n })\n const s = await emailStat(accessor, eSpec, indexCache ?? undefined)\n if (!allFiles && s.name.startsWith('.')) continue\n stats.push(s)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${entry}': ${msg}`)\n }\n }\n if (sortBy === 'size') {\n stats.sort((a, b) => (a.size ?? 0) - (b.size ?? 0))\n if (!reverse) stats.reverse()\n } else {\n stats.sort((a, b) => a.name.localeCompare(b.name))\n if (reverse) stats.reverse()\n }\n if (recursive) {\n const subEntries: FileStat[] = []\n for (const s of stats) {\n subEntries.push(s)\n if (s.type === FileType.DIRECTORY) {\n const childPath = path.child(s.name)\n const childSpec = new PathSpec({\n original: childPath,\n directory: childPath,\n resolved: false,\n prefix: path.prefix,\n })\n const sub = await lsEntries(\n accessor,\n childSpec,\n allFiles,\n sortBy,\n reverse,\n recursive,\n false,\n warnings,\n indexCache,\n )\n subEntries.push(...sub)\n }\n }\n return subEntries\n }\n return stats\n}\n\nasync function lsCommand(\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 targets: PathSpec[] =\n resolved.length > 0\n ? resolved\n : [\n new PathSpec({\n original: opts.cwd,\n directory: opts.cwd,\n resolved: false,\n prefix: opts.mountPrefix ?? '',\n }),\n ]\n const long = opts.flags.args_l === true\n const allFiles = opts.flags.a === true || opts.flags.A === true\n const human = opts.flags.h === true\n const reverse = opts.flags.r === true\n const recursive = opts.flags.R === true\n const listDir = opts.flags.d === true\n const classify = opts.flags.F === true\n const sortBy: 'name' | 'size' = opts.flags.S === true ? 'size' : 'name'\n const warnings: string[] = []\n const results: string[] = []\n for (const p of targets) {\n let entries: FileStat[]\n try {\n entries = await lsEntries(\n accessor,\n p,\n allFiles,\n sortBy,\n reverse,\n recursive,\n listDir,\n warnings,\n opts.index,\n )\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`ls: cannot access '${p.original}': ${msg}`)\n continue\n }\n if (long) {\n for (const e of entries) {\n const sizeStr = human ? humanSize(e.size ?? 0) : String(e.size ?? 0)\n results.push(`${e.type ?? '-'}\\t${sizeStr}\\t${e.modified ?? ''}\\t${e.name}`)\n }\n } else {\n for (const e of entries) {\n const isDir = classify && e.type === FileType.DIRECTORY\n const name = isDir ? e.name + '/' : e.name\n results.push(name)\n }\n }\n }\n const stderr = warnings.length > 0 ? ENC.encode(warnings.join('\\n')) : null\n const exitCode = warnings.length > 0 && results.length === 0 ? 1 : 0\n const out: ByteSource = ENC.encode(results.join('\\n'))\n return [out, new IOResult({ stderr, exitCode })]\n}\n\nexport const EMAIL_LS = command({\n name: 'ls',\n resource: ResourceName.EMAIL,\n spec: specOf('ls'),\n fn: lsCommand,\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 {\n IOResult,\n ResourceName,\n command,\n readStdinAsync,\n specOf,\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 { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\nfunction shouldNumber(line: string, mode: string, pattern: RegExp | null): boolean {\n if (mode === 'n') return false\n if (mode === 'a') return true\n if (mode === 'p' && pattern !== null) return pattern.test(line)\n return line.trim() !== ''\n}\n\nfunction pad(n: number, width: number): string {\n const s = String(n)\n return s.length >= width ? s : ' '.repeat(width - s.length) + s\n}\n\nasync function nlCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const bRaw = typeof opts.flags.b === 'string' ? opts.flags.b : 't'\n let mode = bRaw\n let pattern: RegExp | null = null\n if (bRaw.startsWith('p')) {\n mode = 'p'\n pattern = new RegExp(bRaw.slice(1))\n }\n const start = typeof opts.flags.v === 'string' ? Number.parseInt(opts.flags.v, 10) : 1\n const increment = typeof opts.flags.i === 'string' ? Number.parseInt(opts.flags.i, 10) : 1\n const width = typeof opts.flags.w === 'string' ? Number.parseInt(opts.flags.w, 10) : 6\n const separator = typeof opts.flags.s === 'string' ? opts.flags.s : '\\t'\n\n let raw: Uint8Array | null = null\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n raw = await emailRead(accessor, first, opts.index ?? undefined)\n } else {\n raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('nl: missing operand\\n') })]\n }\n }\n\n let num = start\n const outLines: string[] = []\n for (const line of DEC.decode(raw).split('\\n')) {\n if (shouldNumber(line, mode, pattern)) {\n outLines.push(`${pad(num, width)}${separator}${line}`)\n num += increment\n } else {\n outLines.push(`${' '.repeat(width)}${separator}${line}`)\n }\n }\n const out: ByteSource = ENC.encode(outLines.join('\\n') + '\\n')\n return [out, new IOResult()]\n}\n\nexport const EMAIL_NL = command({\n name: 'nl',\n resource: ResourceName.EMAIL,\n spec: specOf('nl'),\n fn: nlCommand,\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: 'email-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 IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\n\nconst ENC = new TextEncoder()\n\nfunction normalize(p: string): string {\n const isAbs = p.startsWith('/')\n const segments = p.split('/').filter((s) => s !== '' && s !== '.')\n const out: string[] = []\n for (const s of segments) {\n if (s === '..') {\n if (out.length > 0) out.pop()\n else if (!isAbs) out.push('..')\n } else {\n out.push(s)\n }\n }\n const joined = out.join('/')\n return isAbs ? '/' + joined : joined === '' ? '.' : joined\n}\n\nasync function exists(\n accessor: EmailAccessor,\n path: string,\n index: CommandOpts['index'],\n prefix: string,\n): Promise<boolean> {\n try {\n const spec = new PathSpec({ original: path, directory: path, prefix })\n await emailStat(accessor, spec, index ?? undefined)\n return true\n } catch {\n return false\n }\n}\n\nasync function realpathCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const prefix = opts.mountPrefix ?? ''\n const e = opts.flags.e === true\n const lines: string[] = []\n for (const p of paths) {\n const full = prefix !== '' ? prefix + p.original : p.original\n const resolved = normalize(full)\n if (e && !(await exists(accessor, resolved, opts.index, prefix))) {\n const msg = `realpath: '${p.original}': No such file or directory\\n`\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode(msg) })]\n }\n lines.push(resolved)\n }\n const out: ByteSource = ENC.encode(lines.join('\\n') + '\\n')\n return [out, new IOResult()]\n}\n\nexport const EMAIL_REALPATH = command({\n name: 'realpath',\n resource: ResourceName.EMAIL,\n spec: specOf('realpath'),\n fn: realpathCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n 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 { 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 ],\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 = 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: 'email-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 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 } 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 ],\n})\n\nasync function emailReplyAllCommand(\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 = await replyAllMessage(accessor.config, original, body)\n const out: ByteSource = ENC.encode(JSON.stringify(result))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_REPLY_ALL = command({\n name: 'email-reply-all',\n resource: ResourceName.EMAIL,\n spec: SPEC,\n fn: emailReplyAllCommand,\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 PathSpec,\n ResourceName,\n command,\n compilePattern,\n grepLines,\n readStdinAsync,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type GrepLinesOptions,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { detectScope } from '../../../core/email/scope.ts'\nimport { searchAndFormat } from '../../../core/email/search.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\nasync function collectFiles(\n accessor: EmailAccessor,\n path: PathSpec,\n index: CommandOpts['index'],\n): Promise<string[]> {\n if (path.original.endsWith('.json') || path.original.endsWith('.jsonl')) {\n return [path.original]\n }\n let children: string[]\n try {\n children = await emailReaddir(accessor, path, index ?? undefined)\n } catch {\n return []\n }\n const files: string[] = []\n for (const child of children) {\n if (child.endsWith('.email.json')) {\n files.push(child)\n } else {\n const childSpec = new PathSpec({\n original: child,\n directory: child,\n resolved: false,\n prefix: path.prefix,\n })\n files.push(...(await collectFiles(accessor, childSpec, index)))\n }\n }\n return files\n}\n\nasync function rgCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (texts.length === 0 || texts[0] === undefined) {\n return [\n null,\n new IOResult({ exitCode: 2, stderr: ENC.encode('rg: usage: rg [flags] pattern [path]\\n') }),\n ]\n }\n const pattern = texts[0]\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 hidden = opts.flags.hidden === true\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) {\n const filePrefix = first.prefix !== '' ? first.prefix : ''\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 const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const filePrefix = resolved[0]?.prefix ?? ''\n const blobPaths: string[] = []\n for (const p of resolved) blobPaths.push(...(await collectFiles(accessor, p, opts.index)))\n const sortedUnique = [...new Set(blobPaths)].sort()\n const allResults: string[] = []\n let anyMatch = false\n for (const bp of sortedUnique) {\n if (!hidden && bp.split('/').some((part) => part.startsWith('.'))) continue\n let data: Uint8Array\n try {\n const spec = new PathSpec({\n original: bp,\n directory: bp,\n resolved: true,\n prefix: filePrefix,\n })\n data = await emailRead(accessor, spec, opts.index ?? undefined)\n } catch {\n continue\n }\n const text = DEC.decode(data)\n if (text === '') continue\n const lines = text.split('\\n')\n if (lines.length > 0 && lines[lines.length - 1] === '') lines.pop()\n const matched = grepLines(bp, lines, pat, lineOpts)\n if (matched.length === 0) continue\n anyMatch = true\n if (filesOnly) {\n allResults.push(bp)\n continue\n }\n if (countOnly) {\n allResults.push(`${bp}:${String(matched.length)}`)\n continue\n }\n for (const line of matched) allResults.push(`${bp}:${line}`)\n }\n if (!anyMatch) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n const out: ByteSource = ENC.encode(allResults.join('\\n'))\n return [out, new IOResult()]\n }\n\n const raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [\n null,\n new IOResult({ exitCode: 2, stderr: ENC.encode('rg: usage: rg [flags] pattern path\\n') }),\n ]\n }\n const lines = DEC.decode(raw).split('\\n')\n if (lines.length > 0 && lines[lines.length - 1] === '') lines.pop()\n const matched = grepLines('<stdin>', lines, pat, lineOpts)\n if (matched.length === 0) return [new Uint8Array(0), new IOResult({ exitCode: 1 })]\n if (countOnly) return [ENC.encode(String(matched.length)), new IOResult()]\n const out: ByteSource = ENC.encode(matched.join('\\n'))\n return [out, new IOResult()]\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: 'email-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 FileType,\n IOResult,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\nimport { metadataProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nconst TYPE_LABELS: Record<string, string> = {\n [FileType.DIRECTORY]: 'directory',\n [FileType.TEXT]: 'regular file',\n [FileType.BINARY]: 'regular file',\n [FileType.JSON]: 'regular file',\n [FileType.CSV]: 'regular file',\n}\n\nfunction formatStat(fmt: string, s: FileStat): string {\n return fmt.replace(/%(.)/g, (_, spec: string) => {\n if (spec === 'n') return s.name\n if (spec === 's') return String(s.size ?? 0)\n if (spec === 'F')\n return s.type !== null ? (TYPE_LABELS[s.type] ?? 'regular file') : 'regular file'\n if (spec === 'y') return s.modified ?? ''\n return '?'\n })\n}\n\nasync function statCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n if (paths.length === 0) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('stat: missing operand\\n') })]\n }\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const fmt =\n typeof opts.flags.c === 'string'\n ? opts.flags.c\n : typeof opts.flags.f === 'string'\n ? opts.flags.f\n : null\n const lines: string[] = []\n for (const p of resolved) {\n const s = await emailStat(accessor, p, opts.index ?? undefined)\n if (fmt !== null) {\n lines.push(formatStat(fmt, s))\n } else {\n const sizeStr = s.size === null ? 'None' : String(s.size)\n const modStr = s.modified ?? 'None'\n const typeStr = s.type ?? 'None'\n lines.push(`name=${s.name} size=${sizeStr} modified=${modStr} type=${typeStr}`)\n }\n }\n const out: ByteSource = ENC.encode(lines.join('\\n'))\n return [out, new IOResult()]\n}\n\nexport const EMAIL_STAT = command({\n name: 'stat',\n resource: ResourceName.EMAIL,\n spec: specOf('stat'),\n fn: statCommand,\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 {\n IOResult,\n ResourceName,\n command,\n parseN,\n readStdinAsync,\n specOf,\n tailBytes,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type PathSpec,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { fileReadProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\n\nasync function tailCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n const [lines, plusMode] = parseN(typeof opts.flags.n === 'string' ? opts.flags.n : null)\n const bytesMode = typeof opts.flags.c === 'string' ? Number.parseInt(opts.flags.c, 10) : null\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n const raw = await emailRead(accessor, first, opts.index ?? undefined)\n const out: ByteSource = tailBytes(raw, lines, bytesMode, plusMode)\n return [out, new IOResult()]\n }\n const raw = await readStdinAsync(opts.stdin)\n if (raw === null) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('tail: missing operand\\n') })]\n }\n const out: ByteSource = tailBytes(raw, lines, bytesMode, plusMode)\n return [out, new IOResult()]\n}\n\nexport const EMAIL_TAIL = command({\n name: 'tail',\n resource: ResourceName.EMAIL,\n spec: specOf('tail'),\n fn: tailCommand,\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 {\n FileType,\n IOResult,\n PathSpec,\n ResourceName,\n command,\n specOf,\n type ByteSource,\n type CommandFnResult,\n type CommandOpts,\n type FileStat,\n} from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../../accessor/email.ts'\nimport { resolveGlob } from '../../../core/email/glob.ts'\nimport { readdir as emailReaddir } from '../../../core/email/readdir.ts'\nimport { stat as emailStat } from '../../../core/email/stat.ts'\n\nconst ENC = new TextEncoder()\n\nfunction fnmatch(name: string, pattern: string): boolean {\n const re = pattern\n .replace(/[.+^${}()|[\\]\\\\]/g, '\\\\$&')\n .replace(/\\?/g, '.')\n .replace(/\\*/g, '.*')\n return new RegExp(`^${re}$`).test(name)\n}\n\ninterface TreeOpts {\n maxDepth: number | null\n showHidden: boolean\n ignorePattern: string | null\n dirsOnly: boolean\n matchPattern: string | null\n}\n\nasync function treeRecurse(\n accessor: EmailAccessor,\n path: PathSpec,\n prefix: string,\n depth: number,\n treeOpts: TreeOpts,\n warnings: string[],\n indexCache: CommandOpts['index'],\n): Promise<string[]> {\n const lines: string[] = []\n let entries: string[]\n try {\n entries = await emailReaddir(accessor, path, indexCache ?? undefined)\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`tree: '${path.original}': ${msg}`)\n return lines\n }\n const filtered: [PathSpec, FileStat][] = []\n for (const entry of entries) {\n try {\n const entrySpec = new PathSpec({\n original: entry,\n directory: entry,\n resolved: false,\n prefix: path.prefix,\n })\n const s = await emailStat(accessor, entrySpec, indexCache ?? undefined)\n if (!treeOpts.showHidden && s.name.startsWith('.')) continue\n if (treeOpts.ignorePattern !== null && fnmatch(s.name, treeOpts.ignorePattern)) continue\n if (treeOpts.dirsOnly && s.type !== FileType.DIRECTORY) continue\n const notDir = s.type !== FileType.DIRECTORY\n if (treeOpts.matchPattern !== null && notDir && !fnmatch(s.name, treeOpts.matchPattern))\n continue\n filtered.push([entrySpec, s])\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err)\n warnings.push(`tree: '${entry}': ${msg}`)\n }\n }\n for (let i = 0; i < filtered.length; i++) {\n const pair = filtered[i]\n if (pair === undefined) continue\n const [entrySpec, s] = pair\n const isLast = i === filtered.length - 1\n const connector = isLast ? '\\u2514\\u2500\\u2500 ' : '\\u251c\\u2500\\u2500 '\n lines.push(prefix + connector + s.name)\n if (s.type === FileType.DIRECTORY) {\n if (treeOpts.maxDepth !== null && depth >= treeOpts.maxDepth) continue\n const extension = isLast ? ' ' : '\\u2502 '\n const sub = await treeRecurse(\n accessor,\n entrySpec,\n prefix + extension,\n depth + 1,\n treeOpts,\n warnings,\n indexCache,\n )\n lines.push(...sub)\n }\n }\n return lines\n}\n\nasync function treeCommand(\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 original: opts.cwd,\n directory: opts.cwd,\n resolved: false,\n prefix: opts.mountPrefix ?? '',\n })\n const maxDepth = typeof opts.flags.L === 'string' ? Number.parseInt(opts.flags.L, 10) : null\n const treeOpts: TreeOpts = {\n maxDepth,\n showHidden: opts.flags.a === true,\n ignorePattern: typeof opts.flags.args_I === 'string' ? opts.flags.args_I : null,\n dirsOnly: opts.flags.d === true,\n matchPattern: typeof opts.flags.P === 'string' ? opts.flags.P : null,\n }\n const warnings: string[] = []\n const results = await treeRecurse(accessor, p0, '', 0, treeOpts, warnings, opts.index)\n const out: ByteSource = ENC.encode(results.join('\\n'))\n const stderr = warnings.length > 0 ? ENC.encode(warnings.join('\\n')) : null\n return [out, new IOResult({ stderr })]\n}\n\nexport const EMAIL_TREE = command({\n name: 'tree',\n resource: ResourceName.EMAIL,\n spec: specOf('tree'),\n fn: treeCommand,\n})\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport {\n 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: 'email-triage',\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 {\n IOResult,\n ResourceName,\n command,\n readStdinAsync,\n specOf,\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 { resolveGlob } from '../../../core/email/glob.ts'\nimport { read as emailRead } from '../../../core/email/read.ts'\nimport { fileReadProvision } from './provision.ts'\n\nconst ENC = new TextEncoder()\nconst DEC = new TextDecoder('utf-8', { fatal: false })\n\nfunction countLines(text: string): number {\n let n = 0\n for (let i = 0; i < text.length; i++) if (text.charCodeAt(i) === 10) n += 1\n return n\n}\n\nfunction countWords(text: string): number {\n const trimmed = text.trim()\n if (trimmed === '') return 0\n return trimmed.split(/\\s+/).length\n}\n\nfunction maxLineLen(text: string): number {\n let max = 0\n for (const line of text.split('\\n')) if (line.length > max) max = line.length\n return max\n}\n\nasync function wcCommand(\n accessor: EmailAccessor,\n paths: PathSpec[],\n _texts: string[],\n opts: CommandOpts,\n): Promise<CommandFnResult> {\n let data: Uint8Array | null = null\n if (paths.length > 0) {\n const resolved = await resolveGlob(accessor, paths, opts.index ?? undefined)\n const first = resolved[0]\n if (first === undefined) return [null, new IOResult()]\n data = await emailRead(accessor, first, opts.index ?? undefined)\n } else {\n data = await readStdinAsync(opts.stdin)\n if (data === null) {\n return [null, new IOResult({ exitCode: 1, stderr: ENC.encode('wc: missing operand\\n') })]\n }\n }\n const text = DEC.decode(data)\n const lineCount = countLines(text)\n const wordCount = countWords(text)\n const byteCount = data.byteLength\n if (opts.flags.L === true) {\n const out: ByteSource = ENC.encode(String(maxLineLen(text)))\n return [out, new IOResult()]\n }\n if (opts.flags.args_l === true) return [ENC.encode(String(lineCount)), new IOResult()]\n if (opts.flags.w === true) return [ENC.encode(String(wordCount)), new IOResult()]\n if (opts.flags.m === true) return [ENC.encode(String(text.length)), new IOResult()]\n if (opts.flags.c === true) return [ENC.encode(String(byteCount)), new IOResult()]\n const out: ByteSource = ENC.encode(\n `${String(lineCount)}\\t${String(wordCount)}\\t${String(byteCount)}`,\n )\n return [out, new IOResult()]\n}\n\nexport const EMAIL_WC = command({\n name: 'wc',\n resource: ResourceName.EMAIL,\n spec: specOf('wc'),\n fn: wcCommand,\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 { RegisteredCommand } from '@struktoai/mirage-core'\nimport { EMAIL_BASENAME } from './basename.ts'\nimport { EMAIL_CAT } from './cat.ts'\nimport { EMAIL_DIRNAME } from './dirname.ts'\nimport { EMAIL_FIND } from './find.ts'\nimport { EMAIL_FORWARD } from './email_forward.ts'\nimport { EMAIL_GREP } from './grep.ts'\nimport { EMAIL_HEAD } from './head.ts'\nimport { EMAIL_JQ } from './jq.ts'\nimport { EMAIL_LS } from './ls.ts'\nimport { EMAIL_NL } from './nl.ts'\nimport { EMAIL_READ } from './email_read.ts'\nimport { EMAIL_REALPATH } from './realpath.ts'\nimport { EMAIL_REPLY } from './email_reply.ts'\nimport { EMAIL_REPLY_ALL } from './email_reply_all.ts'\nimport { EMAIL_RG } from './rg.ts'\nimport { EMAIL_SEND } from './email_send.ts'\nimport { EMAIL_STAT } from './stat.ts'\nimport { EMAIL_TAIL } from './tail.ts'\nimport { EMAIL_TREE } from './tree.ts'\nimport { EMAIL_TRIAGE } from './email_triage.ts'\nimport { EMAIL_WC } from './wc.ts'\n\nexport const EMAIL_COMMANDS: readonly RegisteredCommand[] = [\n ...EMAIL_BASENAME,\n ...EMAIL_CAT,\n ...EMAIL_DIRNAME,\n ...EMAIL_FIND,\n ...EMAIL_GREP,\n ...EMAIL_HEAD,\n ...EMAIL_JQ,\n ...EMAIL_LS,\n ...EMAIL_NL,\n ...EMAIL_REALPATH,\n ...EMAIL_RG,\n ...EMAIL_STAT,\n ...EMAIL_TAIL,\n ...EMAIL_TREE,\n ...EMAIL_WC,\n ...EMAIL_SEND,\n ...EMAIL_REPLY,\n ...EMAIL_REPLY_ALL,\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 type { OpKwargs, PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { read as coreRead } from '../../core/email/read.ts'\n\nexport const readOp: RegisteredOp = {\n name: 'read',\n resource: ResourceName.EMAIL,\n filetype: null,\n write: false,\n fn: (accessor: EmailAccessor, path: PathSpec, _args: readonly unknown[], kwargs: OpKwargs) => {\n return coreRead(accessor, path, kwargs.index)\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 { OpKwargs, PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { readdir as coreReaddir } from '../../core/email/readdir.ts'\n\nexport const readdirOp: RegisteredOp = {\n name: 'readdir',\n resource: ResourceName.EMAIL,\n filetype: null,\n write: false,\n fn: (accessor: EmailAccessor, path: PathSpec, _args: readonly unknown[], kwargs: OpKwargs) => {\n return coreReaddir(accessor, path, kwargs.index)\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 { OpKwargs, PathSpec, RegisteredOp } from '@struktoai/mirage-core'\nimport { ResourceName } from '@struktoai/mirage-core'\nimport type { EmailAccessor } from '../../accessor/email.ts'\nimport { stat as coreStat } from '../../core/email/stat.ts'\n\nexport const statOp: RegisteredOp = {\n name: 'stat',\n resource: ResourceName.EMAIL,\n filetype: null,\n write: false,\n fn: (accessor: EmailAccessor, path: PathSpec, _args: readonly unknown[], kwargs: OpKwargs) => {\n return coreStat(accessor, path, kwargs.index)\n },\n}\n","// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n// http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========\n\nimport type { RegisteredOp } from '@struktoai/mirage-core'\nimport { readOp } from './read.ts'\nimport { readdirOp } from './readdir.ts'\nimport { statOp } from './stat.ts'\n\nexport const EMAIL_OPS: readonly RegisteredOp[] = [readdirOp, readOp, statOp] as const\nexport { readOp, readdirOp, statOp }\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\nexport const EMAIL_WRITE_PROMPT = ` Write commands:\n email-send \"to@email.com\" \"subject\" \"body\"\n email-reply <email-path> \"reply body\"\n email-forward <email-path> \"to@email.com\"`\n"],"mappings":"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","names":["PathSpec","ResourceName","IOResult","ResourceName","command","specOf","PathSpecCtor","loadOptionalPeer","end","listFolders","listFolders","PathSpecCtor","ENC","enoent","uid","parts","folder","ENC","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","ENC","IOResult","ResourceName","command","specOf","ENC","fnmatch","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","loadOptionalPeer","ENC","IOResult","command","ResourceName","IOResult","PathSpec","ResourceName","command","resolveSource","specOf","enoent","listFolders","TITLE_MAX","UNSAFE","MULTI_UNDERSCORE","sanitize","dateFromHeader","ENC","IOResult","filePrefix","PathSpec","firstResolved","pat","data","source","stream","io","resolveSource","command","ResourceName","specOf","IOResult","ResourceName","command","specOf","ENC","IOResult","out","command","ResourceName","specOf","IOResult","ResourceName","command","readStdinAsync","specOf","ENC","IOResult","raw","data","result","out","readStdinAsync","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","specOf","ENC","PathSpec","FileType","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","readStdinAsync","specOf","ENC","DEC","IOResult","readStdinAsync","command","ResourceName","specOf","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","IOResult","command","ResourceName","IOResult","PathSpec","ResourceName","command","specOf","ENC","PathSpec","IOResult","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","PathSpec","ResourceName","command","compilePattern","grepLines","readStdinAsync","specOf","ENC","DEC","PathSpec","IOResult","compilePattern","filePrefix","lines","matched","grepLines","out","readStdinAsync","command","ResourceName","specOf","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","IOResult","command","ResourceName","FileType","IOResult","ResourceName","command","specOf","ENC","FileType","IOResult","command","ResourceName","specOf","IOResult","ResourceName","command","readStdinAsync","specOf","ENC","IOResult","raw","out","readStdinAsync","command","ResourceName","specOf","FileType","IOResult","PathSpec","ResourceName","command","specOf","ENC","fnmatch","PathSpec","FileType","IOResult","command","ResourceName","specOf","CommandSpec","IOResult","OperandKind","Option","ResourceName","command","ENC","SPEC","CommandSpec","Option","OperandKind","out","IOResult","command","ResourceName","IOResult","ResourceName","command","readStdinAsync","specOf","ENC","DEC","IOResult","readStdinAsync","out","command","ResourceName","specOf","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","ResourceName","PathSpec"]}
@@ -1 +0,0 @@
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 fetchGitHubRepoInfo,\n fetchGitHubTree,\n type FileStat,\n GITHUB_COMMANDS,\n GITHUB_VFS_OPS,\n type GitHubTreeItem,\n GitHubAccessor,\n HttpGitHubTransport,\n type IndexCacheStore,\n type IndexEntry,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n githubIndexEntryFromTree,\n githubMakeTreeEntry,\n githubRead,\n githubReaddir,\n githubResolveGlob,\n githubStat,\n type GitHubTreeEntry,\n} from '@struktoai/mirage-core'\nimport { redactGitHubConfig, type GitHubConfig, type GitHubConfigRedacted } from './config.ts'\n\nexport interface GitHubResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GitHubConfigRedacted\n defaultBranch: string\n truncated: boolean\n}\n\nexport class GitHubResource implements Resource {\n readonly kind: string = ResourceName.GITHUB\n readonly isRemote: boolean = true\n readonly indexTtl: number = 86_400\n readonly config: GitHubConfig\n readonly accessor: GitHubAccessor\n readonly index: IndexCacheStore\n\n private constructor(config: GitHubConfig, accessor: GitHubAccessor, index: IndexCacheStore) {\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: Record<string, GitHubTreeEntry> = {}\n for (const item of tree) treeMap[item.path] = githubMakeTreeEntry(item)\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 populateIndex(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_VFS_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 async fingerprint(p: PathSpec): Promise<string | null> {\n const lookup = await this.index.get(p.original)\n return lookup.entry?.id ?? null\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n p.prefix !== ''\n ? p\n : new PathSpec({\n original: p.original,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n prefix,\n }),\n )\n : paths\n return githubResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GitHubResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['token'],\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\nasync function populateIndex(index: IndexCacheStore, tree: GitHubTreeItem[]): Promise<void> {\n const dirs = new Map<string, [string, IndexEntry][]>()\n for (const item of tree) {\n const parts = item.path.split('/')\n const name = parts[parts.length - 1] ?? item.path\n const parent = parts.length > 1 ? `/${parts.slice(0, -1).join('/')}` : '/'\n const arr = dirs.get(parent) ?? []\n arr.push([name, githubIndexEntryFromTree(item)])\n dirs.set(parent, arr)\n }\n await Promise.all([...dirs].map(([parent, entries]) => index.setDir(parent, entries)))\n}\n"],"mappings":"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","names":[]}
@@ -1,26 +0,0 @@
1
- // src/resource/trello/config.ts
2
- import { normalizeFields } from "@struktoai/mirage-core";
3
- function redactTrelloConfig(config) {
4
- const out = { apiKey: "<REDACTED>", apiToken: "<REDACTED>" };
5
- if (config.workspaceId !== void 0) out.workspaceId = config.workspaceId;
6
- if (config.boardIds !== void 0) out.boardIds = config.boardIds;
7
- if (config.baseUrl !== void 0) out.baseUrl = config.baseUrl;
8
- return out;
9
- }
10
- function normalizeTrelloConfig(input) {
11
- return normalizeFields(input, {
12
- rename: {
13
- api_key: "apiKey",
14
- api_token: "apiToken",
15
- workspace_id: "workspaceId",
16
- board_ids: "boardIds",
17
- base_url: "baseUrl"
18
- }
19
- });
20
- }
21
-
22
- export {
23
- redactTrelloConfig,
24
- normalizeTrelloConfig
25
- };
26
- //# sourceMappingURL=chunk-QWWOBAYU.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/resource/trello/config.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 { normalizeFields } from '@struktoai/mirage-core'\n\nexport interface TrelloConfig {\n apiKey: string\n apiToken: string\n workspaceId?: string\n boardIds?: readonly string[]\n baseUrl?: string\n}\n\nexport interface TrelloConfigRedacted {\n apiKey: '<REDACTED>'\n apiToken: '<REDACTED>'\n workspaceId?: string\n boardIds?: readonly string[]\n baseUrl?: string\n}\n\nexport function redactTrelloConfig(config: TrelloConfig): TrelloConfigRedacted {\n const out: TrelloConfigRedacted = { apiKey: '<REDACTED>', apiToken: '<REDACTED>' }\n if (config.workspaceId !== undefined) out.workspaceId = config.workspaceId\n if (config.boardIds !== undefined) out.boardIds = config.boardIds\n if (config.baseUrl !== undefined) out.baseUrl = config.baseUrl\n return out\n}\n\nexport function normalizeTrelloConfig(input: Record<string, unknown>): TrelloConfig {\n return normalizeFields(input, {\n rename: {\n api_key: 'apiKey',\n api_token: 'apiToken',\n workspace_id: 'workspaceId',\n board_ids: 'boardIds',\n base_url: 'baseUrl',\n },\n }) as unknown as TrelloConfig\n}\n"],"mappings":";AAcA,SAAS,uBAAuB;AAkBzB,SAAS,mBAAmB,QAA4C;AAC7E,QAAM,MAA4B,EAAE,QAAQ,cAAc,UAAU,aAAa;AACjF,MAAI,OAAO,gBAAgB,OAAW,KAAI,cAAc,OAAO;AAC/D,MAAI,OAAO,aAAa,OAAW,KAAI,WAAW,OAAO;AACzD,MAAI,OAAO,YAAY,OAAW,KAAI,UAAU,OAAO;AACvD,SAAO;AACT;AAEO,SAAS,sBAAsB,OAA8C;AAClF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,cAAc;AAAA,MACd,WAAW;AAAA,MACX,UAAU;AAAA,IACZ;AAAA,EACF,CAAC;AACH;","names":[]}