@mastra/ai-sdk 1.6.3 → 1.7.0-alpha.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.
@@ -0,0 +1,17 @@
1
+ import type { ChunkType, MastraStreamTransform, MastraStreamTransformOptions, SmoothStreamOptions } from '@mastra/core/stream';
2
+ /**
3
+ * Creates a fresh transform for a Mastra agent stream.
4
+ *
5
+ * Transform factories are reusable across requests, unlike `TransformStream`
6
+ * instances, which can only be consumed once.
7
+ */
8
+ export type { MastraStreamTransform, MastraStreamTransformOptions };
9
+ /**
10
+ * Creates an experimental stream transform that emits text and reasoning in
11
+ * consistent, delayed chunks.
12
+ *
13
+ * @experimental This API may change in a future release.
14
+ */
15
+ export declare function smoothStream<OUTPUT = undefined>(options?: SmoothStreamOptions): MastraStreamTransform<OUTPUT>;
16
+ export declare function applyMastraStreamTransforms<OUTPUT>(stream: ReadableStream<ChunkType<OUTPUT>>, transforms?: MastraStreamTransformOptions<OUTPUT>): ReadableStream<ChunkType<OUTPUT>>;
17
+ //# sourceMappingURL=smooth-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"smooth-stream.d.ts","sourceRoot":"","sources":["../src/smooth-stream.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,qBAAqB,EACrB,4BAA4B,EAC5B,mBAAmB,EACpB,MAAM,qBAAqB,CAAC;AAE7B;;;;;GAKG;AACH,YAAY,EAAE,qBAAqB,EAAE,4BAA4B,EAAE,CAAC;AAEpE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAE7G;AAED,wBAAgB,2BAA2B,CAAC,MAAM,EAChD,MAAM,EAAE,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACzC,UAAU,CAAC,EAAE,4BAA4B,CAAC,MAAM,CAAC,GAChD,cAAc,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAOnC"}
package/dist/ui.cjs CHANGED
@@ -1,41 +1,115 @@
1
- 'use strict';
2
-
3
- var messageList = require('@mastra/core/agent/message-list');
4
-
5
- // src/convert-messages.ts
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ let _mastra_core_agent_message_list = require("@mastra/core/agent/message-list");
3
+ //#region src/convert-messages.ts
6
4
  function isSystemReminderUIMessage(message) {
7
- if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {
8
- return true;
9
- }
10
- if (message.role !== "user") {
11
- return false;
12
- }
13
- if (Array.isArray(message.parts)) {
14
- return message.parts.some(
15
- (part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder")
16
- );
17
- }
18
- return typeof message.content === "string" && message.content.includes("<system-reminder");
5
+ if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) return true;
6
+ if (message.role !== "user") return false;
7
+ if (Array.isArray(message.parts)) return message.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder"));
8
+ return typeof message.content === "string" && message.content.includes("<system-reminder");
19
9
  }
20
10
  function filterSystemReminderUIMessages(messages) {
21
- return messages.filter((message) => !isSystemReminderUIMessage(message));
11
+ return messages.filter((message) => !isSystemReminderUIMessage(message));
22
12
  }
23
13
  function toAISdkMessages(messages, options = {}) {
24
- const list = new messageList.MessageList().add(messages, `memory`);
25
- if (options.version === "v6") {
26
- return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
27
- }
28
- return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
14
+ const list = new _mastra_core_agent_message_list.MessageList().add(messages, `memory`);
15
+ if (options.version === "v6") return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
16
+ return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
29
17
  }
