@visulima/storage 1.0.0-alpha.25 → 1.0.0-alpha.27

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 (194) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/LICENSE.md +0 -1104
  3. package/README.md +79 -466
  4. package/dist/adapter/nuxt/module.d.ts +4 -4
  5. package/dist/adapter/nuxt/node_modules/.bin/nuxi +22 -0
  6. package/dist/adapter/nuxt/node_modules/.bin/nuxt +22 -0
  7. package/dist/ai/ai-sdk/index.d.ts +113 -0
  8. package/dist/ai/ai-sdk/index.js +1 -0
  9. package/dist/ai/claude/index.d.ts +177 -0
  10. package/dist/ai/claude/index.js +1 -0
  11. package/dist/ai/openai/index.d.ts +205 -0
  12. package/dist/ai/openai/index.js +1 -0
  13. package/dist/ai/tanstack/index.d.ts +115 -0
  14. package/dist/ai/tanstack/index.js +1 -0
  15. package/dist/handler/http/fetch/index.d.ts +13 -7
  16. package/dist/handler/http/fetch/index.js +1 -1
  17. package/dist/handler/http/hono/index.d.ts +5 -1412
  18. package/dist/handler/http/hono/index.js +1 -1
  19. package/dist/handler/http/nextjs/index.d.ts +4 -4
  20. package/dist/handler/http/nextjs/index.js +1 -1
  21. package/dist/handler/http/node/index.d.ts +7 -7
  22. package/dist/handler/http/node/index.js +1 -1
  23. package/dist/handler/http/solid-start/index.d.ts +4 -4
  24. package/dist/handler/http/solid-start/index.js +1 -1
  25. package/dist/index.d.ts +6 -324
  26. package/dist/index.js +1 -1
  27. package/dist/packem_shared/{AwsLightFile-BTLiRxXj.js → AwsLightFile-BSqjc_rD.js} +1 -1
  28. package/dist/packem_shared/{AwsLightStorage-CA9cdfJ6.js → AwsLightStorage-SH7j-myh.js} +1 -1
  29. package/dist/packem_shared/{AzureFile-BKHru1zB.js → AzureFile-Dgj2Tef4.js} +1 -1
  30. package/dist/packem_shared/{AzureSMetaStorage-BqA4jUDJ.js → AzureSMetaStorage-DV2tNjKh.js} +1 -1
  31. package/dist/packem_shared/AzureStorage-BVYMFEBP.js +1 -0
  32. package/dist/packem_shared/BaseTransformer-Fpcuz4kj.js +1 -0
  33. package/dist/packem_shared/BoxFile-Be0S4N1L.js +1 -0
  34. package/dist/packem_shared/BoxMetaStorage-BUe5Qmqe.js +1 -0
  35. package/dist/packem_shared/BoxStorage-CgC81_So.js +1 -0
  36. package/dist/packem_shared/BunnyFile-Dotl-lO9.js +1 -0
  37. package/dist/packem_shared/BunnyMetaStorage-D0mT6veJ.js +1 -0
  38. package/dist/packem_shared/BunnyStorage-Bl4usdVT.js +1 -0
  39. package/dist/packem_shared/DiskStorage-B5uIDVXr.js +1 -0
  40. package/dist/packem_shared/DiskStorageWithChecksum-CbXWpSOr.js +1 -0
  41. package/dist/packem_shared/DropboxFile-BGVG2kXM.js +1 -0
  42. package/dist/packem_shared/DropboxMetaStorage-CICuUZ1n.js +1 -0
  43. package/dist/packem_shared/DropboxStorage-CPjhDN5B.js +1 -0
  44. package/dist/packem_shared/ERRORS-CyOuSMLY.js +1 -0
  45. package/dist/packem_shared/File-BhfUgJjs.js +1 -0
  46. package/dist/packem_shared/Files-B7hlJcB4.js +1 -0
  47. package/dist/packem_shared/{GCSFile-CHjX_fJk.js → GCSFile-CDQ6IWAz.js} +1 -1
  48. package/dist/packem_shared/{GCSMetaStorage-BQkYQUDn.js → GCSMetaStorage-CqP9ifYB.js} +1 -1
  49. package/dist/packem_shared/GCStorage-XSBKVx90.js +1 -0
  50. package/dist/packem_shared/GoogleDriveFile-D0aGfGbL.js +1 -0
  51. package/dist/packem_shared/GoogleDriveMetaStorage-rghGy3Fa.js +1 -0
  52. package/dist/packem_shared/GoogleDriveStorage-DuB6glUk.js +1 -0
  53. package/dist/packem_shared/LocalMetaStorage-B5uh1snG.js +1 -0
  54. package/dist/packem_shared/MediaTransformer-D-1c9Q_k.js +1 -0
  55. package/dist/packem_shared/Multipart-7FSSy2n1.js +1 -0
  56. package/dist/packem_shared/Multipart-DACQFsrn.js +1 -0
  57. package/dist/packem_shared/{NetlifyBlobFile-CpzkMKng.js → NetlifyBlobFile-PMZLJ8AC.js} +1 -1
  58. package/dist/packem_shared/NetlifyBlobMetaStorage-BcRFPky8.js +1 -0
  59. package/dist/packem_shared/NetlifyBlobStorage-C4qkJv1R.js +1 -0
  60. package/dist/packem_shared/OneDriveFile-XbVVKIJh.js +1 -0
  61. package/dist/packem_shared/OneDriveMetaStorage-B_BkGLzW.js +1 -0
  62. package/dist/packem_shared/OneDriveStorage-Cu0cGcrh.js +1 -0
  63. package/dist/packem_shared/Rest-5NwM1xYj.js +1 -0
  64. package/dist/packem_shared/{Rest-CYEBbtCD.js → Rest-y8Vz2Rt0.js} +1 -1
  65. package/dist/packem_shared/{S3File-Du6wP0Sz.js → S3File-BfmCOET4.js} +1 -1
  66. package/dist/packem_shared/S3Storage-D8dopWoO.js +1 -0
  67. package/dist/packem_shared/SupabaseFile-DZ1iv9gM.js +1 -0
  68. package/dist/packem_shared/SupabaseMetaStorage-BR1UGqnj.js +1 -0
  69. package/dist/packem_shared/SupabaseStorage-CCtMTiN5.js +1 -0
  70. package/dist/packem_shared/{Tus-CUBCkuPE.js → Tus-BCVAbJIi.js} +1 -1
  71. package/dist/packem_shared/Tus-CJMcygk7.js +1 -0
  72. package/dist/packem_shared/UploadThingFile-BpG9mE8K.js +1 -0
  73. package/dist/packem_shared/UploadThingMetaStorage-DyGNyaAq.js +1 -0
  74. package/dist/packem_shared/UploadThingStorage-B_fNzNFO.js +1 -0
  75. package/dist/packem_shared/{VercelBlobFile-CL9MjKcY.js → VercelBlobFile-Cni_1qwD.js} +1 -1
  76. package/dist/packem_shared/{VercelBlobMetaStorage-BsOTx-Su.js → VercelBlobMetaStorage-Do9ZoKrl.js} +1 -1
  77. package/dist/packem_shared/VercelBlobStorage-D5zy4PPQ.js +1 -0
  78. package/dist/packem_shared/agentsListFiles-R-CnGKc4.js +1 -0
  79. package/dist/packem_shared/akamai-BYS9pP8S.js +1 -0
  80. package/dist/packem_shared/approval-BBeX3o4E.js +1 -0
  81. package/dist/packem_shared/approval.d-CMAYH9GF.d.ts +75 -0
  82. package/dist/packem_shared/backblaze-CvdtCvJL.js +1 -0
  83. package/dist/packem_shared/base-handler-core-BfwZ1RS1.js +1 -0
  84. package/dist/packem_shared/base-handler-fetch-CLxqXTQf.js +1 -0
  85. package/dist/packem_shared/base-handler-node-DBZjcqsp.js +1 -0
  86. package/dist/packem_shared/claudeListFiles-DAezbKEi.js +1 -0
  87. package/dist/packem_shared/cloudflare-Bm_Pg6yx.js +1 -0
  88. package/dist/packem_shared/createResponsesFileTools-BCep-qdO.js +1 -0
  89. package/dist/packem_shared/defaultCloudStorageFileNameValidation-6URTv-Mp.js +1 -0
  90. package/dist/packem_shared/detect-file-type-5JhzC9RU.js +1 -0
  91. package/dist/packem_shared/digitalOcean-Lj1NfDzc.js +1 -0
  92. package/dist/packem_shared/disk-storage-CbSSPnOf.js +5 -0
  93. package/dist/packem_shared/{disk-storage-with-checksum.d-B5D9I_CA.d.ts → disk-storage-with-checksum.d-BQMXA4Wl.d.ts} +6 -4
  94. package/dist/packem_shared/executors-DG6hGtvm.js +1 -0
  95. package/dist/packem_shared/executors.d-UtkeCbk1.d.ts +65 -0
  96. package/dist/packem_shared/{gcs-meta-storage-CNiEWerS.js → gcs-meta-storage-XB-UPJn6.js} +1 -1
  97. package/dist/packem_shared/hetzner-DDxE7Gy7.js +1 -0
  98. package/dist/packem_shared/index.d-DotjipuX.d.ts +89 -0
  99. package/dist/packem_shared/isRetryableError-B6ZS_-5I.js +1 -0
  100. package/dist/packem_shared/listFiles-B6VF05d-.js +1 -0
  101. package/dist/packem_shared/listFiles-BtP6VnUp.js +1 -0
  102. package/dist/packem_shared/{local-meta-storage-Bkwqi_gi.js → local-meta-storage-CT1audnK.js} +1 -1
  103. package/dist/packem_shared/{local-meta-storage.d-rO44cnQ5.d.ts → local-meta-storage.d-B5R1nswK.d.ts} +2 -1
  104. package/dist/packem_shared/{media-transformer.d-BXjTN5Qv.d.ts → media-transformer.d-DK7NJncf.d.ts} +2 -2
  105. package/dist/packem_shared/minio-T_Z3iEy7.js +1 -0
  106. package/dist/packem_shared/multipart-base-BxckfvQf.js +1 -0
  107. package/dist/packem_shared/oauth-refresh-Dg2ybc6_.js +1 -0
  108. package/dist/packem_shared/part-match-B5fLLmFw.js +1 -0
  109. package/dist/packem_shared/rest-base-CCv78k7h.js +1 -0
  110. package/dist/packem_shared/s3-base-storage-f_EyFAAt.js +1 -0
  111. package/dist/packem_shared/{s3-base-storage.d-Ccatb1dO.d.ts → s3-base-storage.d-BROGYJ4F.d.ts} +1 -1
  112. package/dist/packem_shared/storage-CoyB2O-Y.js +1 -0
  113. package/dist/packem_shared/{storage.d-sc8gn16g.d.ts → storage.d-Cr6f2lac.d.ts} +118 -17
  114. package/dist/packem_shared/storj-CVA9mM-7.js +1 -0
  115. package/dist/packem_shared/tigris-wmhjfsH2.js +1 -0
  116. package/dist/packem_shared/{tus-base.d-BX3mSWL6.d.ts → tus-base.d-4-ZfDQwl.d.ts} +3 -3
  117. package/dist/packem_shared/{types.d-Cor8FV54.d.ts → types.d-BgCmSE94.d.ts} +2 -2
  118. package/dist/packem_shared/{types.d-b0WcdT0x.d.ts → types.d-C8eSxqX9.d.ts} +14 -2
  119. package/dist/packem_shared/wasabi-JQzxdrFy.js +1 -0
  120. package/dist/storage/aws/clients/index.d.ts +90 -15
  121. package/dist/storage/aws/clients/index.js +1 -1
  122. package/dist/storage/aws/index.d.ts +16 -15
  123. package/dist/storage/aws/index.js +1 -1
  124. package/dist/storage/aws-light/index.d.ts +5 -3
  125. package/dist/storage/aws-light/index.js +1 -1
  126. package/dist/storage/azure/index.d.ts +4 -10277
  127. package/dist/storage/azure/index.js +1 -1
  128. package/dist/storage/box/index.d.ts +186 -0
  129. package/dist/storage/box/index.js +1 -0
  130. package/dist/storage/bunny/index.d.ts +116 -0
  131. package/dist/storage/bunny/index.js +1 -0
  132. package/dist/storage/dropbox/index.d.ts +129 -0
  133. package/dist/storage/dropbox/index.js +1 -0
  134. package/dist/storage/gcs/index.d.ts +6 -3941
  135. package/dist/storage/gcs/index.js +1 -1
  136. package/dist/storage/google-drive/index.d.ts +145 -0
  137. package/dist/storage/google-drive/index.js +1 -0
  138. package/dist/storage/local/index.d.ts +3 -3
  139. package/dist/storage/local/index.js +1 -1
  140. package/dist/storage/netlify-blob/index.d.ts +4 -2
  141. package/dist/storage/netlify-blob/index.js +1 -1
  142. package/dist/storage/onedrive/index.d.ts +192 -0
  143. package/dist/storage/onedrive/index.js +1 -0
  144. package/dist/storage/supabase/index.d.ts +111 -0
  145. package/dist/storage/supabase/index.js +1 -0
  146. package/dist/storage/uploadthing/index.d.ts +91 -0
  147. package/dist/storage/uploadthing/index.js +1 -0
  148. package/dist/storage/vercel-blob/index.d.ts +17 -2
  149. package/dist/storage/vercel-blob/index.js +1 -1
  150. package/dist/transformer/audio-transformer.d.ts +2 -2
  151. package/dist/transformer/audio-transformer.js +1 -1
  152. package/dist/transformer/image-transformer.d.ts +6 -2
  153. package/dist/transformer/image-transformer.js +1 -1
  154. package/dist/transformer/index.d.ts +3 -3
  155. package/dist/transformer/index.js +1 -1
  156. package/dist/transformer/video-transformer.d.ts +2 -2
  157. package/dist/transformer/video-transformer.js +1 -1
  158. package/package.json +99 -3
  159. package/dist/packem_shared/AzureStorage-BKUjCymW.js +0 -1
  160. package/dist/packem_shared/BaseTransformer-D68eLyz1.js +0 -1
  161. package/dist/packem_shared/DiskStorage-DNjpDMX9.js +0 -1
  162. package/dist/packem_shared/DiskStorageWithChecksum-Bb6JX_tC.js +0 -1
  163. package/dist/packem_shared/ERRORS-B9jkvKwx.js +0 -1
  164. package/dist/packem_shared/File-alcSNpLq.js +0 -1
  165. package/dist/packem_shared/GCStorage-C8hxSNLM.js +0 -1
  166. package/dist/packem_shared/LocalMetaStorage-BWuFvWn4.js +0 -1
  167. package/dist/packem_shared/MediaTransformer-2C8MJeAg.js +0 -1
  168. package/dist/packem_shared/Multipart-Bd9YFFn0.js +0 -1
  169. package/dist/packem_shared/Multipart-D5bcEvga.js +0 -1
  170. package/dist/packem_shared/NetlifyBlobMetaStorage-dD0oBLom.js +0 -1
  171. package/dist/packem_shared/NetlifyBlobStorage-ByTwCN-h.js +0 -1
  172. package/dist/packem_shared/Rest-DoonVU7B.js +0 -1
  173. package/dist/packem_shared/S3Client.d-CZ62Jztg.d.ts +0 -20357
  174. package/dist/packem_shared/S3Storage-Fx6-OSc-.js +0 -1
  175. package/dist/packem_shared/Tus-Bd_2Ki2G.js +0 -1
  176. package/dist/packem_shared/VercelBlobStorage-kNkk5Cn4.js +0 -1
  177. package/dist/packem_shared/backblaze-DEflv87m.js +0 -1
  178. package/dist/packem_shared/base-handler-core-DaggCVsq.js +0 -1
  179. package/dist/packem_shared/base-handler-fetch-DnarP64X.js +0 -1
  180. package/dist/packem_shared/base-handler-node-BTes6sql.js +0 -1
  181. package/dist/packem_shared/cloudflare-DLAeQvgD.js +0 -1
  182. package/dist/packem_shared/defaultCloudStorageFileNameValidation-yiM9GxHr.js +0 -1
  183. package/dist/packem_shared/digitalOcean-nhZUds87.js +0 -1
  184. package/dist/packem_shared/disk-storage-BvdK4bqF.js +0 -5
  185. package/dist/packem_shared/isRetryableError-DQNSZiBc.js +0 -1
  186. package/dist/packem_shared/minio-BWwgGXeE.js +0 -1
  187. package/dist/packem_shared/multipart-base-C6OjBwMS.js +0 -1
  188. package/dist/packem_shared/part-match-DqD5U7An.js +0 -1
  189. package/dist/packem_shared/rest-base-B2Dv7esY.js +0 -1
  190. package/dist/packem_shared/s3-base-storage-xHZNtsGe.js +0 -1
  191. package/dist/packem_shared/storage-m_Cxgiih.js +0 -1
  192. package/dist/packem_shared/tigris-DZoyrMNd.js +0 -1
  193. package/dist/packem_shared/validator-DK41xp8N.js +0 -1
  194. package/dist/packem_shared/wasabi-Dmce4x9s.js +0 -1
