@struktoai/mirage-node 0.0.1-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 (191) hide show
  1. package/README.md +230 -0
  2. package/dist/box-4P7DCJH7.js +8 -0
  3. package/dist/box-4P7DCJH7.js.map +1 -0
  4. package/dist/chunk-35PVZRWU.js +24 -0
  5. package/dist/chunk-35PVZRWU.js.map +1 -0
  6. package/dist/chunk-3PBSL7BS.js +93 -0
  7. package/dist/chunk-3PBSL7BS.js.map +1 -0
  8. package/dist/chunk-3Y625AUP.js +24 -0
  9. package/dist/chunk-3Y625AUP.js.map +1 -0
  10. package/dist/chunk-5E6BULAK.js +92 -0
  11. package/dist/chunk-5E6BULAK.js.map +1 -0
  12. package/dist/chunk-5ITBZN55.js +24 -0
  13. package/dist/chunk-5ITBZN55.js.map +1 -0
  14. package/dist/chunk-6M2NL363.js +94 -0
  15. package/dist/chunk-6M2NL363.js.map +1 -0
  16. package/dist/chunk-6M3QVVOH.js +32 -0
  17. package/dist/chunk-6M3QVVOH.js.map +1 -0
  18. package/dist/chunk-6VKNSO6U.js +56 -0
  19. package/dist/chunk-6VKNSO6U.js.map +1 -0
  20. package/dist/chunk-6Y6GWMFF.js +24 -0
  21. package/dist/chunk-6Y6GWMFF.js.map +1 -0
  22. package/dist/chunk-7QXJ4KWQ.js +132 -0
  23. package/dist/chunk-7QXJ4KWQ.js.map +1 -0
  24. package/dist/chunk-ALAMUIGJ.js +57 -0
  25. package/dist/chunk-ALAMUIGJ.js.map +1 -0
  26. package/dist/chunk-DCJQ2PIX.js +100 -0
  27. package/dist/chunk-DCJQ2PIX.js.map +1 -0
  28. package/dist/chunk-EKPH4MMD.js +27 -0
  29. package/dist/chunk-EKPH4MMD.js.map +1 -0
  30. package/dist/chunk-FZ2GJ4BJ.js +29 -0
  31. package/dist/chunk-FZ2GJ4BJ.js.map +1 -0
  32. package/dist/chunk-G7O6DAWU.js +178 -0
  33. package/dist/chunk-G7O6DAWU.js.map +1 -0
  34. package/dist/chunk-GCB4JUF7.js +94 -0
  35. package/dist/chunk-GCB4JUF7.js.map +1 -0
  36. package/dist/chunk-GKQNMLQU.js +7757 -0
  37. package/dist/chunk-GKQNMLQU.js.map +1 -0
  38. package/dist/chunk-GO67AOYK.js +24 -0
  39. package/dist/chunk-GO67AOYK.js.map +1 -0
  40. package/dist/chunk-GPF66TH2.js +24 -0
  41. package/dist/chunk-GPF66TH2.js.map +1 -0
  42. package/dist/chunk-H3JR7MN3.js +45 -0
  43. package/dist/chunk-H3JR7MN3.js.map +1 -0
  44. package/dist/chunk-H74QYTN7.js +50 -0
  45. package/dist/chunk-H74QYTN7.js.map +1 -0
  46. package/dist/chunk-HEQL3LPK.js +66 -0
  47. package/dist/chunk-HEQL3LPK.js.map +1 -0
  48. package/dist/chunk-HXWGG4K7.js +66 -0
  49. package/dist/chunk-HXWGG4K7.js.map +1 -0
  50. package/dist/chunk-I4RRGZGB.js +24 -0
  51. package/dist/chunk-I4RRGZGB.js.map +1 -0
  52. package/dist/chunk-ICSS5ETT.js +67 -0
  53. package/dist/chunk-ICSS5ETT.js.map +1 -0
  54. package/dist/chunk-KINMBZHC.js +18 -0
  55. package/dist/chunk-KINMBZHC.js.map +1 -0
  56. package/dist/chunk-LBBM3LKK.js +99 -0
  57. package/dist/chunk-LBBM3LKK.js.map +1 -0
  58. package/dist/chunk-LPMPTQYP.js +36 -0
  59. package/dist/chunk-LPMPTQYP.js.map +1 -0
  60. package/dist/chunk-M42JTWPR.js +2794 -0
  61. package/dist/chunk-M42JTWPR.js.map +1 -0
  62. package/dist/chunk-MVE5VVMQ.js +91 -0
  63. package/dist/chunk-MVE5VVMQ.js.map +1 -0
  64. package/dist/chunk-MY3NUJJD.js +67 -0
  65. package/dist/chunk-MY3NUJJD.js.map +1 -0
  66. package/dist/chunk-NOZZFJEB.js +93 -0
  67. package/dist/chunk-NOZZFJEB.js.map +1 -0
  68. package/dist/chunk-OYJXYJTE.js +2358 -0
  69. package/dist/chunk-OYJXYJTE.js.map +1 -0
  70. package/dist/chunk-PEZYBKZH.js +124 -0
  71. package/dist/chunk-PEZYBKZH.js.map +1 -0
  72. package/dist/chunk-QWWOBAYU.js +26 -0
  73. package/dist/chunk-QWWOBAYU.js.map +1 -0
  74. package/dist/chunk-RQYYYBQG.js +24 -0
  75. package/dist/chunk-RQYYYBQG.js.map +1 -0
  76. package/dist/chunk-T2WWAEKH.js +7591 -0
  77. package/dist/chunk-T2WWAEKH.js.map +1 -0
  78. package/dist/chunk-U6QSXTUS.js +7 -0
  79. package/dist/chunk-U6QSXTUS.js.map +1 -0
  80. package/dist/chunk-UWMOTOXA.js +93 -0
  81. package/dist/chunk-UWMOTOXA.js.map +1 -0
  82. package/dist/chunk-UZZD4MRJ.js +95 -0
  83. package/dist/chunk-UZZD4MRJ.js.map +1 -0
  84. package/dist/chunk-V5OLWE7F.js +88 -0
  85. package/dist/chunk-V5OLWE7F.js.map +1 -0
  86. package/dist/chunk-VCLMTMSO.js +23 -0
  87. package/dist/chunk-VCLMTMSO.js.map +1 -0
  88. package/dist/chunk-WSDQ2MRG.js +102 -0
  89. package/dist/chunk-WSDQ2MRG.js.map +1 -0
  90. package/dist/chunk-XDEEOTVK.js +93 -0
  91. package/dist/chunk-XDEEOTVK.js.map +1 -0
  92. package/dist/chunk-XQUQSNCA.js +117 -0
  93. package/dist/chunk-XQUQSNCA.js.map +1 -0
  94. package/dist/chunk-XVYZO2FG.js +14 -0
  95. package/dist/chunk-XVYZO2FG.js.map +1 -0
  96. package/dist/chunk-ZC4KNEOQ.js +50 -0
  97. package/dist/chunk-ZC4KNEOQ.js.map +1 -0
  98. package/dist/config-5ZPGISS6.js +13 -0
  99. package/dist/config-5ZPGISS6.js.map +1 -0
  100. package/dist/config-6HWSKHEU.js +9 -0
  101. package/dist/config-6HWSKHEU.js.map +1 -0
  102. package/dist/config-6TNFPYZF.js +9 -0
  103. package/dist/config-6TNFPYZF.js.map +1 -0
  104. package/dist/config-BHLXQ3OL.js +9 -0
  105. package/dist/config-BHLXQ3OL.js.map +1 -0
  106. package/dist/config-E7UOEWEP.js +9 -0
  107. package/dist/config-E7UOEWEP.js.map +1 -0
  108. package/dist/config-FNR6LJ5H.js +11 -0
  109. package/dist/config-FNR6LJ5H.js.map +1 -0
  110. package/dist/config-HIZHA5VD.js +13 -0
  111. package/dist/config-HIZHA5VD.js.map +1 -0
  112. package/dist/config-HNSDNQZH.js +9 -0
  113. package/dist/config-HNSDNQZH.js.map +1 -0
  114. package/dist/config-IXLFUSMQ.js +9 -0
  115. package/dist/config-IXLFUSMQ.js.map +1 -0
  116. package/dist/config-J3TM7NIS.js +9 -0
  117. package/dist/config-J3TM7NIS.js.map +1 -0
  118. package/dist/config-JXLZ4XEW.js +9 -0
  119. package/dist/config-JXLZ4XEW.js.map +1 -0
  120. package/dist/config-KQCEMLNZ.js +9 -0
  121. package/dist/config-KQCEMLNZ.js.map +1 -0
  122. package/dist/config-MOLWOSRG.js +9 -0
  123. package/dist/config-MOLWOSRG.js.map +1 -0
  124. package/dist/config-R3XJ5OW4.js +9 -0
  125. package/dist/config-R3XJ5OW4.js.map +1 -0
  126. package/dist/config-S47UDVRZ.js +13 -0
  127. package/dist/config-S47UDVRZ.js.map +1 -0
  128. package/dist/config-UKZ72IDO.js +13 -0
  129. package/dist/config-UKZ72IDO.js.map +1 -0
  130. package/dist/config-V7XI5UTG.js +9 -0
  131. package/dist/config-V7XI5UTG.js.map +1 -0
  132. package/dist/config-YLIX3ZBT.js +9 -0
  133. package/dist/config-YLIX3ZBT.js.map +1 -0
  134. package/dist/config-Z5JGDOKE.js +9 -0
  135. package/dist/config-Z5JGDOKE.js.map +1 -0
  136. package/dist/config-ZCZZAH5W.js +9 -0
  137. package/dist/config-ZCZZAH5W.js.map +1 -0
  138. package/dist/config-ZZGIWDUC.js +9 -0
  139. package/dist/config-ZZGIWDUC.js.map +1 -0
  140. package/dist/discord-2PWP2MGX.js +8 -0
  141. package/dist/discord-2PWP2MGX.js.map +1 -0
  142. package/dist/disk-C7TJNU2B.js +8 -0
  143. package/dist/disk-C7TJNU2B.js.map +1 -0
  144. package/dist/dropbox-L5DPYGKR.js +8 -0
  145. package/dist/dropbox-L5DPYGKR.js.map +1 -0
  146. package/dist/email-HASRFBKC.js +8 -0
  147. package/dist/email-HASRFBKC.js.map +1 -0
  148. package/dist/gcs-P5QMKTPR.js +10 -0
  149. package/dist/gcs-P5QMKTPR.js.map +1 -0
  150. package/dist/gdocs-IF2I35HZ.js +8 -0
  151. package/dist/gdocs-IF2I35HZ.js.map +1 -0
  152. package/dist/gdrive-TAETVCKP.js +8 -0
  153. package/dist/gdrive-TAETVCKP.js.map +1 -0
  154. package/dist/github-5E6GSCNZ.js +8 -0
  155. package/dist/github-5E6GSCNZ.js.map +1 -0
  156. package/dist/github_ci-2DSZI3Y7.js +8 -0
  157. package/dist/github_ci-2DSZI3Y7.js.map +1 -0
  158. package/dist/gmail-F5VYGKOT.js +8 -0
  159. package/dist/gmail-F5VYGKOT.js.map +1 -0
  160. package/dist/gsheets-BAO54CQ7.js +8 -0
  161. package/dist/gsheets-BAO54CQ7.js.map +1 -0
  162. package/dist/gslides-A62CEEMR.js +8 -0
  163. package/dist/gslides-A62CEEMR.js.map +1 -0
  164. package/dist/index.d.ts +1671 -0
  165. package/dist/index.js +3564 -0
  166. package/dist/index.js.map +1 -0
  167. package/dist/langfuse-YKBYRQLU.js +8 -0
  168. package/dist/langfuse-YKBYRQLU.js.map +1 -0
  169. package/dist/linear-WJDQ6JDE.js +8 -0
  170. package/dist/linear-WJDQ6JDE.js.map +1 -0
  171. package/dist/mongodb-MK4DVSIK.js +7 -0
  172. package/dist/mongodb-MK4DVSIK.js.map +1 -0
  173. package/dist/oci-KZ7XFZ2X.js +10 -0
  174. package/dist/oci-KZ7XFZ2X.js.map +1 -0
  175. package/dist/postgres-M2N2APFZ.js +7 -0
  176. package/dist/postgres-M2N2APFZ.js.map +1 -0
  177. package/dist/r2-X4DDNSAZ.js +10 -0
  178. package/dist/r2-X4DDNSAZ.js.map +1 -0
  179. package/dist/redis-NVCXUUIO.js +7 -0
  180. package/dist/redis-NVCXUUIO.js.map +1 -0
  181. package/dist/s3-HVAL7ZX3.js +8 -0
  182. package/dist/s3-HVAL7ZX3.js.map +1 -0
  183. package/dist/slack-GUQMDGLP.js +8 -0
  184. package/dist/slack-GUQMDGLP.js.map +1 -0
  185. package/dist/ssh-LY6WYVVD.js +9 -0
  186. package/dist/ssh-LY6WYVVD.js.map +1 -0
  187. package/dist/supabase-H3ZP4Y3W.js +10 -0
  188. package/dist/supabase-H3ZP4Y3W.js.map +1 -0
  189. package/dist/trello-WR6TEDYD.js +8 -0
  190. package/dist/trello-WR6TEDYD.js.map +1 -0
  191. package/package.json +118 -0
