@5ss/ai-tools 2.11.3 → 3.0.0

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 (147) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +4 -11
  3. package/dist/{bedrock-agentcore-browser-a_qOs-NR.js → bedrock-agentcore-browser-o_oqSPMK.js} +2 -2
  4. package/dist/{bedrock-agentcore-browser-a_qOs-NR.js.map → bedrock-agentcore-browser-o_oqSPMK.js.map} +1 -1
  5. package/dist/{bedrock-agentcore-code-interpreter-MWK-8RhA.js → bedrock-agentcore-code-interpreter-D4ERRFj1.js} +2 -2
  6. package/dist/{bedrock-agentcore-code-interpreter-MWK-8RhA.js.map → bedrock-agentcore-code-interpreter-D4ERRFj1.js.map} +1 -1
  7. package/dist/{cloudflare-browser-B6Yolpin.js → cloudflare-browser-nLJdH5nG.js} +3 -3
  8. package/dist/{cloudflare-browser-B6Yolpin.js.map → cloudflare-browser-nLJdH5nG.js.map} +1 -1
  9. package/dist/{cloudflare-email-Dy0KHeDf.js → cloudflare-email-CSRq8mRd.js} +2 -2
  10. package/dist/{cloudflare-email-Dy0KHeDf.js.map → cloudflare-email-CSRq8mRd.js.map} +1 -1
  11. package/dist/{cloudflare-sandbox-Dp_uNaqW.js → cloudflare-sandbox-Be7SeS4-.js} +3 -3
  12. package/dist/{cloudflare-sandbox-Dp_uNaqW.js.map → cloudflare-sandbox-Be7SeS4-.js.map} +1 -1
  13. package/dist/content-type-E4_Qdoa0.js +19 -0
  14. package/dist/{content-type-CORxaxcv.js.map → content-type-E4_Qdoa0.js.map} +1 -1
  15. package/dist/core/index.js +2 -6
  16. package/dist/core/index.js.map +1 -1
  17. package/dist/{define-CvpJ_pNP.js → define-ieoksEQ0.js} +1 -6
  18. package/dist/define-ieoksEQ0.js.map +1 -0
  19. package/dist/{eventbridge-scheduler-Bh6GqZY2.js → eventbridge-scheduler-BhQaReAz.js} +2 -2
  20. package/dist/{eventbridge-scheduler-Bh6GqZY2.js.map → eventbridge-scheduler-BhQaReAz.js.map} +1 -1
  21. package/dist/imessage-CH49-sFn.js +558 -0
  22. package/dist/imessage-CH49-sFn.js.map +1 -0
  23. package/dist/index-CZX5OeOF.d.ts.map +1 -1
  24. package/dist/{mastra-vector-Dhc6XZ8l.js → mastra-vector-B8HjvdMT.js} +2 -2
  25. package/dist/{mastra-vector-Dhc6XZ8l.js.map → mastra-vector-B8HjvdMT.js.map} +1 -1
  26. package/dist/modules/artifacts/index.js +3 -3
  27. package/dist/modules/browser/index.js +3 -3
  28. package/dist/modules/calendar/index.js +1 -1
  29. package/dist/modules/code-sandbox/index.js +3 -3
  30. package/dist/modules/content-type/index.js +2 -2
  31. package/dist/modules/crypto/index.js +1 -1
  32. package/dist/modules/document-extract/index.js +2 -2
  33. package/dist/modules/document-render/index.d.ts +21 -30
  34. package/dist/modules/document-render/index.d.ts.map +1 -1
  35. package/dist/modules/document-render/index.js +11 -28
  36. package/dist/modules/document-render/index.js.map +1 -1
  37. package/dist/modules/email/index.d.ts +19 -1
  38. package/dist/modules/email/index.d.ts.map +1 -1
  39. package/dist/modules/email/index.js +3 -3
  40. package/dist/modules/email-message/index.js +1 -1
  41. package/dist/modules/files/index.js +2 -2
  42. package/dist/modules/image/index.d.ts +4 -1
  43. package/dist/modules/image/index.d.ts.map +1 -1
  44. package/dist/modules/image/index.js +25 -4
  45. package/dist/modules/image/index.js.map +1 -1
  46. package/dist/modules/messaging/index.d.ts +12 -24
  47. package/dist/modules/messaging/index.d.ts.map +1 -1
  48. package/dist/modules/messaging/index.js +28 -43
  49. package/dist/modules/messaging/index.js.map +1 -1
  50. package/dist/modules/queue/index.js +2 -2
  51. package/dist/modules/rag/index.js +2 -2
  52. package/dist/modules/scheduler/index.js +2 -2
  53. package/dist/modules/skills/index.js +1 -1
  54. package/dist/modules/tasks/index.js +1 -1
  55. package/dist/modules/vector-store/index.js +1 -1
  56. package/dist/modules/web-fetch/index.js +1 -1
  57. package/dist/{pinecone-umY4t6OF.js → pinecone-CNnCFmix.js} +2 -2
  58. package/dist/{pinecone-umY4t6OF.js.map → pinecone-CNnCFmix.js.map} +1 -1
  59. package/dist/{qdrant-DMp4NhKR.js → qdrant-R_FIcG9d.js} +2 -2
  60. package/dist/{qdrant-DMp4NhKR.js.map → qdrant-R_FIcG9d.js.map} +1 -1
  61. package/dist/{resend-BAC38_dA.js → resend-Bu0NFO3h.js} +2 -2
  62. package/dist/{resend-BAC38_dA.js.map → resend-Bu0NFO3h.js.map} +1 -1
  63. package/dist/{s3-CsOaPWMP.js → s3-Dj7Teh-A.js} +2 -2
  64. package/dist/{s3-CsOaPWMP.js.map → s3-Dj7Teh-A.js.map} +1 -1
  65. package/dist/{slack-Di5BBNpt.js → slack-AjJDNnXJ.js} +2 -2
  66. package/dist/{slack-Di5BBNpt.js.map → slack-AjJDNnXJ.js.map} +1 -1
  67. package/dist/{sqs-DCwS1i2N.js → sqs-CjyXjasF.js} +2 -2
  68. package/dist/{sqs-DCwS1i2N.js.map → sqs-CjyXjasF.js.map} +1 -1
  69. package/dist/{supabase-vector-Dpp9mmJR.js → supabase-vector-BNoJZuft.js} +2 -2
  70. package/dist/{supabase-vector-Dpp9mmJR.js.map → supabase-vector-BNoJZuft.js.map} +1 -1
  71. package/dist/{teams-DYAHNb39.js → teams-CvxYLAi5.js} +2 -2
  72. package/dist/{teams-DYAHNb39.js.map → teams-CvxYLAi5.js.map} +1 -1
  73. package/dist/{telegram-DDXWzkfL.js → telegram-B_-Jljk3.js} +2 -2
  74. package/dist/{telegram-DDXWzkfL.js.map → telegram-B_-Jljk3.js.map} +1 -1
  75. package/dist/{textract-CPLiB22H.js → textract-CAfnGvua.js} +3 -3
  76. package/dist/{textract-CPLiB22H.js.map → textract-CAfnGvua.js.map} +1 -1
  77. package/dist/{vector-store-C3nEO80e.js → vector-store-DDiu3XPg.js} +6 -6
  78. package/dist/{vector-store-C3nEO80e.js.map → vector-store-DDiu3XPg.js.map} +1 -1
  79. package/dist/vendors/amazon-sp-api/index.js +339 -2
  80. package/dist/vendors/amazon-sp-api/index.js.map +1 -1
  81. package/dist/vendors/bedrock-agentcore-browser/index.js +1 -1
  82. package/dist/vendors/bedrock-agentcore-code-interpreter/index.js +1 -1
  83. package/dist/vendors/cloudflare-browser/index.js +1 -1
  84. package/dist/vendors/cloudflare-email/index.js +1 -1
  85. package/dist/vendors/cloudflare-sandbox/index.js +1 -1
  86. package/dist/vendors/eventbridge-scheduler/index.js +1 -1
  87. package/dist/vendors/imessage/index.d.ts +65 -188
  88. package/dist/vendors/imessage/index.d.ts.map +1 -1
  89. package/dist/vendors/imessage/index.js +2 -3
  90. package/dist/vendors/katana/index.js +1 -1
  91. package/dist/vendors/mastra-vector/index.js +1 -1
  92. package/dist/vendors/pinecone/index.js +1 -1
  93. package/dist/vendors/qdrant/index.js +1 -1
  94. package/dist/vendors/resend/index.js +1 -1
  95. package/dist/vendors/s3/index.js +1 -1
  96. package/dist/vendors/slack/index.js +1 -1
  97. package/dist/vendors/sqs/index.js +1 -1
  98. package/dist/vendors/supabase-vector/index.js +1 -1
  99. package/dist/vendors/teams/index.js +1 -1
  100. package/dist/vendors/telegram/index.js +1 -1
  101. package/dist/vendors/textract/index.js +1 -1
  102. package/dist/vendors/woocommerce/index.js +1 -1
  103. package/logos/README.md +0 -4
  104. package/logos/pack-logos.json +0 -5
  105. package/package.json +4 -55
  106. package/dist/artifacts-O8g-40Pw.js +0 -404
  107. package/dist/artifacts-O8g-40Pw.js.map +0 -1
  108. package/dist/batch-BMM5dXqL.d.ts +0 -22
  109. package/dist/batch-BMM5dXqL.d.ts.map +0 -1
  110. package/dist/client-CCKGsTeI.js +0 -743
  111. package/dist/client-CCKGsTeI.js.map +0 -1
  112. package/dist/content-type-CORxaxcv.js +0 -49
  113. package/dist/define-CvpJ_pNP.js.map +0 -1
  114. package/dist/esm-BDrCssjb.js +0 -957
  115. package/dist/esm-BDrCssjb.js.map +0 -1
  116. package/dist/gotenberg-NuJjxyln.js +0 -291
  117. package/dist/gotenberg-NuJjxyln.js.map +0 -1
  118. package/dist/imessage-BSAFOI8Z.js +0 -154
  119. package/dist/imessage-BSAFOI8Z.js.map +0 -1
  120. package/dist/modules/document/index.d.ts +0 -575
  121. package/dist/modules/document/index.d.ts.map +0 -1
  122. package/dist/modules/document/index.js +0 -444
  123. package/dist/modules/document/index.js.map +0 -1
  124. package/dist/modules/file-convert/index.d.ts +0 -273
  125. package/dist/modules/file-convert/index.d.ts.map +0 -1
  126. package/dist/modules/file-convert/index.js +0 -103
  127. package/dist/modules/file-convert/index.js.map +0 -1
  128. package/dist/modules/pdf/index.d.ts +0 -287
  129. package/dist/modules/pdf/index.d.ts.map +0 -1
  130. package/dist/modules/pdf/index.js +0 -259
  131. package/dist/modules/pdf/index.js.map +0 -1
  132. package/dist/modules/presentation/index.d.ts +0 -247
  133. package/dist/modules/presentation/index.d.ts.map +0 -1
  134. package/dist/modules/presentation/index.js +0 -11721
  135. package/dist/modules/presentation/index.js.map +0 -1
  136. package/dist/object-artifact-store-BVLietAc.d.ts +0 -7
  137. package/dist/object-artifact-store-BVLietAc.d.ts.map +0 -1
  138. package/dist/object-artifact-store-wZ2j9cto.js +0 -28
  139. package/dist/object-artifact-store-wZ2j9cto.js.map +0 -1
  140. package/dist/vendors/gotenberg/index.d.ts +0 -306
  141. package/dist/vendors/gotenberg/index.d.ts.map +0 -1
  142. package/dist/vendors/gotenberg/index.js +0 -2
  143. package/logos/document.svg +0 -10
  144. package/logos/file-convert.svg +0 -9
  145. package/logos/gotenberg.svg +0 -340
  146. package/logos/pdf.svg +0 -10
  147. package/logos/presentation.svg +0 -8