18
+ /**
19
+ * Converts messages from various input formats to AI SDK V5 UI message format.
20
+ *
21
+ * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.
22
+ *
23
+ * @param messages - Messages to convert. Accepts:
24
+ * - `string` - A single text message (treated as user role)
25
+ * - `string[]` - Multiple text messages
26
+ * - `MessageInput` - A single message object in any supported format:
27
+ * - AI SDK V5 UIMessage or ModelMessage
28
+ * - AI SDK V4 UIMessage or CoreMessage
29
+ * - MastraDBMessage (internal storage format)
30
+ * - MastraMessageV1 (legacy format)
31
+ * - `MessageInput[]` - Array of message objects
32
+ *
33
+ * @returns An array of AI SDK V5 UIMessage objects with:
34
+ * - `id` - Unique message identifier
35
+ * - `role` - 'user' | 'assistant' | 'system'
36
+ * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)
37
+ * - `metadata` - Optional metadata including createdAt, threadId, resourceId
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * import { toAISdkV5Messages } from '@mastra/ai-sdk';
42
+ *
43
+ * // Convert simple text messages
44
+ * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);
45
+ *
46
+ * // Convert AI SDK V4 messages to V5 format
47
+ * const v4Messages = [
48
+ * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },
49
+ * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }
50
+ * ];
51
+ * const v5Messages = toAISdkV5Messages(v4Messages);
52
+ *
53
+ * // Use with useChat or similar AI SDK V5 hooks
54
+ * const { messages: chatMessages } = useChat({
55
+ * initialMessages: toAISdkV5Messages(storedMessages)
56
+ * });
57
+ * ```
58
+ */
30
59
  function toAISdkV5Messages(messages) {
31
- return filterSystemReminderUIMessages(toAISdkMessages(messages));
60
+ return filterSystemReminderUIMessages(toAISdkMessages(messages));
32
61
  }
62
+ /**
63
+ * Converts messages from various input formats to AI SDK V4 UI message format.
64
+ *
65
+ * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.
66
+ *
67
+ * @param messages - Messages to convert. Accepts:
68
+ * - `string` - A single text message (treated as user role)
69
+ * - `string[]` - Multiple text messages
70
+ * - `MessageInput` - A single message object in any supported format:
71
+ * - AI SDK V5 UIMessage or ModelMessage
72
+ * - AI SDK V4 UIMessage or CoreMessage
73
+ * - MastraDBMessage (internal storage format)
74
+ * - MastraMessageV1 (legacy format)
75
+ * - `MessageInput[]` - Array of message objects
76
+ *
77
+ * @returns An array of AI SDK V4 UIMessage objects with:
78
+ * - `id` - Unique message identifier
79
+ * - `role` - 'user' | 'assistant' | 'system'
80
+ * - `content` - Text content of the message
81
+ * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)
82
+ * - `createdAt` - Message creation timestamp
83
+ * - `toolInvocations` - Optional array of tool invocations (for assistant messages)
84
+ * - `experimental_attachments` - Optional file attachments
85
+ * - `metadata` - Optional custom metadata
86
+ *
87
+ * @example
88
+ * ```typescript
89
+ * import { toAISdkV4Messages } from '@mastra/ai-sdk';
90
+ *
91
+ * // Convert simple text messages
92
+ * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);
93
+ *
94
+ * // Convert AI SDK V5 messages to V4 format for legacy compatibility
95
+ * const v5Messages = [
96
+ * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },
97
+ * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }
98
+ * ];
99
+ * const v4Messages = toAISdkV4Messages(v5Messages);
100
+ *
101
+ * // Use with AI SDK V4 useChat hook
102
+ * const { messages: chatMessages } = useChat({
103
+ * initialMessages: toAISdkV4Messages(storedMessages)
104
+ * });
105
+ * ```
106
+ */
33
107
  function toAISdkV4Messages(messages) {
34
- return filterSystemReminderUIMessages(new messageList.MessageList().add(messages, `memory`).get.all.aiV4.ui());
108
+ return filterSystemReminderUIMessages(new _mastra_core_agent_message_list.MessageList().add(messages, `memory`).get.all.aiV4.ui());
35
109
  }
36
-
110
+ //#endregion
37
111
  exports.toAISdkMessages = toAISdkMessages;
38
112
  exports.toAISdkV4Messages = toAISdkV4Messages;
39
113
  exports.toAISdkV5Messages = toAISdkV5Messages;
40
- //# sourceMappingURL=ui.cjs.map
114
+
41
115
  //# sourceMappingURL=ui.cjs.map
