@5ss/ai-tools 2.11.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 (342) hide show
  1. package/CHANGELOG.md +112 -0
  2. package/LICENSE +21 -0
  3. package/README.md +221 -0
  4. package/dist/ai-sdk/index.d.ts +15 -0
  5. package/dist/ai-sdk/index.d.ts.map +1 -0
  6. package/dist/ai-sdk/index.js +24 -0
  7. package/dist/ai-sdk/index.js.map +1 -0
  8. package/dist/artifact-D064mHfK.js +44 -0
  9. package/dist/artifact-D064mHfK.js.map +1 -0
  10. package/dist/artifacts-O8g-40Pw.js +404 -0
  11. package/dist/artifacts-O8g-40Pw.js.map +1 -0
  12. package/dist/aws-json-CecFqzqX.js +23 -0
  13. package/dist/aws-json-CecFqzqX.js.map +1 -0
  14. package/dist/aws-service-msttbPrz.js +58 -0
  15. package/dist/aws-service-msttbPrz.js.map +1 -0
  16. package/dist/batch-BMM5dXqL.d.ts +22 -0
  17. package/dist/batch-BMM5dXqL.d.ts.map +1 -0
  18. package/dist/batch-Co1ujeAW.js +67 -0
  19. package/dist/batch-Co1ujeAW.js.map +1 -0
  20. package/dist/bedrock-agentcore-browser-a_qOs-NR.js +182 -0
  21. package/dist/bedrock-agentcore-browser-a_qOs-NR.js.map +1 -0
  22. package/dist/bedrock-agentcore-code-interpreter-MWK-8RhA.js +357 -0
  23. package/dist/bedrock-agentcore-code-interpreter-MWK-8RhA.js.map +1 -0
  24. package/dist/bytes-BxpimpQx.js +45 -0
  25. package/dist/bytes-BxpimpQx.js.map +1 -0
  26. package/dist/client-CCKGsTeI.js +743 -0
  27. package/dist/client-CCKGsTeI.js.map +1 -0
  28. package/dist/cloudflare/index.d.ts +37 -0
  29. package/dist/cloudflare/index.d.ts.map +1 -0
  30. package/dist/cloudflare/index.js +41 -0
  31. package/dist/cloudflare/index.js.map +1 -0
  32. package/dist/cloudflare-browser-B6Yolpin.js +428 -0
  33. package/dist/cloudflare-browser-B6Yolpin.js.map +1 -0
  34. package/dist/cloudflare-email-Dy0KHeDf.js +197 -0
  35. package/dist/cloudflare-email-Dy0KHeDf.js.map +1 -0
  36. package/dist/cloudflare-sandbox-Dp_uNaqW.js +982 -0
  37. package/dist/cloudflare-sandbox-Dp_uNaqW.js.map +1 -0
  38. package/dist/content-type-CORxaxcv.js +49 -0
  39. package/dist/content-type-CORxaxcv.js.map +1 -0
  40. package/dist/core/index.d.ts +4 -0
  41. package/dist/core/index.js +204 -0
  42. package/dist/core/index.js.map +1 -0
  43. package/dist/define-CvpJ_pNP.js +115 -0
  44. package/dist/define-CvpJ_pNP.js.map +1 -0
  45. package/dist/errors-DoSpNHvs.js +20 -0
  46. package/dist/errors-DoSpNHvs.js.map +1 -0
  47. package/dist/errors-aKhko9T1.d.ts +18 -0
  48. package/dist/errors-aKhko9T1.d.ts.map +1 -0
  49. package/dist/eventbridge-scheduler-Bh6GqZY2.js +349 -0
  50. package/dist/eventbridge-scheduler-Bh6GqZY2.js.map +1 -0
  51. package/dist/framework-context-DVIIY8ZO.js +24 -0
  52. package/dist/framework-context-DVIIY8ZO.js.map +1 -0
  53. package/dist/gotenberg-NuJjxyln.js +291 -0
  54. package/dist/gotenberg-NuJjxyln.js.map +1 -0
  55. package/dist/http/index.d.ts +47 -0
  56. package/dist/http/index.d.ts.map +1 -0
  57. package/dist/http/index.js +3 -0
  58. package/dist/http-service-DDNCO1s4.js +254 -0
  59. package/dist/http-service-DDNCO1s4.js.map +1 -0
  60. package/dist/http-service-T7E5UjP8.d.ts +80 -0
  61. package/dist/http-service-T7E5UjP8.d.ts.map +1 -0
  62. package/dist/imessage-BSAFOI8Z.js +154 -0
  63. package/dist/imessage-BSAFOI8Z.js.map +1 -0
  64. package/dist/index-BU4gmYO8.d.ts +254 -0
  65. package/dist/index-BU4gmYO8.d.ts.map +1 -0
  66. package/dist/index-CCivzmxO.d.ts +188 -0
  67. package/dist/index-CCivzmxO.d.ts.map +1 -0
  68. package/dist/index-CLmTrcu5.d.ts +22 -0
  69. package/dist/index-CLmTrcu5.d.ts.map +1 -0
  70. package/dist/index-CZX5OeOF.d.ts +235 -0
  71. package/dist/index-CZX5OeOF.d.ts.map +1 -0
  72. package/dist/index-CdFmEfZO.d.ts +359 -0
  73. package/dist/index-CdFmEfZO.d.ts.map +1 -0
  74. package/dist/index-Cuh6eMWc.d.ts +285 -0
  75. package/dist/index-Cuh6eMWc.d.ts.map +1 -0
  76. package/dist/index-DuOGj7vc.d.ts +107 -0
  77. package/dist/index-DuOGj7vc.d.ts.map +1 -0
  78. package/dist/index-ccZ1XOHw.d.ts +69 -0
  79. package/dist/index-ccZ1XOHw.d.ts.map +1 -0
  80. package/dist/index-n8JTpNf1.d.ts +247 -0
  81. package/dist/index-n8JTpNf1.d.ts.map +1 -0
  82. package/dist/index-pwW1OsOx.d.ts +134 -0
  83. package/dist/index-pwW1OsOx.d.ts.map +1 -0
  84. package/dist/index-zK1ZwS4m.d.ts +347 -0
  85. package/dist/index-zK1ZwS4m.d.ts.map +1 -0
  86. package/dist/limits-hjrO8zUG.js +80 -0
  87. package/dist/limits-hjrO8zUG.js.map +1 -0
  88. package/dist/mastra/index.d.ts +14 -0
  89. package/dist/mastra/index.d.ts.map +1 -0
  90. package/dist/mastra/index.js +26 -0
  91. package/dist/mastra/index.js.map +1 -0
  92. package/dist/mastra-vector-Dhc6XZ8l.js +234 -0
  93. package/dist/mastra-vector-Dhc6XZ8l.js.map +1 -0
  94. package/dist/mcp/index.d.ts +80 -0
  95. package/dist/mcp/index.d.ts.map +1 -0
  96. package/dist/mcp/index.js +97 -0
  97. package/dist/mcp/index.js.map +1 -0
  98. package/dist/modules/artifacts/index.d.ts +337 -0
  99. package/dist/modules/artifacts/index.d.ts.map +1 -0
  100. package/dist/modules/artifacts/index.js +348 -0
  101. package/dist/modules/artifacts/index.js.map +1 -0
  102. package/dist/modules/browser/index.d.ts +516 -0
  103. package/dist/modules/browser/index.d.ts.map +1 -0
  104. package/dist/modules/browser/index.js +475 -0
  105. package/dist/modules/browser/index.js.map +1 -0
  106. package/dist/modules/calendar/index.d.ts +93 -0
  107. package/dist/modules/calendar/index.d.ts.map +1 -0
  108. package/dist/modules/calendar/index.js +131 -0
  109. package/dist/modules/calendar/index.js.map +1 -0
  110. package/dist/modules/code-sandbox/index.d.ts +317 -0
  111. package/dist/modules/code-sandbox/index.d.ts.map +1 -0
  112. package/dist/modules/code-sandbox/index.js +537 -0
  113. package/dist/modules/code-sandbox/index.js.map +1 -0
  114. package/dist/modules/content-type/index.d.ts +22 -0
  115. package/dist/modules/content-type/index.d.ts.map +1 -0
  116. package/dist/modules/content-type/index.js +66 -0
  117. package/dist/modules/content-type/index.js.map +1 -0
  118. package/dist/modules/crypto/index.d.ts +115 -0
  119. package/dist/modules/crypto/index.d.ts.map +1 -0
  120. package/dist/modules/crypto/index.js +139 -0
  121. package/dist/modules/crypto/index.js.map +1 -0
  122. package/dist/modules/document/index.d.ts +575 -0
  123. package/dist/modules/document/index.d.ts.map +1 -0
  124. package/dist/modules/document/index.js +444 -0
  125. package/dist/modules/document/index.js.map +1 -0
  126. package/dist/modules/document-extract/index.d.ts +438 -0
  127. package/dist/modules/document-extract/index.d.ts.map +1 -0
  128. package/dist/modules/document-extract/index.js +127 -0
  129. package/dist/modules/document-extract/index.js.map +1 -0
  130. package/dist/modules/document-render/index.d.ts +336 -0
  131. package/dist/modules/document-render/index.d.ts.map +1 -0
  132. package/dist/modules/document-render/index.js +155 -0
  133. package/dist/modules/document-render/index.js.map +1 -0
  134. package/dist/modules/email/index.d.ts +311 -0
  135. package/dist/modules/email/index.d.ts.map +1 -0
  136. package/dist/modules/email/index.js +167 -0
  137. package/dist/modules/email/index.js.map +1 -0
  138. package/dist/modules/email-message/index.d.ts +95 -0
  139. package/dist/modules/email-message/index.d.ts.map +1 -0
  140. package/dist/modules/email-message/index.js +264 -0
  141. package/dist/modules/email-message/index.js.map +1 -0
  142. package/dist/modules/file-convert/index.d.ts +273 -0
  143. package/dist/modules/file-convert/index.d.ts.map +1 -0
  144. package/dist/modules/file-convert/index.js +103 -0
  145. package/dist/modules/file-convert/index.js.map +1 -0
  146. package/dist/modules/files/index.d.ts +452 -0
  147. package/dist/modules/files/index.d.ts.map +1 -0
  148. package/dist/modules/files/index.js +733 -0
  149. package/dist/modules/files/index.js.map +1 -0
  150. package/dist/modules/image/index.d.ts +342 -0
  151. package/dist/modules/image/index.d.ts.map +1 -0
  152. package/dist/modules/image/index.js +281 -0
  153. package/dist/modules/image/index.js.map +1 -0
  154. package/dist/modules/messaging/index.d.ts +608 -0
  155. package/dist/modules/messaging/index.d.ts.map +1 -0
  156. package/dist/modules/messaging/index.js +1067 -0
  157. package/dist/modules/messaging/index.js.map +1 -0
  158. package/dist/modules/pdf/index.d.ts +287 -0
  159. package/dist/modules/pdf/index.d.ts.map +1 -0
  160. package/dist/modules/pdf/index.js +259 -0
  161. package/dist/modules/pdf/index.js.map +1 -0
  162. package/dist/modules/presentation/index.d.ts +247 -0
  163. package/dist/modules/presentation/index.d.ts.map +1 -0
  164. package/dist/modules/presentation/index.js +12657 -0
  165. package/dist/modules/presentation/index.js.map +1 -0
  166. package/dist/modules/queue/index.d.ts +129 -0
  167. package/dist/modules/queue/index.d.ts.map +1 -0
  168. package/dist/modules/queue/index.js +131 -0
  169. package/dist/modules/queue/index.js.map +1 -0
  170. package/dist/modules/rag/index.d.ts +250 -0
  171. package/dist/modules/rag/index.d.ts.map +1 -0
  172. package/dist/modules/rag/index.js +366 -0
  173. package/dist/modules/rag/index.js.map +1 -0
  174. package/dist/modules/scheduler/index.d.ts +216 -0
  175. package/dist/modules/scheduler/index.d.ts.map +1 -0
  176. package/dist/modules/scheduler/index.js +153 -0
  177. package/dist/modules/scheduler/index.js.map +1 -0
  178. package/dist/modules/skills/index.d.ts +205 -0
  179. package/dist/modules/skills/index.d.ts.map +1 -0
  180. package/dist/modules/skills/index.js +203 -0
  181. package/dist/modules/skills/index.js.map +1 -0
  182. package/dist/modules/tasks/index.d.ts +287 -0
  183. package/dist/modules/tasks/index.d.ts.map +1 -0
  184. package/dist/modules/tasks/index.js +207 -0
  185. package/dist/modules/tasks/index.js.map +1 -0
  186. package/dist/modules/vector-store/index.d.ts +3 -0
  187. package/dist/modules/vector-store/index.js +3 -0
  188. package/dist/modules/web-fetch/index.d.ts +99 -0
  189. package/dist/modules/web-fetch/index.d.ts.map +1 -0
  190. package/dist/modules/web-fetch/index.js +242 -0
  191. package/dist/modules/web-fetch/index.js.map +1 -0
  192. package/dist/object-artifact-store-CMTzCm_G.d.ts +7 -0
  193. package/dist/object-artifact-store-CMTzCm_G.d.ts.map +1 -0
  194. package/dist/object-artifact-store-wZ2j9cto.js +28 -0
  195. package/dist/object-artifact-store-wZ2j9cto.js.map +1 -0
  196. package/dist/pinecone-umY4t6OF.js +190 -0
  197. package/dist/pinecone-umY4t6OF.js.map +1 -0
  198. package/dist/provider-CgDAlg6K.js +34 -0
  199. package/dist/provider-CgDAlg6K.js.map +1 -0
  200. package/dist/qdrant-DMp4NhKR.js +253 -0
  201. package/dist/qdrant-DMp4NhKR.js.map +1 -0
  202. package/dist/resend-BAC38_dA.js +155 -0
  203. package/dist/resend-BAC38_dA.js.map +1 -0
  204. package/dist/s3-CsOaPWMP.js +955 -0
  205. package/dist/s3-CsOaPWMP.js.map +1 -0
  206. package/dist/schemas-ChOAhdo9.js +192 -0
  207. package/dist/schemas-ChOAhdo9.js.map +1 -0
  208. package/dist/slack-Di5BBNpt.js +1455 -0
  209. package/dist/slack-Di5BBNpt.js.map +1 -0
  210. package/dist/sqs-DCwS1i2N.js +225 -0
  211. package/dist/sqs-DCwS1i2N.js.map +1 -0
  212. package/dist/supabase-vector-Dpp9mmJR.js +218 -0
  213. package/dist/supabase-vector-Dpp9mmJR.js.map +1 -0
  214. package/dist/tanstack/index.d.ts +15 -0
  215. package/dist/tanstack/index.d.ts.map +1 -0
  216. package/dist/tanstack/index.js +28 -0
  217. package/dist/tanstack/index.js.map +1 -0
  218. package/dist/teams-DYAHNb39.js +835 -0
  219. package/dist/teams-DYAHNb39.js.map +1 -0
  220. package/dist/telegram-DDXWzkfL.js +734 -0
  221. package/dist/telegram-DDXWzkfL.js.map +1 -0
  222. package/dist/textract-CPLiB22H.js +554 -0
  223. package/dist/textract-CPLiB22H.js.map +1 -0
  224. package/dist/transport-B4vn-XiQ.js +157 -0
  225. package/dist/transport-B4vn-XiQ.js.map +1 -0
  226. package/dist/transport-i96ACAI_.d.ts +46 -0
  227. package/dist/transport-i96ACAI_.d.ts.map +1 -0
  228. package/dist/types-Ccb0DXY9.d.ts +150 -0
  229. package/dist/types-Ccb0DXY9.d.ts.map +1 -0
  230. package/dist/unique-EwBH1JPB.js +19 -0
  231. package/dist/unique-EwBH1JPB.js.map +1 -0
  232. package/dist/vector-store-C3nEO80e.js +193 -0
  233. package/dist/vector-store-C3nEO80e.js.map +1 -0
  234. package/dist/vendors/amazon-sp-api/index.d.ts +526 -0
  235. package/dist/vendors/amazon-sp-api/index.d.ts.map +1 -0
  236. package/dist/vendors/amazon-sp-api/index.js +975 -0
  237. package/dist/vendors/amazon-sp-api/index.js.map +1 -0
  238. package/dist/vendors/bedrock-agentcore-browser/index.d.ts +2 -0
  239. package/dist/vendors/bedrock-agentcore-browser/index.js +2 -0
  240. package/dist/vendors/bedrock-agentcore-code-interpreter/index.d.ts +228 -0
  241. package/dist/vendors/bedrock-agentcore-code-interpreter/index.d.ts.map +1 -0
  242. package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +2 -0
  243. package/dist/vendors/cloudflare-browser/index.d.ts +2 -0
  244. package/dist/vendors/cloudflare-browser/index.js +2 -0
  245. package/dist/vendors/cloudflare-email/index.d.ts +260 -0
  246. package/dist/vendors/cloudflare-email/index.d.ts.map +1 -0
  247. package/dist/vendors/cloudflare-email/index.js +3 -0
  248. package/dist/vendors/cloudflare-sandbox/index.d.ts +565 -0
  249. package/dist/vendors/cloudflare-sandbox/index.d.ts.map +1 -0
  250. package/dist/vendors/cloudflare-sandbox/index.js +2 -0
  251. package/dist/vendors/eventbridge-scheduler/index.d.ts +2 -0
  252. package/dist/vendors/eventbridge-scheduler/index.js +2 -0
  253. package/dist/vendors/gotenberg/index.d.ts +306 -0
  254. package/dist/vendors/gotenberg/index.d.ts.map +1 -0
  255. package/dist/vendors/gotenberg/index.js +2 -0
  256. package/dist/vendors/imessage/index.d.ts +420 -0
  257. package/dist/vendors/imessage/index.d.ts.map +1 -0
  258. package/dist/vendors/imessage/index.js +4 -0
  259. package/dist/vendors/katana/index.d.ts +1570 -0
  260. package/dist/vendors/katana/index.d.ts.map +1 -0
  261. package/dist/vendors/katana/index.js +1639 -0
  262. package/dist/vendors/katana/index.js.map +1 -0
  263. package/dist/vendors/mastra-vector/index.d.ts +120 -0
  264. package/dist/vendors/mastra-vector/index.d.ts.map +1 -0
  265. package/dist/vendors/mastra-vector/index.js +3 -0
  266. package/dist/vendors/pinecone/index.d.ts +75 -0
  267. package/dist/vendors/pinecone/index.d.ts.map +1 -0
  268. package/dist/vendors/pinecone/index.js +3 -0
  269. package/dist/vendors/qdrant/index.d.ts +75 -0
  270. package/dist/vendors/qdrant/index.d.ts.map +1 -0
  271. package/dist/vendors/qdrant/index.js +3 -0
  272. package/dist/vendors/resend/index.d.ts +3 -0
  273. package/dist/vendors/resend/index.js +3 -0
  274. package/dist/vendors/s3/index.d.ts +2 -0
  275. package/dist/vendors/s3/index.js +2 -0
  276. package/dist/vendors/slack/index.d.ts +576 -0
  277. package/dist/vendors/slack/index.d.ts.map +1 -0
  278. package/dist/vendors/slack/index.js +3 -0
  279. package/dist/vendors/sqs/index.d.ts +2 -0
  280. package/dist/vendors/sqs/index.js +2 -0
  281. package/dist/vendors/supabase-vector/index.d.ts +89 -0
  282. package/dist/vendors/supabase-vector/index.d.ts.map +1 -0
  283. package/dist/vendors/supabase-vector/index.js +3 -0
  284. package/dist/vendors/teams/index.d.ts +303 -0
  285. package/dist/vendors/teams/index.d.ts.map +1 -0
  286. package/dist/vendors/teams/index.js +3 -0
  287. package/dist/vendors/telegram/index.d.ts +319 -0
  288. package/dist/vendors/telegram/index.d.ts.map +1 -0
  289. package/dist/vendors/telegram/index.js +3 -0
  290. package/dist/vendors/textract/index.d.ts +2 -0
  291. package/dist/vendors/textract/index.js +2 -0
  292. package/dist/vendors/woocommerce/index.d.ts +1700 -0
  293. package/dist/vendors/woocommerce/index.d.ts.map +1 -0
  294. package/dist/vendors/woocommerce/index.js +1427 -0
  295. package/dist/vendors/woocommerce/index.js.map +1 -0
  296. package/dist/with-auth-CpKqTrGK.js +240 -0
  297. package/dist/with-auth-CpKqTrGK.js.map +1 -0
  298. package/logos/LUCIDE-ATTRIBUTION.txt +4 -0
  299. package/logos/README.md +89 -0
  300. package/logos/amazon.svg +6 -0
  301. package/logos/artifacts.svg +9 -0
  302. package/logos/browser.svg +9 -0
  303. package/logos/calendar.svg +15 -0
  304. package/logos/cloudflare-browser.svg +5 -0
  305. package/logos/cloudflare-email.svg +5 -0
  306. package/logos/cloudflare.svg +4 -0
  307. package/logos/code-sandbox.svg +8 -0
  308. package/logos/content-type.svg +10 -0
  309. package/logos/crypto.svg +7 -0
  310. package/logos/document-extract.svg +12 -0
  311. package/logos/document-render.svg +8 -0
  312. package/logos/document.svg +10 -0
  313. package/logos/email-message.svg +8 -0
  314. package/logos/email.svg +7 -0
  315. package/logos/file-convert.svg +9 -0
  316. package/logos/files.svg +6 -0
  317. package/logos/gotenberg.svg +340 -0
  318. package/logos/image.svg +8 -0
  319. package/logos/imessage.svg +7 -0
  320. package/logos/katana.svg +13 -0
  321. package/logos/mastra.svg +7 -0
  322. package/logos/messaging.svg +7 -0
  323. package/logos/pack-logos.json +48 -0
  324. package/logos/pdf.svg +10 -0
  325. package/logos/pinecone.svg +25 -0
  326. package/logos/presentation.svg +8 -0
  327. package/logos/qdrant.svg +4 -0
  328. package/logos/queue.svg +11 -0
  329. package/logos/rag.svg +18 -0
  330. package/logos/resend.svg +5 -0
  331. package/logos/scheduler.svg +7 -0
  332. package/logos/skills.svg +10 -0
  333. package/logos/slack.svg +14 -0
  334. package/logos/supabase.svg +4 -0
  335. package/logos/tasks.svg +10 -0
  336. package/logos/teams.svg +6 -0
  337. package/logos/telegram.svg +10 -0
  338. package/logos/textract.svg +5 -0
  339. package/logos/vector-store.svg +8 -0
  340. package/logos/web-fetch.svg +8 -0
  341. package/logos/woocommerce.svg +4 -0
  342. package/package.json +373 -0
