@assistant-ui/react-ai-sdk 0.3.0 → 0.4.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.
package/dist/index.d.mts CHANGED
@@ -1,14 +1,14 @@
1
1
  import * as _assistant_ui_react from '@assistant-ui/react';
2
- import { ChatModelAdapter, ChatModelRunOptions, AssistantContentPart, AppendMessage, ModelConfigProvider, ReactThreadRuntime, ThreadMessage, Unsubscribe, INTERNAL } from '@assistant-ui/react';
2
+ import { ChatModelAdapter, ChatModelRunOptions, CoreAssistantContentPart, AppendMessage, ReactThreadRuntime, ThreadMessage, Unsubscribe, ModelConfigProvider, INTERNAL, AddToolResultOptions } from '@assistant-ui/react';
3
3
  import { LanguageModel, Message } from 'ai';
4
4
  import { ReactNode } from 'react';
5
- import { useChat, UseAssistantHelpers } from '@ai-sdk/react';
5
+ import { useChat, useAssistant } from 'ai/react';
6
6
 
7
7
  declare class VercelModelAdapter implements ChatModelAdapter {
8
8
  private readonly model;
9
9
  constructor(model: LanguageModel);
10
10
  run({ messages, abortSignal, config, onUpdate }: ChatModelRunOptions): Promise<{
11
- content: AssistantContentPart[];
11
+ content: CoreAssistantContentPart[];
12
12
  }>;
13
13
  }
14
14
 
@@ -31,19 +31,15 @@ type VercelRSCAdapterBase<T> = {
31
31
  };
32
32
  type VercelRSCAdapter<T = VercelRSCMessage> = VercelRSCAdapterBase<T> & (T extends VercelRSCMessage ? object : RSCMessageConverter<T>);
33
33
 
34
- declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
35
- declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
36
- private readonly _proxyConfigProvider;
37
- constructor(adapter: VercelRSCAdapter<T>);
38
- set adapter(adapter: VercelRSCAdapter<T>);
39
- onAdapterUpdated(): void;
40
- getModelConfig(): _assistant_ui_react.ModelConfig;
41
- registerModelConfigProvider(provider: ModelConfigProvider): () => void;
42
- switchToThread(): void;
43
- }
44
34
  declare class VercelRSCThreadRuntime<T extends WeakKey = VercelRSCMessage> implements ReactThreadRuntime {
45
35
  adapter: VercelRSCAdapter<T>;
46
36
  private useAdapter;
37
+ readonly capabilities: Readonly<{
38
+ edit: false;
39
+ reload: false;
40
+ cancel: false;
41
+ copy: false;
42
+ }>;
47
43
  private _subscriptions;
48
44
  isRunning: boolean;
49
45
  messages: ThreadMessage[];
@@ -61,6 +57,17 @@ declare class VercelRSCThreadRuntime<T extends WeakKey = VercelRSCMessage> imple
61
57
  addToolResult(): void;
62
58
  }
63
59
 
60
+ declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
61
+ declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
62
+ private readonly _proxyConfigProvider;
63
+ constructor(adapter: VercelRSCAdapter<T>);
64
+ set adapter(adapter: VercelRSCAdapter<T>);
65
+ onAdapterUpdated(): void;
66
+ getModelConfig(): _assistant_ui_react.ModelConfig;
67
+ registerModelConfigProvider(provider: ModelConfigProvider): () => void;
68
+ switchToThread(): void;
69
+ }
70
+
64
71
  declare const useVercelRSCRuntime: <T extends WeakKey>(adapter: VercelRSCAdapter<T>) => VercelRSCRuntime<T>;
65
72
 
66
73
  declare const getVercelRSCMessage: <T>(message: ThreadMessage) => T | undefined;
@@ -71,6 +78,12 @@ declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
71
78
  private repository;
72
79
  private assistantOptimisticId;
73
80
  private useVercel;
81
+ readonly capabilities: Readonly<{
82
+ edit: true;
83
+ reload: true;
84
+ cancel: true;
85
+ copy: true;
86
+ }>;
74
87
  messages: ThreadMessage[];