package/dist/ui.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/convert-messages.ts"],"names":["MessageList"],"mappings":";;;;;AAIA,SAAS,0BAA0B,OAAA,EAKhC;AAED,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,cAAA,IAAkB,OAAA,CAAQ,UAAU,uBAAA,EAAyB;AACjF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChC,IAAA,OAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,MACnB,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,kBAAkB;AAAA,KACxG;AAAA,EACF;AAEA,EAAA,OAAO,OAAO,OAAA,CAAQ,OAAA,KAAY,YAAY,OAAA,CAAQ,OAAA,CAAQ,SAAS,kBAAkB,CAAA;AAC3F;AAEA,SAAS,+BAEP,QAAA,EAAoB;AACpB,EAAA,OAAO,SAAS,MAAA,CAAO,CAAA,OAAA,KAAW,CAAC,yBAAA,CAA0B,OAAO,CAAC,CAAA;AACvE;AA8CO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,GAAoC,EAAC,EACN;AAC/B,EAAA,MAAM,OAAO,IAAIA,uBAAA,EAAY,CAAE,GAAA,CAAI,UAAU,CAAA,MAAA,CAAQ,CAAA;AACrD,EAAA,IAAI,OAAA,CAAQ,YAAY,IAAA,EAAM;AAC5B,IAAA,OAAO,+BAA+B,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,+BAA+B,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC9D;AA2CO,SAAS,kBAAkB,QAAA,EAA4B;AAC5D,EAAA,OAAO,8BAAA,CAA+B,eAAA,CAAgB,QAAQ,CAAC,CAAA;AACjE;AA+CO,SAAS,kBAAkB,QAAA,EAA4B;AAC5D,EAAA,OAAO,8BAAA,CAA+B,IAAIA,uBAAA,EAAY,CAAE,GAAA,CAAI,QAAA,EAAU,CAAA,MAAA,CAAQ,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AACnG","file":"ui.cjs","sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"]}
1
+ {"version":3,"file":"ui.cjs","names":["MessageList"],"sources":["../src/convert-messages.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"],"mappings":";;;AAIA,SAAS,0BAA0B,SAKhC;CAED,IAAI,QAAQ,UAAU,kBAAkB,QAAQ,UAAU,yBACxD,OAAO;CAGT,IAAI,QAAQ,SAAS,QACnB,OAAO;CAIT,IAAI,MAAM,QAAQ,QAAQ,KAAK,GAC7B,OAAO,QAAQ,MAAM,MACnB,SAAQ,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,kBAAkB,CACxG;CAGF,OAAO,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SAAS,kBAAkB;AAC3F;AAEA,SAAS,+BAEP,UAAoB;CACpB,OAAO,SAAS,QAAO,YAAW,CAAC,0BAA0B,OAAO,CAAC;AACvE;AA8CA,SAAgB,gBACd,UACA,UAAoC,CAAC,GACN;CAC/B,MAAM,OAAO,IAAIA,gCAAAA,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ;CACrD,IAAI,QAAQ,YAAY,MACtB,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;CAE9D,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,gBAAgB,QAAQ,CAAC;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,IAAIA,gCAAAA,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AACnG"}
package/dist/ui.js CHANGED
@@ -1,37 +1,112 @@
1
- import { MessageList } from '@mastra/core/agent/message-list';
2
-
3
- // src/convert-messages.ts
1
+ import { MessageList } from "@mastra/core/agent/message-list";
2
+ //#region src/convert-messages.ts
4
3
  function isSystemReminderUIMessage(message) {
5
- if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {
6
- return true;
7
- }
8
- if (message.role !== "user") {
9
- return false;
10
- }
11
- if (Array.isArray(message.parts)) {
12
- return message.parts.some(
13
- (part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder")
14
- );
15
- }
16
- return typeof message.content === "string" && message.content.includes("<system-reminder");
4
+ if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) return true;
5
+ if (message.role !== "user") return false;
6
+ if (Array.isArray(message.parts)) return message.parts.some((part) => part.type === "text" && typeof part.text === "string" && part.text.includes("<system-reminder"));
7
+ return typeof message.content === "string" && message.content.includes("<system-reminder");
17
8
  }
18
9
  function filterSystemReminderUIMessages(messages) {
19
- return messages.filter((message) => !isSystemReminderUIMessage(message));
10
+ return messages.filter((message) => !isSystemReminderUIMessage(message));
20
11
  }
21
12
  function toAISdkMessages(messages, options = {}) {
22
- const list = new MessageList().add(messages, `memory`);
23
- if (options.version === "v6") {
24
- return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
25
- }
26
- return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
13
+ const list = new MessageList().add(messages, `memory`);
14
+ if (options.version === "v6") return filterSystemReminderUIMessages(list.get.all.aiV6.ui());
15
+ return filterSystemReminderUIMessages(list.get.all.aiV5.ui());
27
16
  }
