@mastra/ai-sdk 1.10.7 → 1.11.0-alpha.1

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
@@ -13670,7 +13670,8 @@ function convertMastraChunkToAISDKBase({ chunk, mode = "stream", normalizeWarnin
13670
13670
  providerExecuted: chunk.payload.providerExecuted,
13671
13671
  toolName: chunk.payload.toolName,
13672
13672
  input: hasTransformedToolPayload(displayInputTransform) ? displayInputTransform.transformed : chunk.payload.args,
13673
- ...chunk.payload.observability ? { observability: chunk.payload.observability } : {}
13673
+ ...chunk.payload.observability ? { observability: chunk.payload.observability } : {},
13674
+ ...chunk.payload.toolMetadata ? { toolMetadata: chunk.payload.toolMetadata } : {}
13674
13675
  };
13675
13676
  case "tool-call-approval": return {
13676
13677
  type: "data-tool-call-approval",
@@ -13730,7 +13731,8 @@ function convertMastraChunkToAISDKBase({ chunk, mode = "stream", normalizeWarnin
13730
13731
  dynamic: !!chunk.payload.dynamic,
13731
13732
  providerMetadata: chunk.payload.providerMetadata,
13732
13733
  providerExecuted: chunk.payload.providerExecuted,
13733
- ...chunk.payload.observability ? { observability: chunk.payload.observability } : {}
13734
+ ...chunk.payload.observability ? { observability: chunk.payload.observability } : {},
13735
+ ...chunk.payload.toolMetadata ? { toolMetadata: chunk.payload.toolMetadata } : {}
13734
13736
  };
13735
13737
  case "tool-call-input-streaming-end": return {
13736
13738
  type: "tool-input-end",
@@ -14024,13 +14026,17 @@ function convertFullStreamChunkToUIMessageStream({ part, messageMetadataValue, s
14024
14026
  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {}
14025
14027
  };
14026
14028
  return;
14027
- case "tool-input-start": return {
14028
- type: "tool-input-start",
14029
- toolCallId: part.id,
14030
- toolName: part.toolName,
14031
- ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
14032
- ...part.dynamic != null ? { dynamic: part.dynamic } : {}
14033
- };
14029
+ case "tool-input-start": {
14030
+ const toolMetadata = part.toolMetadata;
14031
+ return {
14032
+ type: "tool-input-start",
14033
+ toolCallId: part.id,
14034
+ toolName: part.toolName,
14035
+ ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
14036
+ ...part.dynamic != null ? { dynamic: part.dynamic } : {},
14037
+ ...toolMetadata != null ? { toolMetadata } : {}
14038
+ };
14039
+ }
14034
14040
  case "tool-input-delta": return {
14035
14041
  type: "tool-input-delta",
14036
14042
  toolCallId: part.id,
@@ -14038,6 +14044,7 @@ function convertFullStreamChunkToUIMessageStream({ part, messageMetadataValue, s
14038
14044
  };
14039
14045
  case "tool-call": {
14040
14046
  const observability = part.observability;
14047
+ const toolMetadata = part.toolMetadata;
14041
14048
  return {
14042
14049
  type: "tool-input-available",
14043
14050
  toolCallId: part.toolCallId,
@@ -14046,7 +14053,10 @@ function convertFullStreamChunkToUIMessageStream({ part, messageMetadataValue, s
14046
14053
  ...part.providerExecuted != null ? { providerExecuted: part.providerExecuted } : {},
14047
14054
  ...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : {},
14048
14055
  ...part.dynamic != null ? { dynamic: part.dynamic } : {},
14049
- ...observability != null ? { toolMetadata: { __mastraObservability: observability } } : {}
14056
+ ...observability != null || toolMetadata != null ? { toolMetadata: {
14057
+ ...toolMetadata,
14058
+ ...observability != null ? { __mastraObservability: observability } : {}
14059
+ } } : {}
14050
14060
  };
14051
14061
  }
14052
14062
  case "tool-approval-request": return {
@@ -14258,7 +14268,10 @@ function createAgentStreamToAISDKTransformer(convertMastraChunkToAISDK, { lastMe
14258
14268
  part: p,
14259
14269
  sendReasoning,
14260
14270
  sendSources,
14261
- messageMetadataValue: p ? messageMetadata?.({ part: p }) : void 0,
14271
+ messageMetadataValue: p ? messageMetadata?.({
14272
+ part: p,
14273
+ traceId: chunk.traceId
14274
+ }) : void 0,
14262
14275
  sendStart,
14263
14276
  sendFinish,
14264
14277
  responseMessageId: lastMessageId,
@@ -15423,7 +15436,7 @@ function extractV6NativeApprovals(messages) {
15423
15436
  /** Streams exact approval targets sequentially as one v6/v7 UI-message response. */
15424
15437
  function streamV6ApprovalResumes(args) {
15425
15438
  const { agent, approvals, baseOptions, structuredOutput, messages, lastMessageId } = args;
15426
- const { sendStart, sendFinish, sendReasoning, sendSources, onError, messageMetadata, experimentalTransform } = args;
15439
+ const { sendStart, sendFinish, sendReasoning, sendSources, includeSubAgentMetadata, onError, messageMetadata, experimentalTransform } = args;
15427
15440
  return (args.version === "v7" ? createUIMessageStream : createUIMessageStream$1)({
15428
15441
  originalMessages: messages,
15429
15442
  onError,
@@ -15447,6 +15460,7 @@ function streamV6ApprovalResumes(args) {
15447
15460
  sendFinish,
15448
15461
  sendReasoning,
15449
15462
  sendSources,
15463
+ includeSubAgentMetadata,
15450
15464
  experimentalTransform,
15451
15465
  onError,
15452
15466
  messageMetadata
@@ -15493,7 +15507,7 @@ const CREDENTIAL_HEADER_NAMES = /* @__PURE__ */ new Set([
15493
15507
  "x-goog-api-key",
15494
15508
  "cookie"
15495
15509
  ]);
15496
- async function handleChatStream({ mastra, agentId, agentVersion, params, defaultOptions, experimentalTransform, version = "v5", sendStart = true, sendFinish = true, sendReasoning = false, sendSources = false, onError, messageMetadata }) {
15510
+ async function handleChatStream({ mastra, agentId, agentVersion, params, defaultOptions, experimentalTransform, version = "v5", sendStart = true, sendFinish = true, sendReasoning = false, sendSources = false, includeSubAgentMetadata = true, onError, messageMetadata }) {
15497
15511
  const { messages, resumeData, runId, requestContext, trigger, ...rest } = params;
15498
15512
  if (resumeData && !runId) throw new Error("runId is required when resumeData is provided");
15499
15513
  const baseAgent = mastra.getAgentById(agentId);
@@ -15545,6 +15559,7 @@ async function handleChatStream({ mastra, agentId, agentVersion, params, default
15545
15559
  sendFinish,
15546
15560
  sendReasoning,
15547
15561
  sendSources,
15562
+ includeSubAgentMetadata,
15548
15563
  onError,
15549
15564
  experimentalTransform: effectiveExperimentalTransform,
15550
15565
  messageMetadata
@@ -15568,6 +15583,7 @@ async function handleChatStream({ mastra, agentId, agentVersion, params, default
15568
15583
  sendFinish,
15569
15584
  sendReasoning,
15570
15585
  sendSources,
15586
+ includeSubAgentMetadata,
15571
15587
  experimentalTransform: effectiveExperimentalTransform,
15572
15588
  onError,
15573
15589
  messageMetadata
@@ -15584,6 +15600,7 @@ async function handleChatStream({ mastra, agentId, agentVersion, params, default
15584
15600
  sendFinish,
15585
15601
  sendReasoning,
15586
15602
  sendSources,
15603
+ includeSubAgentMetadata,
15587
15604
  experimentalTransform: effectiveExperimentalTransform,
15588
15605
  onError,
15589
15606
  messageMetadata
@@ -15604,9 +15621,10 @@ async function handleChatStream({ mastra, agentId, agentVersion, params, default
15604
15621
  * @param {boolean} [options.sendFinish=true] - Whether to send finish events in the stream
15605
15622
  * @param {boolean} [options.sendReasoning=false] - Whether to include reasoning steps in the stream
15606
15623
  * @param {boolean} [options.sendSources=false] - Whether to include source citations in the stream
15624
+ * @param {boolean} [options.includeSubAgentMetadata=true] - Whether to emit `data-tool-agent` / `data-tool-agent-step` parts with sub-agent progress
15607
15625
  * @param {number} [options.heartbeatMs] - Target interval for periodic SSE comment heartbeats. Already-buffered source events and stream lifecycle signals take priority. Values up to 0 disable heartbeats. `NaN`, positive infinity, and values above 2,147,483,647 throw a `RangeError`.
15608
15626
  * @param {(error: unknown) => string} [options.onError] - Custom error serializer streamed to the client. When omitted, errors are passed through a default serializer that strips sensitive fields (e.g. `APICallError.requestBodyValues`, which holds the system prompt) before they reach the client.
15609
- * @param {Function} [options.messageMetadata] - Maps stream parts to metadata attached to AI SDK start and finish message parts.
15627
+ * @param {Function} [options.messageMetadata] - Maps stream parts to metadata attached to AI SDK start and finish message parts. Receives `{ part, traceId }`.
15610
15628
  *
15611
15629
  * @returns {ReturnType<typeof registerApiRoute>} A registered API route handler
15612
15630
  *
@@ -15638,7 +15656,7 @@ async function handleChatStream({ mastra, agentId, agentVersion, params, default
15638
15656
  * - If both `agent` and `:agentId` are present, a warning is logged and the fixed `agent` takes precedence
15639
15657
  * - Request context from the incoming request overrides `defaultOptions.requestContext` if both are present
15640
15658
  */
15641
- function chatRoute({ path = "/chat/:agentId", agent, defaultOptions, experimentalTransform, version = "v5", agentVersion, sendStart = true, sendFinish = true, sendReasoning = false, sendSources = false, heartbeatMs, onError, messageMetadata }) {
15659
+ function chatRoute({ path = "/chat/:agentId", agent, defaultOptions, experimentalTransform, version = "v5", agentVersion, sendStart = true, sendFinish = true, sendReasoning = false, sendSources = false, includeSubAgentMetadata = true, heartbeatMs, onError, messageMetadata }) {
15642
15660
  if (!agent && !path.includes("/:agentId")) throw new Error("Path must include :agentId to route to the correct agent or pass the agent explicitly");
15643
15661
  assertValidHeartbeatMs(heartbeatMs);
15644
15662
  return registerApiRoute(path, {
@@ -15767,6 +15785,7 @@ function chatRoute({ path = "/chat/:agentId", agent, defaultOptions, experimenta
15767
15785
  sendFinish,
15768
15786
  sendReasoning,
15769
15787
  sendSources,
15788
+ includeSubAgentMetadata,
15770
15789
  onError
15771
15790
  };
15772
15791
  let response;