@@ -1,12 +1,33 @@
1
1
  import { t as ToolError } from "../../errors-DoSpNHvs.js";
2
- import { n as defineModule, r as defineTool } from "../../define-CvpJ_pNP.js";
2
+ import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
3
3
  import { n as requireAuth } from "../../provider-CgDAlg6K.js";
4
4
  import { t as artifactRefSchema } from "../../artifact-D064mHfK.js";
5
- import { m as s3AuthSchema } from "../../s3-CsOaPWMP.js";
6
- import { n as extensionFromMediaType, r as mediaTypeFromPath } from "../../content-type-CORxaxcv.js";
7
- import { t as ObjectArtifactStore } from "../../object-artifact-store-wZ2j9cto.js";
5
+ import { m as s3AuthSchema, p as S3Client } from "../../s3-Dj7Teh-A.js";
6
+ import { n as extensionFromMediaType, r as mediaTypeFromPath } from "../../content-type-E4_Qdoa0.js";
8
7
  import { z } from "zod";
9
8
  import sharp from "sharp";
9
+ //#region src/shared/object-artifact-store.ts
10
+ var ObjectArtifactStore = class {
11
+ #storage;
12
+ constructor(auth, options = {}) {
13
+ this.#storage = new S3Client(auth, options);
14
+ }
15
+ async read(source, maxBytes) {
16
+ if (source.store !== "object") throw new ToolError("This operation requires an object-store artifact", { code: "bad_input" });
17
+ return this.#storage.getBytes(source.key, { maxBytes });
18
+ }
19
+ async write(key, bytes, mediaType, filename) {
20
+ await this.#storage.putBytes(key, bytes, mediaType);
21
+ return artifactRefSchema.parse({
22
+ store: "object",
23
+ key,
24
+ media_type: mediaType,
25
+ filename,
26
+ byte_length: bytes.byteLength
27
+ });
28
+ }
29
+ };
30
+ //#endregion
10
31
  //#region src/modules/image/contracts.ts
11
32
  const MAX_IMAGE_BYTES = 50 * 1024 * 1024;