17
+ /**
18
+ * Converts messages from various input formats to AI SDK V5 UI message format.
19
+ *
20
+ * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.
21
+ *
22
+ * @param messages - Messages to convert. Accepts:
23
+ * - `string` - A single text message (treated as user role)
24
+ * - `string[]` - Multiple text messages
25
+ * - `MessageInput` - A single message object in any supported format:
26
+ * - AI SDK V5 UIMessage or ModelMessage
27
+ * - AI SDK V4 UIMessage or CoreMessage
28
+ * - MastraDBMessage (internal storage format)
29
+ * - MastraMessageV1 (legacy format)
30
+ * - `MessageInput[]` - Array of message objects
31
+ *
32
+ * @returns An array of AI SDK V5 UIMessage objects with:
33
+ * - `id` - Unique message identifier
34
+ * - `role` - 'user' | 'assistant' | 'system'
35
+ * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)
36
+ * - `metadata` - Optional metadata including createdAt, threadId, resourceId
37
+ *
38
+ * @example
39
+ * ```typescript
40
+ * import { toAISdkV5Messages } from '@mastra/ai-sdk';
41
+ *
42
+ * // Convert simple text messages
43
+ * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);
44
+ *
45
+ * // Convert AI SDK V4 messages to V5 format
46
+ * const v4Messages = [
47
+ * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },
48
+ * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }
49
+ * ];
50
+ * const v5Messages = toAISdkV5Messages(v4Messages);
51
+ *
52
+ * // Use with useChat or similar AI SDK V5 hooks
53
+ * const { messages: chatMessages } = useChat({
54
+ * initialMessages: toAISdkV5Messages(storedMessages)
55
+ * });
56
+ * ```
57
+ */
28
58
  function toAISdkV5Messages(messages) {
29
- return filterSystemReminderUIMessages(toAISdkMessages(messages));
59
+ return filterSystemReminderUIMessages(toAISdkMessages(messages));
30
60
  }
61
+ /**
62
+ * Converts messages from various input formats to AI SDK V4 UI message format.
63
+ *
64
+ * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.
65
+ *
66
+ * @param messages - Messages to convert. Accepts:
67
+ * - `string` - A single text message (treated as user role)
68
+ * - `string[]` - Multiple text messages
69
+ * - `MessageInput` - A single message object in any supported format:
70
+ * - AI SDK V5 UIMessage or ModelMessage
71
+ * - AI SDK V4 UIMessage or CoreMessage
72
+ * - MastraDBMessage (internal storage format)
73
+ * - MastraMessageV1 (legacy format)
74
+ * - `MessageInput[]` - Array of message objects
75
+ *
76
+ * @returns An array of AI SDK V4 UIMessage objects with:
77
+ * - `id` - Unique message identifier
78
+ * - `role` - 'user' | 'assistant' | 'system'
79
+ * - `content` - Text content of the message
80
+ * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)
81
+ * - `createdAt` - Message creation timestamp
82
+ * - `toolInvocations` - Optional array of tool invocations (for assistant messages)
83
+ * - `experimental_attachments` - Optional file attachments
84
+ * - `metadata` - Optional custom metadata
85
+ *
86
+ * @example
87
+ * ```typescript
88
+ * import { toAISdkV4Messages } from '@mastra/ai-sdk';
89
+ *
90
+ * // Convert simple text messages
91
+ * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);
92
+ *
93
+ * // Convert AI SDK V5 messages to V4 format for legacy compatibility
94
+ * const v5Messages = [
95
+ * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },
96
+ * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }
97
+ * ];
98
+ * const v4Messages = toAISdkV4Messages(v5Messages);
99
+ *
100
+ * // Use with AI SDK V4 useChat hook
101
+ * const { messages: chatMessages } = useChat({
102
+ * initialMessages: toAISdkV4Messages(storedMessages)
103
+ * });
104
+ * ```
105
+ */
31
106
  function toAISdkV4Messages(messages) {
32
- return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());
107
+ return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());
33
108
  }
34
-
109
+ //#endregion
35
110
  export { toAISdkMessages, toAISdkV4Messages, toAISdkV5Messages };
36
- //# sourceMappingURL=ui.js.map
111
+
37
112
  //# sourceMappingURL=ui.js.map
