@mastra/core 0.15.3-alpha.7 → 0.15.3-alpha.9

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 (70) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/dist/agent/index.cjs +11 -11
  3. package/dist/agent/index.d.ts.map +1 -1
  4. package/dist/agent/index.js +2 -2
  5. package/dist/agent/input-processor/index.cjs +6 -6
  6. package/dist/agent/input-processor/index.js +1 -1
  7. package/dist/agent/message-list/index.d.ts.map +1 -1
  8. package/dist/agent/message-list/prompt/image-utils.d.ts +56 -0
  9. package/dist/agent/message-list/prompt/image-utils.d.ts.map +1 -0
  10. package/dist/{chunk-AB2X2OLU.cjs → chunk-65ZPZGFH.cjs} +4 -4
  11. package/dist/{chunk-AB2X2OLU.cjs.map → chunk-65ZPZGFH.cjs.map} +1 -1
  12. package/dist/{chunk-EUZ3OA6Y.js → chunk-AEE54ND4.js} +3 -3
  13. package/dist/{chunk-EUZ3OA6Y.js.map → chunk-AEE54ND4.js.map} +1 -1
  14. package/dist/{chunk-P24PB73W.js → chunk-AVPW677Z.js} +3 -14
  15. package/dist/chunk-AVPW677Z.js.map +1 -0
  16. package/dist/{chunk-POFCBVHG.js → chunk-EU3ADOKK.js} +3 -3
  17. package/dist/{chunk-POFCBVHG.js.map → chunk-EU3ADOKK.js.map} +1 -1
  18. package/dist/{chunk-GJD2BTI5.cjs → chunk-EZCMCWSC.cjs} +22 -33
  19. package/dist/chunk-EZCMCWSC.cjs.map +1 -0
  20. package/dist/{chunk-NVB2F66X.cjs → chunk-FTAXL6TR.cjs} +7 -7
  21. package/dist/{chunk-NVB2F66X.cjs.map → chunk-FTAXL6TR.cjs.map} +1 -1
  22. package/dist/{chunk-BGE27UEX.js → chunk-HF7HXOCC.js} +196 -28
  23. package/dist/chunk-HF7HXOCC.js.map +1 -0
  24. package/dist/{chunk-XJO6WBIW.js → chunk-PDODMDSQ.js} +3 -3
  25. package/dist/{chunk-XJO6WBIW.js.map → chunk-PDODMDSQ.js.map} +1 -1
  26. package/dist/{chunk-AYPDYPRS.js → chunk-QQO4SF3C.js} +3 -3
  27. package/dist/{chunk-AYPDYPRS.js.map → chunk-QQO4SF3C.js.map} +1 -1
  28. package/dist/{chunk-AAJF7WLJ.cjs → chunk-SIKEQ32R.cjs} +196 -28
  29. package/dist/chunk-SIKEQ32R.cjs.map +1 -0
  30. package/dist/{chunk-626FLQPT.cjs → chunk-TCYQAAIT.cjs} +4 -4
  31. package/dist/{chunk-626FLQPT.cjs.map → chunk-TCYQAAIT.cjs.map} +1 -1
  32. package/dist/{chunk-7IIXZ5HS.cjs → chunk-ZHFYYSVY.cjs} +4 -4
  33. package/dist/{chunk-7IIXZ5HS.cjs.map → chunk-ZHFYYSVY.cjs.map} +1 -1
  34. package/dist/index.cjs +21 -21
  35. package/dist/index.js +6 -6
  36. package/dist/loop/index.cjs +2 -2
  37. package/dist/loop/index.js +1 -1
  38. package/dist/mastra/index.cjs +2 -2
  39. package/dist/mastra/index.js +1 -1
  40. package/dist/memory/index.cjs +4 -4
  41. package/dist/memory/index.js +1 -1
  42. package/dist/network/index.cjs +2 -2
  43. package/dist/network/index.js +1 -1
  44. package/dist/network/vNext/index.cjs +14 -14
  45. package/dist/network/vNext/index.js +2 -2
  46. package/dist/processors/index.cjs +8 -8
  47. package/dist/processors/index.js +2 -2
  48. package/dist/relevance/index.cjs +4 -4
  49. package/dist/relevance/index.js +1 -1
  50. package/dist/scores/hooks.d.ts +1 -3
  51. package/dist/scores/hooks.d.ts.map +1 -1
  52. package/dist/scores/index.cjs +5 -5
  53. package/dist/scores/index.js +1 -1
  54. package/dist/storage/index.cjs +3 -3
  55. package/dist/storage/index.js +1 -1
  56. package/dist/stream/index.cjs +3 -3
  57. package/dist/stream/index.js +1 -1
  58. package/dist/workflows/default.d.ts +1 -2
  59. package/dist/workflows/default.d.ts.map +1 -1
  60. package/dist/workflows/evented/index.cjs +10 -10
  61. package/dist/workflows/evented/index.js +1 -1
  62. package/dist/workflows/index.cjs +10 -10
  63. package/dist/workflows/index.js +1 -1
  64. package/dist/workflows/legacy/index.cjs +22 -22
  65. package/dist/workflows/legacy/index.js +1 -1
  66. package/package.json +3 -3
  67. package/dist/chunk-AAJF7WLJ.cjs.map +0 -1
  68. package/dist/chunk-BGE27UEX.js.map +0 -1
  69. package/dist/chunk-GJD2BTI5.cjs.map +0 -1
  70. package/dist/chunk-P24PB73W.js.map +0 -1