12
33
  const MAX_IMAGE_DIMENSION = 16384;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["#artifacts","#read","#write"],"sources":["../../../src/modules/image/contracts.ts","../../../src/modules/image/client.ts","../../../src/modules/image/module.ts"],"sourcesContent":["import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_IMAGE_BYTES = 50 * 1024 * 1024\nexport const MAX_IMAGE_DIMENSION = 16_384\n\nexport const imageAuthSchema = z.object({\n\tstorage: s3AuthSchema.describe('Object storage for source and output image artifacts')\n})\n\nconst source = artifactRefSchema.describe('Source image artifact')\nconst outputKey = z.string().min(1).max(1_024).describe('Destination object key')\nconst filename = z.string().min(1).max(512).optional().describe('Display filename for the output image')\nconst dimension = z.int().min(1).max(MAX_IMAGE_DIMENSION)\nconst quality = z.int().min(1).max(100).optional().describe('Encoder quality from 1 to 100')\n\nexport const imageMetadataInputSchema = z.object({ source })\n\nexport const imageMetadataSchema = z.object({\n\tformat: z.string(),\n\tmedia_type: z.string().optional(),\n\twidth: z.int().positive(),\n\theight: z.int().positive(),\n\tspace: z.string(),\n\tchannels: z.int().positive(),\n\tdensity: z.number().positive().optional(),\n\thas_alpha: z.boolean(),\n\tpages: z.int().positive().optional()\n})\n\nexport const imageTransformOutputSchema = z.object({\n\tresult: artifactRefSchema.describe('Written image artifact'),\n\timage: imageMetadataSchema\n})\n\nexport const imageResizeInputSchema = z\n\t.object({\n\t\tsource,\n\t\twidth: dimension.optional().describe('Target width in pixels'),\n\t\theight: dimension.optional().describe('Target height in pixels'),\n\t\tfit: z\n\t\t\t.enum(['cover', 'contain', 'fill', 'inside', 'outside'])\n\t\t\t.optional()\n\t\t\t.describe('How the image fits the target box'),\n\t\twithout_enlargement: z.boolean().optional().describe('Prevent enlarging smaller images'),\n\t\toutput_key: outputKey,\n\t\tfilename\n\t})\n\t.refine((input) => input.width !== undefined || input.height !== undefined, {\n\t\tmessage: 'width or height is required',\n\t\tpath: ['width']\n\t})\n\nexport const imageCropInputSchema = z.object({\n\tsource,\n\tleft: z.int().min(0).describe('Left edge in pixels'),\n\ttop: z.int().min(0).describe('Top edge in pixels'),\n\twidth: dimension.describe('Crop width in pixels'),\n\theight: dimension.describe('Crop height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageThumbnailInputSchema = z.object({\n\tsource,\n\twidth: dimension.describe('Maximum thumbnail width in pixels'),\n\theight: dimension.describe('Maximum thumbnail height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageFormatSchema = z.enum(['jpeg', 'png', 'webp', 'avif', 'tiff', 'gif'])\n\nexport const imageConvertInputSchema = z.object({\n\tsource,\n\tformat: imageFormatSchema.describe('Destination image format'),\n\tquality,\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport type ImageAuth = z.infer<typeof imageAuthSchema>\nexport type ImageMetadataInput = z.infer<typeof imageMetadataInputSchema>\nexport type ImageMetadata = z.infer<typeof imageMetadataSchema>\nexport type ImageResizeInput = z.infer<typeof imageResizeInputSchema>\nexport type ImageCropInput = z.infer<typeof imageCropInputSchema>\nexport type ImageThumbnailInput = z.infer<typeof imageThumbnailInputSchema>\nexport type ImageConvertInput = z.infer<typeof imageConvertInputSchema>\nexport type ImageTransformOutput = z.infer<typeof imageTransformOutputSchema>\n","import sharp from 'sharp'\nimport type { Sharp } from 'sharp'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { extensionFromMediaType, mediaTypeFromPath } from '../../shared/content-type'\nimport { ObjectArtifactStore } from '../../shared/object-artifact-store'\nimport type { ObjectArtifactStoreOptions } from '../../shared/object-artifact-store'\nimport type {\n\tImageAuth,\n\tImageConvertInput,\n\tImageCropInput,\n\tImageMetadata,\n\tImageMetadataInput,\n\tImageResizeInput,\n\tImageThumbnailInput,\n\tImageTransformOutput\n} from './contracts'\nimport { MAX_IMAGE_BYTES, imageAuthSchema, imageMetadataSchema, imageTransformOutputSchema } from './contracts'\n\nexport type ImageClientOptions = ObjectArtifactStoreOptions\n\nfunction mediaTypeFor(extension: string): string {\n\treturn mediaTypeFromPath(`image.${extension}`) ?? 'application/octet-stream'\n}\n\nfunction mapMetadata(metadata: Awaited<ReturnType<Sharp['metadata']>>): ImageMetadata {\n\treturn imageMetadataSchema.parse({\n\t\tformat: metadata.format,\n\t\tmedia_type: metadata.mediaType,\n\t\twidth: metadata.width,\n\t\theight: metadata.height,\n\t\tspace: metadata.space,\n\t\tchannels: metadata.channels,\n\t\tdensity: metadata.density,\n\t\thas_alpha: metadata.hasAlpha,\n\t\tpages: metadata.pages\n\t})\n}\n\nexport class ImageClient {\n\treadonly #artifacts: ObjectArtifactStore\n\n\tconstructor(auth: ImageAuth, options: ImageClientOptions = {}) {\n\t\tconst parsed = imageAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid image 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.#artifacts = new ObjectArtifactStore(parsed.data.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ImageClient {\n\t\treturn new ImageClient(requireAuth(ctx, imageAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tstatic fromAuth(auth: ImageAuth, options: ImageClientOptions = {}): ImageClient {\n\t\treturn new ImageClient(auth, options)\n\t}\n\n\tasync metadata(input: ImageMetadataInput): Promise<ImageMetadata> {\n\t\ttry {\n\t\t\treturn mapMetadata(await sharp(await this.#read(input.source)).metadata())\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to inspect image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n\n\tasync resize(input: ImageResizeInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize({\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height,\n\t\t\t\tfit: input.fit,\n\t\t\t\twithoutEnlargement: input.without_enlargement\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync crop(input: ImageCropInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.extract({\n\t\t\t\tleft: input.left,\n\t\t\t\ttop: input.top,\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync thumbnail(input: ImageThumbnailInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize(input.width, input.height, { fit: 'inside', withoutEnlargement: true })\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync convert(input: ImageConvertInput): Promise<ImageTransformOutput> {\n\t\tlet pipeline = sharp(await this.#read(input.source)).autoOrient()\n\t\tswitch (input.format) {\n\t\t\tcase 'jpeg':\n\t\t\t\tpipeline = pipeline.jpeg({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'png':\n\t\t\t\tpipeline = pipeline.png({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'webp':\n\t\t\t\tpipeline = pipeline.webp({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'avif':\n\t\t\t\tpipeline = pipeline.avif({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'tiff':\n\t\t\t\tpipeline = pipeline.tiff({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'gif':\n\t\t\t\tpipeline = pipeline.gif({ effort: input.quality ? Math.max(1, Math.round(input.quality / 10)) : undefined })\n\t\t}\n\t\treturn this.#write(pipeline, input.output_key, input.filename, input.format)\n\t}\n\n\tasync #read(source: ImageMetadataInput['source']): Promise<Uint8Array> {\n\t\treturn this.#artifacts.read(source, MAX_IMAGE_BYTES)\n\t}\n\n\tasync #write(\n\t\tpipeline: Sharp,\n\t\tkey: string,\n\t\tfilename?: string,\n\t\trequestedExtension?: string\n\t): Promise<ImageTransformOutput> {\n\t\ttry {\n\t\t\tconst { data, info } = await pipeline.toBuffer({ resolveWithObject: true })\n\t\t\tconst extension = requestedExtension ?? info.format\n\t\t\tconst mediaType = mediaTypeFor(extension)\n\t\t\tconst displayName = filename ?? `image.${extensionFromMediaType(mediaType) ?? extension}`\n\t\t\tconst result = await this.#artifacts.write(key, data, mediaType, displayName)\n\t\t\tconst image = mapMetadata(await sharp(data).metadata())\n\t\t\treturn imageTransformOutputSchema.parse({ result, image })\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to transform image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ImageClient } from './client'\nimport {\n\timageAuthSchema,\n\timageConvertInputSchema,\n\timageCropInputSchema,\n\timageMetadataInputSchema,\n\timageMetadataSchema,\n\timageResizeInputSchema,\n\timageThumbnailInputSchema,\n\timageTransformOutputSchema\n} from './contracts'\n\nexport const imageMetadataTool = defineTool({\n\tid: 'image-metadata',\n\tname: 'inspectImage',\n\tdescription:\n\t\t'Inspect an image artifact and return decoded format, dimensions, color space, channels, and page metadata.',\n\tinputSchema: imageMetadataInputSchema,\n\toutputSchema: imageMetadataSchema,\n\tsideEffect: 'read',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).metadata(input)\n})\n\nexport const imageResizeTool = defineTool({\n\tid: 'image-resize',\n\tname: 'resizeImage',\n\tdescription:\n\t\t'Resize an existing image ArtifactRef to a target width, height, or bounding box while preserving its format. Returns a final image ArtifactRef; use for exact resize requirements rather than general code or document tools.',\n\tinputSchema: imageResizeInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).resize(input)\n})\n\nexport const imageCropTool = defineTool({\n\tid: 'image-crop',\n\tname: 'cropImage',\n\tdescription:\n\t\t'Crop a rectangular pixel region from an existing image ArtifactRef and return a new image ArtifactRef. Use when the crop coordinates are known.',\n\tinputSchema: imageCropInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).crop(input)\n})\n\nexport const imageThumbnailTool = defineTool({\n\tid: 'image-thumbnail',\n\tname: 'createImageThumbnail',\n\tdescription:\n\t\t'Create a thumbnail ArtifactRef that fits within the requested dimensions without enlarging smaller images. Use for previews; use image-resize when exact output dimensions matter.',\n\tinputSchema: imageThumbnailInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).thumbnail(input)\n})\n\nexport const imageConvertTool = defineTool({\n\tid: 'image-convert',\n\tname: 'convertImage',\n\tdescription:\n\t\t'Re-encode an existing image ArtifactRef as JPEG, PNG, WebP, AVIF, TIFF, or GIF and return a new ArtifactRef. Use only when the required output image format differs from the source.',\n\tinputSchema: imageConvertInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).convert(input)\n})\n\nexport const imageModule = defineModule({\n\tid: 'image',\n\ttitle: 'Image',\n\tdescription: 'Inspect, resize, crop, thumbnail, and re-encode image artifacts.',\n\truntime: 'node',\n\tauth: { type: 'custom', schema: imageAuthSchema },\n\tcategories: ['media', 'image'],\n\tclassification: 'standard',\n\ttags: ['resize', 'convert'],\n\ttools: [imageMetadataTool, imageResizeTool, imageCropTool, imageThumbnailTool, imageConvertTool]\n})\n"],"mappings":";;;;;;;;;;AAKA,MAAa,kBAAkB,KAAK,OAAO;AAC3C,MAAa,sBAAsB;AAEnC,MAAa,kBAAkB,EAAE,OAAO,EACvC,SAAS,aAAa,SAAS,sDAAsD,EACtF,CAAC;AAED,MAAM,SAAS,kBAAkB,SAAS,uBAAuB;AACjE,MAAM,YAAY,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAK,CAAC,CAAC,SAAS,wBAAwB;AAChF,MAAM,WAAW,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,uCAAuC;AACvG,MAAM,YAAY,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,mBAAmB;AACxD,MAAM,UAAU,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,+BAA+B;AAE3F,MAAa,2BAA2B,EAAE,OAAO,EAAE,OAAO,CAAC;AAE3D,MAAa,sBAAsB,EAAE,OAAO;CAC3C,QAAQ,EAAE,OAAO;CACjB,YAAY,EAAE,OAAO,CAAC,CAAC,SAAS;CAChC,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS;CACxB,QAAQ,EAAE,IAAI,CAAC,CAAC,SAAS;CACzB,OAAO,EAAE,OAAO;CAChB,UAAU,EAAE,IAAI,CAAC,CAAC,SAAS;CAC3B,SAAS,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;CACxC,WAAW,EAAE,QAAQ;CACrB,OAAO,EAAE,IAAI,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS;AACpC,CAAC;AAED,MAAa,6BAA6B,EAAE,OAAO;CAClD,QAAQ,kBAAkB,SAAS,wBAAwB;CAC3D,OAAO;AACR,CAAC;AAED,MAAa,yBAAyB,EACpC,OAAO;CACP;CACA,OAAO,UAAU,SAAS,CAAC,CAAC,SAAS,wBAAwB;CAC7D,QAAQ,UAAU,SAAS,CAAC,CAAC,SAAS,yBAAyB;CAC/D,KAAK,EACH,KAAK;EAAC;EAAS;EAAW;EAAQ;EAAU;CAAS,CAAC,CAAC,CACvD,SAAS,CAAC,CACV,SAAS,mCAAmC;CAC9C,qBAAqB,EAAE,QAAQ,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,kCAAkC;CACvF,YAAY;CACZ;AACD,CAAC,CAAC,CACD,QAAQ,UAAU,MAAM,UAAU,KAAA,KAAa,MAAM,WAAW,KAAA,GAAW;CAC3E,SAAS;CACT,MAAM,CAAC,OAAO;AACf,CAAC;AAEF,MAAa,uBAAuB,EAAE,OAAO;CAC5C;CACA,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,qBAAqB;CACnD,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,oBAAoB;CACjD,OAAO,UAAU,SAAS,sBAAsB;CAChD,QAAQ,UAAU,SAAS,uBAAuB;CAClD,YAAY;CACZ;AACD,CAAC;AAED,MAAa,4BAA4B,EAAE,OAAO;CACjD;CACA,OAAO,UAAU,SAAS,mCAAmC;CAC7D,QAAQ,UAAU,SAAS,oCAAoC;CAC/D,YAAY;CACZ;AACD,CAAC;AAED,MAAa,oBAAoB,EAAE,KAAK;CAAC;CAAQ;CAAO;CAAQ;CAAQ;CAAQ;AAAK,CAAC;AAEtF,MAAa,0BAA0B,EAAE,OAAO;CAC/C;CACA,QAAQ,kBAAkB,SAAS,0BAA0B;CAC7D;CACA,YAAY;CACZ;AACD,CAAC;;;AC1DD,SAAS,aAAa,WAA2B;CAChD,OAAO,kBAAkB,SAAS,WAAW,KAAK;AACnD;AAEA,SAAS,YAAY,UAAiE;CACrF,OAAO,oBAAoB,MAAM;EAChC,QAAQ,SAAS;EACjB,YAAY,SAAS;EACrB,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,OAAO,SAAS;EAChB,UAAU,SAAS;EACnB,SAAS,SAAS;EAClB,WAAW,SAAS;EACpB,OAAO,SAAS;CACjB,CAAC;AACF;AAEA,IAAa,cAAb,MAAa,YAAY;CACxB;CAEA,YAAY,MAAiB,UAA8B,CAAC,GAAG;EAC9D,MAAM,SAAS,gBAAgB,UAAU,IAAI;EAC7C,IAAI,CAAC,OAAO,SACX,MAAM,IAAI,UAAU,kCAAkC;GACrD,MAAM;GACN,SAAS,EAAE,QAAQ,OAAO,MAAM,OAAO,KAAK,UAAU,MAAM,OAAO,EAAE;EACtE,CAAC;EAEF,KAAKA,aAAa,IAAI,oBAAoB,OAAO,KAAK,SAAS,OAAO;CACvE;CAEA,OAAO,YAAY,KAA+B;EACjD,OAAO,IAAI,YAAY,YAAY,KAAK,eAAe,GAAG;GACzD,GAAI,IAAI,SAAS,EAAE,OAAO,IAAI,MAAM;GACpC,GAAI,IAAI,UAAU,EAAE,QAAQ,IAAI,OAAO;EACxC,CAAC;CACF;CAEA,OAAO,SAAS,MAAiB,UAA8B,CAAC,GAAgB;EAC/E,OAAO,IAAI,YAAY,MAAM,OAAO;CACrC;CAEA,MAAM,SAAS,OAAmD;EACjE,IAAI;GACH,OAAO,YAAY,MAAM,MAAM,MAAM,KAAKC,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;EAC1E,SAAS,OAAO;GACf,MAAM,IAAI,UAAU,2BAA2B;IAAE,MAAM;IAAa,OAAO;GAAM,CAAC;EACnF;CACD;CAEA,MAAM,OAAO,OAAwD;EACpE,MAAM,WAAW,MAAM,MAAM,KAAKA,MAAM,MAAM,MAAM,CAAC,CAAC,CACpD,WAAW,CAAC,CACZ,OAAO;GACP,OAAO,MAAM;GACb,QAAQ,MAAM;GACd,KAAK,MAAM;GACX,oBAAoB,MAAM;EAC3B,CAAC;EACF,OAAO,KAAKC,OAAO,UAAU,MAAM,YAAY,MAAM,QAAQ;CAC9D;CAEA,MAAM,KAAK,OAAsD;EAChE,MAAM,WAAW,MAAM,MAAM,KAAKD,MAAM,MAAM,MAAM,CAAC,CAAC,CACpD,WAAW,CAAC,CACZ,QAAQ;GACR,MAAM,MAAM;GACZ,KAAK,MAAM;GACX,OAAO,MAAM;GACb,QAAQ,MAAM;EACf,CAAC;EACF,OAAO,KAAKC,OAAO,UAAU,MAAM,YAAY,MAAM,QAAQ;CAC9D;CAEA,MAAM,UAAU,OAA2D;EAC1E,MAAM,WAAW,MAAM,MAAM,KAAKD,MAAM,MAAM,MAAM,CAAC,CAAC,CACpD,WAAW,CAAC,CACZ,OAAO,MAAM,OAAO,MAAM,QAAQ;GAAE,KAAK;GAAU,oBAAoB;EAAK,CAAC;EAC/E,OAAO,KAAKC,OAAO,UAAU,MAAM,YAAY,MAAM,QAAQ;CAC9D;CAEA,MAAM,QAAQ,OAAyD;EACtE,IAAI,WAAW,MAAM,MAAM,KAAKD,MAAM,MAAM,MAAM,CAAC,CAAC,CAAC,WAAW;EAChE,QAAQ,MAAM,QAAd;GACC,KAAK;IACJ,WAAW,SAAS,KAAK,EAAE,SAAS,MAAM,QAAQ,CAAC;IACnD;GACD,KAAK;IACJ,WAAW,SAAS,IAAI,EAAE,SAAS,MAAM,QAAQ,CAAC;IAClD;GACD,KAAK;IACJ,WAAW,SAAS,KAAK,EAAE,SAAS,MAAM,QAAQ,CAAC;IACnD;GACD,KAAK;IACJ,WAAW,SAAS,KAAK,EAAE,SAAS,MAAM,QAAQ,CAAC;IACnD;GACD,KAAK;IACJ,WAAW,SAAS,KAAK,EAAE,SAAS,MAAM,QAAQ,CAAC;IACnD;GACD,KAAK,OACJ,WAAW,SAAS,IAAI,EAAE,QAAQ,MAAM,UAAU,KAAK,IAAI,GAAG,KAAK,MAAM,MAAM,UAAU,EAAE,CAAC,IAAI,KAAA,EAAU,CAAC;EAC7G;EACA,OAAO,KAAKC,OAAO,UAAU,MAAM,YAAY,MAAM,UAAU,MAAM,MAAM;CAC5E;CAEA,MAAMD,MAAM,QAA2D;EACtE,OAAO,KAAKD,WAAW,KAAK,QAAQ,eAAe;CACpD;CAEA,MAAME,OACL,UACA,KACA,UACA,oBACgC;EAChC,IAAI;GACH,MAAM,EAAE,MAAM,SAAS,MAAM,SAAS,SAAS,EAAE,mBAAmB,KAAK,CAAC;GAC1E,MAAM,YAAY,sBAAsB,KAAK;GAC7C,MAAM,YAAY,aAAa,SAAS;GACxC,MAAM,cAAc,YAAY,SAAS,uBAAuB,SAAS,KAAK;GAC9E,MAAM,SAAS,MAAM,KAAKF,WAAW,MAAM,KAAK,MAAM,WAAW,WAAW;GAC5E,MAAM,QAAQ,YAAY,MAAM,MAAM,IAAI,CAAC,CAAC,SAAS,CAAC;GACtD,OAAO,2BAA2B,MAAM;IAAE;IAAQ;GAAM,CAAC;EAC1D,SAAS,OAAO;GACf,MAAM,IAAI,UAAU,6BAA6B;IAAE,MAAM;IAAa,OAAO;GAAM,CAAC;EACrF;CACD;AACD;;;AC1IA,MAAa,oBAAoB,WAAW;CAC3C,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,WAAW;CACX,SAAS,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,CAAC,CAAC,SAAS,KAAK;AAC3E,CAAC;AAED,MAAa,kBAAkB,WAAW;CACzC,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,WAAW;CACX,SAAS,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,CAAC,CAAC,OAAO,KAAK;AACzE,CAAC;AAED,MAAa,gBAAgB,WAAW;CACvC,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,WAAW;CACX,SAAS,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,CAAC,CAAC,KAAK,KAAK;AACvE,CAAC;AAED,MAAa,qBAAqB,WAAW;CAC5C,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,WAAW;CACX,SAAS,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,CAAC,CAAC,UAAU,KAAK;AAC5E,CAAC;AAED,MAAa,mBAAmB,WAAW;CAC1C,IAAI;CACJ,MAAM;CACN,aACC;CACD,aAAa;CACb,cAAc;CACd,YAAY;CACZ,SAAS;CACT,WAAW;CACX,SAAS,OAAO,OAAO,QAAQ,YAAY,YAAY,GAAG,CAAC,CAAC,QAAQ,KAAK;AAC1E,CAAC;AAED,MAAa,cAAc,aAAa;CACvC,IAAI;CACJ,OAAO;CACP,aAAa;CACb,SAAS;CACT,MAAM;EAAE,MAAM;EAAU,QAAQ;CAAgB;CAChD,YAAY,CAAC,SAAS,OAAO;CAC7B,gBAAgB;CAChB,MAAM,CAAC,UAAU,SAAS;CAC1B,OAAO;EAAC;EAAmB;EAAiB;EAAe;EAAoB;CAAgB;AAChG,CAAC"}
