@struktoai/mirage-browser 0.0.4 → 0.0.5-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/README.md +2 -1
  2. package/dist/aliyun-DR6KT3H6.js +8 -0
  3. package/dist/backblaze-XCLZXTES.js +8 -0
  4. package/dist/box-XBCSU3AA.js +8 -0
  5. package/dist/ceph-F5S2NMTO.js +8 -0
  6. package/dist/{chunk-DGP3N4WM.js → chunk-2J35WXX5.js} +7 -2
  7. package/dist/chunk-2J35WXX5.js.map +1 -0
  8. package/dist/{chunk-LW56WZDS.js → chunk-2WNXK742.js} +2 -2
  9. package/dist/{chunk-PSEXJ5S5.js → chunk-2WSKXBSV.js} +11 -2
  10. package/dist/chunk-2WSKXBSV.js.map +1 -0
  11. package/dist/{chunk-DKPDXQML.js → chunk-3IYCVC7W.js} +7 -3
  12. package/dist/chunk-3IYCVC7W.js.map +1 -0
  13. package/dist/{chunk-NVGB3B7J.js → chunk-46HNNKFR.js} +7 -3
  14. package/dist/chunk-46HNNKFR.js.map +1 -0
  15. package/dist/chunk-4IF4TGAI.js +11 -0
  16. package/dist/chunk-4IF4TGAI.js.map +1 -0
  17. package/dist/{chunk-AUXZEXCG.js → chunk-5OZJMTYW.js} +7 -3
  18. package/dist/{chunk-AUXZEXCG.js.map → chunk-5OZJMTYW.js.map} +1 -1
  19. package/dist/{chunk-6BXVYCIC.js → chunk-5UM6EBVW.js} +10 -2
  20. package/dist/chunk-5UM6EBVW.js.map +1 -0
  21. package/dist/{chunk-JV4T5HNB.js → chunk-6HRSCX2U.js} +7 -3
  22. package/dist/chunk-6HRSCX2U.js.map +1 -0
  23. package/dist/{chunk-EDS5Q5B7.js → chunk-7HWQAYXR.js} +7 -3
  24. package/dist/chunk-7HWQAYXR.js.map +1 -0
  25. package/dist/{chunk-2R7SPBTM.js → chunk-AUZNQ7EI.js} +5 -10
  26. package/dist/chunk-AUZNQ7EI.js.map +1 -0
  27. package/dist/{chunk-DC6VA36O.js → chunk-BGA2F226.js} +19 -7
  28. package/dist/chunk-BGA2F226.js.map +1 -0
  29. package/dist/{chunk-NYTRDAWX.js → chunk-BV372CUO.js} +6 -11
  30. package/dist/chunk-BV372CUO.js.map +1 -0
  31. package/dist/{chunk-HTQ4GBKM.js → chunk-C4THTILY.js} +7 -3
  32. package/dist/chunk-C4THTILY.js.map +1 -0
  33. package/dist/{chunk-GENFT46X.js → chunk-D4MEOKNQ.js} +7 -3
  34. package/dist/chunk-D4MEOKNQ.js.map +1 -0
  35. package/dist/chunk-D4RAMWYH.js +88 -0
  36. package/dist/chunk-D4RAMWYH.js.map +1 -0
  37. package/dist/{chunk-3FZ3GHZO.js → chunk-EHIT6WCY.js} +7 -3
  38. package/dist/chunk-EHIT6WCY.js.map +1 -0
  39. package/dist/{chunk-PCC6EZIE.js → chunk-EN6TZYT2.js} +7 -3
  40. package/dist/chunk-EN6TZYT2.js.map +1 -0
  41. package/dist/{chunk-MB4TUUJQ.js → chunk-FTDVV7EQ.js} +7 -3
  42. package/dist/chunk-FTDVV7EQ.js.map +1 -0
  43. package/dist/{chunk-VASFK7V6.js → chunk-G67Q2Z6I.js} +7 -3
  44. package/dist/{chunk-VASFK7V6.js.map → chunk-G67Q2Z6I.js.map} +1 -1
  45. package/dist/{chunk-AAJQ6AQT.js → chunk-GM2QMJAY.js} +5 -10
  46. package/dist/chunk-GM2QMJAY.js.map +1 -0
  47. package/dist/{chunk-POJ3IQMQ.js → chunk-HRWLHJX2.js} +5 -11
  48. package/dist/chunk-HRWLHJX2.js.map +1 -0
  49. package/dist/{chunk-AUKVYHNZ.js → chunk-INEXV2PN.js} +7 -3
  50. package/dist/chunk-INEXV2PN.js.map +1 -0
  51. package/dist/chunk-IZMKMD3O.js +11 -0
  52. package/dist/chunk-IZMKMD3O.js.map +1 -0
  53. package/dist/{chunk-N5VRBFRT.js → chunk-JUVMJ5GI.js} +5 -10
  54. package/dist/{chunk-HPID7BWJ.js.map → chunk-JUVMJ5GI.js.map} +1 -1
  55. package/dist/{chunk-GQVJTQXU.js → chunk-L64GRKOD.js} +7 -2
  56. package/dist/chunk-L64GRKOD.js.map +1 -0
  57. package/dist/chunk-M2UF2JHJ.js +11 -0
  58. package/dist/chunk-M2UF2JHJ.js.map +1 -0
  59. package/dist/{chunk-5ZNWDS5I.js → chunk-NVHPJ5CV.js} +11 -2
  60. package/dist/chunk-NVHPJ5CV.js.map +1 -0
  61. package/dist/{chunk-MQMUOJZ2.js → chunk-OSTDTTWI.js} +7 -2
  62. package/dist/chunk-OSTDTTWI.js.map +1 -0
  63. package/dist/{chunk-GZFNGV55.js → chunk-PQCRGTSA.js} +7 -3
  64. package/dist/chunk-PQCRGTSA.js.map +1 -0
  65. package/dist/{chunk-6ETIHSTA.js → chunk-QE7QNA45.js} +6 -2
  66. package/dist/{chunk-6ETIHSTA.js.map → chunk-QE7QNA45.js.map} +1 -1
  67. package/dist/{chunk-EHTYPBGX.js → chunk-QG2NUNCY.js} +7 -3
  68. package/dist/chunk-QG2NUNCY.js.map +1 -0
  69. package/dist/chunk-UFHBDBZD.js +1212 -0
  70. package/dist/chunk-UFHBDBZD.js.map +1 -0
  71. package/dist/{chunk-E77ESWWV.js → chunk-UY22T4AC.js} +11 -3
  72. package/dist/chunk-UY22T4AC.js.map +1 -0
  73. package/dist/chunk-XJBC3OYX.js +11 -0
  74. package/dist/chunk-XJBC3OYX.js.map +1 -0
  75. package/dist/{chunk-TCFD6YJ5.js → chunk-Y6DYUK6J.js} +7 -3
  76. package/dist/chunk-Y6DYUK6J.js.map +1 -0
  77. package/dist/{chunk-HPID7BWJ.js → chunk-YOCTIHQZ.js} +5 -1
  78. package/dist/chunk-YOCTIHQZ.js.map +1 -0
  79. package/dist/{chunk-PDZSZ5CB.js → chunk-ZDJPUXYH.js} +6 -2
  80. package/dist/{chunk-PDZSZ5CB.js.map → chunk-ZDJPUXYH.js.map} +1 -1
  81. package/dist/{chunk-CQERQTAZ.js → chunk-ZKCOSE3R.js} +6 -9
  82. package/dist/chunk-ZKCOSE3R.js.map +1 -0
  83. package/dist/chunk-ZTHVEXIV.js +11 -0
  84. package/dist/chunk-ZTHVEXIV.js.map +1 -0
  85. package/dist/{config-MHBKYS53.js → config-2Y6LZKLV.js} +2 -2
  86. package/dist/config-4GSOMUMF.js +9 -0
  87. package/dist/config-5YBUWFUP.js +9 -0
  88. package/dist/{config-PWZXYJOI.js → config-DE5OZ4I7.js} +2 -2
  89. package/dist/config-ELDOFRJW.js +9 -0
  90. package/dist/config-FPM3LAW7.js +9 -0
  91. package/dist/{config-22T7HJBJ.js → config-JY557MA6.js} +2 -2
  92. package/dist/config-WRACCRPN.js +9 -0
  93. package/dist/digitalocean-QDHTRS2W.js +8 -0
  94. package/dist/discord-ERUI7OAQ.js +7 -0
  95. package/dist/dropbox-3U6D4HLE.js +8 -0
  96. package/dist/gcal-MTBSDG34.js +8 -0
  97. package/dist/gcs-KNGRBBET.js +8 -0
  98. package/dist/gdocs-RUIOIRKP.js +8 -0
  99. package/dist/gdrive-5JB7ZKEP.js +8 -0
  100. package/dist/github-CIXBFBVO.js +7 -0
  101. package/dist/github_ci-HR6YOYAO.js +8 -0
  102. package/dist/{gmail-HLZIMKQU.js → gmail-JHGWTQU5.js} +2 -2
  103. package/dist/gsheets-N54JO2RS.js +8 -0
  104. package/dist/gslides-B4VMNLMB.js +8 -0
  105. package/dist/index.d.ts +284 -352
  106. package/dist/index.js +165 -104
  107. package/dist/index.js.map +1 -1
  108. package/dist/langfuse-HEUJGDOC.js +7 -0
  109. package/dist/linear-J4QQ3CA6.js +7 -0
  110. package/dist/minio-BXWHJ6K5.js +8 -0
  111. package/dist/notion-I5S5SRLO.js +7 -0
  112. package/dist/oci-XOPKH4AE.js +8 -0
  113. package/dist/opfs-36QO72Y5.js +7 -0
  114. package/dist/qingstor-JKAHLK62.js +8 -0
  115. package/dist/r2-L3QXQ76M.js +8 -0
  116. package/dist/{s3-CSFY3PLT.js → s3-LRZJPGHK.js} +2 -2
  117. package/dist/scaleway-CGNDYNKS.js +8 -0
  118. package/dist/seaweedfs-BSQWCBIR.js +8 -0
  119. package/dist/slack-62ECSENR.js +7 -0
  120. package/dist/supabase-J66NXWAF.js +8 -0
  121. package/dist/tencent-AC667LV3.js +8 -0
  122. package/dist/trello-SUPG6VDF.js +7 -0
  123. package/dist/trello-SUPG6VDF.js.map +1 -0
  124. package/dist/wasabi-5KKPW6LH.js +8 -0
  125. package/dist/wasabi-5KKPW6LH.js.map +1 -0
  126. package/package.json +2 -2
  127. package/dist/aliyun-YEWHEWCL.js +0 -8
  128. package/dist/backblaze-LWE2HEDK.js +0 -8
  129. package/dist/box-GTWWIB6F.js +0 -8
  130. package/dist/ceph-ATSCSVGU.js +0 -8
  131. package/dist/chunk-23NO22WD.js +0 -25
  132. package/dist/chunk-23NO22WD.js.map +0 -1
  133. package/dist/chunk-2R7SPBTM.js.map +0 -1
  134. package/dist/chunk-3FZ3GHZO.js.map +0 -1
  135. package/dist/chunk-4YUYQTRN.js +0 -2334
  136. package/dist/chunk-4YUYQTRN.js.map +0 -1
  137. package/dist/chunk-5ZNWDS5I.js.map +0 -1
  138. package/dist/chunk-6BXVYCIC.js.map +0 -1
  139. package/dist/chunk-AAJQ6AQT.js.map +0 -1
  140. package/dist/chunk-AUKVYHNZ.js.map +0 -1
  141. package/dist/chunk-CQERQTAZ.js.map +0 -1
  142. package/dist/chunk-DC6VA36O.js.map +0 -1
  143. package/dist/chunk-DGP3N4WM.js.map +0 -1
  144. package/dist/chunk-DKPDXQML.js.map +0 -1
  145. package/dist/chunk-DQK6H5LW.js +0 -25
  146. package/dist/chunk-DQK6H5LW.js.map +0 -1
  147. package/dist/chunk-E77ESWWV.js.map +0 -1
  148. package/dist/chunk-EDS5Q5B7.js.map +0 -1
  149. package/dist/chunk-EHTYPBGX.js.map +0 -1
  150. package/dist/chunk-GENFT46X.js.map +0 -1
  151. package/dist/chunk-GQVJTQXU.js.map +0 -1
  152. package/dist/chunk-GZFNGV55.js.map +0 -1
  153. package/dist/chunk-HTQ4GBKM.js.map +0 -1
  154. package/dist/chunk-JV4T5HNB.js.map +0 -1
  155. package/dist/chunk-MB4TUUJQ.js.map +0 -1
  156. package/dist/chunk-MQMUOJZ2.js.map +0 -1
  157. package/dist/chunk-N5VRBFRT.js.map +0 -1
  158. package/dist/chunk-NVGB3B7J.js.map +0 -1
  159. package/dist/chunk-NYTRDAWX.js.map +0 -1
  160. package/dist/chunk-PCC6EZIE.js.map +0 -1
  161. package/dist/chunk-POJ3IQMQ.js.map +0 -1
  162. package/dist/chunk-PSEXJ5S5.js.map +0 -1
  163. package/dist/chunk-QXJP6TWI.js +0 -27
  164. package/dist/chunk-QXJP6TWI.js.map +0 -1
  165. package/dist/chunk-TCFD6YJ5.js.map +0 -1
  166. package/dist/chunk-ZLHC2CZ6.js +0 -25
  167. package/dist/chunk-ZLHC2CZ6.js.map +0 -1
  168. package/dist/config-A56HUM6C.js +0 -9
  169. package/dist/config-DIWQZBOK.js +0 -9
  170. package/dist/config-HGJ2MGAC.js +0 -9
  171. package/dist/config-PAHALM2T.js +0 -9
  172. package/dist/digitalocean-SQA6MJJQ.js +0 -8
  173. package/dist/discord-ASNFJP6A.js +0 -7
  174. package/dist/dropbox-VV2WZE6I.js +0 -8
  175. package/dist/gcs-2W6DDWM7.js +0 -8
  176. package/dist/gdocs-QPM7VXXE.js +0 -8
  177. package/dist/gdrive-KT6R7EVB.js +0 -8
  178. package/dist/github-3IFZGW6I.js +0 -7
  179. package/dist/github_ci-CKKF2Y4S.js +0 -8
  180. package/dist/gsheets-HF4YPIEF.js +0 -8
  181. package/dist/gslides-EV2JJH7I.js +0 -8
  182. package/dist/langfuse-74ZCR6QL.js +0 -7
  183. package/dist/linear-XABGTU6E.js +0 -7
  184. package/dist/minio-JPNSX2NP.js +0 -8
  185. package/dist/notion-YJOTGH7J.js +0 -7
  186. package/dist/oci-R4VYQKGJ.js +0 -8
  187. package/dist/opfs-4RWMJBCI.js +0 -7
  188. package/dist/qingstor-ZWWK2ZGV.js +0 -8
  189. package/dist/r2-PZAN2YFG.js +0 -8
  190. package/dist/scaleway-BFROPDBB.js +0 -8
  191. package/dist/seaweedfs-X6THZT26.js +0 -8
  192. package/dist/slack-O7BTJ4YR.js +0 -7
  193. package/dist/supabase-PHN3MIXW.js +0 -8
  194. package/dist/tencent-JGCJEKHV.js +0 -8
  195. package/dist/trello-QUDOP3M2.js +0 -7
  196. package/dist/wasabi-5VMNAFOC.js +0 -8
  197. /package/dist/{aliyun-YEWHEWCL.js.map → aliyun-DR6KT3H6.js.map} +0 -0
  198. /package/dist/{backblaze-LWE2HEDK.js.map → backblaze-XCLZXTES.js.map} +0 -0
  199. /package/dist/{box-GTWWIB6F.js.map → box-XBCSU3AA.js.map} +0 -0
  200. /package/dist/{ceph-ATSCSVGU.js.map → ceph-F5S2NMTO.js.map} +0 -0
  201. /package/dist/{chunk-LW56WZDS.js.map → chunk-2WNXK742.js.map} +0 -0
  202. /package/dist/{config-22T7HJBJ.js.map → config-2Y6LZKLV.js.map} +0 -0
  203. /package/dist/{config-A56HUM6C.js.map → config-4GSOMUMF.js.map} +0 -0
  204. /package/dist/{config-DIWQZBOK.js.map → config-5YBUWFUP.js.map} +0 -0
  205. /package/dist/{config-HGJ2MGAC.js.map → config-DE5OZ4I7.js.map} +0 -0
  206. /package/dist/{config-MHBKYS53.js.map → config-ELDOFRJW.js.map} +0 -0
  207. /package/dist/{config-PAHALM2T.js.map → config-FPM3LAW7.js.map} +0 -0
  208. /package/dist/{config-PWZXYJOI.js.map → config-JY557MA6.js.map} +0 -0
  209. /package/dist/{digitalocean-SQA6MJJQ.js.map → config-WRACCRPN.js.map} +0 -0
  210. /package/dist/{discord-ASNFJP6A.js.map → digitalocean-QDHTRS2W.js.map} +0 -0
  211. /package/dist/{dropbox-VV2WZE6I.js.map → discord-ERUI7OAQ.js.map} +0 -0
  212. /package/dist/{gcs-2W6DDWM7.js.map → dropbox-3U6D4HLE.js.map} +0 -0
  213. /package/dist/{gdocs-QPM7VXXE.js.map → gcal-MTBSDG34.js.map} +0 -0
  214. /package/dist/{gdrive-KT6R7EVB.js.map → gcs-KNGRBBET.js.map} +0 -0
  215. /package/dist/{github-3IFZGW6I.js.map → gdocs-RUIOIRKP.js.map} +0 -0
  216. /package/dist/{github_ci-CKKF2Y4S.js.map → gdrive-5JB7ZKEP.js.map} +0 -0
  217. /package/dist/{gmail-HLZIMKQU.js.map → github-CIXBFBVO.js.map} +0 -0
  218. /package/dist/{gsheets-HF4YPIEF.js.map → github_ci-HR6YOYAO.js.map} +0 -0
  219. /package/dist/{gslides-EV2JJH7I.js.map → gmail-JHGWTQU5.js.map} +0 -0
  220. /package/dist/{langfuse-74ZCR6QL.js.map → gsheets-N54JO2RS.js.map} +0 -0
  221. /package/dist/{linear-XABGTU6E.js.map → gslides-B4VMNLMB.js.map} +0 -0
  222. /package/dist/{minio-JPNSX2NP.js.map → langfuse-HEUJGDOC.js.map} +0 -0
  223. /package/dist/{notion-YJOTGH7J.js.map → linear-J4QQ3CA6.js.map} +0 -0
  224. /package/dist/{oci-R4VYQKGJ.js.map → minio-BXWHJ6K5.js.map} +0 -0
  225. /package/dist/{opfs-4RWMJBCI.js.map → notion-I5S5SRLO.js.map} +0 -0
  226. /package/dist/{qingstor-ZWWK2ZGV.js.map → oci-XOPKH4AE.js.map} +0 -0
  227. /package/dist/{r2-PZAN2YFG.js.map → opfs-36QO72Y5.js.map} +0 -0
  228. /package/dist/{s3-CSFY3PLT.js.map → qingstor-JKAHLK62.js.map} +0 -0
  229. /package/dist/{scaleway-BFROPDBB.js.map → r2-L3QXQ76M.js.map} +0 -0
  230. /package/dist/{seaweedfs-X6THZT26.js.map → s3-LRZJPGHK.js.map} +0 -0
  231. /package/dist/{slack-O7BTJ4YR.js.map → scaleway-CGNDYNKS.js.map} +0 -0
  232. /package/dist/{supabase-PHN3MIXW.js.map → seaweedfs-BSQWCBIR.js.map} +0 -0
  233. /package/dist/{tencent-JGCJEKHV.js.map → slack-62ECSENR.js.map} +0 -0
  234. /package/dist/{trello-QUDOP3M2.js.map → supabase-J66NXWAF.js.map} +0 -0
  235. /package/dist/{wasabi-5VMNAFOC.js.map → tencent-AC667LV3.js.map} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/wasabi/wasabi.ts","../src/resource/wasabi/config.ts","../src/resource/wasabi/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 remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n redactWasabiConfig,\n wasabiToS3Config,\n type WasabiConfig,\n type WasabiConfigRedacted,\n} from './config.ts'\nimport { WASABI_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface WasabiResourceState {\n type: string\n config: WasabiConfigRedacted\n}\n\nexport class WasabiResource extends S3Resource {\n override readonly kind: string = ResourceName.WASABI\n override readonly prompt: string = WASABI_BROWSER_PROMPT\n readonly wasabiConfig: WasabiConfig\n private readonly wasabiOps: readonly RegisteredOp[]\n private readonly wasabiCommands: readonly RegisteredCommand[]\n\n constructor(config: WasabiConfig) {\n super(wasabiToS3Config(config))\n this.wasabiConfig = config\n this.wasabiOps = remapOpsResource(super.ops(), ResourceName.WASABI)\n this.wasabiCommands = remapCommandsResource(super.commands(), ResourceName.WASABI)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.wasabiOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.wasabiCommands\n }\n\n override getState(): Promise<WasabiResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactWasabiConfig(this.wasabiConfig),\n })\n }\n\n override loadState(_state: WasabiResourceState): 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 {\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretSchema,\n z,\n} from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nconst WasabiConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport type WasabiConfig = ConfigOf<typeof WasabiConfigSchema>\n\nexport type WasabiConfigRedacted = RedactedConfig<WasabiConfig, 'presignedUrlProvider'>\n\nexport function resolvedWasabiEndpoint(config: WasabiConfig): string {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n const region = config.region ?? 'us-east-1'\n return region === 'us-east-1' ? 'https://s3.wasabisys.com' : `https://s3.${region}.wasabisys.com`\n}\n\nexport function wasabiToS3Config(config: WasabiConfig): S3Config {\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n endpoint: resolvedWasabiEndpoint(config),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactWasabiConfig(config: WasabiConfig): WasabiConfigRedacted {\n return redactConfigWithSchema(WasabiConfigSchema, config) as unknown as WasabiConfigRedacted\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 WASABI_BROWSER_PROMPT = `{prefix}\n Remote Wasabi bucket (S3-compatible) accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAGP,IAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAMM,SAAS,uBAAuB,QAA8B;AACnE,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,QAAM,SAAS,OAAO,UAAU;AAChC,SAAO,WAAW,cAAc,6BAA6B,cAAc,MAAM;AACnF;AAEO,SAAS,iBAAiB,QAAgC;AAC/D,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,UAAU,uBAAuB,MAAM;AAAA,IACvC,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB,MAAM;AAC1D;;;AC7CO,IAAM,wBAAwB;AAAA;AAAA;AAAA;AAAA;;;AFqB9B,IAAM,iBAAN,cAA6B,WAAW;AAAA,EAC3B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAsB;AAChC,UAAM,iBAAiB,MAAM,CAAC;AAC9B,SAAK,eAAe;AACpB,SAAK,YAAY,iBAAiB,MAAM,IAAI,GAAG,aAAa,MAAM;AAClE,SAAK,iBAAiB,sBAAsB,MAAM,SAAS,GAAG,aAAa,MAAM;AAAA,EACnF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,YAAY;AAAA,IAC9C,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA4C;AAC7D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,11 @@
1
+ // src/resource/gdrive/config.ts
2
+ import {
3
+ normalizeGoogleConfig,
4
+ redactGoogleConfig
5
+ } from "@struktoai/mirage-core";
6
+
7
+ export {
8
+ normalizeGoogleConfig,
9
+ redactGoogleConfig
10
+ };
11
+ //# sourceMappingURL=chunk-IZMKMD3O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gdrive/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\nexport {\n normalizeGoogleConfig as normalizeGDriveConfig,\n redactGoogleConfig as redactGDriveConfig,\n type GoogleConfig as GDriveConfig,\n type GoogleConfigRedacted as GDriveConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":";AAcA;AAAA,EAC2B;AAAA,EACH;AAAA,OAGjB;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
- redactGDocsConfig
3
- } from "./chunk-DQK6H5LW.js";
2
+ redactGoogleConfig
3
+ } from "./chunk-XJBC3OYX.js";
4
4
 
5
5
  // src/resource/gdocs/gdocs.ts
6
6
  import { mountKey, mountPrefixOf } from "@struktoai/mirage-core";
@@ -31,12 +31,7 @@ var GDocsResource = class {
31
31
  index;
32
32
  constructor(config) {
33
33
  this.config = config;
34
- const tm = new TokenManager({
35
- clientId: config.clientId,
36
- ...config.clientSecret !== void 0 ? { clientSecret: config.clientSecret } : {},
37
- refreshToken: config.refreshToken,
38
- ...config.refreshFn !== void 0 ? { refreshFn: config.refreshFn } : {}
39
- });
34
+ const tm = new TokenManager(config);
40
35
  this.accessor = new GDocsAccessor({ tokenManager: tm });
41
36
  this.index = new RAMIndexCacheStore({ ttl: 86400 });
42
37
  }
@@ -76,7 +71,7 @@ var GDocsResource = class {
76
71
  getState() {
77
72
  return Promise.resolve({
78
73
  type: this.kind,
79
- config: redactGDocsConfig(this.config)
74
+ config: redactGoogleConfig(this.config)
80
75
  });
81
76
  }
82
77
  loadState(_state) {
@@ -87,4 +82,4 @@ var GDocsResource = class {
87
82
  export {
88
83
  GDocsResource
89
84
  };
90
- //# sourceMappingURL=chunk-N5VRBFRT.js.map
85
+ //# sourceMappingURL=chunk-JUVMJ5GI.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resource/gmail/gmail.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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n GMAIL_COMMANDS,\n GMAIL_PROMPT,\n GMAIL_WRITE_PROMPT,\n GMAIL_OPS,\n GmailAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gmailRead,\n gmailReaddir,\n makeResolveGlob,\n gmailStat,\n} from '@struktoai/mirage-core'\nimport { redactGmailConfig, type GmailConfig, type GmailConfigRedacted } from './config.ts'\n\nconst gmailResolveGlob = makeResolveGlob(gmailReaddir)\n\nexport interface GmailResourceState {\n type: string\n config: GmailConfigRedacted\n}\n\nexport class GmailResource implements Resource {\n readonly kind: string = ResourceName.GMAIL\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GMAIL_PROMPT\n readonly writePrompt: string = GMAIL_WRITE_PROMPT\n readonly config: GmailConfig\n readonly accessor: GmailAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GmailConfig) {\n this.config = config\n const tm = new TokenManager(config)\n this.accessor = new GmailAccessor({ 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 GMAIL_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GMAIL_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gmailRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gmailReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gmailStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return gmailResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGmailConfig(this.config),\n })\n }\n\n loadState(_state: GmailResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA,SAAS,UAAU,qBAAqB;AACxC;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;AAGP,IAAM,mBAAmB,gBAAgB,YAAY;AAO9C,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,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,MAAM;AAClC,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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,QAAQ,mBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n GDOCS_COMMANDS,\n GDOCS_PROMPT,\n GDOCS_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 makeResolveGlob,\n gdocsStat,\n} from '@struktoai/mirage-core'\nimport { redactGDocsConfig, type GDocsConfig, type GDocsConfigRedacted } from './config.ts'\n\nconst gdocsResolveGlob = makeResolveGlob(gdocsReaddir)\n\nexport interface GDocsResourceState {\n type: string\n config: GDocsConfigRedacted\n}\n\nexport class GDocsResource implements Resource {\n readonly kind: string = ResourceName.GDOCS\n readonly cachesReads: 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(config)\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_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 glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return gdocsResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GDocsResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGDocsConfig(this.config),\n })\n }\n\n loadState(_state: GDocsResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA,SAAS,UAAU,qBAAqB;AACxC;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;AAGP,IAAM,mBAAmB,gBAAgB,YAAY;AAO9C,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,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,MAAM;AAClC,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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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,QAAQ,mBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,5 +1,10 @@
1
1
  // src/resource/box/config.ts
2
- import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
2
+ import {
3
+ normalizeFields,
4
+ redactConfigWithSchema,
5
+ secretStr,
6
+ z
7
+ } from "@struktoai/mirage-core";
3
8
  var BoxConfigSchema = z.object({
4
9
  endpoint: z.string().optional(),
5
10
  rootFolderId: z.string().optional(),
@@ -30,4 +35,4 @@ export {
30
35
  redactBoxConfig,
31
36
  normalizeBoxConfig
32
37
  };
33
- //# sourceMappingURL=chunk-GQVJTQXU.js.map
38
+ //# sourceMappingURL=chunk-L64GRKOD.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/box/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 {\n normalizeFields,\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretStr,\n z,\n} from '@struktoai/mirage-core'\n\nexport interface BoxConfig {\n // API origin override (e.g. an integ fake). Defaults to api.box.com.\n endpoint?: string\n // Box folder id to mount as the workspace root instead of the account\n // root (\"0\"). Folder ids are stable across renames/moves and visible in\n // the Box web URL (box.com/folder/<id>), so a subfolder mount survives\n // reorganization that a path prefix would not.\n rootFolderId?: string\n // Opt in to grep/rg content-search push-down: route recursive literal\n // scans through Box search to narrow the file set before scanning locally.\n // Off by default because Box's search index lags recent writes.\n contentSearch?: boolean\n clientId?: string\n clientSecret?: string\n refreshToken?: string\n accessToken?: string\n refreshFn?: (\n refreshToken: string,\n ) => Promise<{ accessToken: string; refreshToken: string; expiresIn: number }>\n onRefreshTokenRotated?: (newRefreshToken: string) => void | Promise<void>\n}\n\nconst BoxConfigSchema = z.object({\n endpoint: z.string().optional(),\n rootFolderId: z.string().optional(),\n contentSearch: z.boolean().optional(),\n clientId: z.string().optional(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr().optional(),\n accessToken: secretStr().optional(),\n})\n\n// Only the redacted twin derives: the schema deliberately omits the\n// callbacks, which no snapshot can carry.\nexport type BoxConfigRedacted = RedactedConfig<\n ConfigOf<typeof BoxConfigSchema>,\n 'clientSecret' | 'refreshToken' | 'accessToken'\n>\n\nexport function redactBoxConfig(config: BoxConfig): BoxConfigRedacted {\n return redactConfigWithSchema(BoxConfigSchema, config) as unknown as BoxConfigRedacted\n}\n\nexport function normalizeBoxConfig(input: Record<string, unknown>): BoxConfig {\n return normalizeFields(input, {\n rename: {\n root_folder_id: 'rootFolderId',\n content_search: 'contentSearch',\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n access_token: 'accessToken',\n developer_token: 'accessToken',\n },\n }) as unknown as BoxConfig\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAwBP,IAAM,kBAAkB,EAAE,OAAO;AAAA,EAC/B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,aAAa,UAAU,EAAE,SAAS;AACpC,CAAC;AASM,SAAS,gBAAgB,QAAsC;AACpE,SAAO,uBAAuB,iBAAiB,MAAM;AACvD;AAEO,SAAS,mBAAmB,OAA2C;AAC5E,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,MACf,cAAc;AAAA,MACd,iBAAiB;AAAA,IACnB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -0,0 +1,11 @@
1
+ // src/resource/gsheets/config.ts
2
+ import {
3
+ normalizeGoogleConfig,
4
+ redactGoogleConfig
5
+ } from "@struktoai/mirage-core";
6
+
7
+ export {
8
+ normalizeGoogleConfig,
9
+ redactGoogleConfig
10
+ };
11
+ //# sourceMappingURL=chunk-M2UF2JHJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gsheets/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\nexport {\n normalizeGoogleConfig as normalizeGSheetsConfig,\n redactGoogleConfig as redactGSheetsConfig,\n type GoogleConfig as GSheetsConfig,\n type GoogleConfigRedacted as GSheetsConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":";AAcA;AAAA,EAC2B;AAAA,EACH;AAAA,OAGjB;","names":[]}
@@ -17,7 +17,11 @@ import {
17
17
  } from "@struktoai/mirage-core";
18
18
 
19
19
  // src/resource/slack/config.ts
20
- import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
20
+ import {
21
+ redactConfigWithSchema,
22
+ secretSchema,
23
+ z
24
+ } from "@struktoai/mirage-core";
21
25
  var SlackConfigSchema = z.object({
22
26
  proxyUrl: z.string(),
23
27
  getHeaders: secretSchema(
@@ -33,6 +37,11 @@ var resolveSlackGlob = makeResolveGlob(slackReaddir);
33
37
  var SlackResource = class {
34
38
  kind = ResourceName.SLACK;
35
39
  cachesReads = true;
40
+ // Every listed file carries an exact size: chat.jsonl and users/*.json
41
+ // are rendered at readdir from payloads the listing already fetched
42
+ // (users.list is payload-identical to users.info, verified live), and
43
+ // file blobs carry Slack's upload byte count.
44
+ sizesAlwaysKnown = true;
36
45
  indexTtl = 600;
37
46
  prompt = SLACK_PROMPT;
38
47
  writePrompt = SLACK_WRITE_PROMPT;
@@ -97,4 +106,4 @@ export {
97
106
  redactSlackConfig,
98
107
  SlackResource
99
108
  };
100
- //# sourceMappingURL=chunk-5ZNWDS5I.js.map
109
+ //# sourceMappingURL=chunk-NVHPJ5CV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/slack/slack.ts","../src/resource/slack/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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n BrowserSlackTransport,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n makeResolveGlob,\n SLACK_COMMANDS,\n SLACK_PROMPT,\n SLACK_OPS,\n SLACK_WRITE_PROMPT,\n SlackAccessor,\n slackRead,\n slackReaddir,\n slackStat,\n} from '@struktoai/mirage-core'\nimport { redactSlackConfig, type SlackConfig, type SlackConfigRedacted } from './config.ts'\n\nconst resolveSlackGlob = makeResolveGlob(slackReaddir)\n\nexport interface SlackResourceState {\n type: string\n config: SlackConfigRedacted\n}\n\nexport class SlackResource implements Resource {\n readonly kind: string = ResourceName.SLACK\n readonly cachesReads: boolean = true\n // Every listed file carries an exact size: chat.jsonl and users/*.json\n // are rendered at readdir from payloads the listing already fetched\n // (users.list is payload-identical to users.info, verified live), and\n // file blobs carry Slack's upload byte count.\n readonly sizesAlwaysKnown: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = SLACK_PROMPT\n readonly writePrompt: string = SLACK_WRITE_PROMPT\n readonly config: SlackConfig\n readonly accessor: SlackAccessor\n readonly index: IndexCacheStore\n\n constructor(config: SlackConfig) {\n this.config = config\n this.accessor = new SlackAccessor(\n new BrowserSlackTransport({\n proxyUrl: config.proxyUrl,\n ...(config.getHeaders !== undefined ? { getHeaders: config.getHeaders } : {}),\n }),\n )\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return SLACK_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return SLACK_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return slackRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return slackReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return slackStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolveSlackGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<SlackResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactSlackConfig(this.config),\n })\n }\n\n loadState(_state: SlackResourceState): 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 {\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretSchema,\n z,\n} from '@struktoai/mirage-core'\n\ntype HeaderProvider = () => Promise<Record<string, string>> | Record<string, string>\n\nconst SlackConfigSchema = z.object({\n proxyUrl: z.string(),\n getHeaders: secretSchema(\n z.custom<HeaderProvider>((value) => typeof value === 'function'),\n ).optional(),\n})\n\nexport type SlackConfig = ConfigOf<typeof SlackConfigSchema>\n\nexport type SlackConfigRedacted = RedactedConfig<SlackConfig, 'getHeaders'>\n\nexport function redactSlackConfig(config: SlackConfig): SlackConfigRedacted {\n return redactConfigWithSchema(SlackConfigSchema, config) as unknown as SlackConfigRedacted\n}\n"],"mappings":";AAcA,SAAS,UAAU,qBAAqB;AACxC;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACpBP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAIP,IAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY;AAAA,IACV,EAAE,OAAuB,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EACjE,EAAE,SAAS;AACb,CAAC;AAMM,SAAS,kBAAkB,QAA0C;AAC1E,SAAO,uBAAuB,mBAAmB,MAAM;AACzD;;;ADAA,IAAM,mBAAmB,gBAAgB,YAAY;AAO9C,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,EAKvB,mBAA4B;AAAA,EAC5B,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,SAAK,WAAW,IAAI;AAAA,MAClB,IAAI,sBAAsB;AAAA,QACxB,UAAU,OAAO;AAAA,QACjB,GAAI,OAAO,eAAe,SAAY,EAAE,YAAY,OAAO,WAAW,IAAI,CAAC;AAAA,MAC7E,CAAC;AAAA,IACH;AACA,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAAA,EAC5D;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,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,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,QAAQ,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,5 +1,10 @@
1
1
  // src/resource/dropbox/config.ts
2
- import { normalizeFields, redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
2
+ import {
3
+ normalizeFields,
4
+ redactConfigWithSchema,
5
+ secretStr,
6
+ z
7
+ } from "@struktoai/mirage-core";
3
8
  var DropboxConfigSchema = z.object({
4
9
  clientId: z.string(),
5
10
  clientSecret: secretStr().optional(),
@@ -27,4 +32,4 @@ export {
27
32
  redactDropboxConfig,
28
33
  normalizeDropboxConfig
29
34
  };
30
- //# sourceMappingURL=chunk-MQMUOJZ2.js.map
35
+ //# sourceMappingURL=chunk-OSTDTTWI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/dropbox/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 {\n normalizeFields,\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretStr,\n z,\n} from '@struktoai/mirage-core'\n\nexport interface DropboxConfig {\n clientId: string\n clientSecret?: string\n refreshToken: string\n rootPath?: string\n contentSearch?: boolean\n endpoint?: string\n refreshFn?: (refreshToken: string) => Promise<{ accessToken: string; expiresIn: number }>\n}\n\nconst DropboxConfigSchema = z.object({\n clientId: z.string(),\n clientSecret: secretStr().optional(),\n refreshToken: secretStr(),\n rootPath: z.string().optional(),\n contentSearch: z.boolean().optional(),\n endpoint: z.string().optional(),\n})\n\n// Only the redacted twin derives: the schema deliberately omits\n// `refreshFn`, which no snapshot can carry.\nexport type DropboxConfigRedacted = RedactedConfig<\n ConfigOf<typeof DropboxConfigSchema>,\n 'clientSecret' | 'refreshToken'\n>\n\nexport function redactDropboxConfig(config: DropboxConfig): DropboxConfigRedacted {\n return redactConfigWithSchema(DropboxConfigSchema, config) as unknown as DropboxConfigRedacted\n}\n\nexport function normalizeDropboxConfig(input: Record<string, unknown>): DropboxConfig {\n return normalizeFields(input, {\n rename: {\n client_id: 'clientId',\n client_secret: 'clientSecret',\n refresh_token: 'refreshToken',\n root_path: 'rootPath',\n content_search: 'contentSearch',\n },\n }) as unknown as DropboxConfig\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAYP,IAAM,sBAAsB,EAAE,OAAO;AAAA,EACnC,UAAU,EAAE,OAAO;AAAA,EACnB,cAAc,UAAU,EAAE,SAAS;AAAA,EACnC,cAAc,UAAU;AAAA,EACxB,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,eAAe,EAAE,QAAQ,EAAE,SAAS;AAAA,EACpC,UAAU,EAAE,OAAO,EAAE,SAAS;AAChC,CAAC;AASM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;AAEO,SAAS,uBAAuB,OAA+C;AACpF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ;AAAA,MACN,WAAW;AAAA,MACX,eAAe;AAAA,MACf,eAAe;AAAA,MACf,WAAW;AAAA,MACX,gBAAgB;AAAA,IAClB;AAAA,EACF,CAAC;AACH;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-DC6VA36O.js";
3
+ } from "./chunk-BGA2F226.js";
4
4
 
5
5
  // src/resource/ceph/ceph.ts
6
6
  import {
@@ -10,7 +10,11 @@ import {
10
10
  } from "@struktoai/mirage-core";
11
11
 
12
12
  // src/resource/ceph/config.ts
13
- import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
13
+ import {
14
+ redactConfigWithSchema,
15
+ secretSchema,
16
+ z
17
+ } from "@struktoai/mirage-core";
14
18
  var CephConfigSchema = z.object({
15
19
  bucket: z.string(),
16
20
  presignedUrlProvider: secretSchema(
@@ -78,4 +82,4 @@ export {
78
82
  CEPH_BROWSER_PROMPT,
79
83
  CephResource
80
84
  };
81
- //# sourceMappingURL=chunk-GZFNGV55.js.map
85
+ //# sourceMappingURL=chunk-PQCRGTSA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/ceph/ceph.ts","../src/resource/ceph/config.ts","../src/resource/ceph/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 remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n cephToS3Config,\n redactCephConfig,\n type CephConfig,\n type CephConfigRedacted,\n} from './config.ts'\nimport { CEPH_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface CephResourceState {\n type: string\n config: CephConfigRedacted\n}\n\nexport class CephResource extends S3Resource {\n override readonly kind: string = ResourceName.CEPH\n override readonly prompt: string = CEPH_BROWSER_PROMPT\n readonly cephConfig: CephConfig\n private readonly cephOps: readonly RegisteredOp[]\n private readonly cephCommands: readonly RegisteredCommand[]\n\n constructor(config: CephConfig) {\n super(cephToS3Config(config))\n this.cephConfig = config\n this.cephOps = remapOpsResource(super.ops(), ResourceName.CEPH)\n this.cephCommands = remapCommandsResource(super.commands(), ResourceName.CEPH)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.cephOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.cephCommands\n }\n\n override getState(): Promise<CephResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactCephConfig(this.cephConfig),\n })\n }\n\n override loadState(_state: CephResourceState): 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 {\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretSchema,\n z,\n} from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nconst CephConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n endpoint: z.string().optional(),\n region: z.string().optional(),\n defaultContentType: z.string().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport type CephConfig = ConfigOf<typeof CephConfigSchema>\n\nexport type CephConfigRedacted = RedactedConfig<CephConfig, 'presignedUrlProvider'>\n\nexport function cephToS3Config(config: CephConfig): S3Config {\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(config.endpoint !== undefined ? { endpoint: config.endpoint } : {}),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactCephConfig(config: CephConfig): CephConfigRedacted {\n return redactConfigWithSchema(CephConfigSchema, config) as unknown as CephConfigRedacted\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 CEPH_BROWSER_PROMPT = `{prefix}\n Remote Ceph Rados Gateway bucket (S3-compatible) accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAGP,IAAM,mBAAmB,EAAE,OAAO;AAAA,EAChC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAMM,SAAS,eAAe,QAA8B;AAC3D,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,GAAI,OAAO,aAAa,SAAY,EAAE,UAAU,OAAO,SAAS,IAAI,CAAC;AAAA,IACrE,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,iBAAiB,QAAwC;AACvE,SAAO,uBAAuB,kBAAkB,MAAM;AACxD;;;ACvCO,IAAM,sBAAsB;AAAA;AAAA;AAAA;AAAA;;;AFqB5B,IAAM,eAAN,cAA2B,WAAW;AAAA,EACzB,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAoB;AAC9B,UAAM,eAAe,MAAM,CAAC;AAC5B,SAAK,aAAa;AAClB,SAAK,UAAU,iBAAiB,MAAM,IAAI,GAAG,aAAa,IAAI;AAC9D,SAAK,eAAe,sBAAsB,MAAM,SAAS,GAAG,aAAa,IAAI;AAAA,EAC/E;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAuC;AAC9C,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,iBAAiB,KAAK,UAAU;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA0C;AAC3D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -16,7 +16,11 @@ import {
16
16
  } from "@struktoai/mirage-core";
17
17
 
18
18
  // src/resource/langfuse/config.ts
19
- import { redactConfigWithSchema, secretStr, z } from "@struktoai/mirage-core";
19
+ import {
20
+ redactConfigWithSchema,
21
+ secretStr,
22
+ z
23
+ } from "@struktoai/mirage-core";
20
24
  var LangfuseConfigSchema = z.object({
21
25
  publicKey: z.string(),
22
26
  secretKey: secretStr(),
@@ -107,4 +111,4 @@ export {
107
111
  redactLangfuseConfig,
108
112
  LangfuseResource
109
113
  };
110
- //# sourceMappingURL=chunk-6ETIHSTA.js.map
114
+ //# sourceMappingURL=chunk-QE7QNA45.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/resource/langfuse/langfuse.ts","../src/resource/langfuse/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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n HttpLangfuseTransport,\n type IndexCacheStore,\n LANGFUSE_COMMANDS,\n LANGFUSE_PROMPT,\n LANGFUSE_OPS,\n LangfuseAccessor,\n langfuseRead,\n langfuseReaddir,\n langfuseStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n makeResolveGlob,\n} from '@struktoai/mirage-core'\nimport { redactLangfuseConfig, type LangfuseConfig, type LangfuseConfigRedacted } from './config.ts'\n\nconst resolveLangfuseGlob = makeResolveGlob(langfuseReaddir)\n\nexport interface LangfuseResourceState {\n type: string\n config: LangfuseConfigRedacted\n}\n\nexport class LangfuseResource implements Resource {\n readonly kind: string = ResourceName.LANGFUSE\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = LANGFUSE_PROMPT\n readonly config: LangfuseConfig\n readonly accessor: LangfuseAccessor\n readonly index: IndexCacheStore\n\n constructor(config: LangfuseConfig) {\n this.config = config\n const transportOpts: { publicKey: string; secretKey: string; host?: string } = {\n publicKey: config.publicKey,\n secretKey: config.secretKey,\n }\n if (config.host !== undefined) transportOpts.host = config.host\n const accessorConfig: {\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n } = {}\n if (config.defaultTraceLimit !== undefined) {\n accessorConfig.defaultTraceLimit = config.defaultTraceLimit\n }\n if (config.defaultSearchLimit !== undefined) {\n accessorConfig.defaultSearchLimit = config.defaultSearchLimit\n }\n if (config.defaultFromTimestamp !== undefined) {\n accessorConfig.defaultFromTimestamp = config.defaultFromTimestamp\n }\n this.accessor = new LangfuseAccessor(new HttpLangfuseTransport(transportOpts), accessorConfig)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return LANGFUSE_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return LANGFUSE_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return langfuseRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return langfuseReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return langfuseStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolveLangfuseGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<LangfuseResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactLangfuseConfig(this.config),\n })\n }\n\n loadState(_state: LangfuseResourceState): 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 { redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface LangfuseConfig {\n publicKey: string\n secretKey: string\n host?: string\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n}\n\nexport interface LangfuseConfigRedacted {\n publicKey: string\n secretKey: '<REDACTED>'\n host?: string\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n}\n\nconst LangfuseConfigSchema = z.object({\n publicKey: z.string(),\n secretKey: secretStr(),\n host: z.string().optional(),\n defaultTraceLimit: z.number().optional(),\n defaultSearchLimit: z.number().optional(),\n defaultFromTimestamp: z.string().optional(),\n})\n\nexport function redactLangfuseConfig(config: LangfuseConfig): LangfuseConfigRedacted {\n return redactConfigWithSchema(LangfuseConfigSchema, config) as unknown as LangfuseConfigRedacted\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/resource/langfuse/langfuse.ts","../src/resource/langfuse/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 { mountKey, mountPrefixOf } from '@struktoai/mirage-core'\nimport {\n type FileStat,\n HttpLangfuseTransport,\n type IndexCacheStore,\n LANGFUSE_COMMANDS,\n LANGFUSE_PROMPT,\n LANGFUSE_OPS,\n LangfuseAccessor,\n langfuseRead,\n langfuseReaddir,\n langfuseStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n makeResolveGlob,\n} from '@struktoai/mirage-core'\nimport { redactLangfuseConfig, type LangfuseConfig, type LangfuseConfigRedacted } from './config.ts'\n\nconst resolveLangfuseGlob = makeResolveGlob(langfuseReaddir)\n\nexport interface LangfuseResourceState {\n type: string\n config: LangfuseConfigRedacted\n}\n\nexport class LangfuseResource implements Resource {\n readonly kind: string = ResourceName.LANGFUSE\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = LANGFUSE_PROMPT\n readonly config: LangfuseConfig\n readonly accessor: LangfuseAccessor\n readonly index: IndexCacheStore\n\n constructor(config: LangfuseConfig) {\n this.config = config\n const transportOpts: { publicKey: string; secretKey: string; host?: string } = {\n publicKey: config.publicKey,\n secretKey: config.secretKey,\n }\n if (config.host !== undefined) transportOpts.host = config.host\n const accessorConfig: {\n defaultTraceLimit?: number\n defaultSearchLimit?: number\n defaultFromTimestamp?: string\n } = {}\n if (config.defaultTraceLimit !== undefined) {\n accessorConfig.defaultTraceLimit = config.defaultTraceLimit\n }\n if (config.defaultSearchLimit !== undefined) {\n accessorConfig.defaultSearchLimit = config.defaultSearchLimit\n }\n if (config.defaultFromTimestamp !== undefined) {\n accessorConfig.defaultFromTimestamp = config.defaultFromTimestamp\n }\n this.accessor = new LangfuseAccessor(new HttpLangfuseTransport(transportOpts), accessorConfig)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return LANGFUSE_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return LANGFUSE_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return langfuseRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return langfuseReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return langfuseStat(this.accessor, p, this.index)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective =\n prefix !== ''\n ? paths.map((p) =>\n mountPrefixOf(p.virtual, p.resourcePath) !== ''\n ? p\n : new PathSpec({\n virtual: p.virtual,\n directory: p.directory,\n ...(p.pattern !== null ? { pattern: p.pattern } : {}),\n resolved: p.resolved,\n resourcePath: mountKey(p.virtual, prefix),\n }),\n )\n : paths\n return resolveLangfuseGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<LangfuseResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactLangfuseConfig(this.config),\n })\n }\n\n loadState(_state: LangfuseResourceState): 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 {\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretStr,\n z,\n} from '@struktoai/mirage-core'\n\nconst LangfuseConfigSchema = z.object({\n publicKey: z.string(),\n secretKey: secretStr(),\n host: z.string().optional(),\n defaultTraceLimit: z.number().optional(),\n defaultSearchLimit: z.number().optional(),\n defaultFromTimestamp: z.string().optional(),\n})\n\nexport type LangfuseConfig = ConfigOf<typeof LangfuseConfigSchema>\n\nexport type LangfuseConfigRedacted = RedactedConfig<LangfuseConfig, 'secretKey'>\n\nexport function redactLangfuseConfig(config: LangfuseConfig): LangfuseConfigRedacted {\n return redactConfigWithSchema(LangfuseConfigSchema, config) as unknown as LangfuseConfigRedacted\n}\n"],"mappings":";AAcA,SAAS,UAAU,qBAAqB;AACxC;AAAA,EAEE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,OACK;;;ACnBP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAEP,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,WAAW,EAAE,OAAO;AAAA,EACpB,WAAW,UAAU;AAAA,EACrB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,mBAAmB,EAAE,OAAO,EAAE,SAAS;AAAA,EACvC,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,sBAAsB,EAAE,OAAO,EAAE,SAAS;AAC5C,CAAC;AAMM,SAAS,qBAAqB,QAAgD;AACnF,SAAO,uBAAuB,sBAAsB,MAAM;AAC5D;;;ADDA,IAAM,sBAAsB,gBAAgB,eAAe;AAOpD,IAAM,mBAAN,MAA2C;AAAA,EACvC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAwB;AAClC,SAAK,SAAS;AACd,UAAM,gBAAyE;AAAA,MAC7E,WAAW,OAAO;AAAA,MAClB,WAAW,OAAO;AAAA,IACpB;AACA,QAAI,OAAO,SAAS,OAAW,eAAc,OAAO,OAAO;AAC3D,UAAM,iBAIF,CAAC;AACL,QAAI,OAAO,sBAAsB,QAAW;AAC1C,qBAAe,oBAAoB,OAAO;AAAA,IAC5C;AACA,QAAI,OAAO,uBAAuB,QAAW;AAC3C,qBAAe,qBAAqB,OAAO;AAAA,IAC7C;AACA,QAAI,OAAO,yBAAyB,QAAW;AAC7C,qBAAe,uBAAuB,OAAO;AAAA,IAC/C;AACA,SAAK,WAAW,IAAI,iBAAiB,IAAI,sBAAsB,aAAa,GAAG,cAAc;AAC7F,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAAA,EAC5D;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,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,gBAAgB,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACrD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,cAAc,EAAE,SAAS,EAAE,YAAY,MAAM,KACzC,IACA,IAAI,SAAS;AAAA,QACX,SAAS,EAAE;AAAA,QACX,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ,cAAc,SAAS,EAAE,SAAS,MAAM;AAAA,MAC1C,CAAC;AAAA,IACP,IACA;AACN,WAAO,oBAAoB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EACjE;AAAA,EAEA,WAA2C;AACzC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,qBAAqB,KAAK,MAAM;AAAA,IAC1C,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA8C;AACtD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-DC6VA36O.js";
3
+ } from "./chunk-BGA2F226.js";
4
4
 
5
5
  // src/resource/qingstor/qingstor.ts
6
6
  import {
@@ -10,7 +10,11 @@ import {
10
10
  } from "@struktoai/mirage-core";
11
11
 
12
12
  // src/resource/qingstor/config.ts
13
- import { redactConfigWithSchema, secretSchema, z } from "@struktoai/mirage-core";
13
+ import {
14
+ redactConfigWithSchema,
15
+ secretSchema,
16
+ z
17
+ } from "@struktoai/mirage-core";
14
18
  var QingStorConfigSchema = z.object({
15
19
  bucket: z.string(),
16
20
  presignedUrlProvider: secretSchema(
@@ -88,4 +92,4 @@ export {
88
92
  QINGSTOR_BROWSER_PROMPT,
89
93
  QingStorResource
90
94
  };
91
- //# sourceMappingURL=chunk-EHTYPBGX.js.map
95
+ //# sourceMappingURL=chunk-QG2NUNCY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/qingstor/qingstor.ts","../src/resource/qingstor/config.ts","../src/resource/qingstor/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 remapCommandsResource,\n remapOpsResource,\n ResourceName,\n type RegisteredCommand,\n type RegisteredOp,\n} from '@struktoai/mirage-core'\nimport { S3Resource } from '../s3/s3.ts'\nimport {\n qingStorToS3Config,\n redactQingStorConfig,\n type QingStorConfig,\n type QingStorConfigRedacted,\n} from './config.ts'\nimport { QINGSTOR_BROWSER_PROMPT } from './prompt.ts'\n\nexport interface QingStorResourceState {\n type: string\n config: QingStorConfigRedacted\n}\n\nexport class QingStorResource extends S3Resource {\n override readonly kind: string = ResourceName.QINGSTOR\n override readonly prompt: string = QINGSTOR_BROWSER_PROMPT\n readonly qingStorConfig: QingStorConfig\n private readonly qingStorOps: readonly RegisteredOp[]\n private readonly qingStorCommands: readonly RegisteredCommand[]\n\n constructor(config: QingStorConfig) {\n super(qingStorToS3Config(config))\n this.qingStorConfig = config\n this.qingStorOps = remapOpsResource(super.ops(), ResourceName.QINGSTOR)\n this.qingStorCommands = remapCommandsResource(super.commands(), ResourceName.QINGSTOR)\n }\n\n override ops(): readonly RegisteredOp[] {\n return this.qingStorOps\n }\n\n override commands(): readonly RegisteredCommand[] {\n return this.qingStorCommands\n }\n\n override getState(): Promise<QingStorResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactQingStorConfig(this.qingStorConfig),\n })\n }\n\n override loadState(_state: QingStorResourceState): 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 {\n redactConfigWithSchema,\n type ConfigOf,\n type RedactedConfig,\n secretSchema,\n z,\n} from '@struktoai/mirage-core'\nimport type { S3BrowserPresignedUrlProvider, S3Config } from '../s3/config.ts'\n\nconst QingStorConfigSchema = z.object({\n bucket: z.string(),\n presignedUrlProvider: secretSchema(\n z.custom<S3BrowserPresignedUrlProvider>((value) => typeof value === 'function'),\n ),\n region: z.string().optional(),\n endpoint: z.string().optional(),\n defaultContentType: z.string().optional(),\n keyPrefix: z.string().optional(),\n})\n\nexport type QingStorConfig = ConfigOf<typeof QingStorConfigSchema>\n\nexport type QingStorConfigRedacted = RedactedConfig<QingStorConfig, 'presignedUrlProvider'>\n\nexport function resolvedQingStorEndpoint(config: QingStorConfig): string | undefined {\n if (config.endpoint !== undefined && config.endpoint !== '') return config.endpoint\n if (config.region !== undefined && config.region !== '') {\n const region = config.region\n return `https://s3.${region}.qingstor.com`\n }\n return undefined\n}\n\nexport function qingStorToS3Config(config: QingStorConfig): S3Config {\n const endpoint = resolvedQingStorEndpoint(config)\n return {\n bucket: config.bucket,\n presignedUrlProvider: config.presignedUrlProvider,\n ...(config.region !== undefined ? { region: config.region } : {}),\n ...(endpoint !== undefined ? { endpoint } : {}),\n ...(config.defaultContentType !== undefined\n ? { defaultContentType: config.defaultContentType }\n : {}),\n ...(config.keyPrefix !== undefined ? { keyPrefix: config.keyPrefix } : {}),\n }\n}\n\nexport function redactQingStorConfig(config: QingStorConfig): QingStorConfigRedacted {\n return redactConfigWithSchema(QingStorConfigSchema, config) as unknown as QingStorConfigRedacted\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 QINGSTOR_BROWSER_PROMPT = `{prefix}\n Remote QingStor bucket (S3-compatible) accessed via presigned URLs (browser runtime).\n Supports the full filesystem command set: ls/tree/cat/grep/find/du/cp/mv/rm/etc.\n Listing operations require the presigner to sign LIST/COPY operations in\n addition to GET/PUT/HEAD/DELETE — see S3BrowserPresignedUrlProvider docs.`\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OAGK;;;ACNP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AAGP,IAAM,uBAAuB,EAAE,OAAO;AAAA,EACpC,QAAQ,EAAE,OAAO;AAAA,EACjB,sBAAsB;AAAA,IACpB,EAAE,OAAsC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAChF;AAAA,EACA,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,UAAU,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9B,oBAAoB,EAAE,OAAO,EAAE,SAAS;AAAA,EACxC,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAMM,SAAS,yBAAyB,QAA4C;AACnF,MAAI,OAAO,aAAa,UAAa,OAAO,aAAa,GAAI,QAAO,OAAO;AAC3E,MAAI,OAAO,WAAW,UAAa,OAAO,WAAW,IAAI;AACvD,UAAM,SAAS,OAAO;AACtB,WAAO,cAAc,MAAM;AAAA,EAC7B;AACA,SAAO;AACT;AAEO,SAAS,mBAAmB,QAAkC;AACnE,QAAM,WAAW,yBAAyB,MAAM;AAChD,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf,sBAAsB,OAAO;AAAA,IAC7B,GAAI,OAAO,WAAW,SAAY,EAAE,QAAQ,OAAO,OAAO,IAAI,CAAC;AAAA,IAC/D,GAAI,aAAa,SAAY,EAAE,SAAS,IAAI,CAAC;AAAA,IAC7C,GAAI,OAAO,uBAAuB,SAC9B,EAAE,oBAAoB,OAAO,mBAAmB,IAChD,CAAC;AAAA,IACL,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,EAC1E;AACF;AAEO,SAAS,qBAAqB,QAAgD;AACnF,SAAO,uBAAuB,sBAAsB,MAAM;AAC5D;;;ACjDO,IAAM,0BAA0B;AAAA;AAAA;AAAA;AAAA;;;AFqBhC,IAAM,mBAAN,cAA+B,WAAW;AAAA,EAC7B,OAAe,aAAa;AAAA,EAC5B,SAAiB;AAAA,EAC1B;AAAA,EACQ;AAAA,EACA;AAAA,EAEjB,YAAY,QAAwB;AAClC,UAAM,mBAAmB,MAAM,CAAC;AAChC,SAAK,iBAAiB;AACtB,SAAK,cAAc,iBAAiB,MAAM,IAAI,GAAG,aAAa,QAAQ;AACtE,SAAK,mBAAmB,sBAAsB,MAAM,SAAS,GAAG,aAAa,QAAQ;AAAA,EACvF;AAAA,EAES,MAA+B;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAAyC;AAChD,WAAO,KAAK;AAAA,EACd;AAAA,EAES,WAA2C;AAClD,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,qBAAqB,KAAK,cAAc;AAAA,IAClD,CAAC;AAAA,EACH;AAAA,EAES,UAAU,QAA8C;AAC/D,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}