package/dist/ui.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/convert-messages.ts"],"names":[],"mappings":";;;AAIA,SAAS,0BAA0B,OAAA,EAKhC;AAED,EAAA,IAAI,OAAA,CAAQ,QAAA,EAAU,cAAA,IAAkB,OAAA,CAAQ,UAAU,uBAAA,EAAyB;AACjF,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,IAAI,OAAA,CAAQ,SAAS,MAAA,EAAQ;AAC3B,IAAA,OAAO,KAAA;AAAA,EACT;AAGA,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChC,IAAA,OAAO,QAAQ,KAAA,CAAM,IAAA;AAAA,MACnB,CAAA,IAAA,KAAQ,IAAA,CAAK,IAAA,KAAS,MAAA,IAAU,OAAO,IAAA,CAAK,IAAA,KAAS,QAAA,IAAY,IAAA,CAAK,IAAA,CAAK,QAAA,CAAS,kBAAkB;AAAA,KACxG;AAAA,EACF;AAEA,EAAA,OAAO,OAAO,OAAA,CAAQ,OAAA,KAAY,YAAY,OAAA,CAAQ,OAAA,CAAQ,SAAS,kBAAkB,CAAA;AAC3F;AAEA,SAAS,+BAEP,QAAA,EAAoB;AACpB,EAAA,OAAO,SAAS,MAAA,CAAO,CAAA,OAAA,KAAW,CAAC,yBAAA,CAA0B,OAAO,CAAC,CAAA;AACvE;AA8CO,SAAS,eAAA,CACd,QAAA,EACA,OAAA,GAAoC,EAAC,EACN;AAC/B,EAAA,MAAM,OAAO,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,UAAU,CAAA,MAAA,CAAQ,CAAA;AACrD,EAAA,IAAI,OAAA,CAAQ,YAAY,IAAA,EAAM;AAC5B,IAAA,OAAO,+BAA+B,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAAA,EAC9D;AACA,EAAA,OAAO,+BAA+B,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA;AAC9D;AA2CO,SAAS,kBAAkB,QAAA,EAA4B;AAC5D,EAAA,OAAO,8BAAA,CAA+B,eAAA,CAAgB,QAAQ,CAAC,CAAA;AACjE;AA+CO,SAAS,kBAAkB,QAAA,EAA4B;AAC5D,EAAA,OAAO,8BAAA,CAA+B,IAAI,WAAA,EAAY,CAAE,GAAA,CAAI,QAAA,EAAU,CAAA,MAAA,CAAQ,CAAA,CAAE,GAAA,CAAI,GAAA,CAAI,IAAA,CAAK,EAAA,EAAI,CAAA;AACnG","file":"ui.js","sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"]}
1
+ {"version":3,"file":"ui.js","names":[],"sources":["../src/convert-messages.ts"],"sourcesContent":["import { MessageList } from '@mastra/core/agent/message-list';\nimport type { MessageListInput } from '@mastra/core/agent/message-list';\nimport type { V5UIMessage, V6UIMessage } from './public-types';\n\nfunction isSystemReminderUIMessage(message: {\n role?: string;\n parts?: Array<{ type?: string; text?: string }>;\n content?: unknown;\n metadata?: Record<string, unknown>;\n}) {\n // Check metadata first — processors stamp systemReminder or legacy dynamicAgentsMdReminder\n if (message.metadata?.systemReminder || message.metadata?.dynamicAgentsMdReminder) {\n return true;\n }\n\n if (message.role !== 'user') {\n return false;\n }\n\n // Fall back to text inspection for backward compatibility\n if (Array.isArray(message.parts)) {\n return message.parts.some(\n part => part.type === 'text' && typeof part.text === 'string' && part.text.includes('<system-reminder'),\n );\n }\n\n return typeof message.content === 'string' && message.content.includes('<system-reminder');\n}\n\nfunction filterSystemReminderUIMessages<\n T extends { role?: string; parts?: Array<{ type?: string; text?: string }>; content?: unknown },\n>(messages: T[]): T[] {\n return messages.filter(message => !isSystemReminderUIMessage(message));\n}\n\ntype MessageConversionOptionsV5 = {\n version?: 'v5';\n};\n\ntype MessageConversionOptionsV6 = {\n version: 'v6';\n};\n\ntype MessageConversionOptions = MessageConversionOptionsV5 | MessageConversionOptionsV6;\n\n/**\n * Converts messages from various input formats to AI SDK UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5/V6 messages, Mastra DB messages, etc.)\n * and normalizes them to the AI SDK UIMessage format. It keeps the existing AI SDK v5/default behavior. If your app\n * is typed against AI SDK v6, pass `version: 'v6'`.\n *\n * Note: `version: 'v6'` uses the MessageList AI SDK v6 UI output path. MessageList input detection and ingestion\n * remain unchanged.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n * @param options - Conversion options. Omit or pass `{ version: 'v5' }` for the existing default behavior. Pass\n * `{ version: 'v6' }` when your app is typed against AI SDK v6 `useChat()` message types.\n *\n * @returns An array of AI SDK UIMessage objects typed for the selected version.\n *\n * @example\n * ```typescript\n * import { toAISdkMessages } from '@mastra/ai-sdk/ui';\n *\n * const v5Messages = toAISdkMessages(storedMessages);\n * const v6Messages = toAISdkMessages(storedMessages, { version: 'v6' });\n * ```\n */\nexport function toAISdkMessages(messages: MessageListInput, options?: MessageConversionOptionsV5): V5UIMessage[];\nexport function toAISdkMessages(messages: MessageListInput, options: MessageConversionOptionsV6): V6UIMessage[];\nexport function toAISdkMessages(\n messages: MessageListInput,\n options: MessageConversionOptions = {},\n): V5UIMessage[] | V6UIMessage[] {\n const list = new MessageList().add(messages, `memory`);\n if (options.version === 'v6') {\n return filterSystemReminderUIMessages(list.get.all.aiV6.ui());\n }\n return filterSystemReminderUIMessages(list.get.all.aiV5.ui());\n}\n\n/**\n * Converts messages from various input formats to AI SDK V5 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V5 UIMessage format, which is suitable for use with AI SDK V5 UI components like `useChat()`.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V5 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `parts` - Array of UI parts (text, tool results, files, reasoning, etc.)\n * - `metadata` - Optional metadata including createdAt, threadId, resourceId\n *\n * @example\n * ```typescript\n * import { toAISdkV5Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV5Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V4 messages to V5 format\n * const v4Messages = [\n * { id: '1', role: 'user', content: 'Hello', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', content: 'Hi!', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v5Messages = toAISdkV5Messages(v4Messages);\n *\n * // Use with useChat or similar AI SDK V5 hooks\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV5Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV5Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(toAISdkMessages(messages));\n}\n\n/**\n * Converts messages from various input formats to AI SDK V4 UI message format.\n *\n * This function accepts messages in multiple formats (strings, AI SDK V4/V5 messages, Mastra DB messages, etc.) and normalizes them to the AI SDK V4 UIMessage format, which is suitable for use with AI SDK V4 UI components.\n *\n * @param messages - Messages to convert. Accepts:\n * - `string` - A single text message (treated as user role)\n * - `string[]` - Multiple text messages\n * - `MessageInput` - A single message object in any supported format:\n * - AI SDK V5 UIMessage or ModelMessage\n * - AI SDK V4 UIMessage or CoreMessage\n * - MastraDBMessage (internal storage format)\n * - MastraMessageV1 (legacy format)\n * - `MessageInput[]` - Array of message objects\n *\n * @returns An array of AI SDK V4 UIMessage objects with:\n * - `id` - Unique message identifier\n * - `role` - 'user' | 'assistant' | 'system'\n * - `content` - Text content of the message\n * - `parts` - Array of UI parts (text, tool-invocation, file, reasoning, etc.)\n * - `createdAt` - Message creation timestamp\n * - `toolInvocations` - Optional array of tool invocations (for assistant messages)\n * - `experimental_attachments` - Optional file attachments\n * - `metadata` - Optional custom metadata\n *\n * @example\n * ```typescript\n * import { toAISdkV4Messages } from '@mastra/ai-sdk';\n *\n * // Convert simple text messages\n * const messages = toAISdkV4Messages(['Hello', 'How can I help?']);\n *\n * // Convert AI SDK V5 messages to V4 format for legacy compatibility\n * const v5Messages = [\n * { id: '1', role: 'user', parts: [{ type: 'text', text: 'Hello' }] },\n * { id: '2', role: 'assistant', parts: [{ type: 'text', text: 'Hi!' }] }\n * ];\n * const v4Messages = toAISdkV4Messages(v5Messages);\n *\n * // Use with AI SDK V4 useChat hook\n * const { messages: chatMessages } = useChat({\n * initialMessages: toAISdkV4Messages(storedMessages)\n * });\n * ```\n */\nexport function toAISdkV4Messages(messages: MessageListInput) {\n return filterSystemReminderUIMessages(new MessageList().add(messages, `memory`).get.all.aiV4.ui());\n}\n"],"mappings":";;AAIA,SAAS,0BAA0B,SAKhC;CAED,IAAI,QAAQ,UAAU,kBAAkB,QAAQ,UAAU,yBACxD,OAAO;CAGT,IAAI,QAAQ,SAAS,QACnB,OAAO;CAIT,IAAI,MAAM,QAAQ,QAAQ,KAAK,GAC7B,OAAO,QAAQ,MAAM,MACnB,SAAQ,KAAK,SAAS,UAAU,OAAO,KAAK,SAAS,YAAY,KAAK,KAAK,SAAS,kBAAkB,CACxG;CAGF,OAAO,OAAO,QAAQ,YAAY,YAAY,QAAQ,QAAQ,SAAS,kBAAkB;AAC3F;AAEA,SAAS,+BAEP,UAAoB;CACpB,OAAO,SAAS,QAAO,YAAW,CAAC,0BAA0B,OAAO,CAAC;AACvE;AA8CA,SAAgB,gBACd,UACA,UAAoC,CAAC,GACN;CAC/B,MAAM,OAAO,IAAI,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ;CACrD,IAAI,QAAQ,YAAY,MACtB,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;CAE9D,OAAO,+BAA+B,KAAK,IAAI,IAAI,KAAK,GAAG,CAAC;AAC9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,gBAAgB,QAAQ,CAAC;AACjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CA,SAAgB,kBAAkB,UAA4B;CAC5D,OAAO,+BAA+B,IAAI,YAAY,CAAC,CAAC,IAAI,UAAU,QAAQ,CAAC,CAAC,IAAI,IAAI,KAAK,GAAG,CAAC;AACnG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mastra/ai-sdk",
3
- "version": "1.6.3",
3
+ "version": "1.7.0-alpha.0",
4
4
  "description": "Adds custom API routes to be compatible with the AI SDK UI parts",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -42,20 +42,20 @@
42
42
  "@vitest/coverage-v8": "4.1.10",
43
43
  "@vitest/ui": "4.1.10",
44
44
  "eslint": "^10.7.0",
45
- "tsup": "^8.5.1",
45
+ "tsdown": "0.22.9",
46
46
  "typescript": "^6.0.3",
47
47
  "vitest": "4.1.10",
48
48
  "zod": "^4.4.3",
49
- "@internal/ai-sdk-v4": "0.0.62",
50
- "@internal/ai-v6": "0.0.62",
51
- "@internal/llm-recorder": "0.0.51",
52
- "@internal/lint": "0.0.115",
53
- "@internal/types-builder": "0.0.90",
54
- "@internal/test-utils": "0.0.51",
55
- "@internal/ai-sdk-v5": "0.0.62",
56
- "@mastra/core": "1.52.0",
57
- "@mastra/memory": "1.23.1",
58
- "@mastra/libsql": "1.17.0"
49
+ "@internal/ai-sdk-v5": "0.0.64",
50
+ "@internal/ai-v6": "0.0.64",
51
+ "@internal/lint": "0.0.117",
52
+ "@internal/ai-sdk-v4": "0.0.64",
53
+ "@internal/test-utils": "0.0.53",
54
+ "@internal/types-builder": "0.0.92",
55
+ "@mastra/core": "1.54.0-alpha.4",
56
+ "@mastra/libsql": "1.18.0-alpha.1",
57
+ "@internal/llm-recorder": "0.0.53",
58
+ "@mastra/memory": "1.24.0-alpha.0"
59
59
  },
60
60
  "keywords": [
61
61
  "mastra",
@@ -76,8 +76,9 @@
76
76
  "node": ">=22.13.0"
77
77
  },
78
78
  "scripts": {
79
- "lint": "eslint .",
80
- "build:lib": "tsup --silent --config tsup.config.ts",
79
+ "lint": "oxlint . && eslint .",
80
+ "lint:fix": "oxlint --fix . && eslint --fix .",
81
+ "build:lib": "tsdown --silent --config tsdown.config.ts",
81
82
  "build:patch-commonjs": "node ../../scripts/commonjs-tsc-fixer.js",
82
83
  "test": "vitest run"
83
84
  }