@convex-dev/agent 0.5.0-alpha.1 → 0.6.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.
Files changed (235) hide show
  1. package/MIGRATION.md +153 -0
  2. package/README.md +32 -27
  3. package/dist/UIMessages.d.ts +46 -0
  4. package/dist/UIMessages.d.ts.map +1 -0
  5. package/dist/UIMessages.js +546 -0
  6. package/dist/UIMessages.js.map +1 -0
  7. package/dist/client/createTool.d.ts +126 -27
  8. package/dist/client/createTool.d.ts.map +1 -1
  9. package/dist/client/createTool.js +67 -12
  10. package/dist/client/createTool.js.map +1 -1
  11. package/dist/client/defaultComponent.d.ts +11 -0
  12. package/dist/client/defaultComponent.d.ts.map +1 -0
  13. package/dist/client/defaultComponent.js +7 -0
  14. package/dist/client/defaultComponent.js.map +1 -0
  15. package/dist/client/definePlaygroundAPI.d.ts +1335 -204
  16. package/dist/client/definePlaygroundAPI.d.ts.map +1 -1
  17. package/dist/client/definePlaygroundAPI.js +52 -28
  18. package/dist/client/definePlaygroundAPI.js.map +1 -1
  19. package/dist/client/files.d.ts +20 -7
  20. package/dist/client/files.d.ts.map +1 -1
  21. package/dist/client/files.js +68 -11
  22. package/dist/client/files.js.map +1 -1
  23. package/dist/client/index.d.ts +1116 -978
  24. package/dist/client/index.d.ts.map +1 -1
  25. package/dist/client/index.js +332 -747
  26. package/dist/client/index.js.map +1 -1
  27. package/dist/client/messages.d.ts +461 -0
  28. package/dist/client/messages.d.ts.map +1 -0
  29. package/dist/client/messages.js +106 -0
  30. package/dist/client/messages.js.map +1 -0
  31. package/dist/client/mockModel.d.ts +42 -0
  32. package/dist/client/mockModel.d.ts.map +1 -0
  33. package/dist/client/mockModel.js +182 -0
  34. package/dist/client/mockModel.js.map +1 -0
  35. package/dist/client/saveInputMessages.d.ts +20 -0
  36. package/dist/client/saveInputMessages.d.ts.map +1 -0
  37. package/dist/client/saveInputMessages.js +58 -0
  38. package/dist/client/saveInputMessages.js.map +1 -0
  39. package/dist/client/search.d.ts +350 -39
  40. package/dist/client/search.d.ts.map +1 -1
  41. package/dist/client/search.js +350 -39
  42. package/dist/client/search.js.map +1 -1
  43. package/dist/client/start.d.ts +84 -0
  44. package/dist/client/start.d.ts.map +1 -0
  45. package/dist/client/start.js +185 -0
  46. package/dist/client/start.js.map +1 -0
  47. package/dist/client/streamText.d.ts +46 -0
  48. package/dist/client/streamText.d.ts.map +1 -0
  49. package/dist/client/streamText.js +117 -0
  50. package/dist/client/streamText.js.map +1 -0
  51. package/dist/client/streaming.d.ts +3716 -32
  52. package/dist/client/streaming.d.ts.map +1 -1
  53. package/dist/client/streaming.js +161 -59
  54. package/dist/client/streaming.js.map +1 -1
  55. package/dist/client/threads.d.ts +46 -0
  56. package/dist/client/threads.d.ts.map +1 -0
  57. package/dist/client/threads.js +49 -0
  58. package/dist/client/threads.js.map +1 -0
  59. package/dist/client/types.d.ts +266 -128
  60. package/dist/client/types.d.ts.map +1 -1
  61. package/dist/client/utils.d.ts +4 -0
  62. package/dist/client/utils.d.ts.map +1 -0
  63. package/dist/client/utils.js +21 -0
  64. package/dist/client/utils.js.map +1 -0
  65. package/dist/component/_generated/api.d.ts +24 -2178
  66. package/dist/component/_generated/api.d.ts.map +1 -1
  67. package/dist/component/_generated/api.js +10 -1
  68. package/dist/component/_generated/api.js.map +1 -1
  69. package/dist/component/_generated/component.d.ts +3120 -0
  70. package/dist/component/_generated/component.d.ts.map +1 -0
  71. package/dist/component/_generated/component.js +11 -0
  72. package/dist/component/_generated/component.js.map +1 -0
  73. package/dist/component/_generated/dataModel.d.ts +4 -18
  74. package/dist/component/_generated/dataModel.d.ts.map +1 -0
  75. package/dist/component/_generated/dataModel.js +11 -0
  76. package/dist/component/_generated/dataModel.js.map +1 -0
  77. package/dist/component/_generated/server.d.ts +10 -38
  78. package/dist/component/_generated/server.d.ts.map +1 -1
  79. package/dist/component/_generated/server.js +9 -5
  80. package/dist/component/_generated/server.js.map +1 -1
  81. package/dist/component/files.d.ts +16 -10
  82. package/dist/component/files.d.ts.map +1 -1
  83. package/dist/component/files.js +10 -2
  84. package/dist/component/files.js.map +1 -1
  85. package/dist/component/messages.d.ts +2578 -366
  86. package/dist/component/messages.d.ts.map +1 -1
  87. package/dist/component/messages.js +397 -154
  88. package/dist/component/messages.js.map +1 -1
  89. package/dist/component/schema.d.ts +5697 -3584
  90. package/dist/component/schema.d.ts.map +1 -1
  91. package/dist/component/schema.js +18 -41
  92. package/dist/component/schema.js.map +1 -1
  93. package/dist/component/streams.d.ts +39 -339
  94. package/dist/component/streams.d.ts.map +1 -1
  95. package/dist/component/streams.js +114 -73
  96. package/dist/component/streams.js.map +1 -1
  97. package/dist/component/threads.d.ts +13 -13
  98. package/dist/component/users.d.ts +7 -7
  99. package/dist/component/vector/index.d.ts +1 -1
  100. package/dist/component/vector/index.d.ts.map +1 -1
  101. package/dist/component/vector/index.js +1 -3
  102. package/dist/component/vector/index.js.map +1 -1
  103. package/dist/deltas.d.ts +43 -0
  104. package/dist/deltas.d.ts.map +1 -0
  105. package/dist/deltas.js +446 -0
  106. package/dist/deltas.js.map +1 -0
  107. package/dist/mapping.d.ts +38 -20
  108. package/dist/mapping.d.ts.map +1 -1
  109. package/dist/mapping.js +365 -97
  110. package/dist/mapping.js.map +1 -1
  111. package/dist/react/SmoothText.d.ts +5 -0
  112. package/dist/react/SmoothText.d.ts.map +1 -0
  113. package/dist/react/SmoothText.js +6 -0
  114. package/dist/react/SmoothText.js.map +1 -0
  115. package/dist/react/index.d.ts +5 -77
  116. package/dist/react/index.d.ts.map +1 -1
  117. package/dist/react/index.js +6 -160
  118. package/dist/react/index.js.map +1 -1
  119. package/dist/react/optimisticallySendMessage.d.ts +36 -3
  120. package/dist/react/optimisticallySendMessage.d.ts.map +1 -1
  121. package/dist/react/optimisticallySendMessage.js +35 -9
  122. package/dist/react/optimisticallySendMessage.js.map +1 -1
  123. package/dist/react/types.d.ts +4 -18
  124. package/dist/react/types.d.ts.map +1 -1
  125. package/dist/react/useDeltaStreams.d.ts +10 -0
  126. package/dist/react/useDeltaStreams.d.ts.map +1 -0
  127. package/dist/react/useDeltaStreams.js +106 -0
  128. package/dist/react/useDeltaStreams.js.map +1 -0
  129. package/dist/react/useSmoothText.d.ts +13 -12
  130. package/dist/react/useSmoothText.d.ts.map +1 -1
  131. package/dist/react/useSmoothText.js +32 -15
  132. package/dist/react/useSmoothText.js.map +1 -1
  133. package/dist/react/useStreamingUIMessages.d.ts +22 -0
  134. package/dist/react/useStreamingUIMessages.d.ts.map +1 -0
  135. package/dist/react/useStreamingUIMessages.js +92 -0
  136. package/dist/react/useStreamingUIMessages.js.map +1 -0
  137. package/dist/react/useThreadMessages.d.ts +104 -0
  138. package/dist/react/useThreadMessages.d.ts.map +1 -0
  139. package/dist/react/useThreadMessages.js +148 -0
  140. package/dist/react/useThreadMessages.js.map +1 -0
  141. package/dist/react/useUIMessages.d.ts +96 -0
  142. package/dist/react/useUIMessages.d.ts.map +1 -0
  143. package/dist/react/useUIMessages.js +108 -0
  144. package/dist/react/useUIMessages.js.map +1 -0
  145. package/dist/shared.d.ts +20 -4
  146. package/dist/shared.d.ts.map +1 -1
  147. package/dist/shared.js +45 -8
  148. package/dist/shared.js.map +1 -1
  149. package/dist/validators.d.ts +22981 -5666
  150. package/dist/validators.d.ts.map +1 -1
  151. package/dist/validators.js +245 -137
  152. package/dist/validators.js.map +1 -1
  153. package/package.json +101 -51
  154. package/src/UIMessages.combineUIMessages.test.ts +239 -0
  155. package/src/UIMessages.test.ts +273 -0
  156. package/src/UIMessages.ts +739 -0
  157. package/src/client/approval.test.ts +350 -0
  158. package/src/client/createTool.ts +291 -76
  159. package/src/client/defaultComponent.ts +17 -0
  160. package/src/client/definePlaygroundAPI.ts +67 -31
  161. package/src/client/files.ts +100 -20
  162. package/src/client/index.test.ts +40 -85
  163. package/src/client/index.ts +638 -1289
  164. package/src/client/messages.ts +237 -0
  165. package/src/client/mockModel.ts +252 -0
  166. package/src/client/saveInputMessages.test.ts +583 -0
  167. package/src/client/saveInputMessages.ts +101 -0
  168. package/src/client/search.test.ts +1207 -0
  169. package/src/client/search.ts +581 -70
  170. package/src/client/start.ts +327 -0
  171. package/src/client/streamText.ts +187 -0
  172. package/src/client/streaming.test.ts +186 -0
  173. package/src/client/streaming.ts +241 -97
  174. package/src/client/threads.ts +83 -0
  175. package/src/client/types.ts +370 -219
  176. package/src/client/utils.ts +27 -0
  177. package/src/component/_generated/api.ts +64 -0
  178. package/src/component/_generated/component.ts +4902 -0
  179. package/src/component/_generated/{server.d.ts → server.ts} +33 -21
  180. package/src/component/files.ts +11 -2
  181. package/src/component/messages.test.ts +195 -51
  182. package/src/component/messages.ts +500 -201
  183. package/src/component/schema.ts +20 -46
  184. package/src/component/setup.test.ts +7 -0
  185. package/src/component/streams.ts +184 -83
  186. package/src/component/users.test.ts +0 -1
  187. package/src/component/vector/index.ts +1 -3
  188. package/src/deltas.test.ts +626 -0
  189. package/src/deltas.ts +569 -0
  190. package/src/fromUIMessages.test.ts +497 -0
  191. package/src/mapping.test.ts +180 -6
  192. package/src/mapping.ts +479 -162
  193. package/src/react/SmoothText.tsx +9 -0
  194. package/src/react/index.ts +10 -230
  195. package/src/react/optimisticallySendMessage.ts +55 -12
  196. package/src/react/types.ts +6 -39
  197. package/src/react/useDeltaStreams.ts +160 -0
  198. package/src/react/useSmoothText.ts +56 -36
  199. package/src/react/useStreamingUIMessages.ts +143 -0
  200. package/src/react/useThreadMessages.ts +262 -0
  201. package/src/react/useUIMessages.test.ts +255 -0
  202. package/src/react/useUIMessages.ts +195 -0
  203. package/src/shared.ts +88 -12
  204. package/src/test.ts +18 -0
  205. package/src/toUIMessages.test.ts +1269 -0
  206. package/src/validators.test.ts +18 -19
  207. package/src/validators.ts +325 -185
  208. package/dist/client/_generated/_ignore.d.ts +0 -1
  209. package/dist/client/_generated/_ignore.d.ts.map +0 -1
  210. package/dist/client/_generated/_ignore.js +0 -3
  211. package/dist/client/_generated/_ignore.js.map +0 -1
  212. package/dist/client/listMessages.d.ts +0 -22
  213. package/dist/client/listMessages.d.ts.map +0 -1
  214. package/dist/client/listMessages.js +0 -25
  215. package/dist/client/listMessages.js.map +0 -1
  216. package/dist/package.json +0 -3
  217. package/dist/react/deltas.d.ts +0 -26
  218. package/dist/react/deltas.d.ts.map +0 -1
  219. package/dist/react/deltas.js +0 -384
  220. package/dist/react/deltas.js.map +0 -1
  221. package/dist/react/toUIMessages.d.ts +0 -15
  222. package/dist/react/toUIMessages.d.ts.map +0 -1
  223. package/dist/react/toUIMessages.js +0 -211
  224. package/dist/react/toUIMessages.js.map +0 -1
  225. package/src/client/listMessages.ts +0 -38
  226. package/src/component/_generated/api.d.ts +0 -2202
  227. package/src/component/_generated/api.js +0 -23
  228. package/src/component/_generated/server.js +0 -90
  229. package/src/node_modules/.vite/vitest/da39a3ee5e6b4b0d3255bfef95601890afd80709/results.json +0 -1
  230. package/src/react/deltas.test.ts +0 -315
  231. package/src/react/deltas.ts +0 -478
  232. package/src/react/toUIMessages.test.ts +0 -420
  233. package/src/react/toUIMessages.ts +0 -253
  234. package/src/vitest.config.ts +0 -7
  235. /package/src/component/_generated/{dataModel.d.ts → dataModel.ts} +0 -0
