@struktoai/mirage-browser 0.0.3-alpha.0 → 0.0.3

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 (180) hide show
  1. package/README.md +1 -1
  2. package/dist/aliyun-GMNRT7BJ.js +8 -0
  3. package/dist/backblaze-O6CLR73B.js +8 -0
  4. package/dist/{box-VJSE5N7P.js → box-GXWDWZRN.js} +2 -2
  5. package/dist/ceph-SM7MXDAY.js +8 -0
  6. package/dist/{chunk-SBAUYZJB.js → chunk-2AEAISO2.js} +2 -2
  7. package/dist/chunk-2AEAISO2.js.map +1 -0
  8. package/dist/{chunk-6K57U6CM.js → chunk-4NLXLDMV.js} +2 -2
  9. package/dist/chunk-4NLXLDMV.js.map +1 -0
  10. package/dist/{chunk-D3JDGGKO.js → chunk-57QQAM7V.js} +2 -2
  11. package/dist/{chunk-YEDSFMWK.js → chunk-6YP3B7UK.js} +2 -2
  12. package/dist/{chunk-EH2BN4JC.js → chunk-BIIG7ZAQ.js} +2 -2
  13. package/dist/chunk-BIIG7ZAQ.js.map +1 -0
  14. package/dist/{chunk-INLL7LRM.js → chunk-BJHHL4UT.js} +2 -2
  15. package/dist/chunk-BJHHL4UT.js.map +1 -0
  16. package/dist/{chunk-JVTKE6DB.js → chunk-CGZGX2GO.js} +2 -2
  17. package/dist/chunk-CGZGX2GO.js.map +1 -0
  18. package/dist/{chunk-MO5DGX42.js → chunk-CNDGXKMU.js} +2 -2
  19. package/dist/{chunk-HGSTRD7H.js → chunk-DA5EW34P.js} +2 -2
  20. package/dist/chunk-DA5EW34P.js.map +1 -0
  21. package/dist/{chunk-RD7ED27I.js → chunk-DFHFILVF.js} +2 -2
  22. package/dist/chunk-DFHFILVF.js.map +1 -0
  23. package/dist/{chunk-CAKSQ2LV.js → chunk-DHZMC42C.js} +2 -2
  24. package/dist/{chunk-72GY5B23.js → chunk-DVXOMWD4.js} +2 -2
  25. package/dist/{chunk-WZ53HLH6.js → chunk-F5QWZ7GM.js} +2 -2
  26. package/dist/{chunk-CO4FMKOF.js → chunk-G26SGOFR.js} +2 -2
  27. package/dist/{chunk-D6HF462C.js → chunk-HXQ7HDA6.js} +2 -2
  28. package/dist/chunk-HXQ7HDA6.js.map +1 -0
  29. package/dist/{chunk-RJ5FBBL6.js → chunk-J7PLA5S3.js} +2 -2
  30. package/dist/{chunk-32VC36P4.js → chunk-K2S42IR4.js} +2 -2
  31. package/dist/{chunk-JCS5EG5A.js → chunk-KNJKYCTA.js} +2 -2
  32. package/dist/chunk-KNJKYCTA.js.map +1 -0
  33. package/dist/{chunk-T43CZ3IZ.js → chunk-KTE5PB2D.js} +2 -2
  34. package/dist/chunk-KTE5PB2D.js.map +1 -0
  35. package/dist/{chunk-SJB2KXDM.js → chunk-KV2DM5H6.js} +136 -129
  36. package/dist/chunk-KV2DM5H6.js.map +1 -0
  37. package/dist/{chunk-EUKHGXCE.js → chunk-LSURHXZH.js} +2 -2
  38. package/dist/{chunk-GHKX2BA3.js → chunk-NLBT6TBM.js} +2 -2
  39. package/dist/{chunk-RJ4RR3BR.js → chunk-NWZNQ3RC.js} +2 -2
  40. package/dist/{chunk-TPFH5V4D.js → chunk-OSMEXGRN.js} +2 -2
  41. package/dist/chunk-OSMEXGRN.js.map +1 -0
  42. package/dist/{chunk-N43C6XFP.js → chunk-PV53AX35.js} +2 -2
  43. package/dist/chunk-PV53AX35.js.map +1 -0
  44. package/dist/{chunk-63GZEZW4.js → chunk-QLLRQNOJ.js} +2 -2
  45. package/dist/{chunk-WEJGUCCL.js → chunk-ROHDW6KT.js} +2 -2
  46. package/dist/{chunk-XFREXNA2.js → chunk-RQ273N5K.js} +2 -2
  47. package/dist/chunk-RQ273N5K.js.map +1 -0
  48. package/dist/{chunk-UZWJ462U.js → chunk-SOF74I3T.js} +2 -2
  49. package/dist/chunk-SOF74I3T.js.map +1 -0
  50. package/dist/{chunk-BUXWUKN7.js → chunk-TQ6VRUEI.js} +2 -2
  51. package/dist/chunk-TQ6VRUEI.js.map +1 -0
  52. package/dist/{chunk-ATLYBQSC.js → chunk-X2CCEHOR.js} +2 -2
  53. package/dist/chunk-X2CCEHOR.js.map +1 -0
  54. package/dist/{chunk-RZRXEXHM.js → chunk-XBOJZZRT.js} +2 -2
  55. package/dist/chunk-XBOJZZRT.js.map +1 -0
  56. package/dist/{chunk-4YJMDF2S.js → chunk-XYKNXGPR.js} +2 -2
  57. package/dist/chunk-XYKNXGPR.js.map +1 -0
  58. package/dist/digitalocean-XFH2V2A3.js +8 -0
  59. package/dist/discord-OQMSHM3L.js +7 -0
  60. package/dist/{dropbox-GI273OVA.js → dropbox-IAOKM7G5.js} +2 -2
  61. package/dist/gcs-JYZB6CVP.js +8 -0
  62. package/dist/{gdocs-EI2EFVKG.js → gdocs-PHKQGLZL.js} +2 -2
  63. package/dist/{gdrive-62HD67IP.js → gdrive-4JQLGOOP.js} +2 -2
  64. package/dist/github-DU7Z4RSU.js +7 -0
  65. package/dist/{github_ci-7P7VGBKM.js → github_ci-XSAJDNXC.js} +2 -2
  66. package/dist/{gmail-B7HXHZ7D.js → gmail-DEQP2M7T.js} +2 -2
  67. package/dist/{gsheets-OTBW2JWG.js → gsheets-KCIHSMOK.js} +2 -2
  68. package/dist/{gslides-MXSR4HRY.js → gslides-2KBUKKM5.js} +2 -2
  69. package/dist/index.d.ts +18 -18
  70. package/dist/index.js +71 -67
  71. package/dist/index.js.map +1 -1
  72. package/dist/langfuse-FNCMKFSL.js +7 -0
  73. package/dist/linear-XTFO4WKD.js +7 -0
  74. package/dist/minio-NGPBAJY3.js +8 -0
  75. package/dist/mongodb-PGOX6QSY.js +7 -0
  76. package/dist/notion-HYYNQ7KI.js +7 -0
  77. package/dist/oci-EGDBSMLM.js +8 -0
  78. package/dist/opfs-5WGXB5OG.js +7 -0
  79. package/dist/postgres-5HYED4AC.js +7 -0
  80. package/dist/qingstor-2T4Y6MEG.js +8 -0
  81. package/dist/r2-3B45S2KV.js +8 -0
  82. package/dist/{s3-GD2WKLWR.js → s3-GI7SDKGR.js} +2 -2
  83. package/dist/scaleway-ICCXVAY6.js +8 -0
  84. package/dist/seaweedfs-MF77EC33.js +8 -0
  85. package/dist/slack-6LGQERIU.js +7 -0
  86. package/dist/supabase-XTOVMHXU.js +8 -0
  87. package/dist/tencent-FXFKSOTN.js +8 -0
  88. package/dist/trello-DZK4NEVY.js +7 -0
  89. package/dist/wasabi-KVE2B6RB.js +8 -0
  90. package/package.json +2 -2
  91. package/dist/aliyun-F2ORS3KZ.js +0 -8
  92. package/dist/backblaze-HOVWPSV7.js +0 -8
  93. package/dist/ceph-CQKQ4NWW.js +0 -8
  94. package/dist/chunk-4YJMDF2S.js.map +0 -1
  95. package/dist/chunk-6K57U6CM.js.map +0 -1
  96. package/dist/chunk-ATLYBQSC.js.map +0 -1
  97. package/dist/chunk-BUXWUKN7.js.map +0 -1
  98. package/dist/chunk-D6HF462C.js.map +0 -1
  99. package/dist/chunk-EH2BN4JC.js.map +0 -1
  100. package/dist/chunk-HGSTRD7H.js.map +0 -1
  101. package/dist/chunk-INLL7LRM.js.map +0 -1
  102. package/dist/chunk-JCS5EG5A.js.map +0 -1
  103. package/dist/chunk-JVTKE6DB.js.map +0 -1
  104. package/dist/chunk-N43C6XFP.js.map +0 -1
  105. package/dist/chunk-RD7ED27I.js.map +0 -1
  106. package/dist/chunk-RZRXEXHM.js.map +0 -1
  107. package/dist/chunk-SBAUYZJB.js.map +0 -1
  108. package/dist/chunk-SJB2KXDM.js.map +0 -1
  109. package/dist/chunk-T43CZ3IZ.js.map +0 -1
  110. package/dist/chunk-TPFH5V4D.js.map +0 -1
  111. package/dist/chunk-UZWJ462U.js.map +0 -1
  112. package/dist/chunk-XFREXNA2.js.map +0 -1
  113. package/dist/digitalocean-KC7VIWZK.js +0 -8
  114. package/dist/discord-W3DSEXKN.js +0 -7
  115. package/dist/gcs-WRQTU27E.js +0 -8
  116. package/dist/github-SWLYD3LS.js +0 -7
  117. package/dist/langfuse-FWKU6E3F.js +0 -7
  118. package/dist/linear-SHVG3XVT.js +0 -7
  119. package/dist/minio-246KOHBJ.js +0 -8
  120. package/dist/mongodb-2ITJUDCF.js +0 -7
  121. package/dist/notion-BOBBSJSG.js +0 -7
  122. package/dist/oci-T7VREPQW.js +0 -8
  123. package/dist/opfs-3XNAXR5B.js +0 -7
  124. package/dist/postgres-CK4HWZSL.js +0 -7
  125. package/dist/qingstor-WIC27LS3.js +0 -8
  126. package/dist/r2-EAX6KHEI.js +0 -8
  127. package/dist/scaleway-OVFRZBKW.js +0 -8
  128. package/dist/seaweedfs-EOJVO432.js +0 -8
  129. package/dist/slack-RNXMU5OC.js +0 -7
  130. package/dist/supabase-VSUNLIJ6.js +0 -8
  131. package/dist/tencent-YYM5WUVU.js +0 -8
  132. package/dist/trello-MNR3VPTT.js +0 -7
  133. package/dist/wasabi-K5ANTZ2C.js +0 -8
  134. /package/dist/{aliyun-F2ORS3KZ.js.map → aliyun-GMNRT7BJ.js.map} +0 -0
  135. /package/dist/{backblaze-HOVWPSV7.js.map → backblaze-O6CLR73B.js.map} +0 -0
  136. /package/dist/{box-VJSE5N7P.js.map → box-GXWDWZRN.js.map} +0 -0
  137. /package/dist/{ceph-CQKQ4NWW.js.map → ceph-SM7MXDAY.js.map} +0 -0
  138. /package/dist/{chunk-D3JDGGKO.js.map → chunk-57QQAM7V.js.map} +0 -0
  139. /package/dist/{chunk-YEDSFMWK.js.map → chunk-6YP3B7UK.js.map} +0 -0
  140. /package/dist/{chunk-MO5DGX42.js.map → chunk-CNDGXKMU.js.map} +0 -0
  141. /package/dist/{chunk-CAKSQ2LV.js.map → chunk-DHZMC42C.js.map} +0 -0
  142. /package/dist/{chunk-72GY5B23.js.map → chunk-DVXOMWD4.js.map} +0 -0
  143. /package/dist/{chunk-WZ53HLH6.js.map → chunk-F5QWZ7GM.js.map} +0 -0
  144. /package/dist/{chunk-CO4FMKOF.js.map → chunk-G26SGOFR.js.map} +0 -0
  145. /package/dist/{chunk-RJ5FBBL6.js.map → chunk-J7PLA5S3.js.map} +0 -0
  146. /package/dist/{chunk-32VC36P4.js.map → chunk-K2S42IR4.js.map} +0 -0
  147. /package/dist/{chunk-EUKHGXCE.js.map → chunk-LSURHXZH.js.map} +0 -0
  148. /package/dist/{chunk-GHKX2BA3.js.map → chunk-NLBT6TBM.js.map} +0 -0
  149. /package/dist/{chunk-RJ4RR3BR.js.map → chunk-NWZNQ3RC.js.map} +0 -0
  150. /package/dist/{chunk-63GZEZW4.js.map → chunk-QLLRQNOJ.js.map} +0 -0
  151. /package/dist/{chunk-WEJGUCCL.js.map → chunk-ROHDW6KT.js.map} +0 -0
  152. /package/dist/{digitalocean-KC7VIWZK.js.map → digitalocean-XFH2V2A3.js.map} +0 -0
  153. /package/dist/{discord-W3DSEXKN.js.map → discord-OQMSHM3L.js.map} +0 -0
  154. /package/dist/{dropbox-GI273OVA.js.map → dropbox-IAOKM7G5.js.map} +0 -0
  155. /package/dist/{gcs-WRQTU27E.js.map → gcs-JYZB6CVP.js.map} +0 -0
  156. /package/dist/{gdocs-EI2EFVKG.js.map → gdocs-PHKQGLZL.js.map} +0 -0
  157. /package/dist/{gdrive-62HD67IP.js.map → gdrive-4JQLGOOP.js.map} +0 -0
  158. /package/dist/{github-SWLYD3LS.js.map → github-DU7Z4RSU.js.map} +0 -0
  159. /package/dist/{github_ci-7P7VGBKM.js.map → github_ci-XSAJDNXC.js.map} +0 -0
  160. /package/dist/{gmail-B7HXHZ7D.js.map → gmail-DEQP2M7T.js.map} +0 -0
  161. /package/dist/{gsheets-OTBW2JWG.js.map → gsheets-KCIHSMOK.js.map} +0 -0
  162. /package/dist/{gslides-MXSR4HRY.js.map → gslides-2KBUKKM5.js.map} +0 -0
  163. /package/dist/{langfuse-FWKU6E3F.js.map → langfuse-FNCMKFSL.js.map} +0 -0
  164. /package/dist/{linear-SHVG3XVT.js.map → linear-XTFO4WKD.js.map} +0 -0
  165. /package/dist/{minio-246KOHBJ.js.map → minio-NGPBAJY3.js.map} +0 -0
  166. /package/dist/{mongodb-2ITJUDCF.js.map → mongodb-PGOX6QSY.js.map} +0 -0
  167. /package/dist/{notion-BOBBSJSG.js.map → notion-HYYNQ7KI.js.map} +0 -0
  168. /package/dist/{oci-T7VREPQW.js.map → oci-EGDBSMLM.js.map} +0 -0
  169. /package/dist/{opfs-3XNAXR5B.js.map → opfs-5WGXB5OG.js.map} +0 -0
  170. /package/dist/{postgres-CK4HWZSL.js.map → postgres-5HYED4AC.js.map} +0 -0
  171. /package/dist/{qingstor-WIC27LS3.js.map → qingstor-2T4Y6MEG.js.map} +0 -0
  172. /package/dist/{r2-EAX6KHEI.js.map → r2-3B45S2KV.js.map} +0 -0
  173. /package/dist/{s3-GD2WKLWR.js.map → s3-GI7SDKGR.js.map} +0 -0
  174. /package/dist/{scaleway-OVFRZBKW.js.map → scaleway-ICCXVAY6.js.map} +0 -0
  175. /package/dist/{seaweedfs-EOJVO432.js.map → seaweedfs-MF77EC33.js.map} +0 -0
  176. /package/dist/{slack-RNXMU5OC.js.map → slack-6LGQERIU.js.map} +0 -0
  177. /package/dist/{supabase-VSUNLIJ6.js.map → supabase-XTOVMHXU.js.map} +0 -0
  178. /package/dist/{tencent-YYM5WUVU.js.map → tencent-FXFKSOTN.js.map} +0 -0
  179. /package/dist/{trello-MNR3VPTT.js.map → trello-DZK4NEVY.js.map} +0 -0
  180. /package/dist/{wasabi-K5ANTZ2C.js.map → wasabi-KVE2B6RB.js.map} +0 -0
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-XFREXNA2.js";
3
+ } from "./chunk-RQ273N5K.js";
4
4
 
