@mastra/ai-sdk 1.0.0-beta.12 → 1.0.0-beta.14

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.
package/dist/index.js CHANGED
@@ -3,7 +3,7 @@ import * as z4 from 'zod/v4';
3
3
  import { z } from 'zod/v4';
4
4
  import { ZodFirstPartyTypeKind } from 'zod/v3';
5
5
  import { convertFullStreamChunkToMastra, DefaultGeneratedFile, DefaultGeneratedFileWithType } from '@mastra/core/stream';
6
- import { TripWire, MessageList } from '@mastra/core/agent';
6
+ import { TripWire, MessageList, aiV5ModelMessageToV2PromptMessage } from '@mastra/core/agent';
7
7
  import { RequestContext } from '@mastra/core/di';
8
8
  import { WorkingMemory, MessageHistory, SemanticRecall } from '@mastra/core/processors';
9
9
 
@@ -218,7 +218,7 @@ function secureJsonParse(text2) {
218
218
  Error.stackTraceLimit = stackTraceLimit;
219
219
  }
220
220
  }
221
- var validatorSymbol = Symbol.for("vercel.ai.validator");
221
+ var validatorSymbol = /* @__PURE__ */ Symbol.for("vercel.ai.validator");
222
222
  function validator(validate) {
223
223
  return { [validatorSymbol]: true, validate };
224
224
  }
@@ -301,7 +301,7 @@ var getRelativePath = (pathA, pathB) => {
301
301
  }
302
302
  return [(pathA.length - i).toString(), ...pathB.slice(i)].join("/");
303
303
  };
304
- var ignoreOverride = Symbol(
304
+ var ignoreOverride = /* @__PURE__ */ Symbol(
305
305
  "Let zodToJsonSchema decide on which parser to use"
306
306
  );
307
307
  var defaultOptions = {
@@ -1421,7 +1421,7 @@ function zodSchema(zodSchema2, options) {
1421
1421
  return zod3Schema(zodSchema2);
1422
1422
  }
1423
1423
  }
1424
- var schemaSymbol = Symbol.for("vercel.ai.schema");
1424
+ var schemaSymbol = /* @__PURE__ */ Symbol.for("vercel.ai.schema");
1425
1425
  function jsonSchema(jsonSchema2, {
1426
1426
  validate
1427
1427
  } = {}) {
@@ -2978,7 +2978,8 @@ function convertMastraChunkToAISDKv5({
2978
2978
  runId: chunk.runId,
2979
2979
  toolCallId: chunk.payload.toolCallId,
2980
2980
  toolName: chunk.payload.toolName,
2981
- args: chunk.payload.args
2981
+ args: chunk.payload.args,
2982
+ resumeSchema: chunk.payload.resumeSchema
2982
2983
  }
2983
2984
  };
2984
2985
  case "tool-call-suspended":
@@ -2989,7 +2990,8 @@ function convertMastraChunkToAISDKv5({
2989
2990
  runId: chunk.runId,
2990
2991
  toolCallId: chunk.payload.toolCallId,
2991
2992
  toolName: chunk.payload.toolName,
2992
- suspendPayload: chunk.payload.suspendPayload
2993
+ suspendPayload: chunk.payload.suspendPayload,
2994
+ resumeSchema: chunk.payload.resumeSchema
2993
2995
  }
2994
2996
  };
2995
2997
  case "tool-call-input-streaming-start":
@@ -3327,7 +3329,7 @@ function convertFullStreamChunkToUIMessageStream({
3327
3329
  }
3328
3330
 
3329
3331
  // src/transformers.ts
3330
- var PRIMITIVE_CACHE_SYMBOL = Symbol("primitive-cache");
3332
+ var PRIMITIVE_CACHE_SYMBOL = /* @__PURE__ */ Symbol("primitive-cache");
3331
3333
  function WorkflowStreamToAISDKTransformer({
3332
3334
  includeTextStreamParts
3333
3335
  } = {}) {
@@ -3364,7 +3366,15 @@ function AgentNetworkToAISDKTransformer() {
3364
3366
  },
3365
3367
  transform(chunk, controller) {
3366
3368
  const transformed = transformNetwork(chunk, bufferedNetworks);
3367
- if (transformed) controller.enqueue(transformed);
3369
+ if (transformed) {
3370
+ if (Array.isArray(transformed)) {
3371
+ for (const item of transformed) {
3372
+ controller.enqueue(item);
3373
+ }
3374
+ } else {
3375
+ controller.enqueue(transformed);
3376
+ }
3377
+ }
3368
3378
  }
3369
3379
  });
3370
3380
  }
@@ -3709,7 +3719,8 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
3709
3719
  name: payload.payload.networkId,
3710
3720
  steps: [],
3711
3721
  usage: null,
3712
- output: null
3722
+ output: null,
3723
+ hasEmittedText: false
3713
3724
  });
3714
3725
  }
3715
3726
  const current = bufferedNetworks.get(payload.runId);