@@ -661,6 +661,79 @@ async function downloadAssetsFromMessages({
661
661
  return Object.fromEntries(downloadFileList);
662
662
  }
663
663
 
664
+ // src/agent/message-list/prompt/image-utils.ts
665
+ function parseDataUri(dataUri) {
666
+ if (!dataUri.startsWith("data:")) {
667
+ return {
668
+ isDataUri: false,
669
+ base64Content: dataUri
670
+ };
671
+ }
672
+ const base64Index = dataUri.indexOf(",");
673
+ if (base64Index === -1) {
674
+ return {
675
+ isDataUri: true,
676
+ base64Content: dataUri
677
+ };
678
+ }
679
+ const header = dataUri.substring(5, base64Index);
680
+ const base64Content = dataUri.substring(base64Index + 1);
681
+ const semicolonIndex = header.indexOf(";");
682
+ const mimeType = semicolonIndex !== -1 ? header.substring(0, semicolonIndex) : header;
683
+ return {
684
+ isDataUri: true,
685
+ mimeType: mimeType || void 0,
686
+ base64Content
687
+ };
688
+ }
689
+ function createDataUri(base64Content, mimeType = "application/octet-stream") {
690
+ if (base64Content.startsWith("data:")) {
691
+ return base64Content;
692
+ }
693
+ return `data:${mimeType};base64,${base64Content}`;
694
+ }
695
+ function imageContentToString(image, fallbackMimeType) {
696
+ if (typeof image === "string") {
697
+ return image;
698
+ }
699
+ if (image instanceof URL) {
700
+ return image.toString();
701
+ }
702
+ if (image instanceof Uint8Array || image instanceof ArrayBuffer || globalThis.Buffer && Buffer.isBuffer(image)) {
703
+ const base64 = convertDataContentToBase64String(image);
704
+ if (fallbackMimeType && !base64.startsWith("data:")) {
705
+ return `data:${fallbackMimeType};base64,${base64}`;
706
+ }
707
+ return base64;
708
+ }
709
+ return String(image);
710
+ }
711
+ function imageContentToDataUri(image, mimeType = "image/png") {
712
+ const imageStr = imageContentToString(image, mimeType);
713
+ if (imageStr.startsWith("data:")) {
714
+ return imageStr;
715
+ }
716
+ if (imageStr.startsWith("http://") || imageStr.startsWith("https://")) {
717
+ return imageStr;
718
+ }
719
+ return `data:${mimeType};base64,${imageStr}`;
720
+ }
721
+ function getImageCacheKey(image) {
722
+ if (image instanceof URL) {
723
+ return image.toString();
724
+ }
725
+ if (typeof image === "string") {
726
+ return image.length;
727
+ }
728
+ if (image instanceof Uint8Array) {
729
+ return image.byteLength;
730
+ }
731
+ if (image instanceof ArrayBuffer) {
732
+ return image.byteLength;
733
+ }
734
+ return image;
735
+ }
736
+
664
737
  // src/agent/message-list/utils/ai-v5/tool.ts
665
738
  function getToolName(type) {
666
739
  if (typeof type === "object" && type && "type" in type) {
@@ -970,7 +1043,7 @@ var MessageList = class _MessageList {
970
1043
  return {
971
1044
  type: "file",
972
1045
  file: new DefaultGeneratedFileWithType({
973
- data: typeof c.data === `string` ? c.data : c.data instanceof URL ? c.data.toString() : convertDataContentToBase64String(c.data),
1046
+ data: typeof c.data === `string` ? parseDataUri(c.data).base64Content : c.data instanceof URL ? c.data.toString() : convertDataContentToBase64String(c.data),
974
1047
  mediaType: c.mediaType
975
1048
  })
976
1049
  };
@@ -978,7 +1051,7 @@ var MessageList = class _MessageList {
978
1051
  return {
979
1052
  type: "file",
980
1053
  file: new DefaultGeneratedFileWithType({
981
- data: typeof c.image === `string` ? c.image : c.image instanceof URL ? c.image.toString() : convertDataContentToBase64String(c.image),
1054
+ data: typeof c.image === `string` ? parseDataUri(c.image).base64Content : c.image instanceof URL ? c.image.toString() : convertDataContentToBase64String(c.image),
982
1055
  mediaType: c.mediaType || "unknown"
983
1056
  })
984
1057
  };
@@ -1628,7 +1701,11 @@ var MessageList = class _MessageList {
1628
1701
  });
1629
1702
  break;
1630
1703
  case "image":
1631
- parts.push({ type: "file", data: part.image.toString(), mimeType: part.mimeType });
1704
+ parts.push({
1705
+ type: "file",
1706
+ data: imageContentToString(part.image),
1707
+ mimeType: part.mimeType
1708
+ });
1632
1709
  break;
1633
1710
  case "file":
1634
1711
  if (part.data instanceof URL) {
@@ -1761,7 +1838,7 @@ var MessageList = class _MessageList {
1761
1838
  key += part.mimeType;
1762
1839
  }
1763
1840
  if (part.type === `image`) {
1764
- key += part.image instanceof URL ? part.image.toString() : part.image.toString().length;
1841
+ key += getImageCacheKey(part.image);
1765
1842
  key += part.mimeType;
1766
1843
  }
1767
1844
  if (part.type === `redacted-reasoning`) {
@@ -2236,15 +2313,39 @@ var MessageList = class _MessageList {
2236
2313
  });
2237
2314
  }
2238
2315
  break;
2239
- case "file":
2240
- parts.push({
2241
- type: "file",
2242
- url: part.data,
2243
- mediaType: part.mimeType,
2244
- providerMetadata: part.providerMetadata
2245
- });
2316
+ case "file": {
2317
+ if (typeof part.data === "string" && (part.data.startsWith("http://") || part.data.startsWith("https://"))) {
2318
+ parts.push({
2319
+ type: "file",
2320
+ url: part.data,
2321
+ mediaType: part.mimeType || "image/png",
2322
+ providerMetadata: part.providerMetadata
2323
+ });
2324
+ } else {
2325
+ let filePartData;
2326
+ let extractedMimeType = part.mimeType;
2327
+ if (typeof part.data === "string") {
2328
+ const parsed = parseDataUri(part.data);
2329
+ filePartData = parsed.base64Content;
2330
+ if (parsed.isDataUri && parsed.mimeType) {
2331
+ extractedMimeType = extractedMimeType || parsed.mimeType;
2332
+ }
2333
+ } else {
2334
+ filePartData = part.data;
2335
+ }
2336
+ const finalMimeType = extractedMimeType || "image/png";
2337
+ const dataUri = createDataUri(filePartData, finalMimeType);
2338
+ parts.push({
2339
+ type: "file",
2340
+ url: dataUri,
2341
+ // Use url field with data URI
2342
+ mediaType: finalMimeType,
2343
+ providerMetadata: part.providerMetadata
2344
+ });
2345
+ }
2246
2346
  fileUrls.add(part.data);
2247
2347
  break;
2348
+ }
2248
2349
  }
2249
2350
  }
2250
2351
  if (v2Msg.content.content && !v3Msg.content.parts?.some((p) => p.type === `text`)) {
@@ -2415,35 +2516,102 @@ var MessageList = class _MessageList {
2415
2516
  providerMetadata: part.providerOptions
2416
2517
  });
2417
2518
  break;
2418
- case "image":
2519
+ case "image": {
2520
+ let imageData;
2521
+ let extractedMimeType = part.mediaType;
2522
+ const imageStr = imageContentToDataUri(part.image, extractedMimeType || "image/png");
2523
+ const parsed = parseDataUri(imageStr);
2524
+ if (parsed.isDataUri) {
2525
+ imageData = parsed.base64Content;
2526
+ if (!extractedMimeType && parsed.mimeType) {
2527
+ extractedMimeType = parsed.mimeType;
2528
+ }
2529
+ } else if (imageStr.startsWith("http://") || imageStr.startsWith("https://")) {
2530
+ parts.push({
2531
+ type: "file",
2532
+ url: imageStr,
2533
+ mediaType: part.mediaType || "image/jpeg",
2534
+ // Default to image/jpeg for URLs
2535
+ providerMetadata: part.providerOptions
2536
+ });
2537
+ break;
2538
+ } else {
2539
+ imageData = imageStr;
2540
+ }
2541
+ const finalMimeType = extractedMimeType || "image/jpeg";
2542
+ const dataUri = imageData.startsWith("data:") ? imageData : createDataUri(imageData, finalMimeType);
2419
2543
  parts.push({
2420
2544
  type: "file",
2421
- url: part.image.toString(),
2422
- mediaType: part.mediaType || "unknown",
2545
+ url: dataUri,
2546
+ mediaType: finalMimeType,
2423
2547
  providerMetadata: part.providerOptions
2424
2548
  });
2425
2549
  break;
2426
- case "file":
2550
+ }
2551
+ case "file": {
2427
2552
  if (part.data instanceof URL) {
2428
- parts.push({
2429
- type: "file",
2430
- url: part.data.toString(),
2431
- mediaType: part.mediaType,
2432
- providerMetadata: part.providerOptions
2433
- });
2434
- } else {
2435
- try {
2553
+ const urlStr = part.data.toString();
2554
+ let extractedMimeType = part.mediaType;
2555
+ const parsed = parseDataUri(urlStr);
2556
+ if (parsed.isDataUri) {
2557
+ if (!extractedMimeType && parsed.mimeType) {
2558
+ extractedMimeType = parsed.mimeType;
2559
+ }
2560
+ if (parsed.base64Content !== urlStr) {
2561
+ const dataUri = createDataUri(parsed.base64Content, extractedMimeType || "image/png");
2562
+ parts.push({
2563
+ type: "file",
2564
+ url: dataUri,
2565
+ mediaType: extractedMimeType || "image/png",
2566
+ providerMetadata: part.providerOptions
2567
+ });
2568
+ } else {
2569
+ parts.push({
2570
+ type: "file",
2571
+ url: urlStr,
2572
+ mediaType: part.mediaType || "image/png",
2573
+ providerMetadata: part.providerOptions
2574
+ });
2575
+ }
2576
+ } else {
2436
2577
  parts.push({
2437
2578
  type: "file",
2438
- mediaType: part.mediaType,
2439
- url: convertDataContentToBase64String(part.data),
2579
+ url: urlStr,
2580
+ mediaType: part.mediaType || "application/octet-stream",
2440
2581
  providerMetadata: part.providerOptions
2441
2582
  });
2583
+ }
2584
+ } else {
2585
+ try {
2586
+ const base64Data = convertDataContentToBase64String(part.data);
2587
+ let extractedMimeType = part.mediaType;
2588
+ const parsed = parseDataUri(base64Data);
2589
+ if (parsed.isDataUri) {
2590
+ if (!extractedMimeType && parsed.mimeType) {
2591
+ extractedMimeType = parsed.mimeType;
2592
+ }
2593
+ const dataUri = createDataUri(parsed.base64Content, extractedMimeType || "image/png");
2594
+ parts.push({
2595
+ type: "file",
2596
+ url: dataUri,
2597
+ mediaType: extractedMimeType || "image/png",
2598
+ providerMetadata: part.providerOptions
2599
+ });
2600
+ } else {
2601
+ const dataUri = createDataUri(base64Data, part.mediaType || "image/png");
2602
+ parts.push({
2603
+ type: "file",
2604
+ url: dataUri,
2605
+ mediaType: part.mediaType || "image/png",
2606
+ providerMetadata: part.providerOptions
2607
+ });
2608
+ }
2442
2609
  } catch (error) {
2443
2610
  console.error(`Failed to convert binary data to base64 in CoreMessage file part: ${error}`, error);
2444
2611
  }
2445
2612
  }
2446
2613
  break;
2614
+ }
2447
2615
  }
2448
2616
  }
2449
2617
  }
@@ -2549,7 +2717,7 @@ var MessageList = class _MessageList {
2549
2717
  key += part.mediaType;
2550
2718
  }
2551
2719
  if (part.type === `image`) {
2552
- key += part.image instanceof URL ? part.image.toString() : part.image.toString().length;
2720
+ key += getImageCacheKey(part.image);
2553
2721
  key += part.mediaType;
2554
2722
  }
2555
2723
  }
@@ -2586,5 +2754,5 @@ function convertMessages(messages) {
2586
2754
  }
2587
2755
 
2588
2756
  export { DefaultGeneratedFile, DefaultGeneratedFileWithType, MessageList, convertMessages };
2589
- //# sourceMappingURL=chunk-BGE27UEX.js.map
2590
- //# sourceMappingURL=chunk-BGE27UEX.js.map
2757
+ //# sourceMappingURL=chunk-HF7HXOCC.js.map
2758
+ //# sourceMappingURL=chunk-HF7HXOCC.js.map