75
88
  isRunning: boolean;
76
89
  constructor(vercel: ReturnType<typeof useChat>);
@@ -84,7 +97,7 @@ declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
84
97
  onVercelUpdated(): void;
85
98
  private updateData;
86
99
  unstable_synchronizer: () => null;
87
- addToolResult(toolCallId: string, result: any): void;
100
+ addToolResult({ toolCallId, result }: AddToolResultOptions): void;
88
101
  }
89
102
 
90
103
  declare const BaseAssistantRuntime$1: typeof INTERNAL.BaseAssistantRuntime;
@@ -101,12 +114,18 @@ declare class VercelUseChatRuntime extends BaseAssistantRuntime$1<VercelUseChatT
101
114
  declare const useVercelUseChatRuntime: (chatHelpers: ReturnType<typeof useChat>) => VercelUseChatRuntime;
102
115
 
103
116
  declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
104
- vercel: UseAssistantHelpers;
117
+ vercel: ReturnType<typeof useAssistant>;
105
118
  private _subscriptions;
119
+ readonly capabilities: Readonly<{
120
+ edit: false;
121
+ reload: false;
122
+ cancel: false;
123
+ copy: true;
124
+ }>;
106
125
  private useVercel;
107
126
  messages: readonly ThreadMessage[];
108
127
  isRunning: boolean;
109
- constructor(vercel: UseAssistantHelpers);
128
+ constructor(vercel: ReturnType<typeof useAssistant>);
110
129
  getBranches(): readonly string[];
111
130
  switchToBranch(): void;
112
131
  append(message: AppendMessage): Promise<void>;
@@ -122,15 +141,15 @@ declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
122
141
  declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
123
142
  declare class VercelUseAssistantRuntime extends BaseAssistantRuntime<VercelUseAssistantThreadRuntime> {
124
143
  private readonly _proxyConfigProvider;
125
- constructor(vercel: UseAssistantHelpers);
126
- set vercel(vercel: UseAssistantHelpers);
144
+ constructor(vercel: ReturnType<typeof useAssistant>);
145
+ set vercel(vercel: ReturnType<typeof useAssistant>);
127
146
  onVercelUpdated(): void;
128
147
  getModelConfig(): _assistant_ui_react.ModelConfig;
129
148
  registerModelConfigProvider(provider: ModelConfigProvider): () => void;
130
149
  switchToThread(threadId: string | null): void;
131
150
  }
132
151
 
133
- declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) => VercelUseAssistantRuntime;
152
+ declare const useVercelUseAssistantRuntime: (assistantHelpers: ReturnType<typeof useAssistant>) => VercelUseAssistantRuntime;
134
153
 
135
154
  declare const getVercelAIMessage: (message: ThreadMessage) => Message[] | undefined;
136
155
 
package/dist/index.d.ts CHANGED
@@ -1,14 +1,14 @@
1
1
  import * as _assistant_ui_react from '@assistant-ui/react';
2
- import { ChatModelAdapter, ChatModelRunOptions, AssistantContentPart, AppendMessage, ModelConfigProvider, ReactThreadRuntime, ThreadMessage, Unsubscribe, INTERNAL } from '@assistant-ui/react';
2
+ import { ChatModelAdapter, ChatModelRunOptions, CoreAssistantContentPart, AppendMessage, ReactThreadRuntime, ThreadMessage, Unsubscribe, ModelConfigProvider, INTERNAL, AddToolResultOptions } from '@assistant-ui/react';
3
3
  import { LanguageModel, Message } from 'ai';
4
4
  import { ReactNode } from 'react';
5
- import { useChat, UseAssistantHelpers } from '@ai-sdk/react';
5
+ import { useChat, useAssistant } from 'ai/react';
6
6
 
7
7
  declare class VercelModelAdapter implements ChatModelAdapter {
8
8
  private readonly model;
9
9
  constructor(model: LanguageModel);
10
10
  run({ messages, abortSignal, config, onUpdate }: ChatModelRunOptions): Promise<{
11
- content: AssistantContentPart[];
11
+ content: CoreAssistantContentPart[];
12
12
  }>;
13
13
  }