@@ -0,0 +1,7 @@
1
+ // src/core/disk/constants.ts
2
+ var SCOPE_ERROR = 5e4;
3
+
4
+ export {
5
+ SCOPE_ERROR
6
+ };
7
+ //# sourceMappingURL=chunk-U6QSXTUS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/disk/constants.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 const SCOPE_WARN = 5000\nexport const SCOPE_ERROR = 50000\n"],"mappings":";AAeO,IAAM,cAAc;","names":[]}
@@ -0,0 +1,93 @@
1
+ import {
2
+ redactGmailConfig
3
+ } from "./chunk-GO67AOYK.js";
4
+
5
+ // src/resource/gmail/gmail.ts
6
+ import {
7
+ GMAIL_COMMANDS,
8
+ GMAIL_PROMPT,
9
+ GMAIL_WRITE_PROMPT,
10
+ GMAIL_VFS_OPS,
11
+ GmailAccessor,
12
+ PathSpec,
13
+ RAMIndexCacheStore,
14
+ ResourceName,
15
+ TokenManager,
16
+ gmailRead,
17
+ gmailReaddir,
18
+ gmailResolveGlob,
19
+ gmailStat
20
+ } from "@struktoai/mirage-core";
21
+ var GmailResource = class {
22
+ kind = ResourceName.GMAIL;
23
+ isRemote = true;
24
+ indexTtl = 86400;
25
+ prompt = GMAIL_PROMPT;
26
+ writePrompt = GMAIL_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ const tm = new TokenManager({
33
+ clientId: config.clientId,
34
+ clientSecret: config.clientSecret,
35
+ refreshToken: config.refreshToken
36
+ });
37
+ this.accessor = new GmailAccessor({ tokenManager: tm });
38
+ this.index = new RAMIndexCacheStore({ ttl: 86400 });
39
+ }
40
+ open() {
41
+ return Promise.resolve();
42
+ }
43
+ close() {
44
+ return Promise.resolve();
45
+ }
46
+ commands() {
47
+ return GMAIL_COMMANDS;
48
+ }
49
+ ops() {
50
+ return GMAIL_VFS_OPS;
51
+ }
52
+ readFile(p) {
53
+ return gmailRead(this.accessor, p, this.index);
54
+ }
55
+ readdir(p) {
56
+ return gmailReaddir(this.accessor, p, this.index);
57
+ }
58
+ stat(p) {
59
+ return gmailStat(this.accessor, p, this.index);
60
+ }
61
+ async fingerprint(p) {
62
+ const lookup = await this.index.get(p.original);
63
+ return lookup.entry?.remoteTime ?? null;
64
+ }
65
+ glob(paths, prefix = "") {
66
+ const effective = prefix !== "" ? paths.map(
67
+ (p) => p.prefix !== "" ? p : new PathSpec({
68
+ original: p.original,
69
+ directory: p.directory,
70
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
71
+ resolved: p.resolved,
72
+ prefix
73
+ })
74
+ ) : paths;
75
+ return gmailResolveGlob(this.accessor, effective, this.index);
76
+ }
77
+ getState() {
78
+ return Promise.resolve({
79
+ type: this.kind,
80
+ needsOverride: true,
81
+ redactedFields: ["clientSecret", "refreshToken"],
82
+ config: redactGmailConfig(this.config)
83
+ });
84
+ }
85
+ loadState(_state) {
86
+ return Promise.resolve();
87
+ }
88
+ };
89
+
90
+ export {
91
+ GmailResource
92
+ };
93
+ //# sourceMappingURL=chunk-UWMOTOXA.js.map
@@ -0,0 +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 {\n type FileStat,\n GMAIL_COMMANDS,\n GMAIL_PROMPT,\n GMAIL_WRITE_PROMPT,\n GMAIL_VFS_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 gmailResolveGlob,\n gmailStat,\n} from '@struktoai/mirage-core'\nimport { redactGmailConfig, type GmailConfig, type GmailConfigRedacted } from './config.ts'\n\nexport interface GmailResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: GmailConfigRedacted\n}\n\nexport class GmailResource implements Resource {\n readonly kind: string = ResourceName.GMAIL\n readonly isRemote: 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({\n clientId: config.clientId,\n clientSecret: config.clientSecret,\n refreshToken: config.refreshToken,\n })\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_VFS_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 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 gmailResolveGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<GmailResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\n config: redactGmailConfig(this.config),\n })\n }\n\n loadState(_state: GmailResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,UAAM,KAAK,IAAI,aAAa;AAAA,MAC1B,UAAU,OAAO;AAAA,MACjB,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB,CAAC;AACD,SAAK,WAAW,IAAI,cAAc,EAAE,cAAc,GAAG,CAAC;AACtD,SAAK,QAAQ,IAAI,mBAAmB,EAAE,KAAK,MAAO,CAAC;AAAA,EACrD;AAAA,EAEA,OAAsB;AACpB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,QAAuB;AACrB,WAAO,QAAQ,QAAQ;AAAA,EACzB;AAAA,EAEA,WAAyC;AACvC,WAAO;AAAA,EACT;AAAA,EAEA,MAA+B;AAC7B,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,aAAa,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAClD;AAAA,EAEA,KAAK,GAAgC;AACnC,WAAO,UAAU,KAAK,UAAU,GAAG,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,iBAAiB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC9D;AAAA,EAEA,WAAwC;AACtC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,95 @@
1
+ import {
2
+ redactLinearConfig
3
+ } from "./chunk-6Y6GWMFF.js";
4
+
5
+ // src/resource/linear/linear.ts
6
+ import {
7
+ HttpLinearTransport,
8
+ LINEAR_COMMANDS,
9
+ LINEAR_PROMPT,
10
+ LINEAR_VFS_OPS,
11
+ LINEAR_WRITE_PROMPT,
12
+ LinearAccessor,
13
+ linearRead,
14
+ linearReaddir,
15
+ linearStat,
16
+ PathSpec,
17
+ RAMIndexCacheStore,
18
+ ResourceName,
19
+ resolveLinearGlob
20
+ } from "@struktoai/mirage-core";
21
+ var LinearResource = class {
22
+ kind = ResourceName.LINEAR;
23
+ isRemote = true;
24
+ indexTtl = 600;
25
+ prompt = LINEAR_PROMPT;
26
+ writePrompt = LINEAR_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ const transportOpts = { apiKey: config.apiKey };
33
+ if (config.baseUrl !== void 0) transportOpts.baseUrl = config.baseUrl;
34
+ this.accessor = new LinearAccessor(new HttpLinearTransport(transportOpts));
35
+ this.index = new RAMIndexCacheStore({ ttl: this.indexTtl });
36
+ }
37
+ open() {
38
+ return Promise.resolve();
39
+ }
40
+ close() {
41
+ return Promise.resolve();
42
+ }
43
+ commands() {
44
+ return LINEAR_COMMANDS;
45
+ }
46
+ ops() {
47
+ return LINEAR_VFS_OPS;
48
+ }
49
+ filter() {
50
+ const out = {};
51
+ if (this.config.teamIds !== void 0) out.teamIds = this.config.teamIds;
52
+ return out;
53
+ }
54
+ readFile(p) {
55
+ return linearRead(this.accessor, p, this.index, this.filter());
56
+ }
57
+ readdir(p) {
58
+ return linearReaddir(this.accessor, p, this.index, this.filter());
59
+ }
60
+ stat(p) {
61
+ return linearStat(this.accessor, p, this.index);
62
+ }
63
+ async fingerprint(p) {
64
+ const lookup = await this.index.get(p.original);
65
+ return lookup.entry?.remoteTime ?? null;
66
+ }
67
+ glob(paths, prefix = "") {
68
+ const effective = prefix !== "" ? paths.map(
69
+ (p) => p.prefix !== "" ? p : new PathSpec({
70
+ original: p.original,
71
+ directory: p.directory,
72
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
73
+ resolved: p.resolved,
74
+ prefix
75
+ })
76
+ ) : paths;
77
+ return resolveLinearGlob(this.accessor, effective, this.index, this.filter());
78
+ }
79
+ getState() {
80
+ return Promise.resolve({
81
+ type: this.kind,
82
+ needsOverride: true,
83
+ redactedFields: ["apiKey"],
84
+ config: redactLinearConfig(this.config)
85
+ });
86
+ }
87
+ loadState(_state) {
88
+ return Promise.resolve();
89
+ }
90
+ };
91
+
92
+ export {
93
+ LinearResource
94
+ };
95
+ //# sourceMappingURL=chunk-UZZD4MRJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/linear/linear.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 HttpLinearTransport,\n type IndexCacheStore,\n LINEAR_COMMANDS,\n LINEAR_PROMPT,\n LINEAR_VFS_OPS,\n LINEAR_WRITE_PROMPT,\n LinearAccessor,\n type LinearReaddirFilter,\n linearRead,\n linearReaddir,\n linearStat,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveLinearGlob,\n} from '@struktoai/mirage-core'\nimport { redactLinearConfig, type LinearConfig, type LinearConfigRedacted } from './config.ts'\n\nexport interface LinearResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: LinearConfigRedacted\n}\n\nexport class LinearResource implements Resource {\n readonly kind: string = ResourceName.LINEAR\n readonly isRemote: boolean = true\n readonly indexTtl: number = 600\n readonly prompt: string = LINEAR_PROMPT\n readonly writePrompt: string = LINEAR_WRITE_PROMPT\n readonly config: LinearConfig\n readonly accessor: LinearAccessor\n readonly index: IndexCacheStore\n\n constructor(config: LinearConfig) {\n this.config = config\n const transportOpts: { apiKey: string; baseUrl?: string } = { apiKey: config.apiKey }\n if (config.baseUrl !== undefined) transportOpts.baseUrl = config.baseUrl\n this.accessor = new LinearAccessor(new HttpLinearTransport(transportOpts))\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 LINEAR_COMMANDS\n }\n\n ops(): readonly RegisteredOp[] {\n return LINEAR_VFS_OPS\n }\n\n private filter(): LinearReaddirFilter {\n const out: LinearReaddirFilter = {}\n if (this.config.teamIds !== undefined) out.teamIds = this.config.teamIds\n return out\n }\n\n readFile(p: PathSpec): Promise<Uint8Array> {\n return linearRead(this.accessor, p, this.index, this.filter())\n }\n\n readdir(p: PathSpec): Promise<string[]> {\n return linearReaddir(this.accessor, p, this.index, this.filter())\n }\n\n stat(p: PathSpec): Promise<FileStat> {\n return linearStat(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 resolveLinearGlob(this.accessor, effective, this.index, this.filter())\n }\n\n getState(): Promise<LinearResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['apiKey'],\n config: redactLinearConfig(this.config),\n })\n }\n\n loadState(_state: LinearResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAEE;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,iBAAN,MAAyC;AAAA,EACrC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,UAAM,gBAAsD,EAAE,QAAQ,OAAO,OAAO;AACpF,QAAI,OAAO,YAAY,OAAW,eAAc,UAAU,OAAO;AACjE,SAAK,WAAW,IAAI,eAAe,IAAI,oBAAoB,aAAa,CAAC;AACzE,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,EAEQ,SAA8B;AACpC,UAAM,MAA2B,CAAC;AAClC,QAAI,KAAK,OAAO,YAAY,OAAW,KAAI,UAAU,KAAK,OAAO;AACjE,WAAO;AAAA,EACT;AAAA,EAEA,SAAS,GAAkC;AACzC,WAAO,WAAW,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAC/D;AAAA,EAEA,QAAQ,GAAgC;AACtC,WAAO,cAAc,KAAK,UAAU,GAAG,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,EAClE;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,OAAO,KAAK,OAAO,CAAC;AAAA,EAC9E;AAAA,EAEA,WAAyC;AACvC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,QAAQ;AAAA,MACzB,QAAQ,mBAAmB,KAAK,MAAM;AAAA,IACxC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA4C;AACpD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,88 @@
1
+ import {
2
+ redactSlackConfig
3
+ } from "./chunk-KINMBZHC.js";
4
+
5
+ // src/resource/slack/slack.ts
6
+ import {
7
+ NodeSlackTransport,
8
+ PathSpec,
9
+ RAMIndexCacheStore,
10
+ ResourceName,
11
+ resolveSlackGlob,
12
+ SLACK_COMMANDS,
13
+ SLACK_PROMPT,
14
+ SLACK_VFS_OPS,
15
+ SLACK_WRITE_PROMPT,
16
+ SlackAccessor,
17
+ slackRead,
18
+ slackReaddir,
19
+ slackStat
20
+ } from "@struktoai/mirage-core";
21
+ var SlackResource = class {
22
+ kind = ResourceName.SLACK;
23
+ isRemote = true;
24
+ indexTtl = 600;
25
+ prompt = SLACK_PROMPT;
26
+ writePrompt = SLACK_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ this.accessor = new SlackAccessor(new NodeSlackTransport(config.token, config.searchToken));
33
+ this.index = new RAMIndexCacheStore({ ttl: this.indexTtl });
34
+ }
35
+ open() {
36
+ return Promise.resolve();
37
+ }
38
+ close() {
39
+ return Promise.resolve();
40
+ }
41
+ commands() {
42
+ return SLACK_COMMANDS;
43
+ }
44
+ ops() {
45
+ return SLACK_VFS_OPS;
46
+ }
47
+ readFile(p) {
48
+ return slackRead(this.accessor, p, this.index);
49
+ }
50
+ readdir(p) {
51
+ return slackReaddir(this.accessor, p, this.index);
52
+ }
53
+ stat(p) {
54
+ return slackStat(this.accessor, p, this.index);
55
+ }
56
+ async fingerprint(p) {
57
+ const lookup = await this.index.get(p.original);
58
+ return lookup.entry?.remoteTime ?? null;
59
+ }
60
+ glob(paths, prefix = "") {
61
+ const effective = prefix !== "" ? paths.map(
62
+ (p) => p.prefix !== "" ? p : new PathSpec({
63
+ original: p.original,
64
+ directory: p.directory,
65
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
66
+ resolved: p.resolved,
67
+ prefix
68
+ })
69
+ ) : paths;
70
+ return resolveSlackGlob(this.accessor, effective, this.index);
71
+ }
72
+ getState() {
73
+ return Promise.resolve({
74
+ type: this.kind,
75
+ needsOverride: true,
76
+ redactedFields: ["token", "searchToken"],
77
+ config: redactSlackConfig(this.config)
78
+ });
79
+ }
80
+ loadState(_state) {
81
+ return Promise.resolve();
82
+ }
83
+ };
84
+
85
+ export {
86
+ SlackResource
87
+ };
88
+ //# sourceMappingURL=chunk-V5OLWE7F.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/slack/slack.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 NodeSlackTransport,\n PathSpec,\n RAMIndexCacheStore,\n type RegisteredCommand,\n type RegisteredOp,\n type Resource,\n ResourceName,\n resolveSlackGlob,\n SLACK_COMMANDS,\n SLACK_PROMPT,\n SLACK_VFS_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\nexport interface SlackResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: SlackConfigRedacted\n}\n\nexport class SlackResource implements Resource {\n readonly kind: string = ResourceName.SLACK\n readonly isRemote: 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(new NodeSlackTransport(config.token, config.searchToken))\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_VFS_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 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 resolveSlackGlob(this.accessor, effective, this.index)\n }\n\n getState(): Promise<SlackResourceState> {\n return Promise.resolve({\n type: this.kind,\n needsOverride: true,\n redactedFields: ['token', 'searchToken'],\n config: redactSlackConfig(this.config),\n })\n }\n\n loadState(_state: SlackResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EAGE;AAAA,EACA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAUA,IAAM,gBAAN,MAAwC;AAAA,EACpC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAqB;AAC/B,SAAK,SAAS;AACd,SAAK,WAAW,IAAI,cAAc,IAAI,mBAAmB,OAAO,OAAO,OAAO,WAAW,CAAC;AAC1F,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,MAAM,YAAY,GAAqC;AACrD,UAAM,SAAS,MAAM,KAAK,MAAM,IAAI,EAAE,QAAQ;AAC9C,WAAO,OAAO,OAAO,cAAc;AAAA,EACrC;AAAA,EAEA,KAAK,OAA4B,SAAS,IAAyB;AACjE,UAAM,YACJ,WAAW,KACP,MAAM;AAAA,MAAI,CAAC,MACT,EAAE,WAAW,KACT,IACA,IAAI,SAAS;AAAA,QACX,UAAU,EAAE;AAAA,QACZ,WAAW,EAAE;AAAA,QACb,GAAI,EAAE,YAAY,OAAO,EAAE,SAAS,EAAE,QAAQ,IAAI,CAAC;AAAA,QACnD,UAAU,EAAE;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACP,IACA;AACN,WAAO,iBAAiB,KAAK,UAAU,WAAW,KAAK,KAAK;AAAA,EAC9D;AAAA,EAEA,WAAwC;AACtC,WAAO,QAAQ,QAAQ;AAAA,MACrB,MAAM,KAAK;AAAA,MACX,eAAe;AAAA,MACf,gBAAgB,CAAC,SAAS,aAAa;AAAA,MACvC,QAAQ,kBAAkB,KAAK,MAAM;AAAA,IACvC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA2C;AACnD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,23 @@
1
+ // src/resource/github/config.ts
2
+ import { normalizeFields } from "@struktoai/mirage-core";
3
+ function redactGitHubConfig(config) {
4
+ const out = {
5
+ token: "<REDACTED>",
6
+ owner: config.owner,
7
+ repo: config.repo
8
+ };
9
+ if (config.ref !== void 0) out.ref = config.ref;
10
+ if (config.baseUrl !== void 0) out.baseUrl = config.baseUrl;
11
+ return out;
12
+ }
13
+ function normalizeGitHubConfig(input) {
14
+ return normalizeFields(input, {
15
+ rename: { base_url: "baseUrl" }
16
+ });
17
+ }
18
+
19
+ export {
20
+ redactGitHubConfig,
21
+ normalizeGitHubConfig
22
+ };
23
+ //# sourceMappingURL=chunk-VCLMTMSO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../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 { normalizeFields } 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 function redactGitHubConfig(config: GitHubConfig): GitHubConfigRedacted {\n const out: GitHubConfigRedacted = {\n token: '<REDACTED>',\n owner: config.owner,\n repo: config.repo,\n }\n if (config.ref !== undefined) out.ref = config.ref\n if (config.baseUrl !== undefined) out.baseUrl = config.baseUrl\n return out\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":";AAcA,SAAS,uBAAuB;AAkBzB,SAAS,mBAAmB,QAA4C;AAC7E,QAAM,MAA4B;AAAA,IAChC,OAAO;AAAA,IACP,OAAO,OAAO;AAAA,IACd,MAAM,OAAO;AAAA,EACf;AACA,MAAI,OAAO,QAAQ,OAAW,KAAI,MAAM,OAAO;AAC/C,MAAI,OAAO,YAAY,OAAW,KAAI,UAAU,OAAO;AACvD,SAAO;AACT;AAEO,SAAS,sBAAsB,OAA8C;AAClF,SAAO,gBAAgB,OAAO;AAAA,IAC5B,QAAQ,EAAE,UAAU,UAAU;AAAA,EAChC,CAAC;AACH;","names":[]}
@@ -0,0 +1,102 @@
1
+ import {
2
+ redactDiscordConfig
3
+ } from "./chunk-XVYZO2FG.js";
4
+
5
+ // src/resource/discord/discord.ts
6
+ import {
7
+ DISCORD_API,
8
+ DISCORD_COMMANDS,
9
+ DISCORD_PROMPT,
10
+ DISCORD_VFS_OPS,
11
+ DISCORD_WRITE_PROMPT,
12
+ DiscordAccessor,
13
+ HttpDiscordTransport,
14
+ PathSpec,
15
+ RAMIndexCacheStore,
16
+ ResourceName,
17
+ discordRead,
18
+ discordReaddir,
19
+ discordStat,
20
+ resolveDiscordGlob
21
+ } from "@struktoai/mirage-core";
22
+ var NodeDiscordTransport = class extends HttpDiscordTransport {
23
+ constructor(token) {
24
+ super();
25
+ this.token = token;
26
+ }
27
+ token;
28
+ baseUrl() {
29
+ return DISCORD_API;
30
+ }
31
+ authHeaders() {
32
+ return { Authorization: `Bot ${this.token}` };
33
+ }
34
+ };
35
+ var DiscordResource = class {
36
+ kind = ResourceName.DISCORD;
37
+ isRemote = true;
38
+ indexTtl = 600;
39
+ prompt = DISCORD_PROMPT;
40
+ writePrompt = DISCORD_WRITE_PROMPT;
41
+ config;
42
+ accessor;
43
+ index;
44
+ constructor(config) {
45
+ this.config = config;
46
+ this.accessor = new DiscordAccessor(new NodeDiscordTransport(config.token));
47
+ this.index = new RAMIndexCacheStore({ ttl: this.indexTtl });
48
+ }
49
+ open() {
50
+ return Promise.resolve();
51
+ }
52
+ close() {
53
+ return Promise.resolve();
54
+ }
55
+ commands() {
56
+ return DISCORD_COMMANDS;
57
+ }
58
+ ops() {
59
+ return DISCORD_VFS_OPS;
60
+ }
61
+ readFile(p) {
62
+ return discordRead(this.accessor, p, this.index);
63
+ }
64
+ readdir(p) {
65
+ return discordReaddir(this.accessor, p, this.index);
66
+ }
67
+ stat(p) {
68
+ return discordStat(this.accessor, p, this.index);
69
+ }
70
+ async fingerprint(p) {
71
+ const lookup = await this.index.get(p.original);
72
+ return lookup.entry?.remoteTime ?? null;
73
+ }
74
+ glob(paths, prefix = "") {
75
+ const effective = prefix !== "" ? paths.map(
76
+ (p) => p.prefix !== "" ? p : new PathSpec({
77
+ original: p.original,
78
+ directory: p.directory,
79
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
80
+ resolved: p.resolved,
81
+ prefix
82
+ })
83
+ ) : paths;
84
+ return resolveDiscordGlob(this.accessor, effective, this.index);
85
+ }
86
+ getState() {
87
+ return Promise.resolve({
88
+ type: this.kind,
89
+ needsOverride: true,
90
+ redactedFields: ["token"],
91
+ config: redactDiscordConfig(this.config)
92
+ });
93
+ }
94
+ loadState(_state) {
95
+ return Promise.resolve();
96
+ }
97
+ };
98
+
99
+ export {
100
+ DiscordResource
101
+ };
102
+ //# sourceMappingURL=chunk-WSDQ2MRG.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/resource/discord/discord.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 DISCORD_API,\n DISCORD_COMMANDS,\n DISCORD_PROMPT,\n DISCORD_VFS_OPS,\n DISCORD_WRITE_PROMPT,\n DiscordAccessor,\n type FileStat,\n HttpDiscordTransport,\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\nclass NodeDiscordTransport extends HttpDiscordTransport {\n constructor(private readonly token: string) {\n super()\n }\n protected baseUrl(): string {\n return DISCORD_API\n }\n protected authHeaders(): Record<string, string> {\n return { Authorization: `Bot ${this.token}` }\n }\n}\n\nexport interface DiscordResourceState {\n type: string\n needsOverride: boolean\n redactedFields: readonly string[]\n config: DiscordConfigRedacted\n}\n\nexport class DiscordResource implements Resource {\n readonly kind: string = ResourceName.DISCORD\n readonly isRemote: 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(new NodeDiscordTransport(config.token))\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 needsOverride: true,\n redactedFields: ['token'],\n config: redactDiscordConfig(this.config),\n })\n }\n\n loadState(_state: DiscordResourceState): Promise<void> {\n return Promise.resolve()\n }\n}\n"],"mappings":";;;;;AAcA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA;AAAA,EAEA;AAAA,EACA;AAAA,EAIA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGP,IAAM,uBAAN,cAAmC,qBAAqB;AAAA,EACtD,YAA6B,OAAe;AAC1C,UAAM;AADqB;AAAA,EAE7B;AAAA,EAF6B;AAAA,EAGnB,UAAkB;AAC1B,WAAO;AAAA,EACT;AAAA,EACU,cAAsC;AAC9C,WAAO,EAAE,eAAe,OAAO,KAAK,KAAK,GAAG;AAAA,EAC9C;AACF;AASO,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,WAAmB;AAAA,EACnB,SAAiB;AAAA,EACjB,cAAsB;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EAET,YAAY,QAAuB;AACjC,SAAK,SAAS;AACd,SAAK,WAAW,IAAI,gBAAgB,IAAI,qBAAqB,OAAO,KAAK,CAAC;AAC1E,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,eAAe;AAAA,MACf,gBAAgB,CAAC,OAAO;AAAA,MACxB,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}
@@ -0,0 +1,93 @@
1
+ import {
2
+ redactGSlidesConfig
3
+ } from "./chunk-5ITBZN55.js";
4
+
5
+ // src/resource/gslides/gslides.ts
6
+ import {
7
+ GSLIDES_COMMANDS,
8
+ GSLIDES_PROMPT,
9
+ GSLIDES_VFS_OPS,
10
+ GSLIDES_WRITE_PROMPT,
11
+ GSlidesAccessor,
12
+ PathSpec,
13
+ RAMIndexCacheStore,
14
+ ResourceName,
15
+ TokenManager,
16
+ gslidesRead,
17
+ gslidesReaddir,
18
+ gslidesResolveGlob,
19
+ gslidesStat
20
+ } from "@struktoai/mirage-core";
21
+ var GSlidesResource = class {
22
+ kind = ResourceName.GSLIDES;
23
+ isRemote = true;
24
+ indexTtl = 86400;
25
+ prompt = GSLIDES_PROMPT;
26
+ writePrompt = GSLIDES_WRITE_PROMPT;
27
+ config;
28
+ accessor;
29
+ index;
30
+ constructor(config) {
31
+ this.config = config;
32
+ const tm = new TokenManager({
33
+ clientId: config.clientId,
34
+ clientSecret: config.clientSecret,
35
+ refreshToken: config.refreshToken
36
+ });
37
+ this.accessor = new GSlidesAccessor({ tokenManager: tm });
38
+ this.index = new RAMIndexCacheStore({ ttl: 86400 });
39
+ }
40
+ open() {
41
+ return Promise.resolve();
42
+ }
43
+ close() {
44
+ return Promise.resolve();
45
+ }
46
+ commands() {
47
+ return GSLIDES_COMMANDS;
48
+ }
49
+ ops() {
50
+ return GSLIDES_VFS_OPS;
51
+ }
52
+ readFile(p) {
53
+ return gslidesRead(this.accessor, p, this.index);
54
+ }
55
+ readdir(p) {
56
+ return gslidesReaddir(this.accessor, p, this.index);
57
+ }
58
+ stat(p) {
59
+ return gslidesStat(this.accessor, p, this.index);
60
+ }
61
+ async fingerprint(p) {
62
+ const lookup = await this.index.get(p.original);
63
+ return lookup.entry?.remoteTime ?? null;
64
+ }
65
+ glob(paths, prefix = "") {
66
+ const effective = prefix !== "" ? paths.map(
67
+ (p) => p.prefix !== "" ? p : new PathSpec({
68
+ original: p.original,
69
+ directory: p.directory,
70
+ ...p.pattern !== null ? { pattern: p.pattern } : {},
71
+ resolved: p.resolved,
72
+ prefix
73
+ })
74
+ ) : paths;
75
+ return gslidesResolveGlob(this.accessor, effective, this.index);
76
+ }
77
+ getState() {
78
+ return Promise.resolve({
79
+ type: this.kind,
80
+ needsOverride: true,
81
+ redactedFields: ["clientSecret", "refreshToken"],
82
+ config: redactGSlidesConfig(this.config)
83
+ });
84
+ }
85
+ loadState(_state) {
86
+ return Promise.resolve();
87
+ }
88
+ };
89
+
90
+ export {
91
+ GSlidesResource
92
+ };
93
+ //# sourceMappingURL=chunk-XDEEOTVK.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 needsOverride: boolean\n redactedFields: readonly string[]\n config: GSlidesConfigRedacted\n}\n\nexport class GSlidesResource implements Resource {\n readonly kind: string = ResourceName.GSLIDES\n readonly isRemote: 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 clientSecret: config.clientSecret,\n refreshToken: config.refreshToken,\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 needsOverride: true,\n redactedFields: ['clientSecret', 'refreshToken'],\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;AAUA,IAAM,kBAAN,MAA0C;AAAA,EACtC,OAAe,aAAa;AAAA,EAC5B,WAAoB;AAAA,EACpB,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,cAAc,OAAO;AAAA,MACrB,cAAc,OAAO;AAAA,IACvB,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,eAAe;AAAA,MACf,gBAAgB,CAAC,gBAAgB,cAAc;AAAA,MAC/C,QAAQ,oBAAoB,KAAK,MAAM;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAA6C;AACrD,WAAO,QAAQ,QAAQ;AAAA,EACzB;AACF;","names":[]}