@@ -3744,6 +3755,7 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
3744
3755
  case "routing-agent-text-start": {
3745
3756
  const current = bufferedNetworks.get(payload.runId);
3746
3757
  if (!current) return null;
3758
+ current.hasEmittedText = true;
3747
3759
  return {
3748
3760
  type: "text-start",
3749
3761
  id: payload.runId
@@ -3752,6 +3764,7 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
3752
3764
  case "routing-agent-text-delta": {
3753
3765
  const current = bufferedNetworks.get(payload.runId);
3754
3766
  if (!current) return null;
3767
+ current.hasEmittedText = true;
3755
3768
  return {
3756
3769
  type: "text-delta",
3757
3770
  id: payload.runId,
@@ -3926,15 +3939,25 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
3926
3939
  case "network-execution-event-step-finish": {
3927
3940
  const current = bufferedNetworks.get(payload.runId);
3928
3941
  if (!current) return null;
3929
- return {
3942
+ const resultText = payload.payload?.result;
3943
+ const dataNetworkChunk = {
3930
3944
  type: isNested ? "data-tool-network" : "data-network",
3931
3945
  id: payload.runId,
3932
3946
  data: {
3933
3947
  ...current,
3934
3948
  status: "finished",
3935
- output: payload.payload?.result ?? current.output
3949
+ output: resultText ?? current.output
3936
3950
  }
3937
3951
  };
3952
+ if (!current.hasEmittedText && resultText && typeof resultText === "string" && resultText.length > 0) {
3953
+ current.hasEmittedText = true;
3954
+ return [
3955
+ { type: "text-start", id: payload.runId },
3956
+ { type: "text-delta", id: payload.runId, delta: resultText },
3957
+ dataNetworkChunk
3958
+ ];
3959
+ }
3960
+ return dataNetworkChunk;
3938
3961
  }
3939
3962
  case "network-execution-event-finish": {
3940
3963
  const current = bufferedNetworks.get(payload.runId);
@@ -3950,6 +3973,10 @@ function transformNetwork(payload, bufferedNetworks, isNested) {
3950
3973
  }
3951
3974
  };
3952
3975
  }
3976
+ case "network-object":
3977
+ case "network-object-result": {
3978
+ return null;
3979
+ }
3953
3980
  default: {
3954
3981
  if (isAgentExecutionDataChunkType(payload)) {
3955
3982
  if (!("data" in payload.payload)) {
@@ -4078,7 +4105,7 @@ async function handleChatStream({
4078
4105
  sendReasoning = false,
4079
4106
  sendSources = false
4080
4107
  }) {
4081
- const { messages, resumeData, runId, requestContext, ...rest } = params;
4108
+ const { messages, resumeData, runId, requestContext, trigger, ...rest } = params;
4082
4109
  if (resumeData && !runId) {
4083
4110
  throw new Error("runId is required when resumeData is provided");
4084
4111
  }
@@ -4089,20 +4116,24 @@ async function handleChatStream({
4089
4116
  if (!Array.isArray(messages)) {
4090
4117
  throw new Error("Messages must be an array of UIMessage objects");
4091
4118
  }
4092
- const mergedOptions = {
4093
- ...defaultOptions2,
4094
- ...rest,
4095
- ...runId && { runId },
4096
- requestContext: requestContext || defaultOptions2?.requestContext
4097
- };
4098
- const result = resumeData ? await agentObj.resumeStream(resumeData, mergedOptions) : await agentObj.stream(messages, mergedOptions);
4099
4119
  let lastMessageId;
4100
- if (messages.length) {
4120
+ let messagesToSend = messages;
4121
+ if (messages.length > 0) {
4101
4122
  const lastMessage = messages[messages.length - 1];
4102
4123
  if (lastMessage?.role === "assistant") {
4103
4124
  lastMessageId = lastMessage.id;
4125
+ if (trigger === "regenerate-message") {
4126
+ messagesToSend = messages.slice(0, -1);
4127
+ }
4104
4128
  }
4105
4129
  }
4130
+ const mergedOptions = {
4131
+ ...defaultOptions2,
4132
+ ...rest,
4133
+ ...runId && { runId },
4134
+ requestContext: requestContext || defaultOptions2?.requestContext
4135
+ };
4136
+ const result = resumeData ? await agentObj.resumeStream(resumeData, mergedOptions) : await agentObj.stream(messagesToSend, mergedOptions);
4106
4137
  return createUIMessageStream({
4107
4138
  originalMessages: messages,
4108
4139
  execute: async ({ writer }) => {
@@ -4609,7 +4640,7 @@ function createProcessorMiddleware(options) {
4609
4640
  }
4610
4641
  }
4611
4642
  }
4612
- const newPrompt = messageList.get.all.aiV5.prompt().map(MessageList.aiV5ModelMessageToV2PromptMessage);
4643
+ const newPrompt = messageList.get.all.aiV5.prompt().map(aiV5ModelMessageToV2PromptMessage);
4613
4644
  return {
4614
4645
  ...params,
4615
4646
  prompt: newPrompt