14
14
 
@@ -31,19 +31,15 @@ type VercelRSCAdapterBase<T> = {
31
31
  };
32
32
  type VercelRSCAdapter<T = VercelRSCMessage> = VercelRSCAdapterBase<T> & (T extends VercelRSCMessage ? object : RSCMessageConverter<T>);
33
33
 
34
- declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
35
- declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
36
- private readonly _proxyConfigProvider;
37
- constructor(adapter: VercelRSCAdapter<T>);
38
- set adapter(adapter: VercelRSCAdapter<T>);
39
- onAdapterUpdated(): void;
40
- getModelConfig(): _assistant_ui_react.ModelConfig;
41
- registerModelConfigProvider(provider: ModelConfigProvider): () => void;
42
- switchToThread(): void;
43
- }
44
34
  declare class VercelRSCThreadRuntime<T extends WeakKey = VercelRSCMessage> implements ReactThreadRuntime {
45
35
  adapter: VercelRSCAdapter<T>;
46
36
  private useAdapter;
37
+ readonly capabilities: Readonly<{
38
+ edit: false;
39
+ reload: false;
40
+ cancel: false;
41
+ copy: false;
42
+ }>;
47
43
  private _subscriptions;
48
44
  isRunning: boolean;
49
45
  messages: ThreadMessage[];
@@ -61,6 +57,17 @@ declare class VercelRSCThreadRuntime<T extends WeakKey = VercelRSCMessage> imple
61
57
  addToolResult(): void;
62
58
  }
63
59
 
60
+ declare const BaseAssistantRuntime$2: typeof INTERNAL.BaseAssistantRuntime;
61
+ declare class VercelRSCRuntime<T extends WeakKey = VercelRSCMessage> extends BaseAssistantRuntime$2<VercelRSCThreadRuntime<T>> {
62
+ private readonly _proxyConfigProvider;
63
+ constructor(adapter: VercelRSCAdapter<T>);
64
+ set adapter(adapter: VercelRSCAdapter<T>);
65
+ onAdapterUpdated(): void;
66
+ getModelConfig(): _assistant_ui_react.ModelConfig;
67
+ registerModelConfigProvider(provider: ModelConfigProvider): () => void;
68
+ switchToThread(): void;
69
+ }
70
+
64
71
  declare const useVercelRSCRuntime: <T extends WeakKey>(adapter: VercelRSCAdapter<T>) => VercelRSCRuntime<T>;
65
72
 
66
73
  declare const getVercelRSCMessage: <T>(message: ThreadMessage) => T | undefined;
@@ -71,6 +78,12 @@ declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
71
78
  private repository;
72
79
  private assistantOptimisticId;
73
80
  private useVercel;
81
+ readonly capabilities: Readonly<{
82
+ edit: true;
83
+ reload: true;
84
+ cancel: true;
85
+ copy: true;
86
+ }>;
74
87
  messages: ThreadMessage[];
75
88
  isRunning: boolean;
76
89
  constructor(vercel: ReturnType<typeof useChat>);
@@ -84,7 +97,7 @@ declare class VercelUseChatThreadRuntime implements ReactThreadRuntime {
84
97
  onVercelUpdated(): void;
85
98
  private updateData;
86
99
  unstable_synchronizer: () => null;
87
- addToolResult(toolCallId: string, result: any): void;
100
+ addToolResult({ toolCallId, result }: AddToolResultOptions): void;
88
101
  }
89
102
 
90
103
  declare const BaseAssistantRuntime$1: typeof INTERNAL.BaseAssistantRuntime;
@@ -101,12 +114,18 @@ declare class VercelUseChatRuntime extends BaseAssistantRuntime$1<VercelUseChatT
101
114
  declare const useVercelUseChatRuntime: (chatHelpers: ReturnType<typeof useChat>) => VercelUseChatRuntime;
102
115
 
103
116
  declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