5
5
  // src/resource/aliyun/aliyun.ts
6
6
  import {
@@ -86,4 +86,4 @@ export {
86
86
  ALIYUN_BROWSER_PROMPT,
87
87
  AliyunResource
88
88
  };
89
- //# sourceMappingURL=chunk-GHKX2BA3.js.map
89
+ //# sourceMappingURL=chunk-NLBT6TBM.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-XFREXNA2.js";
3
+ } from "./chunk-RQ273N5K.js";
4
4
 
5
5
  // src/resource/digitalocean/digitalocean.ts
6
6
  import {
@@ -89,4 +89,4 @@ export {
89
89
  DIGITALOCEAN_BROWSER_PROMPT,
90
90
  DigitalOceanResource
91
91
  };
92
- //# sourceMappingURL=chunk-RJ4RR3BR.js.map
92
+ //# sourceMappingURL=chunk-NWZNQ3RC.js.map
@@ -20,7 +20,7 @@ import {
20
20
  } from "@struktoai/mirage-core";
21
21
  var GSlidesResource = class {
22
22
  kind = ResourceName.GSLIDES;
23
- isRemote = true;
23
+ cachesReads = true;
24
24
  indexTtl = 86400;
25
25
  prompt = GSLIDES_PROMPT;
26
26
  writePrompt = GSLIDES_WRITE_PROMPT;
@@ -89,4 +89,4 @@ var GSlidesResource = class {
89
89
  export {
90
90
  GSlidesResource
91
91
  };
92
- //# sourceMappingURL=chunk-TPFH5V4D.js.map
92
+ //# sourceMappingURL=chunk-OSMEXGRN.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gslides/gslides.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 GSLIDES_COMMANDS,\n GSLIDES_PROMPT,\n GSLIDES_VFS_OPS,\n GSLIDES_WRITE_PROMPT,\n GSlidesAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gslidesRead,\n gslidesReaddir,\n gslidesResolveGlob,\n gslidesStat,\n} from '@struktoai/mirage-core'\nimport { redactGSlidesConfig, type GSlidesConfig, type GSlidesConfigRedacted } from './config.ts'\n\nexport interface GSlidesResourceState {\n type: string\n config: GSlidesConfigRedacted\n}\n\nexport class GSlidesResource implements Resource {\n readonly kind: string = ResourceName.GSLIDES\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GSLIDES_PROMPT\n readonly writePrompt: string = GSLIDES_WRITE_PROMPT\n readonly config: GSlidesConfig\n readonly accessor: GSlidesAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GSlidesConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n refreshToken: config.refreshToken,\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n })\n this.accessor = new GSlidesAccessor({ 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 GSLIDES_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GSLIDES_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gslidesRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gslidesReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gslidesStat(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 gslidesResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GSlidesResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGSlidesConfig(this.config),\n })\n }\n\n loadState(_state: GSlidesResourceState): 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;AAQA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,cAAc,OAAO;AAAA,MACrB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IAC1E,CAAC;AACD,SAAK,WAAW,IAAI,gBAAgB,EAAE,cAAc,GAAG,CAAC;AACxD,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,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;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,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -30,7 +30,7 @@ function redactDiscordConfig(config) {
30
30
  // src/resource/discord/discord.ts
31
31
  var DiscordResource = class {
32
32
  kind = ResourceName.DISCORD;
33
- isRemote = true;
33
+ cachesReads = true;
34
34
  indexTtl = 600;
35
35
  prompt = DISCORD_PROMPT;
36
36
  writePrompt = DISCORD_WRITE_PROMPT;
@@ -99,4 +99,4 @@ export {
99
99
  redactDiscordConfig,
100
100
  DiscordResource
101
101
  };
102
- //# sourceMappingURL=chunk-N43C6XFP.js.map
102
+ //# sourceMappingURL=chunk-PV53AX35.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/discord/discord.ts","../src/resource/discord/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 BrowserDiscordTransport,\n DISCORD_COMMANDS,\n DISCORD_PROMPT,\n DISCORD_VFS_OPS,\n DISCORD_WRITE_PROMPT,\n DiscordAccessor,\n type FileStat,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n discordRead,\n discordReaddir,\n discordStat,\n resolveDiscordGlob,\n} from '@struktoai/mirage-core'\nimport { redactDiscordConfig, type DiscordConfig, type DiscordConfigRedacted } from './config.ts'\n\nexport interface DiscordResourceState {\n type: string\n config: DiscordConfigRedacted\n}\n\nexport class DiscordResource implements Resource {\n readonly kind: string = ResourceName.DISCORD\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = DISCORD_PROMPT\n readonly writePrompt: string = DISCORD_WRITE_PROMPT\n readonly config: DiscordConfig\n readonly accessor: DiscordAccessor\n readonly index: IndexCacheStore\n\n constructor(config: DiscordConfig) {\n this.config = config\n this.accessor = new DiscordAccessor(\n new BrowserDiscordTransport({\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 DISCORD_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return DISCORD_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return discordRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return discordReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return discordStat(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 resolveDiscordGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<DiscordResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactDiscordConfig(this.config),\n })\n }\n\n loadState(_state: DiscordResourceState): 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, secretSchema, z } from '@struktoai/mirage-core'\n\nexport interface DiscordConfig {\n proxyUrl: string\n getHeaders?: () => Promise<Record<string, string>> | Record<string, string>\n}\n\nexport interface DiscordConfigRedacted {\n proxyUrl: string\n getHeaders?: '<REDACTED>'\n}\n\nexport const DiscordConfigSchema = z.object({\n proxyUrl: z.string(),\n getHeaders: secretSchema(\n z.custom<DiscordConfig['getHeaders']>((value) => typeof value === 'function'),\n ).optional(),\n})\n\nexport function redactDiscordConfig(config: DiscordConfig): DiscordConfigRedacted {\n return redactConfigWithSchema(DiscordConfigSchema, config) as unknown as DiscordConfigRedacted\n}\n"],"mappings":";AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACnBP,SAAS,wBAAwB,cAAc,SAAS;AAYjD,IAAM,sBAAsB,EAAE,OAAO;AAAA,EAC1C,UAAU,EAAE,OAAO;AAAA,EACnB,YAAY;AAAA,IACV,EAAE,OAAoC,CAAC,UAAU,OAAO,UAAU,UAAU;AAAA,EAC9E,EAAE,SAAS;AACb,CAAC;AAEM,SAAS,oBAAoB,QAA8C;AAChF,SAAO,uBAAuB,qBAAqB,MAAM;AAC3D;;;ADMO,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,SAAK,WAAW,IAAI;AAAA,MAClB,IAAI,wBAAwB;AAAA,QAC1B,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,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;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,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-XFREXNA2.js";
3
+ } from "./chunk-RQ273N5K.js";
4
4
 
5
5
  // src/resource/seaweedfs/seaweedfs.ts
6
6
  import {
@@ -76,4 +76,4 @@ export {
76
76
  SEAWEEDFS_BROWSER_PROMPT,
77
77
  SeaweedFSResource
78
78
  };
79
- //# sourceMappingURL=chunk-63GZEZW4.js.map
79
+ //# sourceMappingURL=chunk-QLLRQNOJ.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  S3Resource
3
- } from "./chunk-XFREXNA2.js";
3
+ } from "./chunk-RQ273N5K.js";
4
4
 
5
5
  // src/resource/supabase/supabase.ts
6
6
  import {
@@ -87,4 +87,4 @@ export {
87
87
  SUPABASE_BROWSER_PROMPT,
88
88
  SupabaseResource
89
89
  };
90
- //# sourceMappingURL=chunk-WEJGUCCL.js.map
90
+ //# sourceMappingURL=chunk-ROHDW6KT.js.map
@@ -41,7 +41,7 @@ var S3_BROWSER_PROMPT = `{prefix}
41
41
  var S3Resource = class {
42
42
  supportsSnapshot = true;
43
43
  kind = ResourceName.S3;
44
- isRemote = true;
44
+ cachesReads = true;
45
45
  indexTtl = 600;
46
46
  prompt = S3_BROWSER_PROMPT;
47
47
  config;
@@ -174,4 +174,4 @@ export {
174
174
  S3_BROWSER_PROMPT,
175
175
  S3Resource
176
176
  };
177
- //# sourceMappingURL=chunk-XFREXNA2.js.map
177
+ //# sourceMappingURL=chunk-RQ273N5K.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/s3/s3.ts","../src/resource/s3/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 copy as copyCore,\n create as createCore,\n du as duCore,\n duAll as duAllCore,\n exists as existsCore,\n type FileStat,\n type FindOptions,\n find as findCore,\n type IndexCacheStore,\n mkdir as mkdirCore,\n PathSpec,\n RAMIndexCacheStore,\n rangeRead as rangeReadCore,\n S3_COMMANDS,\n read as readCore,\n readdir as readdirCore,\n type RegisteredCommand,\n type RegisteredOp,\n rename as renameCore,\n type Resource,\n ResourceName,\n resolveS3Glob as globCore,\n rmR as rmRCore,\n rmdir as rmdirCore,\n S3_OPS,\n S3Accessor,\n stat as statCore,\n stream as streamCore,\n truncate as truncateCore,\n unlink as unlinkCore,\n write as writeCore,\n} from '@struktoai/mirage-core'\nimport { redactConfig, type S3Config, type S3ConfigRedacted } from './config.ts'\n\nexport const S3_BROWSER_PROMPT = `{prefix}\n Remote S3 bucket 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\nexport interface S3ResourceState {\n type: string\n config: S3ConfigRedacted\n}\n\nexport class S3Resource implements Resource {\n readonly supportsSnapshot: boolean = true\n readonly kind: string = ResourceName.S3\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = S3_BROWSER_PROMPT\n readonly config: S3Config\n readonly accessor: S3Accessor\n readonly index: IndexCacheStore\n\n constructor(config: S3Config) {\n this.config = config\n this.accessor = new S3Accessor(this.config)\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 S3_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return S3_OPS\n }\n\n streamPath(p: PathSpec): AsyncIterable<Uint8Array> {\n return streamCore(this.accessor, p)\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return readCore(this.accessor, p)\n }\n\n writeFile(p: PathSpec, data: Uint8Array): Promise<void> {\n return writeCore(this.accessor, p, data)\n }\n\n async appendFile(p: PathSpec, data: Uint8Array): Promise<void> {\n let existing: Uint8Array\n try {\n existing = await readCore(this.accessor, p)\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') {\n existing = new Uint8Array()\n } else {\n throw err\n }\n }\n const merged = new Uint8Array(existing.byteLength + data.byteLength)\n merged.set(existing, 0)\n merged.set(data, existing.byteLength)\n await writeCore(this.accessor, p, merged)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return readdirCore(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return statCore(this.accessor, p, this.index)\n }\n\n exists(p: PathSpec): Promise<boolean> {\n return existsCore(this.accessor, p)\n }\n\n mkdir(p: PathSpec): Promise<void> {\n return mkdirCore(this.accessor, p)\n }\n\n rmdir(p: PathSpec): Promise<void> {\n return rmdirCore(this.accessor, p)\n }\n\n unlink(p: PathSpec): Promise<void> {\n return unlinkCore(this.accessor, p)\n }\n\n rename(src: PathSpec, dst: PathSpec): Promise<void> {\n return renameCore(this.accessor, src, dst)\n }\n\n truncate(p: PathSpec, length: number): Promise<void> {\n return truncateCore(this.accessor, p, length)\n }\n\n copy(src: PathSpec, dst: PathSpec): Promise<void> {\n return copyCore(this.accessor, src, dst)\n }\n\n rmR(p: PathSpec): Promise<void> {\n return rmRCore(this.accessor, p)\n }\n\n du(p: PathSpec): Promise<number> {\n return duCore(this.accessor, p)\n }\n\n find(p: PathSpec, options: FindOptions = {}): Promise<string[]> {\n return findCore(this.accessor, p, options)\n }\n\n glob(paths: readonly PathSpec[], prefix = ''): Promise<PathSpec[]> {\n const effective = 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 globCore(this.accessor, effective, this.index)\n }\n\n async fingerprint(p: PathSpec): Promise<string | null> {\n try {\n const s = await statCore(this.accessor, p, this.index)\n const etag = (s.extra as { etag?: unknown }).etag\n return typeof etag === 'string' && etag !== '' ? etag : null\n } catch (err) {\n if ((err as { code?: string } | null)?.code === 'ENOENT') return null\n throw err\n }\n }\n\n getState(): Promise<S3ResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactConfig(this.config),\n })\n }\n\n loadState(_state: S3ResourceState): Promise<void> {\n return Promise.resolve()\n }\n\n // Ignored — duAll is not yet on the public Resource interface, but keeping\n // it around matches the node-side S3Resource.opsMap hook for completeness.\n _duAll(p: PathSpec): Promise<[[string, number][], number]> {\n return duAllCore(this.accessor, p)\n }\n\n _rangeRead(p: PathSpec, offset: number, size: number): Promise<Uint8Array> {\n return rangeReadCore(this.accessor, p, offset, size)\n }\n\n _create(p: PathSpec): Promise<void> {\n return createCore(this.accessor, p)\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 {\n redactS3Config as redactConfig,\n type S3BrowserOperation,\n type S3BrowserPresignedUrlProvider,\n type S3BrowserSignOptions,\n type S3Config,\n type S3ConfigRedacted,\n} from '@struktoai/mirage-core'\n"],"mappings":"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","names":[]}
@@ -36,7 +36,7 @@ var NeonPgDriver = class {
36
36
  // src/resource/postgres/postgres.ts
37
37
  var PostgresResource = class {
38
38
  kind = ResourceName.POSTGRES;
39
- isRemote = true;
39
+ cachesReads = false;
40
40
  indexTtl = 0;
41
41
  prompt;
42
42
  config;
@@ -90,4 +90,4 @@ export {
90
90
  NeonPgDriver,
91
91
  PostgresResource
92
92
  };
93
- //# sourceMappingURL=chunk-UZWJ462U.js.map
93
+ //# sourceMappingURL=chunk-SOF74I3T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/postgres/postgres.ts","../src/resource/postgres/neon_driver.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 type IndexCacheStore,\n PathSpec,\n type PgDriver,\n POSTGRES_COMMANDS,\n POSTGRES_OPS,\n POSTGRES_PROMPT,\n PostgresAccessor,\n type PostgresConfig,\n type PostgresConfigResolved,\n postgresRead,\n postgresReaddir,\n postgresStat,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolvePostgresConfig,\n resolvePostgresGlob,\n} from '@struktoai/mirage-core'\nimport { NeonPgDriver } from './neon_driver.ts'\n\nexport interface PostgresResourceOptions {\n config: PostgresConfig\n prefix?: string\n driver?: PgDriver\n}\n\nexport class PostgresResource implements Resource {\n readonly kind: string = ResourceName.POSTGRES\n readonly cachesReads: boolean = false\n readonly indexTtl: number = 0\n readonly prompt: string\n readonly config: PostgresConfigResolved\n readonly driver: PgDriver\n readonly accessor: PostgresAccessor\n readonly index: IndexCacheStore\n\n constructor(options: PostgresResourceOptions | PostgresConfig) {\n const { config, prefix, driver } =\n 'config' in options ? options : { config: options, prefix: undefined, driver: undefined }\n this.config = resolvePostgresConfig(config)\n this.driver = driver ?? new NeonPgDriver(this.config.dsn)\n this.accessor = new PostgresAccessor(this.driver, this.config)\n this.index = new RAMIndexCacheStore({ ttl: this.indexTtl })\n this.prompt = POSTGRES_PROMPT.replace('{prefix}', prefix ?? '')\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n async close(): Promise<void> {\n await this.driver.close()\n }\n\n ops(): readonly RegisteredOp[] {\n return POSTGRES_OPS\n }\n\n commands(): readonly RegisteredCommand[] {\n return POSTGRES_COMMANDS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return postgresRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return postgresReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return postgresStat(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 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 resolvePostgresGlob(this.accessor, effective, this.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 { neon, type NeonQueryFunction } from '@neondatabase/serverless'\nimport type { PgDriver, PgQueryResult } from '@struktoai/mirage-core'\n\ninterface FullResultsRow<R> {\n rows: R[]\n rowCount: number | null\n}\n\nexport class NeonPgDriver implements PgDriver {\n private readonly sql: NeonQueryFunction<false, true>\n\n constructor(dsn: string) {\n this.sql = neon(dsn, { fullResults: true })\n }\n\n async query<R = Record<string, unknown>>(\n text: string,\n params?: readonly unknown[],\n ): Promise<PgQueryResult<R>> {\n const result = (await this.sql.query(\n text,\n params as unknown[] | undefined,\n )) as unknown as FullResultsRow<R>\n return { rows: result.rows, rowCount: result.rowCount ?? result.rows.length }\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";AAcA;AAAA,EAGE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,OACK;;;ACrBP,SAAS,YAAoC;AAQtC,IAAM,eAAN,MAAuC;AAAA,EAC3B;AAAA,EAEjB,YAAY,KAAa;AACvB,SAAK,MAAM,KAAK,KAAK,EAAE,aAAa,KAAK,CAAC;AAAA,EAC5C;AAAA,EAEA,MAAM,MACJ,MACA,QAC2B;AAC3B,UAAM,SAAU,MAAM,KAAK,IAAI;AAAA,MAC7B;AAAA,MACA;AAAA,IACF;AACA,WAAO,EAAE,MAAM,OAAO,MAAM,UAAU,OAAO,YAAY,OAAO,KAAK,OAAO;AAAA,EAC9E;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;;;ADCO,IAAM,mBAAN,MAA2C;AAAA,EACvC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,SAAmD;AAC7D,UAAM,EAAE,QAAQ,QAAQ,OAAO,IAC7B,YAAY,UAAU,UAAU,EAAE,QAAQ,SAAS,QAAQ,QAAW,QAAQ,OAAU;AAC1F,SAAK,SAAS,sBAAsB,MAAM;AAC1C,SAAK,SAAS,UAAU,IAAI,aAAa,KAAK,OAAO,GAAG;AACxD,SAAK,WAAW,IAAI,iBAAiB,KAAK,QAAQ,KAAK,MAAM;AAC7D,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,KAAK,SAAS,CAAC;AAC1D,SAAK,SAAS,gBAAgB,QAAQ,YAAY,UAAU,EAAE;AAAA,EAChE;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,KAAK,OAAO,MAAM;AAAA,EAC1B;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,WAAyC;AACvC,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,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,oBAAoB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EACjE;AACF;","names":[]}
@@ -30,7 +30,7 @@ function redactNotionConfig(config) {
30
30
  // src/resource/notion/notion.ts
31
31
  var NotionResource = class {
32
32
  kind = ResourceName.NOTION;
33
- isRemote = true;
33
+ cachesReads = true;
34
34
  indexTtl = 600;
35
35
  prompt = NOTION_PROMPT;
36
36
  writePrompt = NOTION_WRITE_PROMPT;
@@ -96,4 +96,4 @@ export {
96
96
  redactNotionConfig,
97
97
  NotionResource
98
98
  };
99
- //# sourceMappingURL=chunk-BUXWUKN7.js.map
99
+ //# sourceMappingURL=chunk-TQ6VRUEI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/notion/notion.ts","../src/resource/notion/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 type FileStat,\n type IndexCacheStore,\n MCPNotionTransport,\n type MCPNotionTransportOptions,\n NOTION_COMMANDS,\n NOTION_PROMPT,\n NOTION_VFS_OPS,\n NOTION_WRITE_PROMPT,\n NotionAccessor,\n notionRead,\n notionReaddir,\n notionStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveNotionGlob,\n} from '@struktoai/mirage-core'\nimport { redactNotionConfig, type NotionConfig, type NotionConfigRedacted } from './config.ts'\n\nexport interface NotionResourceState {\n type: string\n config: NotionConfigRedacted\n}\n\nexport class NotionResource implements Resource {\n readonly kind: string = ResourceName.NOTION\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = NOTION_PROMPT\n readonly writePrompt: string = NOTION_WRITE_PROMPT\n readonly config: NotionConfig\n readonly accessor: NotionAccessor\n readonly index: IndexCacheStore\n\n constructor(config: NotionConfig) {\n this.config = config\n const opts: MCPNotionTransportOptions = { authProvider: config.authProvider }\n if (config.serverUrl !== undefined) opts.serverUrl = config.serverUrl\n this.accessor = new NotionAccessor(new MCPNotionTransport(opts))\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 NOTION_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return NOTION_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return notionRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return notionReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return notionStat(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 resolveNotionGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<NotionResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactNotionConfig(this.config),\n })\n }\n\n loadState(_state: NotionResourceState): 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 type { OAuthClientProvider } from '@modelcontextprotocol/sdk/client/auth.js'\nimport { redactConfigWithSchema, secretSchema, z } from '@struktoai/mirage-core'\n\nexport interface NotionConfig {\n authProvider: OAuthClientProvider\n serverUrl?: string\n}\n\nexport interface NotionConfigRedacted {\n authProvider: '<REDACTED>'\n serverUrl?: string\n}\n\nexport const NotionConfigSchema = z.object({\n authProvider: secretSchema(\n z.custom<OAuthClientProvider>((value) => value !== null && typeof value === 'object'),\n ),\n serverUrl: z.string().optional(),\n})\n\nexport function redactNotionConfig(config: NotionConfig): NotionConfigRedacted {\n return redactConfigWithSchema(NotionConfigSchema, config) as unknown as NotionConfigRedacted\n}\n"],"mappings":";AAcA;AAAA,EAGE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,OACK;;;ACnBP,SAAS,wBAAwB,cAAc,SAAS;AAYjD,IAAM,qBAAqB,EAAE,OAAO;AAAA,EACzC,cAAc;AAAA,IACZ,EAAE,OAA4B,CAAC,UAAU,UAAU,QAAQ,OAAO,UAAU,QAAQ;AAAA,EACtF;AAAA,EACA,WAAW,EAAE,OAAO,EAAE,SAAS;AACjC,CAAC;AAEM,SAAS,mBAAmB,QAA4C;AAC7E,SAAO,uBAAuB,oBAAoB,MAAM;AAC1D;;;ADMO,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,OAAkC,EAAE,cAAc,OAAO,aAAa;AAC5E,QAAI,OAAO,cAAc,OAAW,MAAK,YAAY,OAAO;AAC5D,SAAK,WAAW,IAAI,eAAe,IAAI,mBAAmB,IAAI,CAAC;AAC/D,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,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACnD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;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,kBAAkB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -39,7 +39,7 @@ function normalizeGitHubConfig(input) {
39
39
  // src/resource/github/github.ts
40
40
  var GitHubResource = class _GitHubResource {
41
41
  kind = ResourceName.GITHUB;
42
- isRemote = true;
42
+ cachesReads = true;
43
43
  indexTtl = 86400;
44
44
  prompt = GITHUB_PROMPT;
45
45
  config;
@@ -126,4 +126,4 @@ export {
126
126
  normalizeGitHubConfig,
127
127
  GitHubResource
128
128
  };
129
- //# sourceMappingURL=chunk-ATLYBQSC.js.map
129
+ //# sourceMappingURL=chunk-X2CCEHOR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/github/github.ts","../src/resource/github/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 fetchGitHubRepoInfo,\n fetchGitHubTree,\n type FileStat,\n GITHUB_COMMANDS,\n GITHUB_PROMPT,\n GITHUB_VFS_OPS,\n GitHubAccessor,\n HttpGitHubTransport,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n githubBuildTreeMap,\n githubPopulateIndex,\n githubRead,\n githubReaddir,\n githubResolveGlob,\n githubStat,\n} from '@struktoai/mirage-core'\nimport { redactGitHubConfig, type GitHubConfig, type GitHubConfigRedacted } from './config.ts'\n\nexport interface GitHubResourceState {\n type: 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 cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GITHUB_PROMPT\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 = githubBuildTreeMap(tree)\n const accessor = new GitHubAccessor({\n transport,\n owner: config.owner,\n repo: config.repo,\n ref,\n defaultBranch: repoInfo.default_branch,\n truncated,\n tree: treeMap,\n })\n const index = new RAMIndexCacheStore({ ttl: 86_400 })\n await githubPopulateIndex(index, tree)\n return new GitHubResource(config, accessor, index)\n }\n\n open(): Promise<void> {\n return Promise.resolve()\n }\n\n close(): Promise<void> {\n return Promise.resolve()\n }\n\n commands(): readonly RegisteredCommand[] {\n return GITHUB_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GITHUB_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 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","// ========= 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, redactConfigWithSchema, secretStr, z } from '@struktoai/mirage-core'\n\nexport interface GitHubConfig {\n token: string\n owner: string\n repo: string\n ref?: string\n baseUrl?: string\n}\n\nexport interface GitHubConfigRedacted {\n token: '<REDACTED>'\n owner: string\n repo: string\n ref?: string\n baseUrl?: string\n}\n\nexport const GitHubConfigSchema = z.object({\n token: secretStr(),\n owner: z.string(),\n repo: z.string(),\n ref: z.string().optional(),\n baseUrl: z.string().optional(),\n})\n\nexport function redactGitHubConfig(config: GitHubConfig): GitHubConfigRedacted {\n return redactConfigWithSchema(GitHubConfigSchema, config) as unknown as GitHubConfigRedacted\n}\n\nexport function normalizeGitHubConfig(input: Record<string, unknown>): GitHubConfig {\n return normalizeFields(input, {\n rename: { base_url: 'baseUrl' },\n }) as unknown as GitHubConfig\n}\n"],"mappings":"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","names":[]}
@@ -20,7 +20,7 @@ import {
20
20
  } from "@struktoai/mirage-core";
21
21
  var GSheetsResource = class {
22
22
  kind = ResourceName.GSHEETS;
23
- isRemote = true;
23
+ cachesReads = true;
24
24
  indexTtl = 86400;
25
25
  prompt = GSHEETS_PROMPT;
26
26
  writePrompt = GSHEETS_WRITE_PROMPT;
@@ -89,4 +89,4 @@ var GSheetsResource = class {
89
89
  export {
90
90
  GSheetsResource
91
91
  };
92
- //# sourceMappingURL=chunk-RZRXEXHM.js.map
92
+ //# sourceMappingURL=chunk-XBOJZZRT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gsheets/gsheets.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 GSHEETS_COMMANDS,\n GSHEETS_PROMPT,\n GSHEETS_VFS_OPS,\n GSHEETS_WRITE_PROMPT,\n GSheetsAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gsheetsRead,\n gsheetsReaddir,\n gsheetsResolveGlob,\n gsheetsStat,\n} from '@struktoai/mirage-core'\nimport { redactGSheetsConfig, type GSheetsConfig, type GSheetsConfigRedacted } from './config.ts'\n\nexport interface GSheetsResourceState {\n type: string\n config: GSheetsConfigRedacted\n}\n\nexport class GSheetsResource implements Resource {\n readonly kind: string = ResourceName.GSHEETS\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GSHEETS_PROMPT\n readonly writePrompt: string = GSHEETS_WRITE_PROMPT\n readonly config: GSheetsConfig\n readonly accessor: GSheetsAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GSheetsConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n refreshToken: config.refreshToken,\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n })\n this.accessor = new GSheetsAccessor({ 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 GSHEETS_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GSHEETS_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gsheetsRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gsheetsReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gsheetsStat(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 gsheetsResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GSheetsResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGSheetsConfig(this.config),\n })\n }\n\n loadState(_state: GSheetsResourceState): 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;AAQA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,cAAc,OAAO;AAAA,MACrB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IAC1E,CAAC;AACD,SAAK,WAAW,IAAI,gBAAgB,EAAE,cAAc,GAAG,CAAC;AACxD,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,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,eAAe,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACpD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,YAAY,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACjD;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,mBAAmB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAChE;AAAA,EAEA,WAA0C;AACxC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -19,7 +19,7 @@ import {
19
19
  } from "@struktoai/mirage-core";
20
20
  var GDriveResource = class {
21
21
  kind = ResourceName.GDRIVE;
22
- isRemote = true;
22
+ cachesReads = true;
23
23
  indexTtl = 86400;
24
24
  prompt = GDRIVE_PROMPT;
25
25
  config;
@@ -87,4 +87,4 @@ var GDriveResource = class {
87
87
  export {
88
88
  GDriveResource
89
89
  };
90
- //# sourceMappingURL=chunk-4YJMDF2S.js.map
90
+ //# sourceMappingURL=chunk-XYKNXGPR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/gdrive/gdrive.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 GDRIVE_COMMANDS,\n GDRIVE_PROMPT,\n GDRIVE_VFS_OPS,\n GDriveAccessor,\n type IndexCacheStore,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n TokenManager,\n gdriveRead,\n gdriveReaddir,\n gdriveResolveGlob,\n gdriveStat,\n} from '@struktoai/mirage-core'\nimport { redactGDriveConfig, type GDriveConfig, type GDriveConfigRedacted } from './config.ts'\n\nexport interface GDriveResourceState {\n type: string\n config: GDriveConfigRedacted\n}\n\nexport class GDriveResource implements Resource {\n readonly kind: string = ResourceName.GDRIVE\n readonly cachesReads: boolean = true\n readonly indexTtl: number = 86_400\n readonly prompt: string = GDRIVE_PROMPT\n readonly config: GDriveConfig\n readonly accessor: GDriveAccessor\n readonly index: IndexCacheStore\n\n constructor(config: GDriveConfig) {\n this.config = config\n const tm = new TokenManager({\n clientId: config.clientId,\n ...(config.clientSecret !== undefined ? { clientSecret: config.clientSecret } : {}),\n refreshToken: config.refreshToken,\n ...(config.refreshFn !== undefined ? { refreshFn: config.refreshFn } : {}),\n })\n this.accessor = new GDriveAccessor({ 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 GDRIVE_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return GDRIVE_VFS_OPS\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return gdriveRead(this.accessor, p, this.index)\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return gdriveReaddir(this.accessor, p, this.index)\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return gdriveStat(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 gdriveResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GDriveResourceState> {\n return Promise.resolve({\n type: this.kind,\n config: redactGDriveConfig(this.config),\n })\n }\n\n loadState(_state: GDriveResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAQA,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,cAAuB;AAAA,EACvB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,GAAI,OAAO,iBAAiB,SAAY,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,MACjF,cAAc,OAAO;AAAA,MACrB,GAAI,OAAO,cAAc,SAAY,EAAE,WAAW,OAAO,UAAU,IAAI,CAAC;AAAA,IAC1E,CAAC;AACD,SAAK,WAAW,IAAI,eAAe,EAAE,cAAc,GAAG,CAAC;AACvD,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,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EACnD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAChD;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,kBAAkB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,8 @@
1
+ import {
2
+ DigitalOceanResource
3
+ } from "./chunk-NWZNQ3RC.js";
4
+ import "./chunk-RQ273N5K.js";
5
+ export {
6
+ DigitalOceanResource
7
+ };
8
+ //# sourceMappingURL=digitalocean-XFH2V2A3.js.map
@@ -0,0 +1,7 @@
1
+ import {
2
+ DiscordResource
3
+ } from "./chunk-PV53AX35.js";
4
+ export {
5
+ DiscordResource
6
+ };
7
+ //# sourceMappingURL=discord-OQMSHM3L.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  DropboxResource
3
- } from "./chunk-SBAUYZJB.js";
3
+ } from "./chunk-2AEAISO2.js";
4
4
  import "./chunk-O5ONB7QT.js";
5
5
  export {
6
6
  DropboxResource
7
7
  };
8
- //# sourceMappingURL=dropbox-GI273OVA.js.map
8
+ //# sourceMappingURL=dropbox-IAOKM7G5.js.map
@@ -0,0 +1,8 @@
1
+ import {
2
+ GCSResource
3
+ } from "./chunk-F5QWZ7GM.js";
4
+ import "./chunk-RQ273N5K.js";
5
+ export {
6
+ GCSResource
7
+ };
8
+ //# sourceMappingURL=gcs-JYZB6CVP.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GDocsResource
3
- } from "./chunk-6K57U6CM.js";
3
+ } from "./chunk-4NLXLDMV.js";
4
4
  import "./chunk-2H4KUUFP.js";
5
5
  export {
6
6
  GDocsResource
7
7
  };
8
- //# sourceMappingURL=gdocs-EI2EFVKG.js.map
8
+ //# sourceMappingURL=gdocs-PHKQGLZL.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GDriveResource
3
- } from "./chunk-4YJMDF2S.js";
3
+ } from "./chunk-XYKNXGPR.js";
4
4
  import "./chunk-NMZBJOFW.js";
5
5
  export {
6
6
  GDriveResource
7
7
  };
8
- //# sourceMappingURL=gdrive-62HD67IP.js.map
8
+ //# sourceMappingURL=gdrive-4JQLGOOP.js.map
@@ -0,0 +1,7 @@
1
+ import {
2
+ GitHubResource
3
+ } from "./chunk-X2CCEHOR.js";
4
+ export {
5
+ GitHubResource
6
+ };
7
+ //# sourceMappingURL=github-DU7Z4RSU.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GitHubCIResource
3
- } from "./chunk-JVTKE6DB.js";
3
+ } from "./chunk-CGZGX2GO.js";
4
4
  import "./chunk-HYUESAQS.js";
5
5
  export {
6
6
  GitHubCIResource
7
7
  };
8
- //# sourceMappingURL=github_ci-7P7VGBKM.js.map
8
+ //# sourceMappingURL=github_ci-XSAJDNXC.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GmailResource
3
- } from "./chunk-RD7ED27I.js";
3
+ } from "./chunk-DFHFILVF.js";
4
4
  import "./chunk-54NTYJEO.js";
5
5
  export {
6
6
  GmailResource
7
7
  };
8
- //# sourceMappingURL=gmail-B7HXHZ7D.js.map
8
+ //# sourceMappingURL=gmail-DEQP2M7T.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GSheetsResource
3
- } from "./chunk-RZRXEXHM.js";
3
+ } from "./chunk-XBOJZZRT.js";
4
4
  import "./chunk-YGRKFONX.js";
5
5
  export {
6
6
  GSheetsResource
7
7
  };
8
- //# sourceMappingURL=gsheets-OTBW2JWG.js.map
8
+ //# sourceMappingURL=gsheets-KCIHSMOK.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  GSlidesResource
3
- } from "./chunk-TPFH5V4D.js";
3
+ } from "./chunk-OSMEXGRN.js";
4
4
  import "./chunk-JSAQMYPK.js";