@@ -0,0 +1,444 @@
1
+ import { t as ToolError } from "../../errors-DoSpNHvs.js";
2
+ import { n as defineModule, r as defineTool } from "../../define-CvpJ_pNP.js";
3
+ import { n as requireAuth } from "../../provider-CgDAlg6K.js";
4
+ import { t as artifactRefSchema } from "../../artifact-D064mHfK.js";
5
+ import { a as toArrayBuffer, o as utf8ToBytes, r as bytesToUtf8 } from "../../bytes-BxpimpQx.js";
6
+ import { p as S3Client } from "../../s3-CsOaPWMP.js";
7
+ import { i as resolveFileExtension, n as extensionFromMediaType, r as mediaTypeFromPath } from "../../content-type-CORxaxcv.js";
8
+ import { A as assertReplacementApplied, C as documentReadOutputSchema, D as documentTextReplacementSchema, E as documentTableSchema, M as patchTextDocument, N as readHtml, O as readPdf, P as readJson, S as documentReadInputSchema, T as documentSourceSchema, _ as documentEditTextInputSchema, a as MAX_PDF_PAGE_IMAGES, b as documentPageSchema, c as MAX_SHEETS, d as documentBuildDocumentInputSchema, f as documentBuildOutputSchema, g as documentEditSpreadsheetInputSchema, h as documentEditDocumentInputSchema, i as MAX_INLINE_CHARS, j as mediaTypeForTextFormat, k as readImageMetadata, l as MAX_SHEET_ROWS, m as documentBuildTextInputSchema, n as loadDocumentSource, o as MAX_REPLACEMENTS, p as documentBuildSpreadsheetInputSchema, r as sourceName, s as MAX_SECTIONS, t as attachPdfPageArtifacts, u as documentAuthSchema, v as documentFormatSchema, w as documentSectionSchema, x as documentPdfPageImagesSchema, y as documentImageMetadataSchema } from "../../artifacts-O8g-40Pw.js";
9
+ import { isPlainObject } from "es-toolkit";
10
+ import { appendHeading, appendParagraph, createDocx, getTableCellText, openDocx, replaceTextEverywhere, tables, text, toUint8Array } from "@office-kit/docx";
11
+ import mammoth from "mammoth";
12
+ import { Readable } from "node:stream";
13
+ import ExcelJS from "exceljs";
14
+ import { fileTypeFromBuffer } from "file-type";
15
+ //#region src/modules/document/formats/document.ts
16
+ /** DOCX read, build, and edit implementation for the document capability. */
17
+ function bufferFrom(bytes) {
18
+ return Buffer.from(toArrayBuffer(bytes));
19
+ }
20
+ async function readDocument(bytes) {
21
+ const document = openDocx(bytes);
22
+ const converted = await mammoth.convertToHtml({ buffer: bufferFrom(bytes) });
23
+ const documentTables = tables(document).map((table, index) => ({
24
+ name: `Table ${index + 1}`,
25
+ rows: table.rows.map((row, rowIndex) => row.cells.map((_, columnIndex) => getTableCellText(table, rowIndex, columnIndex)))
26
+ }));
27
+ return {
28
+ text: text(document),
29
+ ...converted.value && { html: converted.value },
30
+ ...documentTables.length > 0 && { tables: documentTables }
31
+ };
32
+ }
33
+ async function buildDocument(input) {
34
+ const document = createDocx();
35
+ if (input.title) appendHeading(document, input.title, 1);
36
+ for (const section of input.sections) {
37
+ if (section.heading) appendHeading(document, section.heading, 1);
38
+ for (const paragraph of section.paragraphs ?? []) appendParagraph(document, paragraph);
39
+ }
40
+ return toUint8Array(document);
41
+ }
42
+ async function patchDocx(bytes, replacements) {
43
+ const document = openDocx(bytes);
44
+ for (const replacement of replacements) {
45
+ let applied = 0;
46
+ replaceTextEverywhere(document, replacement.find, () => {
47
+ if (replacement.match === "first" && applied > 0) return replacement.find;
48
+ applied += 1;
49
+ return replacement.replace;
50
+ });
51
+ assertReplacementApplied(applied, replacement.find);
52
+ }
53
+ return toUint8Array(document);
54
+ }
55
+ //#endregion
56
+ //#region src/modules/document/formats/spreadsheet.ts
57
+ /** XLSX and CSV read, build, and edit implementation for the document capability. */
58
+ function cellValue(value, displayText) {
59
+ if (value === null || value === void 0) return null;
60
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") return value;
61
+ if (value instanceof Date) return value.toISOString();
62
+ if (isPlainObject(value)) {
63
+ const result = value["result"];
64
+ if (typeof result === "string" || typeof result === "number" || typeof result === "boolean") return result;
65
+ }
66
+ return displayText;
67
+ }
68
+ function worksheetTable(worksheet) {
69
+ const rows = [];
70
+ worksheet.eachRow({ includeEmpty: false }, (row) => {
71
+ const values = [];
72
+ for (let column = 1; column <= row.cellCount; column += 1) {
73
+ const cell = row.getCell(column);
74
+ values.push(cellValue(cell.value, cell.text));
75
+ }
76
+ rows.push(values);
77
+ });
78
+ return {
79
+ name: worksheet.name,
80
+ rows
81
+ };
82
+ }
83
+ function tablesFromWorkbook(workbook) {
84
+ return workbook.worksheets.map(worksheetTable);
85
+ }
86
+ function textFromTables(tables) {
87
+ return tables.flatMap((table) => table.rows.map((row) => row.map((cell) => cell === null ? "" : String(cell)).join(" "))).join("\n");
88
+ }
89
+ async function loadCsv(bytes) {
90
+ const workbook = new ExcelJS.Workbook();
91
+ await workbook.csv.read(Readable.from([Buffer.from(bytes)]));
92
+ return workbook;
93
+ }
94
+ async function loadXlsx(bytes) {
95
+ const workbook = new ExcelJS.Workbook();
96
+ await workbook.xlsx.load(toArrayBuffer(bytes));
97
+ return workbook;
98
+ }
99
+ async function readSpreadsheet(format, bytes) {
100
+ const tables = tablesFromWorkbook(format === "csv" ? await loadCsv(bytes) : await loadXlsx(bytes));
101
+ return {
102
+ tables,
103
+ text: textFromTables(tables)
104
+ };
105
+ }
106
+ async function buildSpreadsheet(sheets) {
107
+ const workbook = new ExcelJS.Workbook();
108
+ for (const sheet of sheets) {
109
+ const worksheet = workbook.addWorksheet(sheet.name ?? "Sheet1");
110
+ for (const row of sheet.rows) worksheet.addRow(row);
111
+ }
112
+ return new Uint8Array(await workbook.xlsx.writeBuffer());
113
+ }
114
+ async function patchSpreadsheet(bytes, format, patches) {
115
+ const workbook = format === "csv" ? await loadCsv(bytes) : await loadXlsx(bytes);
116
+ for (const patch of patches) {
117
+ const worksheet = patch.sheet ? workbook.getWorksheet(patch.sheet) : workbook.worksheets[0];
118
+ if (!worksheet) throw new ToolError("Spreadsheet sheet was not found", {
119
+ code: "bad_input",
120
+ details: { sheet: patch.sheet ?? "(first)" }
121
+ });
122
+ worksheet.getCell(patch.row, patch.col).value = patch.value;
123
+ }
124
+ if (format === "csv") {
125
+ const worksheet = workbook.worksheets[0];
126
+ if (!worksheet) throw new ToolError("CSV has no worksheet", { code: "bad_input" });
127
+ const output = await workbook.csv.writeBuffer({ sheetId: worksheet.id });
128
+ return {
129
+ bytes: new Uint8Array(output),
130
+ filename_ext: "csv",
131
+ media_type: "text/csv"
132
+ };
133
+ }
134
+ return {
135
+ bytes: new Uint8Array(await workbook.xlsx.writeBuffer()),
136
+ filename_ext: "xlsx",
137
+ media_type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
138
+ };
139
+ }
140
+ //#endregion
141
+ //#region src/modules/document/formats/format.ts
142
+ /** Document format detection. */
143
+ const LEGACY_OFFICE_EXTENSIONS = /* @__PURE__ */ new Set([
144
+ "doc",
145
+ "ppt",
146
+ "xls"
147
+ ]);
148
+ function fromExtension(extension) {
149
+ if (!extension) return void 0;
150
+ const normalized = extension.toLowerCase();
151
+ const parsed = documentFormatSchema.safeParse(normalized);
152
+ if (parsed.success) return parsed.data;
153
+ if (normalized === "htm") return "html";
154
+ if (LEGACY_OFFICE_EXTENSIONS.has(normalized)) throw new ToolError("Legacy Office binaries must use office-to-pdf conversion before document read", {
155
+ code: "unsupported",
156
+ details: { extension: normalized }
157
+ });
158
+ }
159
+ function fromMediaType(mediaType) {
160
+ if (!mediaType) return void 0;
161
+ const normalized = mediaType.split(";", 1)[0]?.trim().toLowerCase();
162
+ if (!normalized) return void 0;
163
+ if (normalized.startsWith("image/")) return "image";
164
+ return fromExtension(extensionFromMediaType(normalized));
165
+ }
166
+ function fromHints(input) {
167
+ if (input.format) return input.format;
168
+ const mediaTypeFormat = fromMediaType(input.media_type);
169
+ if (mediaTypeFormat) return mediaTypeFormat;
170
+ if (!input.filename) return void 0;
171
+ return fromExtension(resolveFileExtension({
172
+ filename: input.filename,
173
+ fallback: ""
174
+ }));
175
+ }
176
+ function detectFormat(input) {
177
+ const format = fromHints(input);
178
+ if (format) return format;
179
+ throw new ToolError("Could not detect document format; pass format or filename", { code: "bad_input" });
180
+ }
181
+ async function detectFormatFromBytes(bytes, input) {
182
+ if (input.format) return input.format;
183
+ const byteFormat = fromMediaType((await fileTypeFromBuffer(bytes))?.mime);
184
+ if (byteFormat) return byteFormat;
185
+ return detectFormat(input);
186
+ }
187
+ //#endregion
188
+ //#region src/modules/document/domain.ts
189
+ /** Core document read, build, edit, and format operations. */
190
+ function baseOutput(format, bytes, metadata) {
191
+ return {
192
+ format,
193
+ byte_length: bytes.byteLength,
194
+ ...metadata.media_type && { media_type: metadata.media_type },
195
+ ...metadata.filename && { filename: metadata.filename }
196
+ };
197
+ }
198
+ async function readBytes(format, bytes, metadata) {
199
+ const base = baseOutput(format, bytes, metadata);
200
+ switch (format) {
201
+ case "txt":
202
+ case "md": return {
203
+ ...base,
204
+ text: bytesToUtf8(bytes)
205
+ };
206
+ case "json": return {
207
+ ...base,
208
+ text: readJson(bytes)
209
+ };
210
+ case "html": return {
211
+ ...base,
212
+ ...readHtml(bytesToUtf8(bytes))
213
+ };
214
+ case "csv":
215
+ case "xlsx": return {
216
+ ...base,
217
+ ...await readSpreadsheet(format, bytes)
218
+ };
219
+ case "docx": return {
220
+ ...base,
221
+ ...await readDocument(bytes)
222
+ };
223
+ case "pdf": return {
224
+ ...base,
225
+ ...await readPdf(bytes)
226
+ };
227
+ case "image": {
228
+ const image = readImageMetadata(bytes);
229
+ return image ? {
230
+ ...base,
231
+ image
232
+ } : base;
233
+ }
234
+ default: throw new ToolError("Unsupported format for read", { code: "unsupported" });
235
+ }
236
+ }
237
+ //#endregion
238
+ //#region src/modules/document/client.ts
239
+ /** Core document client. Presentation operations live in the presentation module. */
240
+ function transportOptions(context) {
241
+ return {
242
+ ...context.fetch && { fetch: context.fetch },
243
+ ...context.signal && { signal: context.signal }
244
+ };
245
+ }
246
+ function mediaTypeFor(filename) {
247
+ return mediaTypeFromPath(filename) ?? "application/octet-stream";
248
+ }
249
+ var DocumentClient = class DocumentClient {
250
+ #storage;
251
+ constructor(auth, context = {}) {
252
+ const parsed = documentAuthSchema.safeParse(auth);
253
+ if (!parsed.success) throw new ToolError("Invalid document auth credentials", {
254
+ code: "bad_auth",
255
+ details: { issues: parsed.error.issues.map((issue) => issue.message) }
256
+ });
257
+ this.#storage = new S3Client(parsed.data.storage, transportOptions(context));
258
+ }
259
+ static fromContext(context) {
260
+ return new DocumentClient(requireAuth(context, documentAuthSchema), context);
261
+ }
262
+ static fromAuth(auth, context = {}) {
263
+ return new DocumentClient(auth, context);
264
+ }
265
+ async read(input) {
266
+ const loaded = await this.#load(input.source);
267
+ const format = await this.#format(loaded, input.format);
268
+ const output = await readBytes(format, loaded.bytes, {
269
+ ...loaded.filename && { filename: loaded.filename },
270
+ ...loaded.media_type && { media_type: loaded.media_type }
271
+ });
272
+ if (input.pdf_page_images) await attachPdfPageArtifacts(output, loaded, format, input.pdf_page_images, (key, bytes, mediaType, filename) => this.#putArtifact(key, bytes, mediaType, filename));
273
+ return documentReadOutputSchema.parse(output);
274
+ }
275
+ async buildText(input) {
276
+ return this.#write(input.output_key, utf8ToBytes(input.content), mediaTypeForTextFormat(input.format), input.filename ?? `document.${input.format}`);
277
+ }
278
+ async buildSpreadsheet(input) {
279
+ return this.#write(input.output_key, await buildSpreadsheet(input.sheets), mediaTypeFor("workbook.xlsx"), input.filename ?? "workbook.xlsx");
280
+ }
281
+ async buildDocument(input) {
282
+ return this.#write(input.output_key, await buildDocument({
283
+ title: input.title,
284
+ sections: input.sections
285
+ }), mediaTypeFor("document.docx"), input.filename ?? "document.docx");
286
+ }
287
+ async editText(input) {
288
+ const loaded = await this.#load(input.source);
289
+ const format = await this.#format(loaded, input.format);
290
+ if (format !== "txt" && format !== "md" && format !== "json" && format !== "html") throw new ToolError("editText requires txt, md, json, or html source", { code: "bad_input" });
291
+ return this.#write(input.output_key, patchTextDocument(loaded.bytes, format, input.replacements), mediaTypeForTextFormat(format), input.filename ?? sourceName(loaded, `document.${format}`));
292
+ }
293
+ async editDocument(input) {
294
+ const loaded = await this.#requireFormat(input.source, "docx", "editDocument");
295
+ return this.#write(input.output_key, await patchDocx(loaded.bytes, input.replacements), mediaTypeFor("document.docx"), input.filename ?? sourceName(loaded, "document.docx"));
296
+ }
297
+ async editSpreadsheet(input) {
298
+ const loaded = await this.#load(input.source);
299
+ const format = await this.#format(loaded);
300
+ if (format !== "csv" && format !== "xlsx") throw new ToolError("editSpreadsheet requires xlsx or csv source", { code: "bad_input" });
301
+ const output = await patchSpreadsheet(loaded.bytes, format, input.patches);
302
+ const current = sourceName(loaded, `workbook.${output.filename_ext}`);
303
+ const filename = input.filename ?? current.replace(/\.[^./]+$/, `.${output.filename_ext}`);
304
+ return this.#write(input.output_key, output.bytes, output.media_type, filename);
305
+ }
306
+ async #load(source) {
307
+ return loadDocumentSource(source, (key) => this.#storage.getBytes(key));
308
+ }
309
+ #format(loaded, format) {
310
+ return detectFormatFromBytes(loaded.bytes, {
311
+ format,
312
+ filename: loaded.filename,
313
+ media_type: loaded.media_type
314
+ });
315
+ }
316
+ async #requireFormat(source, required, operation) {
317
+ const loaded = await this.#load(source);
318
+ if (await this.#format(loaded) !== required) throw new ToolError(`${operation} requires ${required} source`, { code: "bad_input" });
319
+ return loaded;
320
+ }
321
+ async #write(key, bytes, mediaType, filename) {
322
+ const result = await this.#putArtifact(key, bytes, mediaType, filename);
323
+ return documentBuildOutputSchema.parse({ result });
324
+ }
325
+ async #putArtifact(key, bytes, mediaType, filename) {
326
+ await this.#storage.putBytes(key, bytes, mediaType);
327
+ return artifactRefSchema.parse({
328
+ store: "object",
329
+ key,
330
+ media_type: mediaType,
331
+ filename,
332
+ byte_length: bytes.byteLength
333
+ });
334
+ }
335
+ };
336
+ //#endregion
337
+ //#region src/modules/document/module.ts
338
+ const documentReadTool = defineTool({
339
+ id: "document-read",
340
+ name: "readDocument",
341
+ description: "Read an existing supported artifact for understanding, including text, metadata, tables, PDF pages, or image dimensions. Use before answering about or editing a user-supplied file. This does not create a new deliverable.",
342
+ inputSchema: documentReadInputSchema,
343
+ outputSchema: documentReadOutputSchema,
344
+ sideEffect: "read",
345
+ runtime: "node",
346
+ artifacts: true,
347
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).read(input)
348
+ });
349
+ const documentBuildTextTool = defineTool({
350
+ id: "document-build-text",
351
+ name: "buildTextDocument",
352
+ description: "Create a new TXT, Markdown, JSON, CSV, or HTML deliverable from complete text content. Prefer this purpose-built tool over writing the file in a general code sandbox. Returns the final ArtifactRef; no export or edit step is needed.",
353
+ inputSchema: documentBuildTextInputSchema,
354
+ outputSchema: documentBuildOutputSchema,
355
+ sideEffect: "write",
356
+ runtime: "node",
357
+ artifacts: true,
358
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).buildText(input)
359
+ });
360
+ const documentBuildSpreadsheetTool = defineTool({
361
+ id: "document-build-spreadsheet",
362
+ name: "buildSpreadsheet",
363
+ description: "Create a new XLSX workbook from structured, row-major worksheets. Use whenever the user asks to build a spreadsheet or workbook from data. Prefer this over generating XLSX in a general code sandbox. Returns the final ArtifactRef; use document-edit-spreadsheet only for an existing spreadsheet.",
364
+ inputSchema: documentBuildSpreadsheetInputSchema,
365
+ outputSchema: documentBuildOutputSchema,
366
+ sideEffect: "write",
367
+ runtime: "node",
368
+ artifacts: true,
369
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).buildSpreadsheet(input)
370
+ });
371
+ const documentBuildDocumentTool = defineTool({
372
+ id: "document-build-document",
373
+ name: "buildDocument",
374
+ description: "Create a new DOCX deliverable from titled sections and paragraphs. Prefer this purpose-built builder over generating DOCX in a general code sandbox. Returns the final ArtifactRef; use document-edit-document only for an existing DOCX.",
375
+ inputSchema: documentBuildDocumentInputSchema,
376
+ outputSchema: documentBuildOutputSchema,
377
+ sideEffect: "write",
378
+ runtime: "node",
379
+ artifacts: true,
380
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).buildDocument(input)
381
+ });
382
+ const documentEditTextTool = defineTool({
383
+ id: "document-edit-text",
384
+ name: "editTextDocument",
385
+ description: "Edit an existing TXT, Markdown, JSON, or HTML ArtifactRef with ordered exact-text replacements and return a new ArtifactRef. Use only when changing a supplied file. For a new deliverable, use document-build-text; do not call this merely to make a built artifact deliverable.",
386
+ inputSchema: documentEditTextInputSchema,
387
+ outputSchema: documentBuildOutputSchema,
388
+ sideEffect: "write",
389
+ runtime: "node",
390
+ artifacts: true,
391
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).editText(input)
392
+ });
393
+ const documentEditDocumentTool = defineTool({
394
+ id: "document-edit-document",
395
+ name: "editDocument",
396
+ description: "Edit an existing DOCX ArtifactRef with layout-preserving text replacements and return a new ArtifactRef. Use only when changing a supplied DOCX. For a new document, use document-build-document; do not call this merely to make a built artifact deliverable.",
397
+ inputSchema: documentEditDocumentInputSchema,
398
+ outputSchema: documentBuildOutputSchema,
399
+ sideEffect: "write",
400
+ runtime: "node",
401
+ artifacts: true,
402
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).editDocument(input)
403
+ });
404
+ const documentEditSpreadsheetTool = defineTool({
405
+ id: "document-edit-spreadsheet",
406
+ name: "editSpreadsheet",
407
+ description: "Edit cells in an existing XLSX or CSV ArtifactRef and return a new ArtifactRef. Use only when changing a supplied spreadsheet and provide explicit sheet, row, and column patches. For a new workbook, use document-build-spreadsheet; do not call this merely to make a built artifact deliverable.",
408
+ inputSchema: documentEditSpreadsheetInputSchema,
409
+ outputSchema: documentBuildOutputSchema,
410
+ sideEffect: "write",
411
+ runtime: "node",
412
+ artifacts: true,
413
+ execute: async (input, ctx) => DocumentClient.fromContext(ctx).editSpreadsheet(input)
414
+ });
415
+ const documentModule = defineModule({
416
+ id: "document",
417
+ title: "Document",
418
+ description: "Purpose-built document tools for reading existing files, creating final text, DOCX, and XLSX deliverables, and editing supplied files. Prefer these tools over general sandbox file generation.",
419
+ runtime: "node",
420
+ auth: {
421
+ type: "custom",
422
+ schema: documentAuthSchema
423
+ },
424
+ categories: ["documents", "office"],
425
+ classification: "pii",
426
+ tags: [
427
+ "read",
428
+ "build",
429
+ "edit"
430
+ ],
431
+ tools: [
432
+ documentReadTool,
433
+ documentBuildTextTool,
434
+ documentBuildSpreadsheetTool,
435
+ documentBuildDocumentTool,
436
+ documentEditTextTool,
437
+ documentEditDocumentTool,
438
+ documentEditSpreadsheetTool
439
+ ]
440
+ });
441
+ //#endregion
442
+ export { DocumentClient, MAX_INLINE_CHARS, MAX_PDF_PAGE_IMAGES, MAX_REPLACEMENTS, MAX_SECTIONS, MAX_SHEETS, MAX_SHEET_ROWS, documentAuthSchema, documentBuildDocumentInputSchema, documentBuildDocumentTool, documentBuildOutputSchema, documentBuildSpreadsheetInputSchema, documentBuildSpreadsheetTool, documentBuildTextInputSchema, documentBuildTextTool, documentEditDocumentInputSchema, documentEditDocumentTool, documentEditSpreadsheetInputSchema, documentEditSpreadsheetTool, documentEditTextInputSchema, documentEditTextTool, documentFormatSchema, documentImageMetadataSchema, documentModule, documentPageSchema, documentPdfPageImagesSchema, documentReadInputSchema, documentReadOutputSchema, documentReadTool, documentSectionSchema, documentSourceSchema, documentTableSchema, documentTextReplacementSchema };
443
+
444
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["#storage","#load","#format","#putArtifact","#write","#requireFormat"],"sources":["../../../src/modules/document/formats/document.ts","../../../src/modules/document/formats/spreadsheet.ts","../../../src/modules/document/formats/format.ts","../../../src/modules/document/domain.ts","../../../src/modules/document/client.ts","../../../src/modules/document/module.ts"],"sourcesContent":["/** DOCX read, build, and edit implementation for the document capability. */\nimport {\n\tappendHeading,\n\tappendParagraph,\n\tcreateDocx,\n\tgetTableCellText,\n\topenDocx,\n\treplaceTextEverywhere,\n\ttables,\n\ttext,\n\ttoUint8Array\n} from '@office-kit/docx'\nimport mammoth from 'mammoth'\n\nimport { toArrayBuffer } from '../../../shared/bytes'\nimport type { DocumentReadOutput, DocumentSection, DocumentTextReplacement } from '../contracts'\nimport { assertReplacementApplied } from './text'\n\nfunction bufferFrom(bytes: Uint8Array): Buffer {\n\treturn Buffer.from(toArrayBuffer(bytes))\n}\n\nexport async function readDocument(bytes: Uint8Array): Promise<Pick<DocumentReadOutput, 'text' | 'html' | 'tables'>> {\n\tconst document = openDocx(bytes)\n\tconst converted = await mammoth.convertToHtml({ buffer: bufferFrom(bytes) })\n\tconst documentTables = tables(document).map((table, index) => ({\n\t\tname: `Table ${index + 1}`,\n\t\trows: table.rows.map((row, rowIndex) =>\n\t\t\trow.cells.map((_, columnIndex) => getTableCellText(table, rowIndex, columnIndex))\n\t\t)\n\t}))\n\treturn {\n\t\ttext: text(document),\n\t\t...(converted.value && { html: converted.value }),\n\t\t...(documentTables.length > 0 && { tables: documentTables })\n\t}\n}\n\nexport async function buildDocument(input: {\n\ttitle?: string | undefined\n\tsections: DocumentSection[]\n}): Promise<Uint8Array> {\n\tconst document = createDocx()\n\tif (input.title) appendHeading(document, input.title, 1)\n\tfor (const section of input.sections) {\n\t\tif (section.heading) appendHeading(document, section.heading, 1)\n\t\tfor (const paragraph of section.paragraphs ?? []) appendParagraph(document, paragraph)\n\t}\n\treturn toUint8Array(document)\n}\n\nexport async function patchDocx(bytes: Uint8Array, replacements: DocumentTextReplacement[]): Promise<Uint8Array> {\n\tconst document = openDocx(bytes)\n\tfor (const replacement of replacements) {\n\t\tlet applied = 0\n\t\treplaceTextEverywhere(document, replacement.find, () => {\n\t\t\tif (replacement.match === 'first' && applied > 0) return replacement.find\n\t\t\tapplied += 1\n\t\t\treturn replacement.replace\n\t\t})\n\t\tassertReplacementApplied(applied, replacement.find)\n\t}\n\treturn toUint8Array(document)\n}\n","/** XLSX and CSV read, build, and edit implementation for the document capability. */\nimport { Readable } from 'node:stream'\n\nimport ExcelJS from 'exceljs'\nimport { isPlainObject } from 'es-toolkit'\n\nimport { ToolError } from '../../../core/errors'\nimport { toArrayBuffer } from '../../../shared/bytes'\nimport type { DocumentTable } from '../contracts'\n\ntype CellPatch = {\n\tsheet?: string | undefined\n\trow: number\n\tcol: number\n\tvalue: string | number | boolean | null\n}\n\nfunction cellValue(value: unknown, displayText: string): string | number | boolean | null {\n\tif (value === null || value === undefined) return null\n\tif (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') return value\n\tif (value instanceof Date) return value.toISOString()\n\tif (isPlainObject(value)) {\n\t\tconst result = value['result']\n\t\tif (typeof result === 'string' || typeof result === 'number' || typeof result === 'boolean') return result\n\t}\n\treturn displayText\n}\n\nfunction worksheetTable(worksheet: ExcelJS.Worksheet): DocumentTable {\n\tconst rows: DocumentTable['rows'] = []\n\tworksheet.eachRow({ includeEmpty: false }, (row) => {\n\t\tconst values: DocumentTable['rows'][number] = []\n\t\tfor (let column = 1; column <= row.cellCount; column += 1) {\n\t\t\tconst cell = row.getCell(column)\n\t\t\tvalues.push(cellValue(cell.value, cell.text))\n\t\t}\n\t\trows.push(values)\n\t})\n\treturn { name: worksheet.name, rows }\n}\n\nfunction tablesFromWorkbook(workbook: ExcelJS.Workbook): DocumentTable[] {\n\treturn workbook.worksheets.map(worksheetTable)\n}\n\nfunction textFromTables(tables: DocumentTable[]): string {\n\treturn tables\n\t\t.flatMap((table) => table.rows.map((row) => row.map((cell) => (cell === null ? '' : String(cell))).join('\\t')))\n\t\t.join('\\n')\n}\n\nasync function loadCsv(bytes: Uint8Array): Promise<ExcelJS.Workbook> {\n\tconst workbook = new ExcelJS.Workbook()\n\tawait workbook.csv.read(Readable.from([Buffer.from(bytes)]))\n\treturn workbook\n}\n\nasync function loadXlsx(bytes: Uint8Array): Promise<ExcelJS.Workbook> {\n\tconst workbook = new ExcelJS.Workbook()\n\tawait workbook.xlsx.load(toArrayBuffer(bytes))\n\treturn workbook\n}\n\nexport async function readSpreadsheet(\n\tformat: 'csv' | 'xlsx',\n\tbytes: Uint8Array\n): Promise<{ text: string; tables: DocumentTable[] }> {\n\tconst workbook = format === 'csv' ? await loadCsv(bytes) : await loadXlsx(bytes)\n\tconst tables = tablesFromWorkbook(workbook)\n\treturn { tables, text: textFromTables(tables) }\n}\n\nexport async function buildSpreadsheet(sheets: DocumentTable[]): Promise<Uint8Array> {\n\tconst workbook = new ExcelJS.Workbook()\n\tfor (const sheet of sheets) {\n\t\tconst worksheet = workbook.addWorksheet(sheet.name ?? 'Sheet1')\n\t\tfor (const row of sheet.rows) worksheet.addRow(row)\n\t}\n\treturn new Uint8Array(await workbook.xlsx.writeBuffer())\n}\n\nexport async function patchSpreadsheet(\n\tbytes: Uint8Array,\n\tformat: 'csv' | 'xlsx',\n\tpatches: CellPatch[]\n): Promise<{ bytes: Uint8Array; filename_ext: 'csv' | 'xlsx'; media_type: string }> {\n\tconst workbook = format === 'csv' ? await loadCsv(bytes) : await loadXlsx(bytes)\n\tfor (const patch of patches) {\n\t\tconst worksheet = patch.sheet ? workbook.getWorksheet(patch.sheet) : workbook.worksheets[0]\n\t\tif (!worksheet) {\n\t\t\tthrow new ToolError('Spreadsheet sheet was not found', {\n\t\t\t\tcode: 'bad_input',\n\t\t\t\tdetails: { sheet: patch.sheet ?? '(first)' }\n\t\t\t})\n\t\t}\n\t\tworksheet.getCell(patch.row, patch.col).value = patch.value\n\t}\n\n\tif (format === 'csv') {\n\t\tconst worksheet = workbook.worksheets[0]\n\t\tif (!worksheet) throw new ToolError('CSV has no worksheet', { code: 'bad_input' })\n\t\tconst output = await workbook.csv.writeBuffer({ sheetId: worksheet.id })\n\t\treturn { bytes: new Uint8Array(output), filename_ext: 'csv', media_type: 'text/csv' }\n\t}\n\n\treturn {\n\t\tbytes: new Uint8Array(await workbook.xlsx.writeBuffer()),\n\t\tfilename_ext: 'xlsx',\n\t\tmedia_type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'\n\t}\n}\n","/** Document format detection. */\nimport { fileTypeFromBuffer } from 'file-type'\n\nimport { ToolError } from '../../../core/errors'\nimport { extensionFromMediaType, resolveFileExtension } from '../../../shared/content-type'\nimport { documentFormatSchema } from '../contracts'\nimport type { DocumentFormat } from '../contracts'\n\ntype FormatHints = {\n\tformat?: DocumentFormat | undefined\n\tfilename?: string | undefined\n\tmedia_type?: string | undefined\n}\n\nconst LEGACY_OFFICE_EXTENSIONS = new Set(['doc', 'ppt', 'xls'])\n\nfunction fromExtension(extension: string | undefined): DocumentFormat | undefined {\n\tif (!extension) return undefined\n\tconst normalized = extension.toLowerCase()\n\tconst parsed = documentFormatSchema.safeParse(normalized)\n\tif (parsed.success) return parsed.data\n\tif (normalized === 'htm') return 'html'\n\tif (LEGACY_OFFICE_EXTENSIONS.has(normalized)) {\n\t\tthrow new ToolError('Legacy Office binaries must use office-to-pdf conversion before document read', {\n\t\t\tcode: 'unsupported',\n\t\t\tdetails: { extension: normalized }\n\t\t})\n\t}\n\treturn undefined\n}\n\nfunction fromMediaType(mediaType: string | undefined): DocumentFormat | undefined {\n\tif (!mediaType) return undefined\n\tconst normalized = mediaType.split(';', 1)[0]?.trim().toLowerCase()\n\tif (!normalized) return undefined\n\tif (normalized.startsWith('image/')) return 'image'\n\treturn fromExtension(extensionFromMediaType(normalized))\n}\n\nfunction fromHints(input: FormatHints): DocumentFormat | undefined {\n\tif (input.format) return input.format\n\tconst mediaTypeFormat = fromMediaType(input.media_type)\n\tif (mediaTypeFormat) return mediaTypeFormat\n\tif (!input.filename) return undefined\n\treturn fromExtension(resolveFileExtension({ filename: input.filename, fallback: '' }))\n}\n\nexport function detectFormat(input: FormatHints): DocumentFormat {\n\tconst format = fromHints(input)\n\tif (format) return format\n\tthrow new ToolError('Could not detect document format; pass format or filename', { code: 'bad_input' })\n}\n\nexport async function detectFormatFromBytes(bytes: Uint8Array, input: FormatHints): Promise<DocumentFormat> {\n\tif (input.format) return input.format\n\tconst detected = await fileTypeFromBuffer(bytes)\n\tconst byteFormat = fromMediaType(detected?.mime)\n\tif (byteFormat) return byteFormat\n\treturn detectFormat(input)\n}\n","/** Core document read, build, edit, and format operations. */\nimport { ToolError } from '../../core/errors'\nimport { bytesToUtf8 } from '../../shared/bytes'\nimport type { DocumentFormat, DocumentReadOutput } from './contracts'\nimport { readDocument } from './formats/document'\nimport { readImageMetadata } from './formats/image'\nimport { readPdf } from './formats/pdf'\nimport { readSpreadsheet } from './formats/spreadsheet'\nimport { readHtml, readJson } from './formats/text'\n\nexport { buildDocument, patchDocx } from './formats/document'\nexport { detectFormat, detectFormatFromBytes } from './formats/format'\nexport { renderPdfPages } from './formats/pdf'\nexport { buildSpreadsheet, patchSpreadsheet } from './formats/spreadsheet'\nexport { mediaTypeForTextFormat, patchTextDocument } from './formats/text'\n\nexport type DocumentMetadata = {\n\tfilename?: string\n\tmedia_type?: string\n}\n\nfunction baseOutput(format: DocumentFormat, bytes: Uint8Array, metadata: DocumentMetadata): DocumentReadOutput {\n\treturn {\n\t\tformat,\n\t\tbyte_length: bytes.byteLength,\n\t\t...(metadata.media_type && { media_type: metadata.media_type }),\n\t\t...(metadata.filename && { filename: metadata.filename })\n\t}\n}\n\nexport async function readBytes(\n\tformat: DocumentFormat,\n\tbytes: Uint8Array,\n\tmetadata: DocumentMetadata\n): Promise<DocumentReadOutput> {\n\tconst base = baseOutput(format, bytes, metadata)\n\tswitch (format) {\n\t\tcase 'txt':\n\t\tcase 'md':\n\t\t\treturn { ...base, text: bytesToUtf8(bytes) }\n\t\tcase 'json':\n\t\t\treturn { ...base, text: readJson(bytes) }\n\t\tcase 'html':\n\t\t\treturn { ...base, ...readHtml(bytesToUtf8(bytes)) }\n\t\tcase 'csv':\n\t\tcase 'xlsx':\n\t\t\treturn { ...base, ...(await readSpreadsheet(format, bytes)) }\n\t\tcase 'docx':\n\t\t\treturn { ...base, ...(await readDocument(bytes)) }\n\t\tcase 'pdf':\n\t\t\treturn { ...base, ...(await readPdf(bytes)) }\n\t\tcase 'image': {\n\t\t\tconst image = readImageMetadata(bytes)\n\t\t\treturn image ? { ...base, image } : base\n\t\t}\n\t\tdefault:\n\t\t\tthrow new ToolError('Unsupported format for read', { code: 'unsupported' })\n\t}\n}\n","/** Core document client. Presentation operations live in the presentation module. */\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { artifactRefSchema } from '../../shared/artifact'\nimport type { ArtifactRef } from '../../shared/artifact'\nimport { utf8ToBytes } from '../../shared/bytes'\nimport { mediaTypeFromPath } from '../../shared/content-type'\nimport { S3Client } from '../../vendors/s3'\nimport { attachPdfPageArtifacts, loadDocumentSource, sourceName } from './artifacts'\nimport type { LoadedDocument } from './artifacts'\nimport { documentAuthSchema, documentBuildOutputSchema, documentReadOutputSchema } from './contracts'\nimport type {\n\tDocumentAuth,\n\tDocumentBuildDocumentInput,\n\tDocumentBuildSpreadsheetInput,\n\tDocumentBuildTextInput,\n\tDocumentEditDocumentInput,\n\tDocumentEditSpreadsheetInput,\n\tDocumentEditTextInput,\n\tDocumentFormat,\n\tDocumentReadInput,\n\tDocumentReadOutput\n} from './contracts'\nimport {\n\tbuildDocument,\n\tbuildSpreadsheet,\n\tdetectFormatFromBytes,\n\tmediaTypeForTextFormat,\n\tpatchDocx,\n\tpatchSpreadsheet,\n\tpatchTextDocument,\n\treadBytes\n} from './domain'\n\nexport type DocumentClientOptions = {\n\tfetch?: ToolContext['fetch']\n\tsignal?: ToolContext['signal']\n}\n\nfunction transportOptions(context: DocumentClientOptions) {\n\treturn {\n\t\t...(context.fetch && { fetch: context.fetch }),\n\t\t...(context.signal && { signal: context.signal })\n\t}\n}\n\nfunction mediaTypeFor(filename: string): string {\n\treturn mediaTypeFromPath(filename) ?? 'application/octet-stream'\n}\n\nexport class DocumentClient {\n\treadonly #storage: S3Client\n\n\tconstructor(auth: DocumentAuth, context: DocumentClientOptions = {}) {\n\t\tconst parsed = documentAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid document auth credentials', {\n\t\t\t\tcode: 'bad_auth',\n\t\t\t\tdetails: { issues: parsed.error.issues.map((issue) => issue.message) }\n\t\t\t})\n\t\t}\n\t\tthis.#storage = new S3Client(parsed.data.storage, transportOptions(context))\n\t}\n\n\tstatic fromContext(context: ToolContext): DocumentClient {\n\t\treturn new DocumentClient(requireAuth(context, documentAuthSchema), context)\n\t}\n\n\tstatic fromAuth(auth: DocumentAuth, context: DocumentClientOptions = {}): DocumentClient {\n\t\treturn new DocumentClient(auth, context)\n\t}\n\n\tasync read(input: DocumentReadInput): Promise<DocumentReadOutput> {\n\t\tconst loaded = await this.#load(input.source)\n\t\tconst format = await this.#format(loaded, input.format)\n\t\tconst output = await readBytes(format, loaded.bytes, {\n\t\t\t...(loaded.filename && { filename: loaded.filename }),\n\t\t\t...(loaded.media_type && { media_type: loaded.media_type })\n\t\t})\n\t\tif (input.pdf_page_images) {\n\t\t\tawait attachPdfPageArtifacts(output, loaded, format, input.pdf_page_images, (key, bytes, mediaType, filename) =>\n\t\t\t\tthis.#putArtifact(key, bytes, mediaType, filename)\n\t\t\t)\n\t\t}\n\t\treturn documentReadOutputSchema.parse(output)\n\t}\n\n\tasync buildText(input: DocumentBuildTextInput) {\n\t\treturn this.#write(\n\t\t\tinput.output_key,\n\t\t\tutf8ToBytes(input.content),\n\t\t\tmediaTypeForTextFormat(input.format),\n\t\t\tinput.filename ?? `document.${input.format}`\n\t\t)\n\t}\n\n\tasync buildSpreadsheet(input: DocumentBuildSpreadsheetInput) {\n\t\treturn this.#write(\n\t\t\tinput.output_key,\n\t\t\tawait buildSpreadsheet(input.sheets),\n\t\t\tmediaTypeFor('workbook.xlsx'),\n\t\t\tinput.filename ?? 'workbook.xlsx'\n\t\t)\n\t}\n\n\tasync buildDocument(input: DocumentBuildDocumentInput) {\n\t\treturn this.#write(\n\t\t\tinput.output_key,\n\t\t\tawait buildDocument({ title: input.title, sections: input.sections }),\n\t\t\tmediaTypeFor('document.docx'),\n\t\t\tinput.filename ?? 'document.docx'\n\t\t)\n\t}\n\n\tasync editText(input: DocumentEditTextInput) {\n\t\tconst loaded = await this.#load(input.source)\n\t\tconst format = await this.#format(loaded, input.format)\n\t\tif (format !== 'txt' && format !== 'md' && format !== 'json' && format !== 'html') {\n\t\t\tthrow new ToolError('editText requires txt, md, json, or html source', { code: 'bad_input' })\n\t\t}\n\t\treturn this.#write(\n\t\t\tinput.output_key,\n\t\t\tpatchTextDocument(loaded.bytes, format, input.replacements),\n\t\t\tmediaTypeForTextFormat(format),\n\t\t\tinput.filename ?? sourceName(loaded, `document.${format}`)\n\t\t)\n\t}\n\n\tasync editDocument(input: DocumentEditDocumentInput) {\n\t\tconst loaded = await this.#requireFormat(input.source, 'docx', 'editDocument')\n\t\treturn this.#write(\n\t\t\tinput.output_key,\n\t\t\tawait patchDocx(loaded.bytes, input.replacements),\n\t\t\tmediaTypeFor('document.docx'),\n\t\t\tinput.filename ?? sourceName(loaded, 'document.docx')\n\t\t)\n\t}\n\n\tasync editSpreadsheet(input: DocumentEditSpreadsheetInput) {\n\t\tconst loaded = await this.#load(input.source)\n\t\tconst format = await this.#format(loaded)\n\t\tif (format !== 'csv' && format !== 'xlsx') {\n\t\t\tthrow new ToolError('editSpreadsheet requires xlsx or csv source', { code: 'bad_input' })\n\t\t}\n\t\tconst output = await patchSpreadsheet(loaded.bytes, format, input.patches)\n\t\tconst fallback = `workbook.${output.filename_ext}`\n\t\tconst current = sourceName(loaded, fallback)\n\t\tconst filename = input.filename ?? current.replace(/\\.[^./]+$/, `.${output.filename_ext}`)\n\t\treturn this.#write(input.output_key, output.bytes, output.media_type, filename)\n\t}\n\n\tasync #load(source: DocumentReadInput['source']): Promise<LoadedDocument> {\n\t\treturn loadDocumentSource(source, (key) => this.#storage.getBytes(key))\n\t}\n\n\t#format(loaded: LoadedDocument, format?: DocumentFormat): Promise<DocumentFormat> {\n\t\treturn detectFormatFromBytes(loaded.bytes, {\n\t\t\tformat,\n\t\t\tfilename: loaded.filename,\n\t\t\tmedia_type: loaded.media_type\n\t\t})\n\t}\n\n\tasync #requireFormat(\n\t\tsource: DocumentReadInput['source'],\n\t\trequired: 'docx',\n\t\toperation: string\n\t): Promise<LoadedDocument> {\n\t\tconst loaded = await this.#load(source)\n\t\tif ((await this.#format(loaded)) !== required) {\n\t\t\tthrow new ToolError(`${operation} requires ${required} source`, { code: 'bad_input' })\n\t\t}\n\t\treturn loaded\n\t}\n\n\tasync #write(key: string, bytes: Uint8Array, mediaType: string, filename: string) {\n\t\tconst result = await this.#putArtifact(key, bytes, mediaType, filename)\n\t\treturn documentBuildOutputSchema.parse({ result })\n\t}\n\n\tasync #putArtifact(key: string, bytes: Uint8Array, mediaType: string, filename: string): Promise<ArtifactRef> {\n\t\tawait this.#storage.putBytes(key, bytes, mediaType)\n\t\treturn artifactRefSchema.parse({\n\t\t\tstore: 'object',\n\t\t\tkey,\n\t\t\tmedia_type: mediaType,\n\t\t\tfilename,\n\t\t\tbyte_length: bytes.byteLength\n\t\t})\n\t}\n}\n\nexport type { DocumentFormat }\n","import { defineModule, defineTool } from '../../core/define'\nimport { DocumentClient } from './client'\nimport {\n\tdocumentAuthSchema,\n\tdocumentBuildDocumentInputSchema,\n\tdocumentBuildOutputSchema,\n\tdocumentBuildSpreadsheetInputSchema,\n\tdocumentBuildTextInputSchema,\n\tdocumentEditDocumentInputSchema,\n\tdocumentEditSpreadsheetInputSchema,\n\tdocumentEditTextInputSchema,\n\tdocumentReadInputSchema,\n\tdocumentReadOutputSchema\n} from './contracts'\n\nexport const documentReadTool = defineTool({\n\tid: 'document-read',\n\tname: 'readDocument',\n\tdescription:\n\t\t'Read an existing supported artifact for understanding, including text, metadata, tables, PDF pages, or image dimensions. Use before answering about or editing a user-supplied file. This does not create a new deliverable.',\n\tinputSchema: documentReadInputSchema,\n\toutputSchema: documentReadOutputSchema,\n\tsideEffect: 'read',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).read(input)\n})\n\nexport const documentBuildTextTool = defineTool({\n\tid: 'document-build-text',\n\tname: 'buildTextDocument',\n\tdescription:\n\t\t'Create a new TXT, Markdown, JSON, CSV, or HTML deliverable from complete text content. Prefer this purpose-built tool over writing the file in a general code sandbox. Returns the final ArtifactRef; no export or edit step is needed.',\n\tinputSchema: documentBuildTextInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).buildText(input)\n})\n\nexport const documentBuildSpreadsheetTool = defineTool({\n\tid: 'document-build-spreadsheet',\n\tname: 'buildSpreadsheet',\n\tdescription:\n\t\t'Create a new XLSX workbook from structured, row-major worksheets. Use whenever the user asks to build a spreadsheet or workbook from data. Prefer this over generating XLSX in a general code sandbox. Returns the final ArtifactRef; use document-edit-spreadsheet only for an existing spreadsheet.',\n\tinputSchema: documentBuildSpreadsheetInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).buildSpreadsheet(input)\n})\n\nexport const documentBuildDocumentTool = defineTool({\n\tid: 'document-build-document',\n\tname: 'buildDocument',\n\tdescription:\n\t\t'Create a new DOCX deliverable from titled sections and paragraphs. Prefer this purpose-built builder over generating DOCX in a general code sandbox. Returns the final ArtifactRef; use document-edit-document only for an existing DOCX.',\n\tinputSchema: documentBuildDocumentInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).buildDocument(input)\n})\n\nexport const documentEditTextTool = defineTool({\n\tid: 'document-edit-text',\n\tname: 'editTextDocument',\n\tdescription:\n\t\t'Edit an existing TXT, Markdown, JSON, or HTML ArtifactRef with ordered exact-text replacements and return a new ArtifactRef. Use only when changing a supplied file. For a new deliverable, use document-build-text; do not call this merely to make a built artifact deliverable.',\n\tinputSchema: documentEditTextInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).editText(input)\n})\n\nexport const documentEditDocumentTool = defineTool({\n\tid: 'document-edit-document',\n\tname: 'editDocument',\n\tdescription:\n\t\t'Edit an existing DOCX ArtifactRef with layout-preserving text replacements and return a new ArtifactRef. Use only when changing a supplied DOCX. For a new document, use document-build-document; do not call this merely to make a built artifact deliverable.',\n\tinputSchema: documentEditDocumentInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).editDocument(input)\n})\n\nexport const documentEditSpreadsheetTool = defineTool({\n\tid: 'document-edit-spreadsheet',\n\tname: 'editSpreadsheet',\n\tdescription:\n\t\t'Edit cells in an existing XLSX or CSV ArtifactRef and return a new ArtifactRef. Use only when changing a supplied spreadsheet and provide explicit sheet, row, and column patches. For a new workbook, use document-build-spreadsheet; do not call this merely to make a built artifact deliverable.',\n\tinputSchema: documentEditSpreadsheetInputSchema,\n\toutputSchema: documentBuildOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => DocumentClient.fromContext(ctx).editSpreadsheet(input)\n})\n\nexport const documentModule = defineModule({\n\tid: 'document',\n\ttitle: 'Document',\n\tdescription:\n\t\t'Purpose-built document tools for reading existing files, creating final text, DOCX, and XLSX deliverables, and editing supplied files. Prefer these tools over general sandbox file generation.',\n\truntime: 'node',\n\tauth: { type: 'custom', schema: documentAuthSchema },\n\tcategories: ['documents', 'office'],\n\tclassification: 'pii',\n\ttags: ['read', 'build', 'edit'],\n\ttools: [\n\t\tdocumentReadTool,\n\t\tdocumentBuildTextTool,\n\t\tdocumentBuildSpreadsheetTool,\n\t\tdocumentBuildDocumentTool,\n\t\tdocumentEditTextTool,\n\t\tdocumentEditDocumentTool,\n\t\tdocumentEditSpreadsheetTool\n\t]\n})\n"],"mappings":"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"}