1
+ {"version":3,"file":"index.js","names":["#storage","#artifacts","#read","#write"],"sources":["../../../src/shared/object-artifact-store.ts","../../../src/modules/image/contracts.ts","../../../src/modules/image/client.ts","../../../src/modules/image/module.ts"],"sourcesContent":["import { ToolError } from '../core/errors'\nimport type { ArtifactRef } from './artifact'\nimport { artifactRefSchema } from './artifact'\nimport { S3Client } from '../vendors/s3'\nimport type { S3Auth, S3ClientOptions } from '../vendors/s3'\n\nexport type ObjectArtifactStoreOptions = S3ClientOptions\n\nexport class ObjectArtifactStore {\n\treadonly #storage: S3Client\n\n\tconstructor(auth: S3Auth, options: ObjectArtifactStoreOptions = {}) {\n\t\tthis.#storage = new S3Client(auth, options)\n\t}\n\n\tasync read(source: ArtifactRef, maxBytes: number): Promise<Uint8Array> {\n\t\tif (source.store !== 'object') {\n\t\t\tthrow new ToolError('This operation requires an object-store artifact', { code: 'bad_input' })\n\t\t}\n\t\treturn this.#storage.getBytes(source.key, { maxBytes })\n\t}\n\n\tasync write(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","import { z } from 'zod'\n\nimport { artifactRefSchema } from '../../shared/artifact'\nimport { s3AuthSchema } from '../../vendors/s3'\n\nexport const MAX_IMAGE_BYTES = 50 * 1024 * 1024\nexport const MAX_IMAGE_DIMENSION = 16_384\n\nexport const imageAuthSchema = z.object({\n\tstorage: s3AuthSchema.describe('Object storage for source and output image artifacts')\n})\n\nconst source = artifactRefSchema.describe('Source image artifact')\nconst outputKey = z.string().min(1).max(1_024).describe('Destination object key')\nconst filename = z.string().min(1).max(512).optional().describe('Display filename for the output image')\nconst dimension = z.int().min(1).max(MAX_IMAGE_DIMENSION)\nconst quality = z.int().min(1).max(100).optional().describe('Encoder quality from 1 to 100')\n\nexport const imageMetadataInputSchema = z.object({ source })\n\nexport const imageMetadataSchema = z.object({\n\tformat: z.string(),\n\tmedia_type: z.string().optional(),\n\twidth: z.int().positive(),\n\theight: z.int().positive(),\n\tspace: z.string(),\n\tchannels: z.int().positive(),\n\tdensity: z.number().positive().optional(),\n\thas_alpha: z.boolean(),\n\tpages: z.int().positive().optional()\n})\n\nexport const imageTransformOutputSchema = z.object({\n\tresult: artifactRefSchema.describe('Written image artifact'),\n\timage: imageMetadataSchema\n})\n\nexport const imageResizeInputSchema = z\n\t.object({\n\t\tsource,\n\t\twidth: dimension.optional().describe('Target width in pixels'),\n\t\theight: dimension.optional().describe('Target height in pixels'),\n\t\tfit: z\n\t\t\t.enum(['cover', 'contain', 'fill', 'inside', 'outside'])\n\t\t\t.optional()\n\t\t\t.describe('How the image fits the target box'),\n\t\twithout_enlargement: z.boolean().optional().describe('Prevent enlarging smaller images'),\n\t\toutput_key: outputKey,\n\t\tfilename\n\t})\n\t.refine((input) => input.width !== undefined || input.height !== undefined, {\n\t\tmessage: 'width or height is required',\n\t\tpath: ['width']\n\t})\n\nexport const imageCropInputSchema = z.object({\n\tsource,\n\tleft: z.int().min(0).describe('Left edge in pixels'),\n\ttop: z.int().min(0).describe('Top edge in pixels'),\n\twidth: dimension.describe('Crop width in pixels'),\n\theight: dimension.describe('Crop height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageThumbnailInputSchema = z.object({\n\tsource,\n\twidth: dimension.describe('Maximum thumbnail width in pixels'),\n\theight: dimension.describe('Maximum thumbnail height in pixels'),\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport const imageFormatSchema = z.enum(['jpeg', 'png', 'webp', 'avif', 'tiff', 'gif'])\n\nexport const imageConvertInputSchema = z.object({\n\tsource,\n\tformat: imageFormatSchema.describe('Destination image format'),\n\tquality,\n\toutput_key: outputKey,\n\tfilename\n})\n\nexport type ImageAuth = z.infer<typeof imageAuthSchema>\nexport type ImageMetadataInput = z.infer<typeof imageMetadataInputSchema>\nexport type ImageMetadata = z.infer<typeof imageMetadataSchema>\nexport type ImageResizeInput = z.infer<typeof imageResizeInputSchema>\nexport type ImageCropInput = z.infer<typeof imageCropInputSchema>\nexport type ImageThumbnailInput = z.infer<typeof imageThumbnailInputSchema>\nexport type ImageConvertInput = z.infer<typeof imageConvertInputSchema>\nexport type ImageTransformOutput = z.infer<typeof imageTransformOutputSchema>\n","import sharp from 'sharp'\nimport type { Sharp } from 'sharp'\n\nimport { ToolError } from '../../core/errors'\nimport { requireAuth } from '../../core/provider'\nimport type { ToolContext } from '../../core/types'\nimport { extensionFromMediaType, mediaTypeFromPath } from '../../shared/content-type'\nimport { ObjectArtifactStore } from '../../shared/object-artifact-store'\nimport type { ObjectArtifactStoreOptions } from '../../shared/object-artifact-store'\nimport type {\n\tImageAuth,\n\tImageConvertInput,\n\tImageCropInput,\n\tImageMetadata,\n\tImageMetadataInput,\n\tImageResizeInput,\n\tImageThumbnailInput,\n\tImageTransformOutput\n} from './contracts'\nimport { MAX_IMAGE_BYTES, imageAuthSchema, imageMetadataSchema, imageTransformOutputSchema } from './contracts'\n\nexport type ImageClientOptions = ObjectArtifactStoreOptions\n\nfunction mediaTypeFor(extension: string): string {\n\treturn mediaTypeFromPath(`image.${extension}`) ?? 'application/octet-stream'\n}\n\nfunction mapMetadata(metadata: Awaited<ReturnType<Sharp['metadata']>>): ImageMetadata {\n\treturn imageMetadataSchema.parse({\n\t\tformat: metadata.format,\n\t\tmedia_type: metadata.mediaType,\n\t\twidth: metadata.width,\n\t\theight: metadata.height,\n\t\tspace: metadata.space,\n\t\tchannels: metadata.channels,\n\t\tdensity: metadata.density,\n\t\thas_alpha: metadata.hasAlpha,\n\t\tpages: metadata.pages\n\t})\n}\n\nexport class ImageClient {\n\treadonly #artifacts: ObjectArtifactStore\n\n\tconstructor(auth: ImageAuth, options: ImageClientOptions = {}) {\n\t\tconst parsed = imageAuthSchema.safeParse(auth)\n\t\tif (!parsed.success) {\n\t\t\tthrow new ToolError('Invalid image 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.#artifacts = new ObjectArtifactStore(parsed.data.storage, options)\n\t}\n\n\tstatic fromContext(ctx: ToolContext): ImageClient {\n\t\treturn new ImageClient(requireAuth(ctx, imageAuthSchema), {\n\t\t\t...(ctx.fetch && { fetch: ctx.fetch }),\n\t\t\t...(ctx.signal && { signal: ctx.signal })\n\t\t})\n\t}\n\n\tstatic fromAuth(auth: ImageAuth, options: ImageClientOptions = {}): ImageClient {\n\t\treturn new ImageClient(auth, options)\n\t}\n\n\tasync metadata(input: ImageMetadataInput): Promise<ImageMetadata> {\n\t\ttry {\n\t\t\treturn mapMetadata(await sharp(await this.#read(input.source)).metadata())\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to inspect image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n\n\tasync resize(input: ImageResizeInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize({\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height,\n\t\t\t\tfit: input.fit,\n\t\t\t\twithoutEnlargement: input.without_enlargement\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync crop(input: ImageCropInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.extract({\n\t\t\t\tleft: input.left,\n\t\t\t\ttop: input.top,\n\t\t\t\twidth: input.width,\n\t\t\t\theight: input.height\n\t\t\t})\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync thumbnail(input: ImageThumbnailInput): Promise<ImageTransformOutput> {\n\t\tconst pipeline = sharp(await this.#read(input.source))\n\t\t\t.autoOrient()\n\t\t\t.resize(input.width, input.height, { fit: 'inside', withoutEnlargement: true })\n\t\treturn this.#write(pipeline, input.output_key, input.filename)\n\t}\n\n\tasync convert(input: ImageConvertInput): Promise<ImageTransformOutput> {\n\t\tlet pipeline = sharp(await this.#read(input.source)).autoOrient()\n\t\tswitch (input.format) {\n\t\t\tcase 'jpeg':\n\t\t\t\tpipeline = pipeline.jpeg({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'png':\n\t\t\t\tpipeline = pipeline.png({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'webp':\n\t\t\t\tpipeline = pipeline.webp({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'avif':\n\t\t\t\tpipeline = pipeline.avif({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'tiff':\n\t\t\t\tpipeline = pipeline.tiff({ quality: input.quality })\n\t\t\t\tbreak\n\t\t\tcase 'gif':\n\t\t\t\tpipeline = pipeline.gif({ effort: input.quality ? Math.max(1, Math.round(input.quality / 10)) : undefined })\n\t\t}\n\t\treturn this.#write(pipeline, input.output_key, input.filename, input.format)\n\t}\n\n\tasync #read(source: ImageMetadataInput['source']): Promise<Uint8Array> {\n\t\treturn this.#artifacts.read(source, MAX_IMAGE_BYTES)\n\t}\n\n\tasync #write(\n\t\tpipeline: Sharp,\n\t\tkey: string,\n\t\tfilename?: string,\n\t\trequestedExtension?: string\n\t): Promise<ImageTransformOutput> {\n\t\ttry {\n\t\t\tconst { data, info } = await pipeline.toBuffer({ resolveWithObject: true })\n\t\t\tconst extension = requestedExtension ?? info.format\n\t\t\tconst mediaType = mediaTypeFor(extension)\n\t\t\tconst displayName = filename ?? `image.${extensionFromMediaType(mediaType) ?? extension}`\n\t\t\tconst result = await this.#artifacts.write(key, data, mediaType, displayName)\n\t\t\tconst image = mapMetadata(await sharp(data).metadata())\n\t\t\treturn imageTransformOutputSchema.parse({ result, image })\n\t\t} catch (error) {\n\t\t\tthrow new ToolError('Failed to transform image', { code: 'bad_input', cause: error })\n\t\t}\n\t}\n}\n","import { defineModule, defineTool } from '../../core/define'\nimport { ImageClient } from './client'\nimport {\n\timageAuthSchema,\n\timageConvertInputSchema,\n\timageCropInputSchema,\n\timageMetadataInputSchema,\n\timageMetadataSchema,\n\timageResizeInputSchema,\n\timageThumbnailInputSchema,\n\timageTransformOutputSchema\n} from './contracts'\n\nexport const imageMetadataTool = defineTool({\n\tid: 'image-metadata',\n\tname: 'inspectImage',\n\tdescription:\n\t\t'Inspect an image artifact and return decoded format, dimensions, color space, channels, and page metadata.',\n\tinputSchema: imageMetadataInputSchema,\n\toutputSchema: imageMetadataSchema,\n\tsideEffect: 'read',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).metadata(input)\n})\n\nexport const imageResizeTool = defineTool({\n\tid: 'image-resize',\n\tname: 'resizeImage',\n\tdescription:\n\t\t'Resize an existing image ArtifactRef to a target width, height, or bounding box while preserving its format. Returns a final image ArtifactRef; use for exact resize requirements rather than general code or document tools.',\n\tinputSchema: imageResizeInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).resize(input)\n})\n\nexport const imageCropTool = defineTool({\n\tid: 'image-crop',\n\tname: 'cropImage',\n\tdescription:\n\t\t'Crop a rectangular pixel region from an existing image ArtifactRef and return a new image ArtifactRef. Use when the crop coordinates are known.',\n\tinputSchema: imageCropInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).crop(input)\n})\n\nexport const imageThumbnailTool = defineTool({\n\tid: 'image-thumbnail',\n\tname: 'createImageThumbnail',\n\tdescription:\n\t\t'Create a thumbnail ArtifactRef that fits within the requested dimensions without enlarging smaller images. Use for previews; use image-resize when exact output dimensions matter.',\n\tinputSchema: imageThumbnailInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).thumbnail(input)\n})\n\nexport const imageConvertTool = defineTool({\n\tid: 'image-convert',\n\tname: 'convertImage',\n\tdescription:\n\t\t'Re-encode an existing image ArtifactRef as JPEG, PNG, WebP, AVIF, TIFF, or GIF and return a new ArtifactRef. Use only when the required output image format differs from the source.',\n\tinputSchema: imageConvertInputSchema,\n\toutputSchema: imageTransformOutputSchema,\n\tsideEffect: 'write',\n\truntime: 'node',\n\tartifacts: true,\n\texecute: async (input, ctx) => ImageClient.fromContext(ctx).convert(input)\n})\n\nexport const imageModule = defineModule({\n\tid: 'image',\n\ttitle: 'Image',\n\tdescription: 'Inspect, resize, crop, thumbnail, and re-encode image artifacts.',\n\truntime: 'node',\n\tauth: { type: 'custom', schema: imageAuthSchema },\n\tcategories: ['media', 'image'],\n\tclassification: 'standard',\n\ttags: ['resize', 'convert'],\n\ttools: [imageMetadataTool, imageResizeTool, imageCropTool, imageThumbnailTool, imageConvertTool]\n})\n"],"mappings":"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"}
@@ -61,14 +61,10 @@ declare const teamsMessagingAuthSchema: z.ZodObject<{
61
61
  }, z.core.$strip>>;