@@ -0,0 +1,546 @@
1
+ import { convertToModelMessages, } from "ai";
2
+ import { toModelMessage, fromModelMessage, toUIFilePart } from "./mapping.js";
3
+ import { extractReasoning, extractText, isTool, joinText, sorted, } from "./shared.js";
4
+ import { omit, pick } from "convex-helpers";
5
+ /**
6
+ * Converts a list of UIMessages to MessageDocs, along with extra metadata that
7
+ * may be available to associate with the MessageDocs.
8
+ * @param messages - The UIMessages to convert to MessageDocs.
9
+ * @param meta - The metadata to add to the MessageDocs.
10
+ * @returns
11
+ */
12
+ export async function fromUIMessages(messages, meta) {
13
+ const nested = await Promise.all(messages.map(async (uiMessage) => {
14
+ const stepOrder = uiMessage.stepOrder;
15
+ const commonFields = {
16
+ ...pick(meta, [
17
+ "threadId",
18
+ "userId",
19
+ "model",
20
+ "provider",
21
+ "providerOptions",
22
+ "metadata",
23
+ ]),
24
+ ...omit(uiMessage, ["parts", "role", "key", "text", "userId"]),
25
+ userId: uiMessage.userId ?? meta.userId,
26
+ status: uiMessage.status === "streaming" ? "pending" : "success",
27
+ streaming: uiMessage.status === "streaming",
28
+ // to override
29
+ _id: uiMessage.id,
30
+ tool: false,
31
+ };
32
+ const modelMessages = await convertToModelMessages([uiMessage]);
33
+ return modelMessages
34
+ .map((modelMessage, i) => {
35
+ if (modelMessage.content.length === 0) {
36
+ return undefined;
37
+ }
38
+ const message = fromModelMessage(modelMessage);
39
+ const tool = isTool(message);
40
+ const doc = {
41
+ ...commonFields,
42
+ _id: uiMessage.id + `-${i}`,
43
+ stepOrder: stepOrder + i,
44
+ message,
45
+ tool,
46
+ text: extractText(message),
47
+ reasoning: extractReasoning(message),
48
+ finishReason: tool ? "tool-calls" : "stop",
49
+ sources: fromSourceParts(uiMessage.parts),
50
+ };
51
+ if (Array.isArray(modelMessage.content)) {
52
+ // Find a content part with providerOptions (type assertion needed for SDK compatibility)
53
+ const partWithProviderOptions = modelMessage.content.find((c) => "providerOptions" in c && c.providerOptions !== undefined);
54
+ if (partWithProviderOptions?.providerOptions) {
55
+ // convertToModelMessages changes providerMetadata to providerOptions
56
+ const providerOptions = partWithProviderOptions.providerOptions;
57
+ if (providerOptions) {
58
+ doc.providerMetadata = providerOptions;
59
+ doc.providerOptions ??= providerOptions;
60
+ }
61
+ }
62
+ }
63
+ return doc;
64
+ })
65
+ .filter((d) => d !== undefined);
66
+ }));
67
+ return nested.flat();
68
+ }
69
+ function fromSourceParts(parts) {
70
+ return parts
71
+ .map((part) => {
72
+ if (part.type === "source-url") {
73
+ return {
74
+ type: "source",
75
+ sourceType: "url",
76
+ url: part.url,
77
+ id: part.sourceId,
78
+ providerMetadata: part.providerMetadata,
79
+ title: part.title,
80
+ };
81
+ }
82
+ if (part.type === "source-document") {
83
+ return {
84
+ type: "source",
85
+ sourceType: "document",
86
+ mediaType: part.mediaType,
87
+ id: part.sourceId,
88
+ providerMetadata: part.providerMetadata,
89
+ title: part.title,
90
+ };
91
+ }
92
+ return undefined;
93
+ })
94
+ .filter((p) => p !== undefined);
95
+ }
96
+ /**
97
+ * Converts a list of MessageDocs to UIMessages.
98
+ * This is somewhat lossy, as many fields are not supported by UIMessages, e.g.
99
+ * the model, provider, userId, etc.
100
+ * The UIMessage type is the augmented type that includes more fields such as
101
+ * key, order, stepOrder, status, agentName, text, etc.
102
+ */
103
+ export function toUIMessages(messages) {
104
+ // Group assistant and tool messages together
105
+ const assistantGroups = groupAssistantMessages(sorted(messages));
106
+ const uiMessages = [];
107
+ for (const group of assistantGroups) {
108
+ if (group.role === "system") {
109
+ uiMessages.push(createSystemUIMessage(group.message));
110
+ }
111
+ else if (group.role === "user") {
112
+ uiMessages.push(createUserUIMessage(group.message));
113
+ }
114
+ else {
115
+ // Assistant/tool group
116
+ uiMessages.push(createAssistantUIMessage(group.messages));
117
+ }
118
+ }
119
+ return uiMessages;
120
+ }
121
+ function groupAssistantMessages(messages) {
122
+ const groups = [];
123
+ let currentAssistantGroup = [];
124
+ let currentOrder;
125
+ for (const message of messages) {
126
+ const coreMessage = message.message && toModelMessage(message.message);
127
+ if (!coreMessage)
128
+ continue;
129
+ if (coreMessage.role === "user" || coreMessage.role === "system") {
130
+ // Finish any current assistant group
131
+ if (currentAssistantGroup.length > 0) {
132
+ groups.push({
133
+ role: "assistant",
134
+ messages: currentAssistantGroup,
135
+ });
136
+ currentAssistantGroup = [];
137
+ currentOrder = undefined;
138
+ }
139
+ // Add singleton group
140
+ groups.push({
141
+ role: coreMessage.role,
142
+ message,
143
+ });
144
+ }
145
+ else {
146
+ // Assistant or tool message
147
+ // Start new group if order changes or this is the first assistant/tool message
148
+ if (currentOrder !== undefined && message.order !== currentOrder) {
149
+ if (currentAssistantGroup.length > 0) {
150
+ groups.push({
151
+ role: "assistant",
152
+ messages: currentAssistantGroup,
153
+ });
154
+ currentAssistantGroup = [];
155
+ }
156
+ }
157
+ currentOrder = message.order;
158
+ currentAssistantGroup.push(message);
159
+ // End group if this is an assistant message without tool calls
160
+ if (coreMessage.role === "assistant" && !message.tool) {
161
+ groups.push({
162
+ role: "assistant",
163
+ messages: currentAssistantGroup,
164
+ });
165
+ currentAssistantGroup = [];
166
+ currentOrder = undefined;
167
+ }
168
+ }
169
+ }
170
+ // Add any remaining assistant group
171
+ if (currentAssistantGroup.length > 0) {
172
+ groups.push({
173
+ role: "assistant",
174
+ messages: currentAssistantGroup,
175
+ });
176
+ }
177
+ return groups;
178
+ }
179
+ function createSystemUIMessage(message) {
180
+ const text = extractTextFromMessageDoc(message);
181
+ const partCommon = {
182
+ state: message.streaming ? "streaming" : "done",
183
+ ...(message.providerMetadata
184
+ ? { providerMetadata: message.providerMetadata }
185
+ : {}),
186
+ };
187
+ return {
188
+ id: message._id,
189
+ _creationTime: message._creationTime,
190
+ order: message.order,
191
+ stepOrder: message.stepOrder,
192
+ status: message.streaming ? "streaming" : message.status,
193
+ key: `${message.threadId}-${message.order}-${message.stepOrder}`,
194
+ text,
195
+ role: "system",
196
+ agentName: message.agentName,
197
+ userId: message.userId,
198
+ parts: [{ type: "text", text, ...partCommon }],
199
+ metadata: message.metadata,
200
+ };
201
+ }
202
+ function extractTextFromMessageDoc(message) {
203
+ return ((message.message && extractText(message.message)) || message.text || "");
204
+ }
205
+ function createUserUIMessage(message) {
206
+ const text = extractTextFromMessageDoc(message);
207
+ const coreMessage = toModelMessage(message.message);
208
+ const content = coreMessage.content;
209
+ const nonStringContent = content && typeof content !== "string" ? content : [];
210
+ const partCommon = {
211
+ state: message.streaming ? "streaming" : "done",
212
+ ...(message.providerMetadata
213
+ ? { providerMetadata: message.providerMetadata }
214
+ : {}),
215
+ };
216
+ const parts = [];
217
+ if (text && !nonStringContent.length) {
218
+ parts.push({ type: "text", text });
219
+ }
220
+ for (const contentPart of nonStringContent) {
221
+ switch (contentPart.type) {
222
+ case "text":
223
+ parts.push({ type: "text", text: contentPart.text, ...partCommon });
224
+ break;
225
+ case "file":
226
+ case "image":
227
+ parts.push(toUIFilePart(contentPart));
228
+ break;
229
+ default:
230
+ console.warn("Unknown content part type for user", contentPart);
231
+ break;
232
+ }
233
+ }
234
+ return {
235
+ id: message._id,
236
+ _creationTime: message._creationTime,
237
+ order: message.order,
238
+ stepOrder: message.stepOrder,
239
+ status: message.streaming ? "streaming" : message.status,
240
+ key: `${message.threadId}-${message.order}-${message.stepOrder}`,
241
+ text,
242
+ role: "user",
243
+ userId: message.userId,
244
+ parts,
245
+ metadata: message.metadata,
246
+ };
247
+ }
248
+ function createAssistantUIMessage(groupUnordered) {
249
+ const group = sorted(groupUnordered);
250
+ const firstMessage = group[0];
251
+ // Use first message for special fields
252
+ const common = {
253
+ id: firstMessage._id,
254
+ _creationTime: firstMessage._creationTime,
255
+ order: firstMessage.order,
256
+ stepOrder: firstMessage.stepOrder,
257
+ key: `${firstMessage.threadId}-${firstMessage.order}-${firstMessage.stepOrder}`,
258
+ agentName: firstMessage.agentName,
259
+ userId: firstMessage.userId,
260
+ };
261
+ // Get status from last message
262
+ const lastMessage = group[group.length - 1];
263
+ const status = lastMessage.streaming
264
+ ? "streaming"
265
+ : lastMessage.status;
266
+ // Collect all parts from all messages
267
+ const allParts = [];
268
+ for (const message of group) {
269
+ const coreMessage = message.message && toModelMessage(message.message);
270
+ if (!coreMessage)
271
+ continue;
272
+ const content = coreMessage.content;
273
+ const nonStringContent = content && typeof content !== "string" ? content : [];
274
+ const text = extractTextFromMessageDoc(message);
275
+ const partCommon = {
276
+ state: message.streaming ? "streaming" : "done",
277
+ ...(message.providerMetadata
278
+ ? { providerMetadata: message.providerMetadata }
279
+ : {}),
280
+ };
281
+ // Add reasoning parts
282
+ if (message.reasoning &&
283
+ !nonStringContent.some((c) => c.type === "reasoning")) {
284
+ allParts.push({
285
+ type: "reasoning",
286
+ text: message.reasoning,
287
+ ...partCommon,
288
+ });
289
+ }
290
+ // Add text parts if no structured content
291
+ if (text && !nonStringContent.length) {
292
+ allParts.push({
293
+ type: "text",
294
+ text: text,
295
+ ...partCommon,
296
+ });
297
+ }
298
+ // Add all structured content parts
299
+ for (const contentPart of nonStringContent) {
300
+ switch (contentPart.type) {
301
+ case "text":
302
+ allParts.push({
303
+ ...partCommon,
304
+ ...contentPart,
305
+ });
306
+ break;
307
+ case "reasoning":
308
+ allParts.push({
309
+ ...partCommon,
310
+ ...contentPart,
311
+ });
312
+ break;
313
+ case "file":
314
+ case "image":
315
+ allParts.push(toUIFilePart(contentPart));
316
+ break;
317
+ case "tool-call": {
318
+ allParts.push({
319
+ type: "step-start",
320
+ });
321
+ const toolPart = {
322
+ type: `tool-${contentPart.toolName}`,
323
+ toolCallId: contentPart.toolCallId,
324
+ input: contentPart.input,
325
+ providerExecuted: contentPart.providerExecuted,
326
+ ...(message.streaming
327
+ ? { state: "input-streaming" }
328
+ : {
329
+ state: "input-available",
330
+ callProviderMetadata: message.providerMetadata,
331
+ }),
332
+ };
333
+ allParts.push(toolPart);
334
+ break;
335
+ }
336
+ case "tool-result": {
337
+ const typedPart = contentPart;
338
+ // Check if this is an execution-denied result
339
+ if (typedPart.output?.type === "execution-denied") {
340
+ const call = allParts.find((part) => part.type === `tool-${contentPart.toolName}` &&
341
+ "toolCallId" in part &&
342
+ part.toolCallId === contentPart.toolCallId);
343
+ if (call) {
344
+ call.state = "output-denied";
345
+ if (!("approval" in call) || !call.approval) {
346
+ call.approval = {
347
+ id: "",
348
+ approved: false,
349
+ reason: typedPart.output.reason,
350
+ };
351
+ }
352
+ else {
353
+ const approval = call.approval;
354
+ approval.approved = false;
355
+ approval.reason = typedPart.output.reason;
356
+ }
357
+ }
358
+ break;
359
+ }
360
+ const output = typeof typedPart.output?.type === "string"
361
+ ? typedPart.output.value
362
+ : typedPart.output;
363
+ // Check for error at both the content part level (isError) and message level
364
+ // isError may exist on stored tool results but isn't in ToolResultPart type
365
+ const hasError = contentPart.isError || message.error;
366
+ const errorText = message.error || (hasError ? String(output) : undefined);
367
+ const call = allParts.find((part) => part.type === `tool-${contentPart.toolName}` &&
368
+ "toolCallId" in part &&
369
+ part.toolCallId === contentPart.toolCallId);
370
+ if (call) {
371
+ if (hasError) {
372
+ call.state = "output-error";
373
+ call.errorText = errorText ?? "Unknown error";
374
+ call.output = output;
375
+ }
376
+ else {
377
+ call.state = "output-available";
378
+ call.output = output;
379
+ }
380
+ }
381
+ else {
382
+ // Tool call is on a previous page - create standalone tool part
383
+ if (hasError) {
384
+ allParts.push({
385
+ type: `tool-${contentPart.toolName}`,
386
+ toolCallId: contentPart.toolCallId,
387
+ state: "output-error",
388
+ input: undefined,
389
+ errorText: errorText ?? "Unknown error",
390
+ callProviderMetadata: message.providerMetadata,
391
+ });
392
+ }
393
+ else {
394
+ allParts.push({
395
+ type: `tool-${contentPart.toolName}`,
396
+ toolCallId: contentPart.toolCallId,
397
+ state: "output-available",
398
+ input: undefined,
399
+ output,
400
+ callProviderMetadata: message.providerMetadata,
401
+ });
402
+ }
403
+ }
404
+ break;
405
+ }
406
+ case "tool-approval-request": {
407
+ // Find the matching tool call
408
+ const typedPart = contentPart;
409
+ const toolCallPart = allParts.find((part) => "toolCallId" in part && part.toolCallId === typedPart.toolCallId);
410
+ if (toolCallPart) {
411
+ toolCallPart.state = "approval-requested";
412
+ toolCallPart.approval = {
413
+ id: typedPart.approvalId,
414
+ };
415
+ }
416
+ else {
417
+ console.warn("Tool approval request without preceding tool call", contentPart);
418
+ }
419
+ break;
420
+ }
421
+ case "tool-approval-response": {
422
+ // Find the tool call that has this approval by matching approval.id
423
+ const typedPart = contentPart;
424
+ const toolCallPart = allParts.find((part) => "approval" in part &&
425
+ part.approval
426
+ ?.id === typedPart.approvalId);
427
+ if (toolCallPart) {
428
+ if (typedPart.approved) {
429
+ toolCallPart.state = "approval-responded";
430
+ toolCallPart.approval = {
431
+ id: typedPart.approvalId,
432
+ approved: true,
433
+ reason: typedPart.reason,
434
+ };
435
+ }
436
+ else {
437
+ toolCallPart.state = "output-denied";
438
+ toolCallPart.approval = {
439
+ id: typedPart.approvalId,
440
+ approved: false,
441
+ reason: typedPart.reason,
442
+ };
443
+ }
444
+ }
445
+ else {
446
+ console.warn("Tool approval response without matching approval request", contentPart);
447
+ }
448
+ break;
449
+ }
450
+ default: {
451
+ const maybeSource = contentPart;
452
+ if (maybeSource.type === "source") {
453
+ allParts.push(toSourcePart(maybeSource));
454
+ }
455
+ else {
456
+ console.warn("Unknown content part type for assistant", contentPart);
457
+ }
458
+ }
459
+ }
460
+ }
461
+ // Add source parts
462
+ for (const source of message.sources ?? []) {
463
+ allParts.push(toSourcePart(source));
464
+ }
465
+ }
466
+ return {
467
+ ...common,
468
+ role: "assistant",
469
+ text: joinText(allParts),
470
+ status,
471
+ parts: allParts,
472
+ metadata: group.find((m) => m.metadata)?.metadata,
473
+ };
474
+ }
475
+ function toSourcePart(part) {
476
+ if (part.sourceType === "url") {
477
+ return {
478
+ type: "source-url",
479
+ url: part.url,
480
+ sourceId: part.id,
481
+ providerMetadata: part.providerMetadata,
482
+ title: part.title,
483
+ };
484
+ }
485
+ return {
486
+ type: "source-document",
487
+ mediaType: part.mediaType,
488
+ sourceId: part.id,
489
+ title: part.title,
490
+ filename: part.filename,
491
+ providerMetadata: part.providerMetadata,
492
+ };
493
+ }
494
+ export function combineUIMessages(messages) {
495
+ const combined = messages.reduce((acc, message) => {
496
+ if (!acc.length) {
497
+ return [message];
498
+ }
499
+ const previous = acc.at(-1);
500
+ if (message.order !== previous.order ||
501
+ previous.role !== message.role ||
502
+ message.role !== "assistant") {
503
+ acc.push(message);
504
+ return acc;
505
+ }
506
+ // We will replace it with a combined message
507
+ acc.pop();
508
+ const newParts = [...previous.parts];
509
+ for (const part of message.parts) {
510
+ const toolCallId = getToolCallId(part);
511
+ if (!toolCallId) {
512
+ newParts.push(part);
513
+ continue;
514
+ }
515
+ const previousPartIndex = newParts.findIndex((p) => getToolCallId(p) === toolCallId);
516
+ if (previousPartIndex === -1) {
517
+ // Tool call not found in previous parts, add it as new
518
+ newParts.push(part);
519
+ continue;
520
+ }
521
+ const previousPart = newParts.splice(previousPartIndex, 1)[0];
522
+ newParts.push(mergeParts(previousPart, part));
523
+ }
524
+ acc.push({
525
+ ...previous,
526
+ ...pick(message, ["status", "metadata", "agentName"]),
527
+ parts: newParts,
528
+ text: joinText(newParts),
529
+ });
530
+ return acc;
531
+ }, []);
532
+ return combined;
533
+ }
534
+ function getToolCallId(part) {
535
+ return part.toolCallId;
536
+ }
537
+ function mergeParts(previousPart, part) {
538
+ const merged = { ...previousPart };
539
+ for (const [key, value] of Object.entries(part)) {
540
+ if (value !== undefined) {
541
+ merged[key] = value;
542
+ }
543
+ }
544
+ return merged;
545
+ }
546
+ //# sourceMappingURL=UIMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UIMessages.js","sourceRoot":"","sources":["../src/UIMessages.ts"],"names":[],"mappings":"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"}