@@ -0,0 +1,113 @@
1
+ import { F as Files } from "../../packem_shared/index.d-DotjipuX.js";
2
+ import { C as CopyFileInput, D as DeleteFileInput, a as DownloadFileInput, G as GetFileMetadataInput, b as GetFileUrlInput, L as ListFilesInput, S as SignUploadUrlInput, U as UploadFileInput, F as FileToolName, A as ApprovalConfig, c as FileReadToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
+ export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
+ import { Tool } from 'ai';
5
+ import { e as executors } from "../../packem_shared/executors.d-UtkeCbk1.js";
6
+ import "../../packem_shared/storage.d-Cr6f2lac.js";
7
+ import 'node:stream';
8
+ import 'node:crypto';
9
+ import 'node:http';
10
+ import 'lru-cache';
11
+ import 'zod';
12
+ /**
13
+ * Common options accepted by every write-tool factory.
14
+ */
15
+ interface ToolOptions {
16
+ needsApproval?: boolean;
17
+ }
18
+ /**
19
+ * Per-tool overrides for customizing AI SDK `tool()` properties without
20
+ * changing the underlying implementation. Core properties (`execute`,
21
+ * `inputSchema`, `outputSchema`) are intentionally excluded — those drive
22
+ * the tool's behavior and contract and shouldn't be patched at this layer.
23
+ */
24
+ type ToolOverrides = Partial<Pick<Tool, "description" | "needsApproval" | "onInputAvailable" | "onInputDelta" | "onInputStart" | "providerOptions" | "toModelOutput">>;
25
+ type ListFilesOutput = Awaited<ReturnType<typeof executors.listFiles>>;
26
+ type GetFileMetadataOutput = Awaited<ReturnType<typeof executors.getFileMetadata>>;
27
+ type DownloadFileOutput = Awaited<ReturnType<typeof executors.downloadFile>>;
28
+ type GetFileUrlOutput = Awaited<ReturnType<typeof executors.getFileUrl>>;
29
+ type UploadFileOutput = Awaited<ReturnType<typeof executors.uploadFile>>;
30
+ type DeleteFileOutput = Awaited<ReturnType<typeof executors.deleteFile>>;
31
+ type CopyFileOutput = Awaited<ReturnType<typeof executors.copyFile>>;
32
+ type SignUploadUrlOutput = Awaited<ReturnType<typeof executors.signUploadUrl>>;
33
+ declare const listFiles: (files: Files) => Tool<ListFilesInput, ListFilesOutput>;
34
+ declare const getFileMetadata: (files: Files) => Tool<GetFileMetadataInput, GetFileMetadataOutput>;
35
+ declare const downloadFile: (files: Files) => Tool<DownloadFileInput, DownloadFileOutput>;
36
+ declare const getFileUrl: (files: Files) => Tool<GetFileUrlInput, GetFileUrlOutput>;
37
+ declare const uploadFile: (files: Files, {
38
+ needsApproval
39
+ }?: ToolOptions) => Tool<UploadFileInput, UploadFileOutput>;
40
+ declare const deleteFile: (files: Files, {
41
+ needsApproval
42
+ }?: ToolOptions) => Tool<DeleteFileInput, DeleteFileOutput>;
43
+ declare const copyFile: (files: Files, {
44
+ needsApproval
45
+ }?: ToolOptions) => Tool<CopyFileInput, CopyFileOutput>;
46
+ declare const signUploadUrl: (files: Files, {
47
+ needsApproval
48
+ }?: ToolOptions) => Tool<SignUploadUrlInput, SignUploadUrlOutput>;
49
+ interface FileToolsOptions {
50
+ /**
51
+ * The configured `Files` instance the tools will operate against.
52
+ * Each tool delegates to the methods on this instance.
53
+ */
54
+ files: Files;
55
+ /**
56
+ * Per-tool overrides for customizing tool behavior (description, title,
57
+ * needsApproval, etc.) without changing the underlying implementation.
58
+ * `execute` and `inputSchema` cannot be overridden.
59
+ */
60
+ overrides?: Partial<Record<FileToolName, ToolOverrides>>;
61
+ /**
62
+ * When `true`, write tools (`uploadFile`, `deleteFile`, `copyFile`,
63
+ * `signUploadUrl`) are omitted entirely. The model cannot mutate the
64
+ * bucket regardless of approval configuration.
65
+ */
66
+ readOnly?: boolean;
67
+ /**
68
+ * Approval gating for write tools. Defaults to `true` (all writes
69
+ * require approval). See {@link ApprovalConfig}.
70
+ */
71
+ requireApproval?: ApprovalConfig;
72
+ }
73
+ interface FileTools {
74
+ copyFile: ReturnType<typeof copyFile>;
75
+ deleteFile: ReturnType<typeof deleteFile>;
76
+ downloadFile: ReturnType<typeof downloadFile>;
77
+ getFileMetadata: ReturnType<typeof getFileMetadata>;
78
+ getFileUrl: ReturnType<typeof getFileUrl>;
79
+ listFiles: ReturnType<typeof listFiles>;
80
+ signUploadUrl: ReturnType<typeof signUploadUrl>;
81
+ uploadFile: ReturnType<typeof uploadFile>;
82
+ }
83
+ type ReadOnlyFileTools = Pick<FileTools, FileReadToolName>;
84
+ /**
85
+ * Create a set of visulima/storage tools for the Vercel AI SDK.
86
+ *
87
+ * Write operations require user approval by default. Control globally or
88
+ * per-tool via `requireApproval`, or strip writes entirely with
89
+ * `readOnly: true`.
90
+ * @example
91
+ * ```ts
92
+ * import { Files } from "@visulima/storage";
93
+ * import { S3Storage } from "@visulima/storage/provider/aws";
94
+ * import { createFileTools } from "@visulima/storage/ai/sdk";
95
+ * import { generateText } from "ai";
96
+ *
97
+ * const files = new Files({ adapter: new S3Storage({ bucket: "uploads" }) });
98
+ *
99
+ * const result = await generateText({
100
+ * model,
101
+ * tools: createFileTools({ files }),
102
+ * prompt: "Find every CSV under reports/ and summarize the latest one.",
103
+ * });
104
+ * ```
105
+ */
106
+ declare function createFileTools(options: FileToolsOptions & {
107
+ readOnly: true;
108
+ }): ReadOnlyFileTools;
109
+ declare function createFileTools(options: FileToolsOptions & {
110
+ readOnly?: false | undefined;
111
+ }): FileTools;
112
+ declare function createFileTools(options: FileToolsOptions): FileTools | ReadOnlyFileTools;
113
+ export { type ApprovalConfig, type FileReadToolName, type FileToolName, FileTools, FileToolsOptions, ReadOnlyFileTools, type ToolOptions, type ToolOverrides, copyFile, createFileTools, deleteFile, downloadFile, getFileMetadata, getFileUrl, listFiles, signUploadUrl, uploadFile };
@@ -0,0 +1 @@
1
+ var d=Object.defineProperty;var t=(e,l)=>d(e,"name",{value:l,configurable:!0});import{r as c}from"../../packem_shared/approval-BBeX3o4E.js";import{W as f}from"../../packem_shared/executors-DG6hGtvm.js";import{uploadFile as u,signUploadUrl as g,listFiles as v,getFileUrl as m,getFileMetadata as O,downloadFile as U,deleteFile as b,copyFile as j}from"../../packem_shared/listFiles-BtP6VnUp.js";var y=Object.defineProperty,p=t((e,l)=>y(e,"name",{value:l,configurable:!0}),"r");function T({files:e,overrides:l,readOnly:n=!1,requireApproval:F=!0}){const o=p(r=>({needsApproval:c(r,F)}),"approval"),i={copyFile:j(e,o("copyFile")),deleteFile:b(e,o("deleteFile")),downloadFile:U(e),getFileMetadata:O(e),getFileUrl:m(e),listFiles:v(e),signUploadUrl:g(e,o("signUploadUrl")),uploadFile:u(e,o("uploadFile"))};if(l){for(const[r,a]of Object.entries(l))if(r in i&&a){const s=r;Object.assign(i,{[s]:{...i[s],...a}})}}return n?Object.fromEntries(Object.entries(i).filter(([r])=>!f.has(r))):i}t(T,"createFileTools");p(T,"createFileTools");export{j as copyFile,T as createFileTools,b as deleteFile,U as downloadFile,O as getFileMetadata,m as getFileUrl,v as listFiles,g as signUploadUrl,u as uploadFile};
@@ -0,0 +1,177 @@
1
+ import { SdkMcpToolDefinition, CanUseTool, McpSdkServerConfigWithInstance } from '@anthropic-ai/claude-agent-sdk';
2
+ import { F as Files } from "../../packem_shared/index.d-DotjipuX.js";
3
+ import { T as TOOL_SCHEMAS, F as FileToolName, A as ApprovalConfig } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
+ export { type c as FileReadToolName, type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
5
+ import "../../packem_shared/storage.d-Cr6f2lac.js";
6
+ import 'node:stream';
7
+ import 'node:crypto';
8
+ import 'node:http';
9
+ import 'lru-cache';
10
+ import 'zod';
11
+ /**
12
+ * MCP tool annotations as accepted by `tool()` and exposed on
13
+ * `SdkMcpToolDefinition`. Re-derived from the SDK rather than imported from
14
+ * `@modelcontextprotocol/sdk` directly to avoid taking on a second peer
15
+ * dependency.
16
+ */
17
+ type ToolAnnotations = NonNullable<SdkMcpToolDefinition["annotations"]>;
18
+ /**
19
+ * Per-tool overrides for `createClaudeFileTools`. `name`, `inputSchema`, and
20
+ * `handler` are intentionally not overridable — the contract that drives tool
21
+ * behavior should not be patched at this layer.
22
+ */
23
+ interface ClaudeToolOverrides {
24
+ annotations?: ToolAnnotations;
25
+ description?: string;
26
+ }
27
+ interface ClaudeWriteToolOptions {
28
+ annotations?: ToolAnnotations;
29
+ }
30
+ type ListFilesShape = (typeof TOOL_SCHEMAS.listFiles.input)["shape"];
31
+ type GetFileMetadataShape = (typeof TOOL_SCHEMAS.getFileMetadata.input)["shape"];
32
+ type DownloadFileShape = (typeof TOOL_SCHEMAS.downloadFile.input)["shape"];
33
+ type GetFileUrlShape = (typeof TOOL_SCHEMAS.getFileUrl.input)["shape"];
34
+ type UploadFileShape = (typeof TOOL_SCHEMAS.uploadFile.input)["shape"];
35
+ type DeleteFileShape = (typeof TOOL_SCHEMAS.deleteFile.input)["shape"];
36
+ type CopyFileShape = (typeof TOOL_SCHEMAS.copyFile.input)["shape"];
37
+ type SignUploadUrlShape = (typeof TOOL_SCHEMAS.signUploadUrl.input)["shape"];
38
+ declare const claudeListFiles: (files: Files) => SdkMcpToolDefinition<ListFilesShape>;
39
+ declare const claudeGetFileMetadata: (files: Files) => SdkMcpToolDefinition<GetFileMetadataShape>;
40
+ declare const claudeDownloadFile: (files: Files) => SdkMcpToolDefinition<DownloadFileShape>;
41
+ declare const claudeGetFileUrl: (files: Files) => SdkMcpToolDefinition<GetFileUrlShape>;
42
+ declare const claudeUploadFile: (files: Files, {
43
+ annotations
44
+ }?: ClaudeWriteToolOptions) => SdkMcpToolDefinition<UploadFileShape>;
45
+ declare const claudeDeleteFile: (files: Files, {
46
+ annotations
47
+ }?: ClaudeWriteToolOptions) => SdkMcpToolDefinition<DeleteFileShape>;
48
+ declare const claudeCopyFile: (files: Files, {
49
+ annotations
50
+ }?: ClaudeWriteToolOptions) => SdkMcpToolDefinition<CopyFileShape>;
51
+ declare const claudeSignUploadUrl: (files: Files, {
52
+ annotations
53
+ }?: ClaudeWriteToolOptions) => SdkMcpToolDefinition<SignUploadUrlShape>;
54
+ interface ClaudeFileToolsOptions {
55
+ /**
56
+ * The configured `Files` instance the tools will operate against.
57
+ */
58
+ files: Files;
59
+ /**
60
+ * Per-tool overrides for `description` / `annotations` without touching
61
+ * the underlying handler or input schema.
62
+ */
63
+ overrides?: Partial<Record<FileToolName, ClaudeToolOverrides>>;
64
+ /**
65
+ * When `true`, write tools (`uploadFile`, `deleteFile`, `copyFile`,
66
+ * `signUploadUrl`) are omitted from the MCP server. The model cannot
67
+ * mutate the bucket regardless of approval configuration.
68
+ */
69
+ readOnly?: boolean;
70
+ /**
71
+ * Approval gating reflected by {@link ClaudeFileTools.needsApproval} and
72
+ * the bundled {@link ClaudeFileTools.canUseTool}. Defaults to `true`
73
+ * (every write requires approval). Pass `false` to disable, or an object
74
+ * keyed by write-tool name for fine-grained control.
75
+ */
76
+ requireApproval?: ApprovalConfig;
77
+ /**
78
+ * Name of the in-process MCP server that wraps these tools. Affects the
79
+ * `mcp__&lt;server-name>__&lt;tool-name>` strings the agent uses to address
80
+ * each tool. Defaults to `"files"`.
81
+ */
82
+ serverName?: string;
83
+ /**
84
+ * MCP server `version` metadata. Defaults to `"1.0.0"`.
85
+ */
86
+ serverVersion?: string;
87
+ }
88
+ interface ClaudeFileTools {
89
+ /**
90
+ * Pass into `query({ options: { allowedTools: tools.allowedTools } })`.
91
+ * Each entry is of the form `mcp__&lt;serverName>__&lt;toolName>`.
92
+ */
93
+ allowedTools: string[];
94
+ /**
95
+ * Ready-made `canUseTool` callback. Allows reads unconditionally, allows
96
+ * writes whose `needsApproval` resolves to `false`, denies the rest with
97
+ * a `"requires approval"` message. Pass directly into `query()`, or
98
+ * compose your own using {@link ClaudeFileTools.needsApproval}.
99
+ */
100
+ canUseTool: CanUseTool;
101
+ /**
102
+ * Pass into `query({ options: { mcpServers: tools.mcpServers } })`.
103
+ */
104
+ mcpServers: Record<string, McpSdkServerConfigWithInstance>;
105
+ /**
106
+ * Whether the named tool is approval-gated under the configured
107
+ * `requireApproval`. Accepts both bare names (`"uploadFile"`) and the
108
+ * MCP-prefixed form (`"mcp__files__uploadFile"`). Read tools and unknown
109
+ * names return `false`.
110
+ */
111
+ needsApproval: (toolName: string) => boolean;
112
+ /**
113
+ * The raw SDK MCP server instance — same value as
114
+ * `mcpServers[serverName]`. Exposed for callers that want to compose it
115
+ * into a larger `mcpServers` map.
116
+ */
117
+ server: McpSdkServerConfigWithInstance;
118
+ /**
119
+ * The MCP server name used in the `mcp__&lt;server>__*` prefix.
120
+ */
121
+ serverName: string;
122
+ }
123
+ /**
124
+ * Create storage tools shaped for the Claude Agent SDK
125
+ * (`@anthropic-ai/claude-agent-sdk`).
126
+ *
127
+ * The Claude Agent SDK consumes tools by way of an in-process MCP server +
128
+ * an `allowedTools` allow-list + a `canUseTool` approval callback. The
129
+ * returned bundle gives you all three, plus the raw server instance and a
130
+ * `needsApproval()` helper if you want to wire your own `canUseTool`.
131
+ * @example
132
+ * ```ts
133
+ * import { query } from "@anthropic-ai/claude-agent-sdk";
134
+ * import { Files } from "@visulima/storage";
135
+ * import { S3Storage } from "@visulima/storage/provider/aws";
136
+ * import { createClaudeFileTools } from "@visulima/storage/ai/claude";
137
+ *
138
+ * const files = new Files({ adapter: new S3Storage({ bucket: "uploads" }) });
139
+ * const tools = createClaudeFileTools({ files });
140
+ *
141
+ * for await (const message of query({
142
+ * prompt: "List my files.",
143
+ * options: {
144
+ * mcpServers: tools.mcpServers,
145
+ * allowedTools: tools.allowedTools,
146
+ * canUseTool: tools.canUseTool,
147
+ * },
148
+ * })) {
149
+ * // handle messages
150
+ * }
151
+ * ```
152
+ * @example Read-only agent
153
+ * ```ts
154
+ * createClaudeFileTools({ files, readOnly: true })
155
+ * ```
156
+ * @example Granular approval
157
+ * ```ts
158
+ * createClaudeFileTools({
159
+ * files,
160
+ * requireApproval: {
161
+ * copyFile: false,
162
+ * deleteFile: true,
163
+ * signUploadUrl: true,
164
+ * uploadFile: false,
165
+ * },
166
+ * })
167
+ * ```
168
+ */
169
+ declare const createClaudeFileTools: ({
170
+ files,
171
+ overrides,
172
+ readOnly,
173
+ requireApproval,
174
+ serverName,
175
+ serverVersion
176
+ }: ClaudeFileToolsOptions) => ClaudeFileTools;
177
+ export { type ApprovalConfig, ClaudeFileTools, ClaudeFileToolsOptions, type ClaudeToolOverrides, type ClaudeWriteToolOptions, type FileToolName, type ToolAnnotations, claudeCopyFile, claudeDeleteFile, claudeDownloadFile, claudeGetFileMetadata, claudeGetFileUrl, claudeListFiles, claudeSignUploadUrl, claudeUploadFile, createClaudeFileTools };
@@ -0,0 +1 @@
1
+ var _=Object.defineProperty;var u=(l,a)=>_(l,"name",{value:a,configurable:!0});import{createSdkMcpServer as b}from"@anthropic-ai/claude-agent-sdk";import{r as h}from"../../packem_shared/approval-BBeX3o4E.js";import{W as y}from"../../packem_shared/executors-DG6hGtvm.js";import{claudeUploadFile as O,claudeSignUploadUrl as S,claudeListFiles as w,claudeGetFileUrl as A,claudeGetFileMetadata as E,claudeDownloadFile as M,claudeDeleteFile as W,claudeCopyFile as $}from"../../packem_shared/claudeListFiles-DAezbKEi.js";var j=Object.defineProperty,o=u((l,a)=>j(l,"name",{value:a,configurable:!0}),"r");const C="files",D="1.0.0",v=o(l=>y.has(l),"isWriteTool"),I=o(({files:l,overrides:a,readOnly:m=!1,requireApproval:f=!0,serverName:s=C,serverVersion:F=D})=>{const t={copyFile:$(l),deleteFile:W(l),downloadFile:M(l),getFileMetadata:E(l),getFileUrl:A(l),listFiles:w(l),signUploadUrl:S(l),uploadFile:O(l)};if(a){for(const[e,r]of Object.entries(a))if(e in t&&r){const c=e;t[c]={...t[c],...r}}}const i=Object.entries(t).filter(([e])=>!(m&&v(e))),n=`mcp__${s}__`,T=o(e=>e.startsWith(n)?e.slice(n.length):e,"stripPrefix"),U=new Set(i.map(([e])=>e)),p=o(e=>{const r=T(e);return!U.has(r)||!v(r)?!1:h(r,f)},"needsApproval"),g=o((e,r)=>Promise.resolve(p(e)?{behavior:"deny",message:`Tool "${e}" requires approval.`}:{behavior:"allow",updatedInput:r}),"canUseTool"),d=b({name:s,tools:i.map(([,e])=>e),version:F});return{allowedTools:i.map(([e])=>`${n}${e}`),canUseTool:g,mcpServers:{[s]:d},needsApproval:p,server:d,serverName:s}},"createClaudeFileTools");export{$ as claudeCopyFile,W as claudeDeleteFile,M as claudeDownloadFile,E as claudeGetFileMetadata,A as claudeGetFileUrl,w as claudeListFiles,S as claudeSignUploadUrl,O as claudeUploadFile,I as createClaudeFileTools};
@@ -0,0 +1,205 @@
1
+ import { T as TOOL_SCHEMAS, F as FileToolName, A as ApprovalConfig, c as FileReadToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
2
+ export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
+ import { UnknownContext, FunctionTool } from '@openai/agents';
4
+ import { F as Files } from "../../packem_shared/index.d-DotjipuX.js";
5
+ import { e as executors } from "../../packem_shared/executors.d-UtkeCbk1.js";
6
+ import 'zod';
7
+ import "../../packem_shared/storage.d-Cr6f2lac.js";
8
+ import 'node:stream';
9
+ import 'node:crypto';
10
+ import 'node:http';
11
+ import 'lru-cache';
12
+ /**
13
+ * Per-tool overrides for `createResponsesFileTools`. `name`, `parameters`, and
14
+ * `type` are intentionally not overridable — the contract that drives tool
15
+ * behavior should not be patched at this layer.
16
+ */
17
+ interface ResponsesToolOverrides {
18
+ description?: string;
19
+ strict?: boolean;
20
+ }
21
+ /**
22
+ * Per-tool overrides for `createAgentsFileTools`. `name`, `parameters`,
23
+ * `execute`, and `strict` are intentionally not overridable — the contract
24
+ * that drives tool behavior should not be patched at this layer.
25
+ */
26
+ interface AgentsToolOverrides {
27
+ description?: string;
28
+ needsApproval?: boolean;
29
+ }
30
+ type ListFilesOutput = Awaited<ReturnType<typeof executors.listFiles>>;
31
+ type GetFileMetadataOutput = Awaited<ReturnType<typeof executors.getFileMetadata>>;
32
+ type DownloadFileOutput = Awaited<ReturnType<typeof executors.downloadFile>>;
33
+ type GetFileUrlOutput = Awaited<ReturnType<typeof executors.getFileUrl>>;
34
+ type UploadFileOutput = Awaited<ReturnType<typeof executors.uploadFile>>;
35
+ type DeleteFileOutput = Awaited<ReturnType<typeof executors.deleteFile>>;
36
+ type CopyFileOutput = Awaited<ReturnType<typeof executors.copyFile>>;
37
+ type SignUploadUrlOutput = Awaited<ReturnType<typeof executors.signUploadUrl>>;
38
+ type ListFilesParameters = typeof TOOL_SCHEMAS.listFiles.input;
39
+ type GetFileMetadataParameters = typeof TOOL_SCHEMAS.getFileMetadata.input;
40
+ type DownloadFileParameters = typeof TOOL_SCHEMAS.downloadFile.input;
41
+ type GetFileUrlParameters = typeof TOOL_SCHEMAS.getFileUrl.input;
42
+ type UploadFileParameters = typeof TOOL_SCHEMAS.uploadFile.input;
43
+ type DeleteFileParameters = typeof TOOL_SCHEMAS.deleteFile.input;
44
+ type CopyFileParameters = typeof TOOL_SCHEMAS.copyFile.input;
45
+ type SignUploadUrlParameters = typeof TOOL_SCHEMAS.signUploadUrl.input;
46
+ declare const agentsListFiles: (files: Files) => FunctionTool<UnknownContext, ListFilesParameters, ListFilesOutput>;
47
+ declare const agentsGetFileMetadata: (files: Files) => FunctionTool<UnknownContext, GetFileMetadataParameters, GetFileMetadataOutput>;
48
+ declare const agentsDownloadFile: (files: Files) => FunctionTool<UnknownContext, DownloadFileParameters, DownloadFileOutput>;
49
+ declare const agentsGetFileUrl: (files: Files) => FunctionTool<UnknownContext, GetFileUrlParameters, GetFileUrlOutput>;
50
+ declare const agentsUploadFile: (files: Files, {
51
+ needsApproval
52
+ }?: {
53
+ needsApproval?: boolean;
54
+ }) => FunctionTool<UnknownContext, UploadFileParameters, UploadFileOutput>;
55
+ declare const agentsDeleteFile: (files: Files, {
56
+ needsApproval
57
+ }?: {
58
+ needsApproval?: boolean;
59
+ }) => FunctionTool<UnknownContext, DeleteFileParameters, DeleteFileOutput>;
60
+ declare const agentsCopyFile: (files: Files, {
61
+ needsApproval
62
+ }?: {
63
+ needsApproval?: boolean;
64
+ }) => FunctionTool<UnknownContext, CopyFileParameters, CopyFileOutput>;
65
+ declare const agentsSignUploadUrl: (files: Files, {
66
+ needsApproval
67
+ }?: {
68
+ needsApproval?: boolean;
69
+ }) => FunctionTool<UnknownContext, SignUploadUrlParameters, SignUploadUrlOutput>;
70
+ interface AgentsFileTools {
71
+ copyFile: ReturnType<typeof agentsCopyFile>;
72
+ deleteFile: ReturnType<typeof agentsDeleteFile>;
73
+ downloadFile: ReturnType<typeof agentsDownloadFile>;
74
+ getFileMetadata: ReturnType<typeof agentsGetFileMetadata>;
75
+ getFileUrl: ReturnType<typeof agentsGetFileUrl>;
76
+ listFiles: ReturnType<typeof agentsListFiles>;
77
+ signUploadUrl: ReturnType<typeof agentsSignUploadUrl>;
78
+ uploadFile: ReturnType<typeof agentsUploadFile>;
79
+ }
80
+ type ReadOnlyAgentsFileTools = Pick<AgentsFileTools, FileReadToolName>;
81
+ interface AgentsFileToolsOptions {
82
+ files: Files;
83
+ overrides?: Partial<Record<FileToolName, AgentsToolOverrides>>;
84
+ readOnly?: boolean;
85
+ requireApproval?: ApprovalConfig;
86
+ }
87
+ /**
88
+ * Create a set of storage tools shaped for the OpenAI Agents SDK (`@openai/agents`).
89
+ *
90
+ * Returns a record keyed by tool name — spread `Object.values()` into
91
+ * `new Agent({ tools })`. Write tools require approval by default.
92
+ * @example
93
+ * ```ts
94
+ * import { Agent, run } from "@openai/agents";
95
+ * import { Files } from "@visulima/storage";
96
+ * import { S3Storage } from "@visulima/storage/provider/aws";
97
+ * import { createAgentsFileTools } from "@visulima/storage/ai/openai";
98
+ *
99
+ * const files = new Files({ adapter: new S3Storage({ bucket: "uploads" }) });
100
+ * const tools = createAgentsFileTools({ files });
101
+ *
102
+ * const agent = new Agent({
103
+ * instructions: "Help the user manage their files.",
104
+ * name: "Files agent",
105
+ * tools: Object.values(tools),
106
+ * });
107
+ *
108
+ * const result = await run(agent, "List my files.");
109
+ * ```
110
+ */
111
+ declare function createAgentsFileTools(options: AgentsFileToolsOptions & {
112
+ readOnly: true;
113
+ }): ReadOnlyAgentsFileTools;
114
+ declare function createAgentsFileTools(options: AgentsFileToolsOptions & {
115
+ readOnly?: false | undefined;
116
+ }): AgentsFileTools;
117
+ declare function createAgentsFileTools(options: AgentsFileToolsOptions): AgentsFileTools | ReadOnlyAgentsFileTools;
118
+ /**
119
+ * A function-tool definition shaped for OpenAI's Responses API. Pass an
120
+ * array of these to `openai.responses.create({ tools })`.
121
+ */
122
+ interface ResponsesFunctionTool {
123
+ description: string;
124
+ name: string;
125
+ parameters: Record<string, unknown>;
126
+ strict: boolean;
127
+ type: "function";
128
+ }
129
+ /**
130
+ * A function call emitted by the Responses API in `response.output[]`.
131
+ */
132
+ interface FunctionCallItem {
133
+ arguments: string;
134
+ call_id: string;
135
+ name: string;
136
+ type: "function_call";
137
+ }
138
+ /**
139
+ * A function-call output item to append to the next `responses.create`
140
+ * input alongside the original `function_call` item.
141
+ */
142
+ interface FunctionCallOutputItem {
143
+ call_id: string;
144
+ output: string;
145
+ type: "function_call_output";
146
+ }
147
+ interface ResponsesFileTools {
148
+ /**
149
+ * Function tool definitions. Pass directly to `openai.responses.create({ tools })`.
150
+ */
151
+ definitions: ResponsesFunctionTool[];
152
+ /**
153
+ * Execute a `function_call` item from the model's `response.output[]`.
154
+ * Returns a `function_call_output` item ready to push into the next turn's input.
155
+ *
156
+ * Approval is **not** enforced. Check {@link ResponsesFileTools.needsApproval}
157
+ * first if you want a human-in-the-loop gate.
158
+ */
159
+ execute: (call: FunctionCallItem) => Promise<FunctionCallOutputItem>;
160
+ /**
161
+ * Returns whether the named tool is approval-gated under this config.
162
+ * Read tools always return `false`. Unknown names return `false`.
163
+ */
164
+ needsApproval: (name: string) => boolean;
165
+ }
166
+ interface ResponsesFileToolsOptions {
167
+ files: Files;
168
+ overrides?: Partial<Record<FileToolName, ResponsesToolOverrides>>;
169
+ readOnly?: boolean;
170
+ requireApproval?: ApprovalConfig;
171
+ }
172
+ /**
173
+ * Create a set of storage tools shaped for OpenAI's Responses API (`openai.responses.create`).
174
+ * @example
175
+ * ```ts
176
+ * import OpenAI from "openai";
177
+ * import { Files } from "@visulima/storage";
178
+ * import { S3Storage } from "@visulima/storage/provider/aws";
179
+ * import { createResponsesFileTools } from "@visulima/storage/ai/openai";
180
+ *
181
+ * const client = new OpenAI();
182
+ * const files = new Files({ adapter: new S3Storage({ bucket: "uploads" }) });
183
+ * const ft = createResponsesFileTools({ files });
184
+ *
185
+ * const input: any[] = [{ role: "user", content: "List my files." }];
186
+ * while (true) {
187
+ * const res = await client.responses.create({ model: "gpt-4.1", input, tools: ft.definitions });
188
+ * const calls = res.output.filter((o) => o.type === "function_call");
189
+ * if (calls.length === 0) break;
190
+ * for (const call of calls) {
191
+ * if (ft.needsApproval(call.name)) {
192
+ * // surface approval UX, then continue or break
193
+ * }
194
+ * input.push(call, await ft.execute(call));
195
+ * }
196
+ * }
197
+ * ```
198
+ */
199
+ declare const createResponsesFileTools: ({
200
+ files,
201
+ overrides,
202
+ readOnly,
203
+ requireApproval
204
+ }: ResponsesFileToolsOptions) => ResponsesFileTools;
205
+ export { type AgentsFileTools, type AgentsFileToolsOptions, type AgentsToolOverrides, type ApprovalConfig, type FileReadToolName, type FileToolName, type FunctionCallItem, type FunctionCallOutputItem, type ReadOnlyAgentsFileTools, type ResponsesFileTools, type ResponsesFileToolsOptions, type ResponsesFunctionTool, type ResponsesToolOverrides, agentsCopyFile, agentsDeleteFile, agentsDownloadFile, agentsGetFileMetadata, agentsGetFileUrl, agentsListFiles, agentsSignUploadUrl, agentsUploadFile, createAgentsFileTools, createResponsesFileTools };
@@ -0,0 +1 @@
1
+ import{agentsCopyFile as l,agentsDeleteFile as a,agentsDownloadFile as s,agentsGetFileMetadata as o,agentsGetFileUrl as n,agentsListFiles as i,agentsSignUploadUrl as g,agentsUploadFile as F,createAgentsFileTools as r}from"../../packem_shared/agentsListFiles-R-CnGKc4.js";import{createResponsesFileTools as d}from"../../packem_shared/createResponsesFileTools-BCep-qdO.js";export{l as agentsCopyFile,a as agentsDeleteFile,s as agentsDownloadFile,o as agentsGetFileMetadata,n as agentsGetFileUrl,i as agentsListFiles,g as agentsSignUploadUrl,F as agentsUploadFile,r as createAgentsFileTools,d as createResponsesFileTools};
@@ -0,0 +1,115 @@
1
+ import { F as Files } from "../../packem_shared/index.d-DotjipuX.js";
2
+ import { T as TOOL_SCHEMAS, c as FileReadToolName, F as FileToolName, A as ApprovalConfig } from "../../packem_shared/approval.d-CMAYH9GF.js";
3
+ export { type d as FileWriteToolName } from "../../packem_shared/approval.d-CMAYH9GF.js";
4
+ import { ServerTool } from '@tanstack/ai';
5
+ import "../../packem_shared/storage.d-Cr6f2lac.js";
6
+ import 'node:stream';
7
+ import 'node:crypto';
8
+ import 'node:http';
9
+ import 'lru-cache';
10
+ import 'zod';
11
+ /**
12
+ * Common options accepted by every write-tool factory.
13
+ */
14
+ interface ToolOptions {
15
+ needsApproval?: boolean;
16
+ }
17
+ /**
18
+ * Per-tool overrides for customizing TanStack AI `ServerTool` properties
19
+ * without changing the underlying implementation. Core properties
20
+ * (`execute`, `inputSchema`, `outputSchema`, `__toolSide`) are intentionally
21
+ * excluded — those drive the tool's behavior and contract.
22
+ */
23
+ type ToolOverrides = Partial<Pick<ServerTool, "description" | "lazy" | "metadata" | "needsApproval">>;
24
+ type ListFilesParameters = typeof TOOL_SCHEMAS.listFiles.input;
25
+ type GetFileMetadataParameters = typeof TOOL_SCHEMAS.getFileMetadata.input;
26
+ type DownloadFileParameters = typeof TOOL_SCHEMAS.downloadFile.input;
27
+ type GetFileUrlParameters = typeof TOOL_SCHEMAS.getFileUrl.input;
28
+ type UploadFileParameters = typeof TOOL_SCHEMAS.uploadFile.input;
29
+ type DeleteFileParameters = typeof TOOL_SCHEMAS.deleteFile.input;
30
+ type CopyFileParameters = typeof TOOL_SCHEMAS.copyFile.input;
31
+ type SignUploadUrlParameters = typeof TOOL_SCHEMAS.signUploadUrl.input;
32
+ declare const listFiles: (files: Files) => ServerTool<ListFilesParameters, never, "listFiles">;
33
+ declare const getFileMetadata: (files: Files) => ServerTool<GetFileMetadataParameters, never, "getFileMetadata">;
34
+ declare const downloadFile: (files: Files) => ServerTool<DownloadFileParameters, never, "downloadFile">;
35
+ declare const getFileUrl: (files: Files) => ServerTool<GetFileUrlParameters, never, "getFileUrl">;
36
+ declare const uploadFile: (files: Files, {
37
+ needsApproval
38
+ }?: ToolOptions) => ServerTool<UploadFileParameters, never, "uploadFile">;
39
+ declare const deleteFile: (files: Files, {
40
+ needsApproval
41
+ }?: ToolOptions) => ServerTool<DeleteFileParameters, never, "deleteFile">;
42
+ declare const copyFile: (files: Files, {
43
+ needsApproval
44
+ }?: ToolOptions) => ServerTool<CopyFileParameters, never, "copyFile">;
45
+ declare const signUploadUrl: (files: Files, {
46
+ needsApproval
47
+ }?: ToolOptions) => ServerTool<SignUploadUrlParameters, never, "signUploadUrl">;
48
+ interface TanstackFileToolsOptions {
49
+ /**
50
+ * The configured `Files` instance the tools will operate against.
51
+ * Each tool delegates to the methods on this instance.
52
+ */
53
+ files: Files;
54
+ /**
55
+ * Per-tool overrides for customizing tool behavior (description,
56
+ * needsApproval, metadata) without changing the underlying implementation.
57
+ * `execute` and `inputSchema` cannot be overridden.
58
+ */
59
+ overrides?: Partial<Record<FileToolName, ToolOverrides>>;
60
+ /**
61
+ * When `true`, write tools (`uploadFile`, `deleteFile`, `copyFile`,
62
+ * `signUploadUrl`) are omitted entirely. The model cannot mutate the
63
+ * bucket regardless of approval configuration.
64
+ */
65
+ readOnly?: boolean;
66
+ /**
67
+ * Approval gating for write tools. Defaults to `true` (all writes
68
+ * require approval). See {@link ApprovalConfig}.
69
+ */
70
+ requireApproval?: ApprovalConfig;
71
+ }
72
+ interface TanstackFileTools {
73
+ copyFile: ReturnType<typeof copyFile>;
74
+ deleteFile: ReturnType<typeof deleteFile>;
75
+ downloadFile: ReturnType<typeof downloadFile>;
76
+ getFileMetadata: ReturnType<typeof getFileMetadata>;
77
+ getFileUrl: ReturnType<typeof getFileUrl>;
78
+ listFiles: ReturnType<typeof listFiles>;
79
+ signUploadUrl: ReturnType<typeof signUploadUrl>;
80
+ uploadFile: ReturnType<typeof uploadFile>;
81
+ }
82
+ type ReadOnlyTanstackFileTools = Pick<TanstackFileTools, FileReadToolName>;
83
+ /**
84
+ * Create a set of visulima/storage tools for TanStack AI.
85
+ *
86
+ * Each entry is a `ServerTool` built via `toolDefinition(...).server(...)`,
87
+ * ready to be passed to `chat({ tools: [...] })` or registered with a
88
+ * `ToolRegistry`. Write operations require user approval by default;
89
+ * control globally or per-tool via `requireApproval`, or strip writes
90
+ * entirely with `readOnly: true`.
91
+ * @example
92
+ * ```ts
93
+ * import { Files } from "@visulima/storage";
94
+ * import { S3Storage } from "@visulima/storage/provider/aws";
95
+ * import { createTanstackFileTools } from "@visulima/storage/ai/tanstack";
96
+ * import { chat } from "@tanstack/ai";
97
+ *
98
+ * const files = new Files({ adapter: new S3Storage({ bucket: "uploads" }) });
99
+ * const tools = createTanstackFileTools({ files });
100
+ *
101
+ * const stream = chat({
102
+ * adapter,
103
+ * messages,
104
+ * tools: Object.values(tools),
105
+ * });
106
+ * ```
107
+ */
108
+ declare function createTanstackFileTools(options: TanstackFileToolsOptions & {
109
+ readOnly: true;
110
+ }): ReadOnlyTanstackFileTools;
111
+ declare function createTanstackFileTools(options: TanstackFileToolsOptions & {
112
+ readOnly?: false | undefined;
113
+ }): TanstackFileTools;
114
+ declare function createTanstackFileTools(options: TanstackFileToolsOptions): ReadOnlyTanstackFileTools | TanstackFileTools;
115
+ export { type ApprovalConfig, type FileReadToolName, type FileToolName, ReadOnlyTanstackFileTools, TanstackFileTools, TanstackFileToolsOptions, type ToolOptions, type ToolOverrides, copyFile, createTanstackFileTools, deleteFile, downloadFile, getFileMetadata, getFileUrl, listFiles, signUploadUrl, uploadFile };
@@ -0,0 +1 @@
1
+ var d=Object.defineProperty;var a=(e,l)=>d(e,"name",{value:l,configurable:!0});import{r as c}from"../../packem_shared/approval-BBeX3o4E.js";import{W as f}from"../../packem_shared/executors-DG6hGtvm.js";import{uploadFile as u,signUploadUrl as g,listFiles as v,getFileUrl as m,getFileMetadata as O,downloadFile as U,deleteFile as T,copyFile as b}from"../../packem_shared/listFiles-B6VF05d-.js";var j=Object.defineProperty,n=a((e,l)=>j(e,"name",{value:l,configurable:!0}),"i");function y({files:e,overrides:l,readOnly:p=!1,requireApproval:F=!0}){const o=n(i=>({needsApproval:c(i,F)}),"approval"),r={copyFile:b(e,o("copyFile")),deleteFile:T(e,o("deleteFile")),downloadFile:U(e),getFileMetadata:O(e),getFileUrl:m(e),listFiles:v(e),signUploadUrl:g(e,o("signUploadUrl")),uploadFile:u(e,o("uploadFile"))};if(l){for(const[i,t]of Object.entries(l))if(i in r&&t){const s=i;Object.assign(r,{[s]:{...r[s],...t}})}}return p?Object.fromEntries(Object.entries(r).filter(([i])=>!f.has(i))):r}a(y,"createTanstackFileTools");n(y,"createTanstackFileTools");export{b as copyFile,y as createTanstackFileTools,T as deleteFile,U as downloadFile,O as getFileMetadata,m as getFileUrl,v as listFiles,g as signUploadUrl,u as uploadFile};
@@ -1,16 +1,16 @@
1
- import { U as UploadFile, l as UploadResponse } from "../../../packem_shared/storage.d-sc8gn16g.js";
1
+ import { U as UploadFile, K as UploadResponse } from "../../../packem_shared/storage.d-Cr6f2lac.js";
2
2
  import 'node:stream';
3
- import { H as Handlers, R as ResponseFile, a as ResponseList, U as UploadOptions } from "../../../packem_shared/types.d-Cor8FV54.js";
4
- export { type A as AsyncHandler, type B as BaseHandler, type M as MethodHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-Cor8FV54.js";
5
- import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-BX3mSWL6.js";
6
- export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-BX3mSWL6.js";
3
+ import { H as Handlers, R as ResponseFile, a as ResponseList, U as UploadOptions } from "../../../packem_shared/types.d-BgCmSE94.js";
4
+ export { type A as AsyncHandler, type B as BaseHandler, type M as MethodHandler, type b as RequestEvent, type c as UploadErrorEvent, type d as UploadEvent } from "../../../packem_shared/types.d-BgCmSE94.js";
5
+ import { B as BaseHandlerCore } from "../../../packem_shared/tus-base.d-4-ZfDQwl.js";
6
+ export { T as TUS_RESUMABLE, a as TUS_VERSION } from "../../../packem_shared/tus-base.d-4-ZfDQwl.js";
7
7
  import 'node:crypto';
8
8
  import 'node:http';
9
9
  import 'lru-cache';
10
10
  import 'node:events';
11
11
  import '@visulima/pagination';
12
- import "../../../packem_shared/media-transformer.d-BXjTN5Qv.js";
13
- import "../../../packem_shared/types.d-b0WcdT0x.js";
12
+ import "../../../packem_shared/media-transformer.d-DK7NJncf.js";
13
+ import "../../../packem_shared/types.d-C8eSxqX9.js";
14
14
  /**
15
15
  * Base handler for Web API Fetch platform (Request/Response).
16
16
  * Extends BaseHandlerCore with Fetch-specific request/response handling.
@@ -248,6 +248,12 @@ declare class Tus<TFile extends UploadFile> extends BaseHandlerFetch<TFile> {
248
248
  private readonly tusBase;
249
249
  constructor(options: UploadOptions<TFile>);
250
250
  /**
251
+ * Web API fetch entrypoint. Wraps the base implementation to ensure every TUS
252
+ * response — success and error alike — carries the `Tus-Resumable` header,
253
+ * which the protocol requires on all responses.
254
+ */
255
+ override fetch(request: Request): Promise<globalThis.Response>;
256
+ /**
251
257
  * Handle OPTIONS requests with TUS protocol capabilities.
252
258
  * @returns Promise resolving to ResponseFile with TUS headers
253
259
  */