62
62
  }, z.core.$strip>;
63
63
  declare const imessageMessagingAuthSchema: z.ZodObject<{
64
- project_id: z.ZodOptional<z.ZodString>;
65
- project_secret: z.ZodOptional<z.ZodString>;
66
- address: z.ZodOptional<z.ZodString>;
67
- token: z.ZodOptional<z.ZodString>;
68
- server: z.ZodOptional<z.ZodString>;
69
- spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
70
- spectrum_imessage_address: z.ZodOptional<z.ZodString>;
71
- tls: z.ZodOptional<z.ZodBoolean>;
64
+ base_url: z.ZodURL;
65
+ project_id: z.ZodString;
66
+ project_secret: z.ZodString;
67
+ phone: z.ZodOptional<z.ZodString>;
72
68
  provider: z.ZodLiteral<"imessage">;
73
69
  storage: z.ZodOptional<z.ZodObject<{
74
70
  access_key_id: z.ZodString;
@@ -123,14 +119,10 @@ declare const messagingAuthSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
123
119
  key_prefix: z.ZodOptional<z.ZodString>;
124
120
  }, z.core.$strip>>;
125
121
  }, z.core.$strip>, z.ZodObject<{
126
- project_id: z.ZodOptional<z.ZodString>;
127
- project_secret: z.ZodOptional<z.ZodString>;
128
- address: z.ZodOptional<z.ZodString>;
129
- token: z.ZodOptional<z.ZodString>;
130
- server: z.ZodOptional<z.ZodString>;
131
- spectrum_cloud_url: z.ZodOptional<z.ZodURL>;
132
- spectrum_imessage_address: z.ZodOptional<z.ZodString>;
133
- tls: z.ZodOptional<z.ZodBoolean>;
122
+ base_url: z.ZodURL;
123
+ project_id: z.ZodString;
124
+ project_secret: z.ZodString;
125
+ phone: z.ZodOptional<z.ZodString>;
134
126
  provider: z.ZodLiteral<"imessage">;
135
127
  storage: z.ZodOptional<z.ZodObject<{
136
128
  access_key_id: z.ZodString;
@@ -584,14 +576,10 @@ declare const messagingModule: ModuleDefinition<{
584
576
  key_prefix?: string | undefined;
585
577
  } | undefined;
586
578
  } | {
587
- project_id?: string | undefined;
588
- project_secret?: string | undefined;
589
- address?: string | undefined;
590
- token?: string | undefined;
591
- server?: string | undefined;
592
- spectrum_cloud_url?: string | undefined;
593
- spectrum_imessage_address?: string | undefined;
594
- tls?: boolean | undefined;
579
+ base_url: string;
580
+ project_id: string;
581
+ project_secret: string;
582
+ phone?: string | undefined;
595
583
  provider: "imessage";
596
584
  storage?: {
597
585
  access_key_id: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/modules/messaging/contracts.ts","../../../src/modules/messaging/client.ts","../../../src/modules/messaging/domain.ts","../../../src/modules/messaging/module.ts"],"mappings":"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"}
@@ -1,14 +1,14 @@
1
- import { d as isImessageDefiniteRejection, f as isImessageOutcomeUnknown, h as imessageAuthSchema, m as MAX_MEDIA_BYTES } from "../../client-CCKGsTeI.js";
2
1
  import { t as ToolError } from "../../errors-DoSpNHvs.js";
3
- import { n as defineModule, r as defineTool } from "../../define-CvpJ_pNP.js";
2
+ import { n as defineModule, r as defineTool } from "../../define-ieoksEQ0.js";
4
3
  import { n as requireAuth } from "../../provider-CgDAlg6K.js";
5
4
  import { n as bytesToBase64, t as base64ToBytes } from "../../bytes-BxpimpQx.js";
6
- import { m as s3AuthSchema, p as S3Client } from "../../s3-CsOaPWMP.js";
5
+ import { m as s3AuthSchema, p as S3Client } from "../../s3-Dj7Teh-A.js";
7
6
  import { n as runBatchItems, t as batchResultSchema } from "../../batch-Co1ujeAW.js";
7
+ import { d as ImessageClient, g as imessageAuthSchema, h as MAX_MEDIA_BYTES, m as isImessageOutcomeUnknown, p as isImessageDefiniteRejection } from "../../imessage-CH49-sFn.js";
8
8
  import { n as createTypingPulse, t as createLiveMessage } from "../../transport-B4vn-XiQ.js";
9
- import { A as slackAuthSchema, C as isSlackOutcomeUnknown, S as isSlackDefiniteRejection, b as SlackClient, w as MAX_MEDIA_BYTES$1 } from "../../slack-Di5BBNpt.js";
10
- import { _ as isTeamsOutcomeUnknown, b as teamsAuthSchema, g as isTeamsDefiniteRejection, m as TeamsClient, v as MAX_MEDIA_BYTES$2 } from "../../teams-DYAHNb39.js";
11
- import { _ as isTelegramOutcomeUnknown, b as telegramAuthSchema, g as isTelegramDefiniteRejection, m as TelegramClient, v as MAX_MEDIA_BYTES$3 } from "../../telegram-DDXWzkfL.js";
9
+ import { A as slackAuthSchema, C as isSlackOutcomeUnknown, S as isSlackDefiniteRejection, b as SlackClient, w as MAX_MEDIA_BYTES$1 } from "../../slack-AjJDNnXJ.js";
10
+ import { _ as isTeamsOutcomeUnknown, b as teamsAuthSchema, g as isTeamsDefiniteRejection, m as TeamsClient, v as MAX_MEDIA_BYTES$2 } from "../../teams-CvxYLAi5.js";
11
+ import { _ as isTelegramOutcomeUnknown, b as telegramAuthSchema, g as isTelegramDefiniteRejection, m as TelegramClient, v as MAX_MEDIA_BYTES$3 } from "../../telegram-B_-Jljk3.js";
12
12
  import { isError } from "es-toolkit";
13
13
  import { z } from "zod";
14
14
  //#region src/modules/messaging/contracts.ts
@@ -417,74 +417,56 @@ async function sendMediaBatchSequential(sendOne, input) {
417
417
  //#region src/modules/messaging/providers/imessage.ts
418
418
  /**
419
419
  * iMessage provider for the messaging seam.
420
- * Wraps `ImessageClient` (Photon Spectrum Cloud + Advanced iMessage gRPC).
421
- *
422
- * Vendor client is loaded via dynamic import so edge/browser packaging of the
423
- * messaging seam does not pull Node-only gRPC peers until iMessage is used.
420
+ * Wraps `ImessageClient` (hosted photon-rest-proxy over HTTP).
424
421
  */
425
422
  var ImessageMessagingProvider = class {
426
- #auth;
427
- #options;
428
423
  #client;
429
- #ready;
430
424
  constructor(auth, options = {}) {
431
- this.#auth = auth;
432
- this.#options = options;
433
- }
434
- async #sdk() {
435
- if (this.#client) return this.#client;
436
- this.#ready ??= (async () => {
437
- const { ImessageClient } = await import("../../client-CCKGsTeI.js").then((n) => n.n);
438
- const { provider: _p, storage: _s, ...vendorAuth } = this.#auth;
439
- const client = new ImessageClient(vendorAuth, this.#options);
440
- this.#client = client;
441
- return client;
442
- })();
443
- return this.#ready;
425
+ const { provider: _p, storage: _s, ...vendorAuth } = auth;
426
+ this.#client = new ImessageClient(vendorAuth, options);
444
427
  }
445
428
  async sendText(input) {
446
- return { message_id: (await (await this.#sdk()).sendText({
429
+ return { message_id: (await this.#client.sendText({
447
430
  chat_id: input.chat_id,
448
431
  text: input.text
449
432
  })).message_id };
450
433
  }
451
434
  async editText(input) {
452
- return { message_id: (await (await this.#sdk()).editText({
435
+ return { message_id: (await this.#client.editText({
453
436
  chat_id: input.chat_id,
454
437
  message_id: input.message_id,
455
438
  text: input.text
456
- })).message_id ?? input.message_id };
439
+ })).message_id };
457
440
  }
458
441
  async sendChatAction(input) {
459
- await (await this.#sdk()).sendChatAction({
442
+ await this.#client.sendChatAction({
460
443
  chat_id: input.chat_id,
461
444
  action: input.action
462
445
  });
463
446
  }
464
447
  async stopTyping(input) {
465
- await (await this.#sdk()).stopTyping({ chat_id: input.chat_id });
448
+ await this.#client.stopTyping({ chat_id: input.chat_id });
466
449
  }
467
450
  async setReaction(input) {
468
- return { message_id: (await (await this.#sdk()).setReaction({
451
+ return { message_id: (await this.#client.setReaction({
469
452
  chat_id: input.chat_id,
470
453
  message_id: input.message_id,
471
454
  emoji: input.emoji
472
455
  })).message_id };
473
456
  }
474
457
  /**
475
- * Clears via setReaction(isSet=false). Requires emoji matching setReaction.
476
- * `message_id` is the **target** message guid.
458
+ * Clears via proxy target message_id + emoji (same contract as setReaction).
477
459
  */
478
460
  async clearReaction(input) {
479
461
  if (!input.emoji) throw new ToolError("iMessage clearReaction requires emoji (same tapback/emoji used when setting)", { code: "bad_input" });
480
- await (await this.#sdk()).clearReaction({
462
+ await this.#client.clearReaction({
481
463
  chat_id: input.chat_id,
482
464
  message_id: input.message_id,
483
465
  emoji: input.emoji
484
466
  });
485
467
  }
486
468
  async sendMedia(input) {
487
- return { message_id: (await (await this.#sdk()).sendMedia({
469
+ return { message_id: (await this.#client.sendMedia({
488
470
  chat_id: input.chat_id,
489
471
  kind: input.kind,
490
472
  body_base64: input.body_base64,
@@ -497,18 +479,21 @@ var ImessageMessagingProvider = class {
497
479
  return sendMediaBatchSequential((item) => this.sendMedia(item), input);
498
480
  }
499
481
  async downloadFile(input) {
500
- const fileId = input.chat_id ? input.file_id : splitImessageFileRef(input.file_id).file_id ?? input.file_id;
501
- return (await this.#sdk()).downloadFile({
502
- file_id: fileId,
503
- ...input.chat_id && { chat_id: input.chat_id },
482
+ const ref = input.chat_id ? {
483
+ chat_id: input.chat_id,
484
+ file_id: input.file_id
485
+ } : splitImessageFileRef(input.file_id);
486
+ return this.#client.downloadFile({
487
+ file_id: ref.file_id,
488
+ ...ref.chat_id && { chat_id: ref.chat_id },
504
489
  ...input.file_name && { file_name: input.file_name }
505
490
  });
506
491
  }
507
492
  async answerCallback(_input) {
508
- await (await this.#sdk()).answerCallback({});
493
+ await this.#client.answerCallback({});
509
494
  }
510
495
  async read(input) {
511
- await (await this.#sdk()).read({
496
+ await this.#client.read({
512
497
  chat_id: input.chat_id,
513
498
  ...input.message_id && { message_id: input.message_id }
514
499
  });
@@ -835,7 +820,7 @@ var TelegramMessagingProvider = class {
835
820
  //#endregion
836
821
  //#region src/modules/messaging/client.ts
837
822
  /**
838
- * Messaging seam client — picks telegram / slack / teams / imessage from host auth.
823
+ * Messaging seam client — picks telegram / slack / teams / imessage (proxy) from host auth.
839
824
  * Resolves ArtifactRef media via optional nested S3 storage before channel calls.
840
825
  */
841
826
  function transportOptions(ctx) {