5
5
  export {
6
6
  GSlidesResource
7
7
  };
8
- //# sourceMappingURL=gslides-MXSR4HRY.js.map
8
+ //# sourceMappingURL=gslides-2KBUKKM5.js.map
package/dist/index.d.ts CHANGED
@@ -80,7 +80,7 @@ interface S3ResourceState {
80
80
  declare class S3Resource implements Resource {
81
81
  readonly supportsSnapshot: boolean;
82
82
  readonly kind: string;
83
- readonly isRemote: boolean;
83
+ readonly cachesReads: boolean;
84
84
  readonly indexTtl: number;
85
85
  readonly prompt: string;
86
86
  readonly config: S3Config;
@@ -593,7 +593,7 @@ interface SlackResourceState {
593
593
  }
594
594
  declare class SlackResource implements Resource {
595
595
  readonly kind: string;
596
- readonly isRemote: boolean;
596
+ readonly cachesReads: boolean;
597
597
  readonly indexTtl: number;
598
598
  readonly prompt: string;
599
599
  readonly writePrompt: string;
@@ -630,7 +630,7 @@ interface DiscordResourceState {
630
630
  }
631
631
  declare class DiscordResource implements Resource {
632
632
  readonly kind: string;
633
- readonly isRemote: boolean;
633
+ readonly cachesReads: boolean;
634
634
  readonly indexTtl: number;
635
635
  readonly prompt: string;
636
636
  readonly writePrompt: string;
@@ -658,7 +658,7 @@ interface PostgresResourceOptions {
658
658
  }
659
659
  declare class PostgresResource implements Resource {
660
660
  readonly kind: string;
661
- readonly isRemote: boolean;
661
+ readonly cachesReads: boolean;
662
662
  readonly indexTtl: number;
663
663
  readonly prompt: string;
664
664
  readonly config: PostgresConfigResolved;
@@ -691,7 +691,7 @@ interface MongoDBResourceOptions {
691
691
  }
692
692
  declare class MongoDBResource implements Resource {
693
693
  readonly kind: string;
694
- readonly isRemote: boolean;
694
+ readonly cachesReads: boolean;
695
695
  readonly indexTtl: number;
696
696
  readonly prompt: string;
697
697
  readonly config: MongoDBConfigResolved;
@@ -756,7 +756,7 @@ interface TrelloResourceState {
756
756
  }
757
757
  declare class TrelloResource implements Resource {
758
758
  readonly kind: string;
759
- readonly isRemote: boolean;
759
+ readonly cachesReads: boolean;
760
760
  readonly indexTtl: number;
761
761
  readonly prompt: string;
762
762
  readonly writePrompt: string;
@@ -798,7 +798,7 @@ interface LinearResourceState {
798
798
  }
799
799
  declare class LinearResource implements Resource {
800
800
  readonly kind: string;
801
- readonly isRemote: boolean;
801
+ readonly cachesReads: boolean;
802
802
  readonly indexTtl: number;
803
803
  readonly prompt: string;
804
804
  readonly writePrompt: string;
@@ -836,7 +836,7 @@ interface NotionResourceState {
836
836
  }
837
837
  declare class NotionResource implements Resource {
838
838
  readonly kind: string;
839
- readonly isRemote: boolean;
839
+ readonly cachesReads: boolean;
840
840
  readonly indexTtl: number;
841
841
  readonly prompt: string;
842
842
  readonly writePrompt: string;
@@ -881,7 +881,7 @@ interface LangfuseResourceState {
881
881
  }
882
882
  declare class LangfuseResource implements Resource {
883
883
  readonly kind: string;
884
- readonly isRemote: boolean;
884
+ readonly cachesReads: boolean;
885
885
  readonly indexTtl: number;
886
886
  readonly prompt: string;
887
887
  readonly config: LangfuseConfig;
@@ -926,7 +926,7 @@ interface GitHubResourceState {
926
926
  }
927
927
  declare class GitHubResource implements Resource {
928
928
  readonly kind: string;
929
- readonly isRemote: boolean;
929
+ readonly cachesReads: boolean;
930
930
  readonly indexTtl: number;
931
931
  readonly prompt: string;
932
932
  readonly config: GitHubConfig;
@@ -970,7 +970,7 @@ interface GitHubCIResourceState {
970
970
  }
971
971
  declare class GitHubCIResource implements Resource {
972
972
  readonly kind: string;
973
- readonly isRemote: boolean;
973
+ readonly cachesReads: boolean;
974
974
  readonly indexTtl: number;
975
975
  readonly prompt: string;
976
976
  readonly config: GitHubCIConfig;
@@ -1013,7 +1013,7 @@ interface GDocsResourceState {
1013
1013
  }
1014
1014
  declare class GDocsResource implements Resource {
1015
1015
  readonly kind: string;
1016
- readonly isRemote: boolean;
1016
+ readonly cachesReads: boolean;
1017
1017
  readonly indexTtl: number;
1018
1018
  readonly prompt: string;
1019
1019
  readonly writePrompt: string;
@@ -1057,7 +1057,7 @@ interface GSheetsResourceState {
1057
1057
  }
1058
1058
  declare class GSheetsResource implements Resource {
1059
1059
  readonly kind: string;
1060
- readonly isRemote: boolean;
1060
+ readonly cachesReads: boolean;
1061
1061
  readonly indexTtl: number;
1062
1062
  readonly prompt: string;
1063
1063
  readonly writePrompt: string;
@@ -1101,7 +1101,7 @@ interface GSlidesResourceState {
1101
1101
  }
1102
1102
  declare class GSlidesResource implements Resource {
1103
1103
  readonly kind: string;
1104
- readonly isRemote: boolean;
1104
+ readonly cachesReads: boolean;
1105
1105
  readonly indexTtl: number;
1106
1106
  readonly prompt: string;
1107
1107
  readonly writePrompt: string;
@@ -1145,7 +1145,7 @@ interface GDriveResourceState {
1145
1145
  }
1146
1146
  declare class GDriveResource implements Resource {
1147
1147
  readonly kind: string;
1148
- readonly isRemote: boolean;
1148
+ readonly cachesReads: boolean;
1149
1149
  readonly indexTtl: number;
1150
1150
  readonly prompt: string;
1151
1151
  readonly config: GDriveConfig;
@@ -1188,7 +1188,7 @@ interface DropboxResourceState {
1188
1188
  }
1189
1189
  declare class DropboxResource implements Resource {
1190
1190
  readonly kind: string;
1191
- readonly isRemote: boolean;
1191
+ readonly cachesReads: boolean;
1192
1192
  readonly indexTtl: number;
1193
1193
  readonly prompt: string;
1194
1194
  readonly config: DropboxConfig;
@@ -1235,7 +1235,7 @@ interface BoxResourceState {
1235
1235
  }
1236
1236
  declare class BoxResource implements Resource {
1237
1237
  readonly kind: string;
1238
- readonly isRemote: boolean;
1238
+ readonly cachesReads: boolean;
1239
1239
  readonly indexTtl: number;
1240
1240
  readonly prompt: string;
1241
1241
  readonly config: BoxConfig;
@@ -1261,7 +1261,7 @@ interface GmailResourceState {
1261
1261
  }
1262
1262
  declare class GmailResource implements Resource {
1263
1263
  readonly kind: string;
1264
- readonly isRemote: boolean;
1264
+ readonly cachesReads: boolean;
1265
1265
  readonly indexTtl: number;
1266
1266
  readonly prompt: string;
1267
1267
  readonly writePrompt: string;