@assistant-ui/react-ai-sdk 1.3.26 → 1.3.27
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/frontendTools.d.ts +9 -5
- package/dist/frontendTools.d.ts.map +1 -1
- package/dist/frontendTools.js +36 -35
- package/dist/frontendTools.js.map +1 -1
- package/dist/index.d.ts +9 -11
- package/dist/index.js +9 -10
- package/dist/injectQuoteContext.d.ts +6 -2
- package/dist/injectQuoteContext.d.ts.map +1 -1
- package/dist/injectQuoteContext.js +46 -53
- package/dist/injectQuoteContext.js.map +1 -1
- package/dist/modelContentEnvelope.d.ts +12 -10
- package/dist/modelContentEnvelope.d.ts.map +1 -1
- package/dist/modelContentEnvelope.js +17 -15
- package/dist/modelContentEnvelope.js.map +1 -1
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts +141 -0
- package/dist/node_modules/.pnpm/@types_json-schema@7.0.15/node_modules/@types/json-schema/index.d.ts.map +1 -0
- package/dist/packages/assistant-stream/dist/core/AssistantStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/AssistantStreamChunk.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/accumulators/AssistantMessageStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/accumulators/assistant-message-accumulator.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/modules/assistant-stream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/modules/text.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/modules/tool-call.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/serialization/PlainText.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/serialization/assistant-transport/AssistantTransport.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/serialization/data-stream/DataStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/serialization/ui-message-stream/UIMessageStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/tool/ToolExecutionStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/tool/schema-utils.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/tool/schema-utils.js +50 -0
- package/dist/packages/assistant-stream/dist/core/tool/schema-utils.js.map +1 -0
- package/dist/packages/assistant-stream/dist/core/tool/tool-types.d.ts +43 -0
- package/dist/packages/assistant-stream/dist/core/tool/tool-types.d.ts.map +1 -0
- package/dist/packages/assistant-stream/dist/core/tool/toolResultStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/utils/stream/AssistantMetaTransformStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/utils/stream/AssistantTransformStream.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/core/utils/types.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/index.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/resumable/createResumableAssistantStreamResponse.d.ts +6 -0
- package/dist/packages/assistant-stream/dist/resumable/createResumableAssistantStreamResponse.d.ts.map +1 -0
- package/dist/packages/assistant-stream/dist/resumable/createResumableAssistantStreamResponse.js +6 -0
- package/dist/packages/assistant-stream/dist/resumable/createResumableAssistantStreamResponse.js.map +1 -0
- package/dist/packages/assistant-stream/dist/resumable/index.d.ts +1 -0
- package/dist/packages/assistant-stream/dist/utils/json/json-value.d.ts +10 -0
- package/dist/packages/assistant-stream/dist/utils/json/json-value.d.ts.map +1 -0
- package/dist/packages/assistant-stream/dist/utils.d.ts +1 -0
- package/dist/ui/adapters/aiSDKFormatAdapter.d.ts +8 -4
- package/dist/ui/adapters/aiSDKFormatAdapter.d.ts.map +1 -1
- package/dist/ui/adapters/aiSDKFormatAdapter.js +24 -20
- package/dist/ui/adapters/aiSDKFormatAdapter.js.map +1 -1
- package/dist/ui/getVercelAIMessages.d.ts +7 -3
- package/dist/ui/getVercelAIMessages.d.ts.map +1 -1
- package/dist/ui/getVercelAIMessages.js +7 -3
- package/dist/ui/getVercelAIMessages.js.map +1 -1
- package/dist/ui/resumable.d.ts +18 -15
- package/dist/ui/resumable.d.ts.map +1 -1
- package/dist/ui/resumable.js +21 -20
- package/dist/ui/resumable.js.map +1 -1
- package/dist/ui/use-chat/AssistantChatTransport.d.ts +17 -14
- package/dist/ui/use-chat/AssistantChatTransport.d.ts.map +1 -1
- package/dist/ui/use-chat/AssistantChatTransport.js +98 -108
- package/dist/ui/use-chat/AssistantChatTransport.js.map +1 -1
- package/dist/ui/use-chat/useAISDKRuntime.d.ts +43 -33
- package/dist/ui/use-chat/useAISDKRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useAISDKRuntime.js +176 -204
- package/dist/ui/use-chat/useAISDKRuntime.js.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.d.ts +19 -12
- package/dist/ui/use-chat/useChatRuntime.d.ts.map +1 -1
- package/dist/ui/use-chat/useChatRuntime.js +60 -81
- package/dist/ui/use-chat/useChatRuntime.js.map +1 -1
- package/dist/ui/use-chat/useExternalHistory.d.ts +8 -4
- package/dist/ui/use-chat/useExternalHistory.d.ts.map +1 -1
- package/dist/ui/use-chat/useExternalHistory.js +178 -200
- package/dist/ui/use-chat/useExternalHistory.js.map +1 -1
- package/dist/ui/use-chat/useStreamingTiming.d.ts +7 -3
- package/dist/ui/use-chat/useStreamingTiming.d.ts.map +1 -1
- package/dist/ui/use-chat/useStreamingTiming.js +60 -75
- package/dist/ui/use-chat/useStreamingTiming.js.map +1 -1
- package/dist/ui/utils/convertMessage.d.ts +29 -20
- package/dist/ui/utils/convertMessage.d.ts.map +1 -1
- package/dist/ui/utils/convertMessage.js +219 -299
- package/dist/ui/utils/convertMessage.js.map +1 -1
- package/dist/ui/utils/sliceMessagesUntil.d.ts +6 -2
- package/dist/ui/utils/sliceMessagesUntil.d.ts.map +1 -1
- package/dist/ui/utils/sliceMessagesUntil.js +10 -10
- package/dist/ui/utils/sliceMessagesUntil.js.map +1 -1
- package/dist/ui/utils/toCreateMessage.d.ts +7 -3
- package/dist/ui/utils/toCreateMessage.d.ts.map +1 -1
- package/dist/ui/utils/toCreateMessage.js +34 -38
- package/dist/ui/utils/toCreateMessage.js.map +1 -1
- package/dist/ui/utils/vercelAttachmentAdapter.d.ts +6 -2
- package/dist/ui/utils/vercelAttachmentAdapter.d.ts.map +1 -1
- package/dist/ui/utils/vercelAttachmentAdapter.js +37 -35
- package/dist/ui/utils/vercelAttachmentAdapter.js.map +1 -1
- package/dist/usage.d.ts +15 -12
- package/dist/usage.d.ts.map +1 -1
- package/dist/usage.js +80 -99
- package/dist/usage.js.map +1 -1
- package/package.json +11 -11
- package/src/ui/use-chat/useAISDKRuntime.test.ts +2 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -1,317 +1,237 @@
|
|
|
1
|
-
import { isToolUIPart, getToolName } from "ai";
|
|
2
|
-
import { createMessageConverter as unstable_createMessageConverter, } from "@assistant-ui/core/react";
|
|
3
|
-
import { isMcpAppUri, } from "@assistant-ui/core";
|
|
4
1
|
import { unwrapModelContentEnvelope } from "../../modelContentEnvelope.js";
|
|
2
|
+
import { getToolName, isToolUIPart } from "ai";
|
|
3
|
+
import { createMessageConverter } from "@assistant-ui/core/react";
|
|
4
|
+
import { isMcpAppUri } from "@assistant-ui/core";
|
|
5
|
+
//#region src/ui/utils/convertMessage.ts
|
|
5
6
|
function stripClosingDelimiters(json) {
|
|
6
|
-
|
|
7
|
+
return json.replace(/[}\]"]+$/, "");
|
|
7
8
|
}
|
|
8
9
|
const MCP_APP_METADATA_CACHE_MAX = 100;
|
|
9
10
|
function extractMcpAppMetadata(part, cache) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
cache.delete(a["resourceUri"]);
|
|
43
|
-
cache.set(a["resourceUri"], cached);
|
|
44
|
-
return cached;
|
|
45
|
-
}
|
|
46
|
-
const out = {
|
|
47
|
-
resourceUri: a["resourceUri"],
|
|
48
|
-
};
|
|
49
|
-
if (typeof a["mimeType"] === "string")
|
|
50
|
-
out.mimeType = a["mimeType"];
|
|
51
|
-
if (Array.isArray(a["visibility"])) {
|
|
52
|
-
out.visibility = a["visibility"].filter((v) => v === "model" || v === "app");
|
|
53
|
-
}
|
|
54
|
-
if (cache) {
|
|
55
|
-
if (cache.size >= MCP_APP_METADATA_CACHE_MAX) {
|
|
56
|
-
const oldest = cache.keys().next().value;
|
|
57
|
-
if (oldest !== undefined)
|
|
58
|
-
cache.delete(oldest);
|
|
59
|
-
}
|
|
60
|
-
cache.set(a["resourceUri"], out);
|
|
61
|
-
}
|
|
62
|
-
return out;
|
|
11
|
+
if (!part || typeof part !== "object") return void 0;
|
|
12
|
+
const meta = part.callProviderMetadata;
|
|
13
|
+
const mcp = meta && typeof meta === "object" ? meta.mcp : void 0;
|
|
14
|
+
const app = mcp && typeof mcp === "object" ? mcp.app : void 0;
|
|
15
|
+
let a;
|
|
16
|
+
if (app && typeof app === "object") a = app;
|
|
17
|
+
else {
|
|
18
|
+
const output = part.output;
|
|
19
|
+
const outMeta = output && typeof output === "object" ? output._meta : void 0;
|
|
20
|
+
const uiResourceUri = outMeta && typeof outMeta === "object" ? outMeta["ui/resourceUri"] : void 0;
|
|
21
|
+
if (typeof uiResourceUri !== "string") return void 0;
|
|
22
|
+
a = { resourceUri: uiResourceUri };
|
|
23
|
+
}
|
|
24
|
+
if (typeof a["resourceUri"] !== "string") return void 0;
|
|
25
|
+
if (!isMcpAppUri(a["resourceUri"])) return void 0;
|
|
26
|
+
const cached = cache?.get(a["resourceUri"]);
|
|
27
|
+
if (cached) {
|
|
28
|
+
cache.delete(a["resourceUri"]);
|
|
29
|
+
cache.set(a["resourceUri"], cached);
|
|
30
|
+
return cached;
|
|
31
|
+
}
|
|
32
|
+
const out = { resourceUri: a["resourceUri"] };
|
|
33
|
+
if (typeof a["mimeType"] === "string") out.mimeType = a["mimeType"];
|
|
34
|
+
if (Array.isArray(a["visibility"])) out.visibility = a["visibility"].filter((v) => v === "model" || v === "app");
|
|
35
|
+
if (cache) {
|
|
36
|
+
if (cache.size >= MCP_APP_METADATA_CACHE_MAX) {
|
|
37
|
+
const oldest = cache.keys().next().value;
|
|
38
|
+
if (oldest !== void 0) cache.delete(oldest);
|
|
39
|
+
}
|
|
40
|
+
cache.set(a["resourceUri"], out);
|
|
41
|
+
}
|
|
42
|
+
return out;
|
|
63
43
|
}
|
|
64
44
|
const hasOwn = (value, key) => Object.hasOwn(value, key);
|
|
65
45
|
const stabilizeToolArgsValue = (value, path, keyOrderByPath) => {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
];
|
|
78
|
-
keyOrderByPath.set(path, nextOrder);
|
|
79
|
-
return Object.fromEntries(nextOrder.map((key) => [
|
|
80
|
-
key,
|
|
81
|
-
stabilizeToolArgsValue(record[key], `${path}.${key}`, keyOrderByPath),
|
|
82
|
-
]));
|
|
83
|
-
}
|
|
84
|
-
return value;
|
|
46
|
+
if (Array.isArray(value)) return value.map((item, idx) => stabilizeToolArgsValue(item, `${path}[${idx}]`, keyOrderByPath));
|
|
47
|
+
if (value && typeof value === "object") {
|
|
48
|
+
const record = value;
|
|
49
|
+
const currentKeys = Object.keys(record);
|
|
50
|
+
const previousOrder = keyOrderByPath.get(path) ?? [];
|
|
51
|
+
const previousOrderSet = new Set(previousOrder);
|
|
52
|
+
const nextOrder = [...previousOrder.filter((key) => hasOwn(record, key)), ...currentKeys.filter((key) => !previousOrderSet.has(key))];
|
|
53
|
+
keyOrderByPath.set(path, nextOrder);
|
|
54
|
+
return Object.fromEntries(nextOrder.map((key) => [key, stabilizeToolArgsValue(record[key], `${path}.${key}`, keyOrderByPath)]));
|
|
55
|
+
}
|
|
56
|
+
return value;
|
|
85
57
|
};
|
|
86
58
|
function stableStringifyToolArgs(keyOrderCache, cacheKey, args) {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
59
|
+
const keyOrderByPath = keyOrderCache?.get(cacheKey) ?? /* @__PURE__ */ new Map();
|
|
60
|
+
keyOrderCache?.set(cacheKey, keyOrderByPath);
|
|
61
|
+
const stableArgs = stabilizeToolArgsValue(args, "$", keyOrderByPath);
|
|
62
|
+
return JSON.stringify(stableArgs);
|
|
91
63
|
}
|
|
92
64
|
/**
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
65
|
+
* Resolves the interrupt fields for a tool call part.
|
|
66
|
+
*
|
|
67
|
+
* Two interrupt paths for tool approvals:
|
|
68
|
+
* 1. AI SDK server-side approval: approval-requested state with part.approval payload
|
|
69
|
+
* 2. Frontend tools: toolStatuses interrupt from context.human()
|
|
70
|
+
*/
|
|
99
71
|
function getToolInterrupt(part, toolStatus) {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
119
|
-
};
|
|
120
|
-
}
|
|
121
|
-
return {};
|
|
72
|
+
if (part.state === "approval-requested" && "approval" in part) return {
|
|
73
|
+
interrupt: {
|
|
74
|
+
type: "human",
|
|
75
|
+
payload: part.approval
|
|
76
|
+
},
|
|
77
|
+
status: {
|
|
78
|
+
type: "requires-action",
|
|
79
|
+
reason: "interrupt"
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
if (toolStatus?.type === "interrupt") return {
|
|
83
|
+
interrupt: toolStatus.payload,
|
|
84
|
+
status: {
|
|
85
|
+
type: "requires-action",
|
|
86
|
+
reason: "interrupt"
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
return {};
|
|
122
90
|
}
|
|
123
91
|
function convertParts(message, metadata) {
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
219
|
-
if (part.type === "file") {
|
|
220
|
-
return {
|
|
221
|
-
type: "file",
|
|
222
|
-
data: part.url,
|
|
223
|
-
mimeType: part.mediaType,
|
|
224
|
-
...(part.filename != null && { filename: part.filename }),
|
|
225
|
-
};
|
|
226
|
-
}
|
|
227
|
-
if (part.type === "source-document") {
|
|
228
|
-
return {
|
|
229
|
-
type: "source",
|
|
230
|
-
sourceType: "document",
|
|
231
|
-
id: part.sourceId,
|
|
232
|
-
title: part.title,
|
|
233
|
-
mediaType: part.mediaType,
|
|
234
|
-
...(part.filename != null ? { filename: part.filename } : undefined),
|
|
235
|
-
...(part.providerMetadata != null
|
|
236
|
-
? {
|
|
237
|
-
providerMetadata: part.providerMetadata,
|
|
238
|
-
}
|
|
239
|
-
: undefined),
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
if (part.type.startsWith("data-")) {
|
|
243
|
-
return {
|
|
244
|
-
type: "data",
|
|
245
|
-
name: part.type.substring(5),
|
|
246
|
-
data: part.data,
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
console.warn(`Unsupported message part type: ${part.type}`);
|
|
250
|
-
return null;
|
|
251
|
-
})
|
|
252
|
-
.filter(Boolean);
|
|
253
|
-
const seenToolCallIds = new Set();
|
|
254
|
-
return converted.filter((part) => {
|
|
255
|
-
if (part.type === "tool-call" && part.toolCallId != null) {
|
|
256
|
-
if (seenToolCallIds.has(part.toolCallId))
|
|
257
|
-
return false;
|
|
258
|
-
seenToolCallIds.add(part.toolCallId);
|
|
259
|
-
}
|
|
260
|
-
return true;
|
|
261
|
-
});
|
|
92
|
+
if (!message.parts || message.parts.length === 0) return [];
|
|
93
|
+
const converted = message.parts.filter((p) => p.type !== "step-start" && (message.role !== "user" || p.type !== "file")).map((part) => {
|
|
94
|
+
if (part.type === "text") return {
|
|
95
|
+
type: "text",
|
|
96
|
+
text: part.text
|
|
97
|
+
};
|
|
98
|
+
if (part.type === "reasoning") return {
|
|
99
|
+
type: "reasoning",
|
|
100
|
+
text: part.text
|
|
101
|
+
};
|
|
102
|
+
if (isToolUIPart(part)) {
|
|
103
|
+
const toolName = getToolName(part);
|
|
104
|
+
const toolCallId = part.toolCallId;
|
|
105
|
+
const argsKeyOrderCacheKey = `${message.id}:${toolCallId}`;
|
|
106
|
+
const rawInput = part.input;
|
|
107
|
+
let args;
|
|
108
|
+
if (rawInput != null && typeof rawInput === "object" && !Array.isArray(rawInput)) {
|
|
109
|
+
args = rawInput;
|
|
110
|
+
metadata.toolLastInputCache?.set(argsKeyOrderCacheKey, args);
|
|
111
|
+
} else args = metadata.toolLastInputCache?.get(argsKeyOrderCacheKey) ?? {};
|
|
112
|
+
let result;
|
|
113
|
+
let modelContent;
|
|
114
|
+
let isError = false;
|
|
115
|
+
if (part.state === "output-available") {
|
|
116
|
+
const unwrapped = unwrapModelContentEnvelope(part.output);
|
|
117
|
+
result = unwrapped.result;
|
|
118
|
+
modelContent = unwrapped.modelContent;
|
|
119
|
+
} else if (part.state === "output-error") {
|
|
120
|
+
isError = true;
|
|
121
|
+
result = { error: part.errorText };
|
|
122
|
+
} else if (part.state === "output-denied") {
|
|
123
|
+
isError = true;
|
|
124
|
+
result = { error: part.approval.reason || "Tool approval denied" };
|
|
125
|
+
}
|
|
126
|
+
let argsText = stableStringifyToolArgs(metadata.toolArgsKeyOrderCache, argsKeyOrderCacheKey, args);
|
|
127
|
+
if (part.state === "input-streaming") argsText = stripClosingDelimiters(argsText);
|
|
128
|
+
else {
|
|
129
|
+
metadata.toolArgsKeyOrderCache?.delete(argsKeyOrderCacheKey);
|
|
130
|
+
if (part.state === "output-available" || part.state === "output-error" || part.state === "output-denied") metadata.toolLastInputCache?.delete(argsKeyOrderCacheKey);
|
|
131
|
+
}
|
|
132
|
+
const toolStatus = metadata.toolStatuses?.[toolCallId];
|
|
133
|
+
const mcpApp = extractMcpAppMetadata(part, metadata.mcpAppMetadataCache);
|
|
134
|
+
return {
|
|
135
|
+
type: "tool-call",
|
|
136
|
+
toolName,
|
|
137
|
+
toolCallId,
|
|
138
|
+
argsText,
|
|
139
|
+
args,
|
|
140
|
+
result,
|
|
141
|
+
isError,
|
|
142
|
+
...modelContent !== void 0 && { modelContent },
|
|
143
|
+
...mcpApp && { mcp: { app: mcpApp } },
|
|
144
|
+
...getToolInterrupt(part, toolStatus)
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
if (part.type === "source-url") return {
|
|
148
|
+
type: "source",
|
|
149
|
+
sourceType: "url",
|
|
150
|
+
id: part.sourceId,
|
|
151
|
+
url: part.url,
|
|
152
|
+
...part.title != null ? { title: part.title } : void 0,
|
|
153
|
+
...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : void 0
|
|
154
|
+
};
|
|
155
|
+
if (part.type === "file") return {
|
|
156
|
+
type: "file",
|
|
157
|
+
data: part.url,
|
|
158
|
+
mimeType: part.mediaType,
|
|
159
|
+
...part.filename != null && { filename: part.filename }
|
|
160
|
+
};
|
|
161
|
+
if (part.type === "source-document") return {
|
|
162
|
+
type: "source",
|
|
163
|
+
sourceType: "document",
|
|
164
|
+
id: part.sourceId,
|
|
165
|
+
title: part.title,
|
|
166
|
+
mediaType: part.mediaType,
|
|
167
|
+
...part.filename != null ? { filename: part.filename } : void 0,
|
|
168
|
+
...part.providerMetadata != null ? { providerMetadata: part.providerMetadata } : void 0
|
|
169
|
+
};
|
|
170
|
+
if (part.type.startsWith("data-")) return {
|
|
171
|
+
type: "data",
|
|
172
|
+
name: part.type.substring(5),
|
|
173
|
+
data: part.data
|
|
174
|
+
};
|
|
175
|
+
console.warn(`Unsupported message part type: ${part.type}`);
|
|
176
|
+
return null;
|
|
177
|
+
}).filter(Boolean);
|
|
178
|
+
const seenToolCallIds = /* @__PURE__ */ new Set();
|
|
179
|
+
return converted.filter((part) => {
|
|
180
|
+
if (part.type === "tool-call" && part.toolCallId != null) {
|
|
181
|
+
if (seenToolCallIds.has(part.toolCallId)) return false;
|
|
182
|
+
seenToolCallIds.add(part.toolCallId);
|
|
183
|
+
}
|
|
184
|
+
return true;
|
|
185
|
+
});
|
|
262
186
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
},
|
|
310
|
-
};
|
|
311
|
-
}
|
|
312
|
-
default:
|
|
313
|
-
console.warn(`Unsupported message role: ${message.role}`);
|
|
314
|
-
return [];
|
|
315
|
-
}
|
|
187
|
+
const AISDKMessageConverter = createMessageConverter((message, metadata) => {
|
|
188
|
+
const createdAt = /* @__PURE__ */ new Date();
|
|
189
|
+
const content = convertParts(message, metadata);
|
|
190
|
+
switch (message.role) {
|
|
191
|
+
case "user": return {
|
|
192
|
+
role: "user",
|
|
193
|
+
id: message.id,
|
|
194
|
+
createdAt,
|
|
195
|
+
content,
|
|
196
|
+
attachments: message.parts?.filter((p) => p.type === "file").map((part, idx) => ({
|
|
197
|
+
id: idx.toString(),
|
|
198
|
+
type: part.mediaType.startsWith("image/") ? "image" : "file",
|
|
199
|
+
name: part.filename ?? "file",
|
|
200
|
+
content: [part.mediaType.startsWith("image/") ? {
|
|
201
|
+
type: "image",
|
|
202
|
+
image: part.url,
|
|
203
|
+
filename: part.filename
|
|
204
|
+
} : {
|
|
205
|
+
type: "file",
|
|
206
|
+
filename: part.filename,
|
|
207
|
+
data: part.url,
|
|
208
|
+
mimeType: part.mediaType
|
|
209
|
+
}],
|
|
210
|
+
contentType: part.mediaType ?? "unknown/unknown",
|
|
211
|
+
status: { type: "complete" }
|
|
212
|
+
})),
|
|
213
|
+
metadata: message.metadata
|
|
214
|
+
};
|
|
215
|
+
case "system":
|
|
216
|
+
case "assistant": {
|
|
217
|
+
const timing = metadata.messageTiming?.[message.id];
|
|
218
|
+
return {
|
|
219
|
+
role: message.role,
|
|
220
|
+
id: message.id,
|
|
221
|
+
createdAt,
|
|
222
|
+
content,
|
|
223
|
+
metadata: {
|
|
224
|
+
...message.metadata,
|
|
225
|
+
...timing && { timing }
|
|
226
|
+
}
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
default:
|
|
230
|
+
console.warn(`Unsupported message role: ${message.role}`);
|
|
231
|
+
return [];
|
|
232
|
+
}
|
|
316
233
|
});
|
|
234
|
+
//#endregion
|
|
235
|
+
export { AISDKMessageConverter };
|
|
236
|
+
|
|
317
237
|
//# sourceMappingURL=convertMessage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convertMessage.js","sourceRoot":"","sources":["../../../src/ui/utils/convertMessage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"convertMessage.js","names":["unstable_createMessageConverter"],"sources":["../../../src/ui/utils/convertMessage.ts"],"sourcesContent":["import { isToolUIPart, getToolName, type UIMessage } from \"ai\";\nimport {\n createMessageConverter as unstable_createMessageConverter,\n type useExternalMessageConverter,\n} from \"@assistant-ui/core/react\";\nimport {\n isMcpAppUri,\n type ReasoningMessagePart,\n type ToolCallMessagePart,\n type TextMessagePart,\n type DataMessagePart,\n type SourceMessagePart,\n type SourceProviderMetadata,\n type FileMessagePart,\n type ThreadMessageLike,\n type McpAppMetadata,\n} from \"@assistant-ui/core\";\nimport type { ReadonlyJSONObject } from \"assistant-stream/utils\";\nimport { unwrapModelContentEnvelope } from \"../../modelContentEnvelope\";\n\ntype MessageMetadata = ThreadMessageLike[\"metadata\"];\nexport type AISDKMessageConverterMetadata =\n useExternalMessageConverter.Metadata & {\n toolArgsKeyOrderCache?: Map<string, Map<string, string[]>>;\n toolLastInputCache?: Map<string, ReadonlyJSONObject>;\n mcpAppMetadataCache?: Map<string, McpAppMetadata>;\n };\n\nfunction stripClosingDelimiters(json: string): string {\n return json.replace(/[}\\]\"]+$/, \"\");\n}\n\nconst MCP_APP_METADATA_CACHE_MAX = 100;\n\nfunction extractMcpAppMetadata(\n part: unknown,\n cache: Map<string, McpAppMetadata> | undefined,\n): McpAppMetadata | undefined {\n if (!part || typeof part !== \"object\") return undefined;\n const meta = (part as { callProviderMetadata?: unknown })\n .callProviderMetadata;\n const mcp =\n meta && typeof meta === \"object\"\n ? (meta as { mcp?: unknown }).mcp\n : undefined;\n const app =\n mcp && typeof mcp === \"object\" ? (mcp as { app?: unknown }).app : undefined;\n let a: Record<string, unknown>;\n if (app && typeof app === \"object\") {\n a = app as Record<string, unknown>;\n } else {\n // MCP-UI tools (e.g. xmcp) surface the UI pointer as\n // result._meta[\"ui/resourceUri\"] rather than in callProviderMetadata.\n const output = (part as { output?: unknown }).output;\n const outMeta =\n output && typeof output === \"object\"\n ? (output as { _meta?: unknown })._meta\n : undefined;\n const uiResourceUri =\n outMeta && typeof outMeta === \"object\"\n ? (outMeta as Record<string, unknown>)[\"ui/resourceUri\"]\n : undefined;\n if (typeof uiResourceUri !== \"string\") return undefined;\n a = { resourceUri: uiResourceUri };\n }\n if (typeof a[\"resourceUri\"] !== \"string\") return undefined;\n if (!isMcpAppUri(a[\"resourceUri\"])) return undefined;\n const cached = cache?.get(a[\"resourceUri\"]);\n if (cached) {\n cache!.delete(a[\"resourceUri\"]);\n cache!.set(a[\"resourceUri\"], cached);\n return cached;\n }\n const out: { -readonly [K in keyof McpAppMetadata]: McpAppMetadata[K] } = {\n resourceUri: a[\"resourceUri\"],\n };\n if (typeof a[\"mimeType\"] === \"string\") out.mimeType = a[\"mimeType\"];\n if (Array.isArray(a[\"visibility\"])) {\n out.visibility = a[\"visibility\"].filter(\n (v): v is \"model\" | \"app\" => v === \"model\" || v === \"app\",\n );\n }\n if (cache) {\n if (cache.size >= MCP_APP_METADATA_CACHE_MAX) {\n const oldest = cache.keys().next().value;\n if (oldest !== undefined) cache.delete(oldest);\n }\n cache.set(a[\"resourceUri\"], out);\n }\n return out;\n}\n\nconst hasOwn = (value: object, key: string) => Object.hasOwn(value, key);\n\nconst stabilizeToolArgsValue = (\n value: unknown,\n path: string,\n keyOrderByPath: Map<string, string[]>,\n): unknown => {\n if (Array.isArray(value)) {\n return value.map((item, idx) =>\n stabilizeToolArgsValue(item, `${path}[${idx}]`, keyOrderByPath),\n );\n }\n\n if (value && typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const currentKeys = Object.keys(record);\n const previousOrder = keyOrderByPath.get(path) ?? [];\n const previousOrderSet = new Set(previousOrder);\n const nextOrder = [\n ...previousOrder.filter((key) => hasOwn(record, key)),\n ...currentKeys.filter((key) => !previousOrderSet.has(key)),\n ];\n keyOrderByPath.set(path, nextOrder);\n\n return Object.fromEntries(\n nextOrder.map((key) => [\n key,\n stabilizeToolArgsValue(record[key], `${path}.${key}`, keyOrderByPath),\n ]),\n );\n }\n\n return value;\n};\n\nfunction stableStringifyToolArgs(\n keyOrderCache: Map<string, Map<string, string[]>> | undefined,\n cacheKey: string,\n args: ReadonlyJSONObject,\n): string {\n const keyOrderByPath = keyOrderCache?.get(cacheKey) ?? new Map();\n keyOrderCache?.set(cacheKey, keyOrderByPath);\n\n const stableArgs = stabilizeToolArgsValue(\n args,\n \"$\",\n keyOrderByPath,\n ) as ReadonlyJSONObject;\n return JSON.stringify(stableArgs);\n}\n\n/**\n * Resolves the interrupt fields for a tool call part.\n *\n * Two interrupt paths for tool approvals:\n * 1. AI SDK server-side approval: approval-requested state with part.approval payload\n * 2. Frontend tools: toolStatuses interrupt from context.human()\n */\nfunction getToolInterrupt(\n part: { state: string; approval?: unknown },\n toolStatus: { type: string; payload?: unknown } | undefined,\n): Record<string, unknown> {\n if (part.state === \"approval-requested\" && \"approval\" in part) {\n return {\n interrupt: {\n type: \"human\" as const,\n payload: (part as { approval: unknown }).approval,\n },\n status: {\n type: \"requires-action\" as const,\n reason: \"interrupt\" as const,\n },\n };\n }\n\n if (toolStatus?.type === \"interrupt\") {\n return {\n interrupt: toolStatus.payload,\n status: {\n type: \"requires-action\" as const,\n reason: \"interrupt\" as const,\n },\n };\n }\n\n return {};\n}\n\ntype MessageContent = Exclude<ThreadMessageLike[\"content\"], string>;\n\nfunction convertParts(\n message: UIMessage,\n metadata: AISDKMessageConverterMetadata,\n): MessageContent {\n if (!message.parts || message.parts.length === 0) {\n return [];\n }\n\n const converted = message.parts\n .filter(\n (p) =>\n p.type !== \"step-start\" &&\n (message.role !== \"user\" || p.type !== \"file\"),\n )\n .map((part) => {\n if (part.type === \"text\") {\n return {\n type: \"text\",\n text: part.text,\n } satisfies TextMessagePart;\n }\n\n if (part.type === \"reasoning\") {\n return {\n type: \"reasoning\",\n text: part.text,\n } satisfies ReasoningMessagePart;\n }\n\n if (isToolUIPart(part)) {\n const toolName = getToolName(part);\n const toolCallId = part.toolCallId;\n const argsKeyOrderCacheKey = `${message.id}:${toolCallId}`;\n\n const rawInput = part.input as ReadonlyJSONObject | null | undefined;\n let args: ReadonlyJSONObject;\n if (\n rawInput != null &&\n typeof rawInput === \"object\" &&\n !Array.isArray(rawInput)\n ) {\n args = rawInput;\n metadata.toolLastInputCache?.set(argsKeyOrderCacheKey, args);\n } else {\n args = metadata.toolLastInputCache?.get(argsKeyOrderCacheKey) ?? {};\n }\n\n let result: unknown;\n let modelContent: ToolCallMessagePart[\"modelContent\"];\n let isError = false;\n\n if (part.state === \"output-available\") {\n const unwrapped = unwrapModelContentEnvelope(part.output);\n result = unwrapped.result;\n modelContent = unwrapped.modelContent;\n } else if (part.state === \"output-error\") {\n isError = true;\n result = { error: part.errorText };\n } else if (part.state === \"output-denied\") {\n isError = true;\n result = {\n error:\n (part as { approval: { reason?: string } }).approval.reason ||\n \"Tool approval denied\",\n };\n }\n\n let argsText = stableStringifyToolArgs(\n metadata.toolArgsKeyOrderCache,\n argsKeyOrderCacheKey,\n args,\n );\n if (part.state === \"input-streaming\") {\n // strip closing delimiters added by the AI SDK's fix-json\n argsText = stripClosingDelimiters(argsText);\n } else {\n metadata.toolArgsKeyOrderCache?.delete(argsKeyOrderCacheKey);\n if (\n part.state === \"output-available\" ||\n part.state === \"output-error\" ||\n part.state === \"output-denied\"\n ) {\n metadata.toolLastInputCache?.delete(argsKeyOrderCacheKey);\n }\n }\n\n const toolStatus = metadata.toolStatuses?.[toolCallId];\n const mcpApp = extractMcpAppMetadata(\n part,\n metadata.mcpAppMetadataCache,\n );\n return {\n type: \"tool-call\",\n toolName,\n toolCallId,\n argsText,\n args,\n result,\n isError,\n ...(modelContent !== undefined && { modelContent }),\n ...(mcpApp && { mcp: { app: mcpApp } }),\n ...getToolInterrupt(part, toolStatus),\n } satisfies ToolCallMessagePart;\n }\n\n if (part.type === \"source-url\") {\n return {\n type: \"source\",\n sourceType: \"url\",\n id: part.sourceId,\n url: part.url,\n ...(part.title != null ? { title: part.title } : undefined),\n ...(part.providerMetadata != null\n ? {\n providerMetadata:\n part.providerMetadata as SourceProviderMetadata,\n }\n : undefined),\n } satisfies SourceMessagePart;\n }\n\n if (part.type === \"file\") {\n return {\n type: \"file\",\n data: part.url,\n mimeType: part.mediaType,\n ...(part.filename != null && { filename: part.filename }),\n } satisfies FileMessagePart;\n }\n\n if (part.type === \"source-document\") {\n return {\n type: \"source\",\n sourceType: \"document\",\n id: part.sourceId,\n title: part.title,\n mediaType: part.mediaType,\n ...(part.filename != null ? { filename: part.filename } : undefined),\n ...(part.providerMetadata != null\n ? {\n providerMetadata:\n part.providerMetadata as SourceProviderMetadata,\n }\n : undefined),\n } satisfies SourceMessagePart;\n }\n\n if (part.type.startsWith(\"data-\")) {\n return {\n type: \"data\",\n name: part.type.substring(5),\n data: (part as any).data,\n } satisfies DataMessagePart;\n }\n\n console.warn(`Unsupported message part type: ${part.type}`);\n return null;\n })\n .filter(Boolean) as MessageContent[number][];\n\n const seenToolCallIds = new Set<string>();\n return converted.filter((part) => {\n if (part.type === \"tool-call\" && part.toolCallId != null) {\n if (seenToolCallIds.has(part.toolCallId)) return false;\n seenToolCallIds.add(part.toolCallId);\n }\n return true;\n });\n}\n\nexport const AISDKMessageConverter = unstable_createMessageConverter(\n (message: UIMessage, metadata: AISDKMessageConverterMetadata) => {\n const createdAt = new Date();\n const content = convertParts(message, metadata);\n\n switch (message.role) {\n case \"user\":\n return {\n role: \"user\",\n id: message.id,\n createdAt,\n content,\n attachments: message.parts\n ?.filter((p) => p.type === \"file\")\n .map((part, idx) => ({\n id: idx.toString(),\n type: part.mediaType.startsWith(\"image/\") ? \"image\" : \"file\",\n name: part.filename ?? \"file\",\n content: [\n part.mediaType.startsWith(\"image/\")\n ? {\n type: \"image\",\n image: part.url,\n filename: part.filename!,\n }\n : {\n type: \"file\",\n filename: part.filename!,\n data: part.url,\n mimeType: part.mediaType,\n },\n ],\n contentType: part.mediaType ?? \"unknown/unknown\",\n status: { type: \"complete\" as const },\n })),\n metadata: message.metadata as MessageMetadata,\n };\n\n case \"system\":\n case \"assistant\": {\n const timing = metadata.messageTiming?.[message.id];\n return {\n role: message.role,\n id: message.id,\n createdAt,\n content,\n metadata: {\n ...(message.metadata as MessageMetadata),\n ...(timing && { timing }),\n },\n };\n }\n\n default:\n console.warn(`Unsupported message role: ${message.role}`);\n return [];\n }\n },\n);\n"],"mappings":"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"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { UIMessage } from "ai";
|
|
2
|
+
|
|
3
|
+
//#region src/ui/utils/sliceMessagesUntil.d.ts
|
|
4
|
+
declare const sliceMessagesUntil: <UI_MESSAGE extends UIMessage = UIMessage>(messages: UI_MESSAGE[], messageId: string | null) => UI_MESSAGE[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { sliceMessagesUntil };
|
|
3
7
|
//# sourceMappingURL=sliceMessagesUntil.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sliceMessagesUntil.d.ts","
|
|
1
|
+
{"version":3,"file":"sliceMessagesUntil.d.ts","names":[],"sources":["../../../src/ui/utils/sliceMessagesUntil.ts"],"mappings":";;;cAEa,kBAAA,sBAAyC,SAAA,GAAY,SAAA,EAChE,QAAA,EAAU,UAAA,IACV,SAAA,oBAAwB,UAAA"}
|