104
- vercel: UseAssistantHelpers;
117
+ vercel: ReturnType<typeof useAssistant>;
105
118
  private _subscriptions;
119
+ readonly capabilities: Readonly<{
120
+ edit: false;
121
+ reload: false;
122
+ cancel: false;
123
+ copy: true;
124
+ }>;
106
125
  private useVercel;
107
126
  messages: readonly ThreadMessage[];
108
127
  isRunning: boolean;
109
- constructor(vercel: UseAssistantHelpers);
128
+ constructor(vercel: ReturnType<typeof useAssistant>);
110
129
  getBranches(): readonly string[];
111
130
  switchToBranch(): void;
112
131
  append(message: AppendMessage): Promise<void>;
@@ -122,15 +141,15 @@ declare class VercelUseAssistantThreadRuntime implements ReactThreadRuntime {
122
141
  declare const BaseAssistantRuntime: typeof INTERNAL.BaseAssistantRuntime;
123
142
  declare class VercelUseAssistantRuntime extends BaseAssistantRuntime<VercelUseAssistantThreadRuntime> {
124
143
  private readonly _proxyConfigProvider;
125
- constructor(vercel: UseAssistantHelpers);
126
- set vercel(vercel: UseAssistantHelpers);
144
+ constructor(vercel: ReturnType<typeof useAssistant>);
145
+ set vercel(vercel: ReturnType<typeof useAssistant>);
127
146
  onVercelUpdated(): void;
128
147
  getModelConfig(): _assistant_ui_react.ModelConfig;
129
148
  registerModelConfigProvider(provider: ModelConfigProvider): () => void;
130
149
  switchToThread(threadId: string | null): void;
131
150
  }
132
151
 
133
- declare const useVercelUseAssistantRuntime: (assistantHelpers: UseAssistantHelpers) => VercelUseAssistantRuntime;
152
+ declare const useVercelUseAssistantRuntime: (assistantHelpers: ReturnType<typeof useAssistant>) => VercelUseAssistantRuntime;
134
153
 
135
154
  declare const getVercelAIMessage: (message: ThreadMessage) => Message[] | undefined;
136
155
 
package/dist/index.js CHANGED
@@ -34,6 +34,9 @@ var import_ai = require("ai");
34
34
 
35
35
  // src/core/convertToCoreMessage.ts
36
36
  var convertToCoreMessage = (message) => {
37
+ if (message.role === "system") {
38
+ return [{ role: "system", content: message.content[0].text }];
39
+ }
37
40
  const expandedMessages = [
38
41
  {
39
42
  role: message.role,
@@ -92,7 +95,8 @@ var VercelModelAdapter = class {
92
95
  });
93
96
  const content = [];
94
97
  for await (const aiPart of fullStream) {
95
- switch (aiPart.type) {
98
+ const partType = aiPart.type;
99
+ switch (partType) {
96
100
  case "text-delta": {
97
101
  let part = content.at(-1);
98
102
  if (!part || part.type !== "text") {
@@ -117,19 +121,26 @@ var VercelModelAdapter = class {
117
121
  }
118
122
  case "tool-result": {
119
123
  const toolCall = content.findIndex(
124
+ // @ts-expect-error
120
125
  (c) => c.type === "tool-call" && c.toolCallId === aiPart.toolCallId
121
126
  );
122
127
  if (toolCall === -1) {
123
128
  throw new Error(
129
+ // @ts-expect-error
124
130
  `Tool call ${aiPart.toolCallId} not found in the content stream. This is likely an internal bug in assistant-ui.`
125
131
  );
126
132
  }
127
133
  content[toolCall] = {
128
134
  ...content[toolCall],
135
+ // @ts-expect-error
129
136
  result: aiPart.result
130
137
  };
131
138
  break;
132
139
  }
140
+ default: {
141
+ const unhandledType = partType;
142
+ throw new Error(`Unknown content part type: ${unhandledType}`);
143
+ }
133
144
  }
134
145
  onUpdate({ content });
135
146
  }
@@ -138,9 +149,12 @@ var VercelModelAdapter = class {
138
149
  };
139
150
 
140
151
  // src/rsc/useVercelRSCRuntime.tsx
141
- var import_react3 = require("react");
152
+ var import_react4 = require("react");
142
153
 
143
154
  // src/rsc/VercelRSCRuntime.tsx
155
+ var import_react3 = require("@assistant-ui/react");
156
+
157
+ // src/rsc/VercelRSCThreadRuntime.tsx
144
158
  var import_react2 = require("@assistant-ui/react");
145
159
  var import_zustand = require("zustand");
146
160
 
@@ -175,7 +189,7 @@ var vercelToThreadMessage = (converter, rawMessage) => {
175
189
  role: message.role,
176
190
  content: [{ type: "ui", display: message.display }],
177
191
  createdAt: message.createdAt ?? /* @__PURE__ */ new Date(),
178
- ...{ status: "done" },
192
+ ...{ status: { type: "done" } },
179
193
  [symbolInnerRSCMessage]: rawMessage
180
194
  };
181
195
  };
@@ -193,30 +207,15 @@ var useVercelRSCSync = (adapter, updateData) => {
193
207
  }, [updateData, converter, convertCallback, adapter.messages]);
194
208
  };
195
209
 
196
- // src/rsc/VercelRSCRuntime.tsx
197
- var { ProxyConfigProvider, BaseAssistantRuntime } = import_react2.INTERNAL;
210
+ // src/rsc/VercelRSCThreadRuntime.tsx
211
+ var { ProxyConfigProvider } = import_react2.INTERNAL;
198
212
  var EMPTY_BRANCHES = Object.freeze([]);
199
- var VercelRSCRuntime = class extends BaseAssistantRuntime {
200
- _proxyConfigProvider = new ProxyConfigProvider();
201
- constructor(adapter) {
202
- super(new VercelRSCThreadRuntime(adapter));
203
- }
204
- set adapter(adapter) {
205
- this.thread.adapter = adapter;
206
- }
207
- onAdapterUpdated() {
208
- return this.thread.onAdapterUpdated();
209
- }
210
- getModelConfig() {
211
- return this._proxyConfigProvider.getModelConfig();
212
- }
213
- registerModelConfigProvider(provider) {
214
- return this._proxyConfigProvider.registerModelConfigProvider(provider);
215
- }
216
- switchToThread() {
217
- throw new Error("VercelRSCRuntime does not support switching threads");
218
- }
219
- };
213
+ var CAPABILITIES = Object.freeze({
214
+ edit: false,
215
+ reload: false,
216
+ cancel: false,
217
+ copy: false
218
+ });
220
219
  var VercelRSCThreadRuntime = class {
221
220
  constructor(adapter) {
222
221
  this.adapter = adapter;
@@ -225,6 +224,7 @@ var VercelRSCThreadRuntime = class {
225
224
  }));
226
225
  }
227
226
  useAdapter;
227
+ capabilities = CAPABILITIES;
228
228
  _subscriptions = /* @__PURE__ */ new Set();
229
229
  isRunning = false;
230
230
  messages = [];
@@ -261,11 +261,7 @@ var VercelRSCThreadRuntime = class {
261
261
  await this.withRunning(this.adapter.reload(parentId));
262
262
  }
263
263
  cancelRun() {
264
- if (process.env["NODE_ENV"] === "development") {
265
- console.warn(
266
- "Run cancellation is not supported by VercelRSCAssistantProvider."
267
- );
268
- }
264
+ throw new Error("VercelRSCRuntime does not support cancelling runs.");
269
265
  }
270
266
  subscribe(callback) {
271
267
  this._subscriptions.add(callback);
@@ -290,26 +286,50 @@ var VercelRSCThreadRuntime = class {
290
286
  }
291
287
  };
292
288
 
289
+ // src/rsc/VercelRSCRuntime.tsx
290
+ var { BaseAssistantRuntime } = import_react3.INTERNAL;
291
+ var VercelRSCRuntime = class extends BaseAssistantRuntime {
292
+ _proxyConfigProvider = new ProxyConfigProvider();
293
+ constructor(adapter) {
294
+ super(new VercelRSCThreadRuntime(adapter));
295
+ }
296
+ set adapter(adapter) {
297
+ this.thread.adapter = adapter;
298
+ }
299
+ onAdapterUpdated() {
300
+ return this.thread.onAdapterUpdated();
301
+ }
302
+ getModelConfig() {
303
+ return this._proxyConfigProvider.getModelConfig();
304
+ }
305
+ registerModelConfigProvider(provider) {
306
+ return this._proxyConfigProvider.registerModelConfigProvider(provider);
307
+ }
308
+ switchToThread() {
309
+ throw new Error("VercelRSCRuntime does not support switching threads");
310
+ }
311
+ };
312
+
293
313
  // src/rsc/useVercelRSCRuntime.tsx
294
314
  var useVercelRSCRuntime = (adapter) => {
295
- const [runtime] = (0, import_react3.useState)(() => new VercelRSCRuntime(adapter));
296
- (0, import_react3.useInsertionEffect)(() => {
315
+ const [runtime] = (0, import_react4.useState)(() => new VercelRSCRuntime(adapter));
316
+ (0, import_react4.useInsertionEffect)(() => {
297
317
  runtime.adapter = adapter;
298
318
  });
299
- (0, import_react3.useEffect)(() => {
319
+ (0, import_react4.useEffect)(() => {
300
320
  runtime.onAdapterUpdated();
301
321
  });
302
322
  return runtime;
303
323
  };
304
324
 
305
325
  // src/ui/use-chat/useVercelUseChatRuntime.tsx
306
- var import_react9 = require("react");
326
+ var import_react10 = require("react");
307
327
 
308
328
  // src/ui/use-chat/VercelUseChatRuntime.tsx
309
- var import_react8 = require("@assistant-ui/react");
329
+ var import_react9 = require("@assistant-ui/react");
310
330
 
311
331
  // src/ui/use-chat/VercelUseChatThreadRuntime.tsx
312
- var import_react7 = require("@assistant-ui/react");
332
+ var import_react8 = require("@assistant-ui/react");
313
333
  var import_zustand2 = require("zustand");
314
334
 
315
335
  // src/ui/getVercelAIMessage.tsx
@@ -333,11 +353,11 @@ var sliceMessagesUntil = (messages, messageId) => {
333
353
  };
334
354
 
335
355
  // src/ui/utils/useVercelAIComposerSync.tsx
336
- var import_react4 = require("@assistant-ui/react");
337
- var import_react5 = require("react");
356
+ var import_react5 = require("@assistant-ui/react");
357
+ var import_react6 = require("react");
338
358
  var useVercelAIComposerSync = (vercel) => {
339
- const { useComposer } = (0, import_react4.useThreadContext)();
340
- (0, import_react5.useEffect)(() => {
359
+ const { useComposer } = (0, import_react5.useThreadContext)();
360
+ (0, import_react6.useEffect)(() => {
341
361
  useComposer.setState({
342
362
  value: vercel.input,
343
363
  setValue: vercel.setInput
@@ -346,7 +366,7 @@ var useVercelAIComposerSync = (vercel) => {
346
366
  };
347
367
 
348
368
  // src/ui/utils/useVercelAIThreadSync.tsx
349
- var import_react6 = require("react");
369
+ var import_react7 = require("react");
350
370
  var getIsRunning = (vercel) => {
351
371
  if ("isLoading" in vercel) return vercel.isLoading;
352
372
  return vercel.status === "in_progress";
@@ -371,6 +391,12 @@ var vercelToThreadMessage2 = (messages, status) => {
371
391
  role: "user",
372
392
  content: [{ type: "text", text: firstMessage.content }]
373
393
  };
394
+ case "system":
395
+ return {
396
+ ...common,
397
+ role: "system",
398
+ content: [{ type: "text", text: firstMessage.content }]
399
+ };
374
400
  case "data":
375
401
  case "assistant": {
376
402
  const res = {
@@ -406,8 +432,9 @@ var vercelToThreadMessage2 = (messages, status) => {
406
432
  return res;
407
433
  }
408
434
  default:
435
+ const _unsupported = firstMessage.role;
409
436
  throw new Error(
410
- `123 You have a message with an unsupported role. The role ${firstMessage.role} is not supported.`
437
+ `You have a message with an unsupported role. The role ${_unsupported} is not supported.`
411
438
  );
412
439
  }
413
440
  };
@@ -440,12 +467,14 @@ var shallowArrayEqual = (a, b) => {
440
467
  };
441
468
  var useVercelAIThreadSync = (vercel, updateData) => {
442
469
  const isRunning = getIsRunning(vercel);
443
- const converter = (0, import_react6.useMemo)(() => new ThreadMessageConverter(), []);
444
- (0, import_react6.useEffect)(() => {
470
+ const converter = (0, import_react7.useMemo)(() => new ThreadMessageConverter(), []);
471
+ (0, import_react7.useEffect)(() => {
445
472
  const lastMessageId = vercel.messages.at(-1)?.id;
446
473
  const convertCallback = (messages2, cache) => {
447
- const status = lastMessageId === messages2[0].id && isRunning ? "in_progress" : "done";
448
- if (cache && shallowArrayEqual(cache.content, messages2) && (cache.role === "user" || cache.status === status))
474
+ const status = {
475
+ type: lastMessageId === messages2[0].id && isRunning ? "in_progress" : "done"
476
+ };
477
+ if (cache && shallowArrayEqual(cache.content, messages2) && (cache.role !== "assistant" || cache.status.type === status.type))
449
478
  return cache;
450
479
  return vercelToThreadMessage2(messages2, status);
451
480
  };
@@ -459,10 +488,16 @@ var useVercelAIThreadSync = (vercel, updateData) => {
459
488
  };
460
489
 
461
490
  // src/ui/use-chat/VercelUseChatThreadRuntime.tsx
462
- var { MessageRepository } = import_react7.INTERNAL;
491
+ var { MessageRepository } = import_react8.INTERNAL;
463
492
  var hasUpcomingMessage = (isRunning, messages) => {
464
493
  return isRunning && messages[messages.length - 1]?.role !== "assistant";
465
494
  };
495
+ var CAPABILITIES2 = Object.freeze({
496
+ edit: true,
497
+ reload: true,
498
+ cancel: true,
499
+ copy: true
500
+ });
466
501
  var VercelUseChatThreadRuntime = class {
467
502
  constructor(vercel) {
468
503
  this.vercel = vercel;
@@ -474,6 +509,7 @@ var VercelUseChatThreadRuntime = class {
474
509
  repository = new MessageRepository();
475
510
  assistantOptimisticId = null;
476
511
  useVercel;
512
+ capabilities = CAPABILITIES2;
477
513
  messages = [];
478
514
  isRunning = false;
479
515
  getBranches(messageId) {
@@ -566,13 +602,13 @@ var VercelUseChatThreadRuntime = class {
566
602
  useVercelAIComposerSync(vercel);
567
603
  return null;
568
604
  };
569
- addToolResult(toolCallId, result) {
605
+ addToolResult({ toolCallId, result }) {
570
606
  this.vercel.addToolResult({ toolCallId, result });
571
607
  }
572
608
  };
573
609
 
574
610
  // src/ui/use-chat/VercelUseChatRuntime.tsx
575
- var { ProxyConfigProvider: ProxyConfigProvider2, BaseAssistantRuntime: BaseAssistantRuntime2 } = import_react8.INTERNAL;
611
+ var { ProxyConfigProvider: ProxyConfigProvider2, BaseAssistantRuntime: BaseAssistantRuntime2 } = import_react9.INTERNAL;
576
612
  var VercelUseChatRuntime = class extends BaseAssistantRuntime2 {
577
613
  _proxyConfigProvider = new ProxyConfigProvider2();
578
614
  constructor(vercel) {
@@ -606,25 +642,31 @@ var VercelUseChatRuntime = class extends BaseAssistantRuntime2 {
606
642
 
607
643
  // src/ui/use-chat/useVercelUseChatRuntime.tsx
608
644
  var useVercelUseChatRuntime = (chatHelpers) => {
609
- const [runtime] = (0, import_react9.useState)(() => new VercelUseChatRuntime(chatHelpers));
610
- (0, import_react9.useInsertionEffect)(() => {
645
+ const [runtime] = (0, import_react10.useState)(() => new VercelUseChatRuntime(chatHelpers));
646
+ (0, import_react10.useInsertionEffect)(() => {
611
647
  runtime.vercel = chatHelpers;
612
648
  });
613
- (0, import_react9.useEffect)(() => {
649
+ (0, import_react10.useEffect)(() => {
614
650
  runtime.onVercelUpdated();
615
651
  });
616
652
  return runtime;
617
653
  };
618
654
 
619
655
  // src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
620
- var import_react11 = require("react");
656
+ var import_react12 = require("react");
621
657
 
622
658
  // src/ui/use-assistant/VercelUseAssistantRuntime.tsx
623
- var import_react10 = require("@assistant-ui/react");
659
+ var import_react11 = require("@assistant-ui/react");
624
660
 
625
661
  // src/ui/use-assistant/VercelUseAssistantThreadRuntime.tsx
626
662
  var import_zustand3 = require("zustand");
627
663
  var EMPTY_BRANCHES2 = Object.freeze([]);
664
+ var CAPABILITIES3 = Object.freeze({
665
+ edit: false,
666
+ reload: false,
667
+ cancel: false,
668
+ copy: true
669
+ });
628
670
  var VercelUseAssistantThreadRuntime = class {
629
671
  constructor(vercel) {
630
672
  this.vercel = vercel;
@@ -633,6 +675,7 @@ var VercelUseAssistantThreadRuntime = class {
633
675
  }));
634
676
  }
635
677
  _subscriptions = /* @__PURE__ */ new Set();
678
+ capabilities = CAPABILITIES3;
636
679
  useVercel;
637
680
  messages = [];
638
681
  isRunning = false;
@@ -680,7 +723,7 @@ var VercelUseAssistantThreadRuntime = class {
680
723
  vm.push({
681
724
  id: "__optimistic__result",
682
725
  createdAt: /* @__PURE__ */ new Date(),
683
- status: "in_progress",
726
+ status: { type: "in_progress" },
684
727
  role: "assistant",
685
728
  content: [{ type: "text", text: "" }]
686
729
  });
@@ -703,7 +746,7 @@ var VercelUseAssistantThreadRuntime = class {
703
746
  };
704
747
 
705
748
  // src/ui/use-assistant/VercelUseAssistantRuntime.tsx
706
- var { ProxyConfigProvider: ProxyConfigProvider3, BaseAssistantRuntime: BaseAssistantRuntime3 } = import_react10.INTERNAL;
749
+ var { ProxyConfigProvider: ProxyConfigProvider3, BaseAssistantRuntime: BaseAssistantRuntime3 } = import_react11.INTERNAL;
707
750
  var hasUpcomingMessage2 = (isRunning, messages) => {
708
751
  return isRunning && messages[messages.length - 1]?.role !== "assistant";
709
752
  };
@@ -738,13 +781,13 @@ var VercelUseAssistantRuntime = class extends BaseAssistantRuntime3 {
738
781
 
739
782
  // src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
740
783
  var useVercelUseAssistantRuntime = (assistantHelpers) => {
741
- const [runtime] = (0, import_react11.useState)(
784
+ const [runtime] = (0, import_react12.useState)(
742
785
  () => new VercelUseAssistantRuntime(assistantHelpers)
743
786
  );
744
- (0, import_react11.useInsertionEffect)(() => {
787
+ (0, import_react12.useInsertionEffect)(() => {
745
788
  runtime.vercel = assistantHelpers;
746
789
  });
747
- (0, import_react11.useEffect)(() => {
790
+ (0, import_react12.useEffect)(() => {
748
791
  runtime.onVercelUpdated();
749
792
  });
750
793
  return runtime;