@mastra/ai-sdk 1.6.2-alpha.1 → 1.6.2-alpha.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @mastra/ai-sdk
2
2
 
3
+ ## 1.6.2-alpha.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Fixed a crash in the AI SDK stream transformer when a supervisor agent delegates to a remote A2A agent (A2AAgent) through chatRoute() or handleChatStream. A2A sub-agent streams do not emit a start chunk and use a flat finish payload, which caused the UI stream to end with "Cannot read properties of undefined" errors. The remote agent's answer now streams to the client correctly. ([#19443](https://github.com/mastra-ai/mastra/pull/19443))
8
+
9
+ The same guard now also covers resumed sub-agent streams, which skip the start chunk as well and could crash or corrupt the delegation state on tool calls and structured output.
10
+
3
11
  ## 1.6.2-alpha.1
4
12
 
5
13
  ### Patch Changes
package/dist/index.cjs CHANGED
@@ -10846,23 +10846,26 @@ function transformAgent(payload, bufferedSteps) {
10846
10846
  hasChanged = true;
10847
10847
  break;
10848
10848
  }
10849
- case "finish":
10849
+ case "finish": {
10850
+ const finishRun = ensureAgentRunState(bufferedSteps, payload.runId);
10851
+ const finishPayload = payload.payload;
10850
10852
  bufferedSteps.set(payload.runId, {
10851
- ...bufferedSteps.get(payload.runId),
10852
- finishReason: payload.payload.stepResult.reason,
10853
- usage: payload.payload?.output?.usage,
10854
- warnings: payload.payload?.stepResult?.warnings,
10855
- steps: bufferedSteps.get(payload.runId).steps,
10853
+ ...finishRun,
10854
+ finishReason: finishPayload.stepResult?.reason ?? finishPayload.finishReason ?? null,
10855
+ usage: finishPayload.output?.usage ?? finishPayload.usage,
10856
+ warnings: finishPayload.stepResult?.warnings,
10857
+ steps: finishRun.steps,
10856
10858
  status: "finished",
10857
10859
  response: {
10858
- ...bufferedSteps.get(payload.runId).response,
10859
- ...payload.payload.response || {}
10860
+ ...finishRun.response,
10861
+ ...finishPayload.response || {}
10860
10862
  }
10861
10863
  });
10862
10864
  hasChanged = true;
10863
10865
  break;
10866
+ }
10864
10867
  case "text-delta": {
10865
- const prevData = bufferedSteps.get(payload.runId);
10868
+ const prevData = ensureAgentRunState(bufferedSteps, payload.runId);
10866
10869
  bufferedSteps.set(payload.runId, {
10867
10870
  ...prevData,
10868
10871
  text: `${prevData.text}${payload.payload.text}`
@@ -10870,38 +10873,43 @@ function transformAgent(payload, bufferedSteps) {
10870
10873
  hasChanged = true;
10871
10874
  break;
10872
10875
  }
10873
- case "reasoning-delta":
10876
+ case "reasoning-delta": {
10877
+ const reasoningRun = ensureAgentRunState(bufferedSteps, payload.runId);
10874
10878
  bufferedSteps.set(payload.runId, {
10875
- ...bufferedSteps.get(payload.runId),
10876
- reasoning: [...bufferedSteps.get(payload.runId).reasoning, payload.payload.text]
10879
+ ...reasoningRun,
10880
+ reasoning: [...reasoningRun.reasoning, payload.payload.text]
10877
10881
  });
10878
10882
  hasChanged = true;
10879
10883
  break;
10880
- case "source":
10884
+ }
10885
+ case "source": {
10886
+ const sourceRun = ensureAgentRunState(bufferedSteps, payload.runId);
10881
10887
  bufferedSteps.set(payload.runId, {
10882
- ...bufferedSteps.get(payload.runId),
10883
- sources: [...bufferedSteps.get(payload.runId).sources, payload.payload]
10888
+ ...sourceRun,
10889
+ sources: [...sourceRun.sources, payload.payload]
10884
10890
  });
10885
10891
  hasChanged = true;
10886
10892
  break;
10887
- case "file":
10893
+ }
10894
+ case "file": {
10895
+ const fileRun = ensureAgentRunState(bufferedSteps, payload.runId);
10888
10896
  bufferedSteps.set(payload.runId, {
10889
- ...bufferedSteps.get(payload.runId),
10890
- files: [...bufferedSteps.get(payload.runId).files, payload.payload]
10897
+ ...fileRun,
10898
+ files: [...fileRun.files, payload.payload]
10891
10899
  });
10892
10900
  hasChanged = true;
10893
10901
  break;
10894
- case "tool-call":
10902
+ }
10903
+ case "tool-call": {
10904
+ const toolCallRun = ensureAgentRunState(bufferedSteps, payload.runId);
10895
10905
  bufferedSteps.set(payload.runId, {
10896
- ...bufferedSteps.get(payload.runId),
10897
- pendingToolCalls: removePendingToolCall(
10898
- bufferedSteps.get(payload.runId).pendingToolCalls,
10899
- payload.payload.toolCallId
10900
- ),
10901
- toolCalls: [...bufferedSteps.get(payload.runId).toolCalls, payload.payload]
10906
+ ...toolCallRun,
10907
+ pendingToolCalls: removePendingToolCall(toolCallRun.pendingToolCalls, payload.payload.toolCallId),
10908
+ toolCalls: [...toolCallRun.toolCalls, payload.payload]
10902
10909
  });
10903
10910
  hasChanged = true;
10904
10911
  break;
10912
+ }
10905
10913
  case "tool-result": {
10906
10914
  const toolResultRun = ensureAgentRunState(bufferedSteps, payload.runId);
10907
10915
  bufferedSteps.set(payload.runId, {
@@ -10914,14 +10922,14 @@ function transformAgent(payload, bufferedSteps) {
10914
10922
  }
10915
10923
  case "object-result":
10916
10924
  bufferedSteps.set(payload.runId, {
10917
- ...bufferedSteps.get(payload.runId),
10925
+ ...ensureAgentRunState(bufferedSteps, payload.runId),
10918
10926
  object: payload.object
10919
10927
  });
10920
10928
  hasChanged = true;
10921
10929
  break;
10922
10930
  case "object":
10923
10931
  bufferedSteps.set(payload.runId, {
10924
- ...bufferedSteps.get(payload.runId),
10932
+ ...ensureAgentRunState(bufferedSteps, payload.runId),
10925
10933
  object: payload.object
10926
10934
  });
10927
10935
  hasChanged = true;