@assistant-ui/react 0.0.26 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -41,7 +41,7 @@ __export(src_exports, {
41
41
  VercelRSCAssistantProvider: () => VercelRSCAssistantProvider,
42
42
  getVercelAIMessage: () => getVercelAIMessage,
43
43
  getVercelRSCMessage: () => getVercelRSCMessage,
44
- unstable_VercelModelAdapter: () => VercelModelAdapter,
44
+ unstable_MessageRepository: () => MessageRepository,
45
45
  unstable_useComposerContext: () => useComposerContext,
46
46
  unstable_useContentPartContext: () => useContentPartContext,
47
47
  unstable_useLocalRuntime: () => useLocalRuntime,
@@ -1041,16 +1041,16 @@ __export(contentPart_exports, {
1041
1041
  InProgressIndicator: () => ContentPartInProgressIndicator
1042
1042
  });
1043
1043
 
1044
- // src/runtime/vercel-ai/rsc/useVercelRSCRuntime.tsx
1044
+ // ../react-ai-sdk/src/rsc/useVercelRSCRuntime.tsx
1045
1045
  var import_react30 = require("react");
1046
1046
 
1047
- // src/runtime/vercel-ai/rsc/VercelRSCRuntime.tsx
1047
+ // ../react-ai-sdk/src/rsc/VercelRSCRuntime.tsx
1048
1048
  var import_zustand4 = require("zustand");
1049
1049
 
1050
- // src/runtime/vercel-ai/rsc/useVercelRSCSync.tsx
1050
+ // ../react-ai-sdk/src/rsc/useVercelRSCSync.tsx
1051
1051
  var import_react29 = require("react");
1052
1052
 
1053
- // src/runtime/vercel-ai/utils/ThreadMessageConverter.ts
1053
+ // ../react-ai-sdk/src/utils/ThreadMessageConverter.ts
1054
1054
  var ThreadMessageConverter = class {
1055
1055
  cache = /* @__PURE__ */ new WeakMap();
1056
1056
  convertMessages(messages, converter, keyMapper = (key) => key) {
@@ -1064,13 +1064,13 @@ var ThreadMessageConverter = class {
1064
1064
  }
1065
1065
  };
1066
1066
 
1067
- // src/runtime/vercel-ai/rsc/getVercelRSCMessage.tsx
1067
+ // ../react-ai-sdk/src/rsc/getVercelRSCMessage.tsx
1068
1068
  var symbolInnerRSCMessage = Symbol("innerVercelRSCMessage");
1069
1069
  var getVercelRSCMessage = (message) => {
1070
1070
  return message[symbolInnerRSCMessage];
1071
1071
  };
1072
1072
 
1073
- // src/runtime/vercel-ai/rsc/useVercelRSCSync.tsx
1073
+ // ../react-ai-sdk/src/rsc/useVercelRSCSync.tsx
1074
1074
  var vercelToThreadMessage = (converter, rawMessage) => {
1075
1075
  const message = converter(rawMessage);
1076
1076
  return {
@@ -1096,7 +1096,7 @@ var useVercelRSCSync = (adapter, updateData) => {
1096
1096
  }, [updateData, converter, convertCallback, adapter.messages]);
1097
1097
  };
1098
1098
 
1099
- // src/runtime/vercel-ai/rsc/VercelRSCRuntime.tsx
1099
+ // ../react-ai-sdk/src/rsc/VercelRSCRuntime.tsx
1100
1100
  var EMPTY_BRANCHES = Object.freeze([]);
1101
1101
  var VercelRSCRuntime = class {
1102
1102
  constructor(adapter) {
@@ -1168,7 +1168,7 @@ var VercelRSCRuntime = class {
1168
1168
  };
1169
1169
  };
1170
1170
 
1171
- // src/runtime/vercel-ai/rsc/useVercelRSCRuntime.tsx
1171
+ // ../react-ai-sdk/src/rsc/useVercelRSCRuntime.tsx
1172
1172
  var useVercelRSCRuntime = (adapter) => {
1173
1173
  const [runtime] = (0, import_react30.useState)(() => new VercelRSCRuntime(adapter));
1174
1174
  (0, import_react30.useInsertionEffect)(() => {
@@ -1180,179 +1180,19 @@ var useVercelRSCRuntime = (adapter) => {
1180
1180
  return runtime;
1181
1181
  };
1182
1182
 
1183
- // src/runtime/vercel-ai/ui/use-chat/useVercelUseChatRuntime.tsx
1184
- var import_react33 = require("react");
1183
+ // ../react-ai-sdk/src/ui/use-chat/useVercelUseChatRuntime.tsx
1184
+ var import_react35 = require("react");
1185
1185
 
1186
- // src/runtime/vercel-ai/ui/VercelAIRuntime.tsx
1186
+ // ../react-ai-sdk/src/ui/VercelAIRuntime.tsx
1187
1187
  var import_zustand5 = require("zustand");
1188
1188
 
1189
- // src/runtime/utils/idUtils.tsx
1190
- var import_non_secure = require("nanoid/non-secure");
1191
- var generateId = (0, import_non_secure.customAlphabet)(
1192
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
1193
- 7
1194
- );
1195
- var optimisticPrefix = "__optimistic__";
1196
- var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
1197
-
1198
- // src/runtime/utils/MessageRepository.tsx
1199
- var findHead = (message) => {
1200
- if (message.next) return findHead(message.next);
1201
- return message;
1202
- };
1203
- var MessageRepository = class {
1204
- messages = /* @__PURE__ */ new Map();
1205
- // message_id -> item
1206
- head = null;
1207
- root = {
1208
- children: []
1209
- };
1210
- performOp(newParent, child, operation) {
1211
- const parentOrRoot = child.prev ?? this.root;
1212
- const newParentOrRoot = newParent ?? this.root;
1213
- if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
1214
- if (operation !== "link") {
1215
- parentOrRoot.children = parentOrRoot.children.filter(
1216
- (m) => m !== child.current.id
1217
- );
1218
- if (child.prev?.next === child) {
1219
- const fallbackId = child.prev.children.at(-1);
1220
- const fallback = fallbackId ? this.messages.get(fallbackId) : null;
1221
- if (fallback === void 0) {
1222
- throw new Error(
1223
- "MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui."
1224
- );
1225
- }
1226
- child.prev.next = fallback;
1227
- }
1228
- }
1229
- if (operation !== "cut") {
1230
- newParentOrRoot.children = [
1231
- ...newParentOrRoot.children,
1232
- child.current.id
1233
- ];
1234
- if (newParent && (findHead(child) === this.head || newParent.next === null)) {
1235
- newParent.next = child;
1236
- }
1237
- child.prev = newParent;
1238
- }
1239
- }
1240
- getMessages() {
1241
- const messages = new Array(this.head?.level ?? 0);
1242
- for (let current = this.head; current; current = current.prev) {
1243
- messages[current.level] = current.current;
1244
- }
1245
- return messages;
1246
- }
1247
- addOrUpdateMessage(parentId, message) {
1248
- const existingItem = this.messages.get(message.id);
1249
- const prev = parentId ? this.messages.get(parentId) : null;
1250
- if (prev === void 0)
1251
- throw new Error(
1252
- "MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
1253
- );
1254
- if (existingItem) {
1255
- existingItem.current = message;
1256
- this.performOp(prev, existingItem, "relink");
1257
- return;
1258
- }
1259
- const newItem = {
1260
- prev,
1261
- current: message,
1262
- next: null,
1263
- children: [],
1264
- level: prev ? prev.level + 1 : 0
1265
- };
1266
- this.messages.set(message.id, newItem);
1267
- this.performOp(prev, newItem, "link");
1268
- if (this.head === prev) {
1269
- this.head = newItem;
1270
- }
1271
- }
1272
- appendOptimisticMessage(parentId, message) {
1273
- let optimisticId;
1274
- do {
1275
- optimisticId = generateOptimisticId();
1276
- } while (this.messages.has(optimisticId));
1277
- this.addOrUpdateMessage(parentId, {
1278
- ...message,
1279
- id: optimisticId,
1280
- createdAt: /* @__PURE__ */ new Date(),
1281
- ...message.role === "assistant" ? { status: "in_progress" } : void 0
1282
- });
1283
- return optimisticId;
1284
- }
1285
- deleteMessage(messageId, replacementId) {
1286
- const message = this.messages.get(messageId);
1287
- if (!message)
1288
- throw new Error(
1289
- "MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
1290
- );
1291
- const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
1292
- if (replacement === void 0)
1293
- throw new Error(
1294
- "MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
1295
- );
1296
- for (const child of message.children) {
1297
- const childMessage = this.messages.get(child);
1298
- if (!childMessage)
1299
- throw new Error(
1300
- "MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
1301
- );
1302
- this.performOp(replacement, childMessage, "relink");
1303
- }
1304
- this.performOp(null, message, "cut");
1305
- this.messages.delete(messageId);
1306
- if (this.head === message) {
1307
- this.head = replacement ? findHead(replacement) : null;
1308
- }
1309
- }
1310
- getBranches(messageId) {
1311
- const message = this.messages.get(messageId);
1312
- if (!message)
1313
- throw new Error(
1314
- "MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
1315
- );
1316
- const { children } = message.prev ?? this.root;
1317
- return children;
1318
- }
1319
- switchToBranch(messageId) {
1320
- const message = this.messages.get(messageId);
1321
- if (!message)
1322
- throw new Error(
1323
- "MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
1324
- );
1325
- if (message.prev) {
1326
- message.prev.next = message;
1327
- }
1328
- this.head = findHead(message);
1329
- }
1330
- resetHead(messageId) {
1331
- if (messageId === null) {
1332
- this.head = null;
1333
- return;
1334
- }
1335
- const message = this.messages.get(messageId);
1336
- if (!message)
1337
- throw new Error(
1338
- "MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
1339
- );
1340
- this.head = message;
1341
- for (let current = message; current; current = current.prev) {
1342
- if (current.prev) {
1343
- current.prev.next = current;
1344
- }
1345
- }
1346
- }
1347
- };
1348
-
1349
- // src/runtime/vercel-ai/ui/getVercelAIMessage.tsx
1189
+ // ../react-ai-sdk/src/ui/getVercelAIMessage.tsx
1350
1190
  var symbolInnerAIMessage = Symbol("innerVercelAIUIMessage");
1351
1191
  var getVercelAIMessage = (message) => {
1352
1192
  return message[symbolInnerAIMessage];
1353
1193
  };
1354
1194
 
1355
- // src/runtime/vercel-ai/ui/utils/sliceMessagesUntil.tsx
1195
+ // ../react-ai-sdk/src/ui/utils/sliceMessagesUntil.tsx
1356
1196
  var sliceMessagesUntil = (messages, messageId) => {
1357
1197
  if (messageId == null) return [];
1358
1198
  let messageIdx = messages.findIndex((m) => m.id === messageId);
@@ -1366,11 +1206,11 @@ var sliceMessagesUntil = (messages, messageId) => {
1366
1206
  return messages.slice(0, messageIdx + 1);
1367
1207
  };
1368
1208
 
1369
- // src/runtime/vercel-ai/ui/utils/useVercelAIComposerSync.tsx
1370
- var import_react31 = require("react");
1209
+ // ../react-ai-sdk/src/ui/utils/useVercelAIComposerSync.tsx
1210
+ var import_react32 = require("react");
1371
1211
  var useVercelAIComposerSync = (vercel) => {
1372
1212
  const { useComposer } = useThreadContext();
1373
- (0, import_react31.useEffect)(() => {
1213
+ (0, import_react32.useEffect)(() => {
1374
1214
  useComposer.setState({
1375
1215
  value: vercel.input,
1376
1216
  setValue: vercel.setInput
@@ -1378,8 +1218,8 @@ var useVercelAIComposerSync = (vercel) => {
1378
1218
  }, [useComposer, vercel.input, vercel.setInput]);
1379
1219
  };
1380
1220
 
1381
- // src/runtime/vercel-ai/ui/utils/useVercelAIThreadSync.tsx
1382
- var import_react32 = require("react");
1221
+ // ../react-ai-sdk/src/ui/utils/useVercelAIThreadSync.tsx
1222
+ var import_react33 = require("react");
1383
1223
  var getIsRunning = (vercel) => {
1384
1224
  if ("isLoading" in vercel) return vercel.isLoading;
1385
1225
  return vercel.status === "in_progress";
@@ -1456,8 +1296,8 @@ var shallowArrayEqual = (a, b) => {
1456
1296
  };
1457
1297
  var useVercelAIThreadSync = (vercel, updateData) => {
1458
1298
  const isRunning = getIsRunning(vercel);
1459
- const converter = (0, import_react32.useMemo)(() => new ThreadMessageConverter(), []);
1460
- (0, import_react32.useEffect)(() => {
1299
+ const converter = (0, import_react33.useMemo)(() => new ThreadMessageConverter(), []);
1300
+ (0, import_react33.useEffect)(() => {
1461
1301
  const lastMessageId = vercel.messages.at(-1)?.id;
1462
1302
  const convertCallback = (messages2, cache) => {
1463
1303
  const status = lastMessageId === messages2[0].id && isRunning ? "in_progress" : "done";
@@ -1474,7 +1314,7 @@ var useVercelAIThreadSync = (vercel, updateData) => {
1474
1314
  }, [updateData, isRunning, vercel.messages, converter]);
1475
1315
  };
1476
1316
 
1477
- // src/runtime/vercel-ai/ui/VercelAIRuntime.tsx
1317
+ // ../react-ai-sdk/src/ui/VercelAIRuntime.tsx
1478
1318
  var hasUpcomingMessage = (isRunning, messages) => {
1479
1319
  return isRunning && messages[messages.length - 1]?.role !== "assistant";
1480
1320
  };
@@ -1586,36 +1426,196 @@ var VercelAIRuntime = class {
1586
1426
  };
1587
1427
  };
1588
1428
 
1589
- // src/runtime/vercel-ai/ui/use-chat/useVercelUseChatRuntime.tsx
1429
+ // ../react-ai-sdk/src/ui/use-chat/useVercelUseChatRuntime.tsx
1590
1430
  var useVercelUseChatRuntime = (chatHelpers) => {
1591
- const [runtime] = (0, import_react33.useState)(() => new VercelAIRuntime(chatHelpers));
1592
- (0, import_react33.useInsertionEffect)(() => {
1431
+ const [runtime] = (0, import_react35.useState)(() => new VercelAIRuntime(chatHelpers));
1432
+ (0, import_react35.useInsertionEffect)(() => {
1593
1433
  runtime.vercel = chatHelpers;
1594
1434
  });
1595
- (0, import_react33.useEffect)(() => {
1435
+ (0, import_react35.useEffect)(() => {
1596
1436
  runtime.onVercelUpdated();
1597
1437
  });
1598
1438
  return runtime;
1599
1439
  };
1600
1440
 
1601
- // src/runtime/vercel-ai/ui/use-assistant/useVercelUseAssistantRuntime.tsx
1602
- var import_react34 = require("react");
1441
+ // ../react-ai-sdk/src/ui/use-assistant/useVercelUseAssistantRuntime.tsx
1442
+ var import_react36 = require("react");
1603
1443
  var useVercelUseAssistantRuntime = (assistantHelpers) => {
1604
- const [runtime] = (0, import_react34.useState)(() => new VercelAIRuntime(assistantHelpers));
1605
- (0, import_react34.useInsertionEffect)(() => {
1444
+ const [runtime] = (0, import_react36.useState)(() => new VercelAIRuntime(assistantHelpers));
1445
+ (0, import_react36.useInsertionEffect)(() => {
1606
1446
  runtime.vercel = assistantHelpers;
1607
1447
  });
1608
- (0, import_react34.useEffect)(() => {
1448
+ (0, import_react36.useEffect)(() => {
1609
1449
  runtime.onVercelUpdated();
1610
1450
  });
1611
1451
  return runtime;
1612
1452
  };
1613
1453
 
1454
+ // src/runtime/utils/idUtils.tsx
1455
+ var import_non_secure = require("nanoid/non-secure");
1456
+ var generateId = (0, import_non_secure.customAlphabet)(
1457
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
1458
+ 7
1459
+ );
1460
+ var optimisticPrefix = "__optimistic__";
1461
+ var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
1462
+
1463
+ // src/runtime/utils/MessageRepository.tsx
1464
+ var findHead = (message) => {
1465
+ if (message.next) return findHead(message.next);
1466
+ return message;
1467
+ };
1468
+ var MessageRepository = class {
1469
+ messages = /* @__PURE__ */ new Map();
1470
+ // message_id -> item
1471
+ head = null;
1472
+ root = {
1473
+ children: []
1474
+ };
1475
+ performOp(newParent, child, operation) {
1476
+ const parentOrRoot = child.prev ?? this.root;
1477
+ const newParentOrRoot = newParent ?? this.root;
1478
+ if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
1479
+ if (operation !== "link") {
1480
+ parentOrRoot.children = parentOrRoot.children.filter(
1481
+ (m) => m !== child.current.id
1482
+ );
1483
+ if (child.prev?.next === child) {
1484
+ const fallbackId = child.prev.children.at(-1);
1485
+ const fallback = fallbackId ? this.messages.get(fallbackId) : null;
1486
+ if (fallback === void 0) {
1487
+ throw new Error(
1488
+ "MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui."
1489
+ );
1490
+ }
1491
+ child.prev.next = fallback;
1492
+ }
1493
+ }
1494
+ if (operation !== "cut") {
1495
+ newParentOrRoot.children = [
1496
+ ...newParentOrRoot.children,
1497
+ child.current.id
1498
+ ];
1499
+ if (newParent && (findHead(child) === this.head || newParent.next === null)) {
1500
+ newParent.next = child;
1501
+ }
1502
+ child.prev = newParent;
1503
+ }
1504
+ }
1505
+ getMessages() {
1506
+ const messages = new Array(this.head?.level ?? 0);
1507
+ for (let current = this.head; current; current = current.prev) {
1508
+ messages[current.level] = current.current;
1509
+ }
1510
+ return messages;
1511
+ }
1512
+ addOrUpdateMessage(parentId, message) {
1513
+ const existingItem = this.messages.get(message.id);
1514
+ const prev = parentId ? this.messages.get(parentId) : null;
1515
+ if (prev === void 0)
1516
+ throw new Error(
1517
+ "MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
1518
+ );
1519
+ if (existingItem) {
1520
+ existingItem.current = message;
1521
+ this.performOp(prev, existingItem, "relink");
1522
+ return;
1523
+ }
1524
+ const newItem = {
1525
+ prev,
1526
+ current: message,
1527
+ next: null,
1528
+ children: [],
1529
+ level: prev ? prev.level + 1 : 0
1530
+ };
1531
+ this.messages.set(message.id, newItem);
1532
+ this.performOp(prev, newItem, "link");
1533
+ if (this.head === prev) {
1534
+ this.head = newItem;
1535
+ }
1536
+ }
1537
+ appendOptimisticMessage(parentId, message) {
1538
+ let optimisticId;
1539
+ do {
1540
+ optimisticId = generateOptimisticId();
1541
+ } while (this.messages.has(optimisticId));
1542
+ this.addOrUpdateMessage(parentId, {
1543
+ ...message,
1544
+ id: optimisticId,
1545
+ createdAt: /* @__PURE__ */ new Date(),
1546
+ ...message.role === "assistant" ? { status: "in_progress" } : void 0
1547
+ });
1548
+ return optimisticId;
1549
+ }
1550
+ deleteMessage(messageId, replacementId) {
1551
+ const message = this.messages.get(messageId);
1552
+ if (!message)
1553
+ throw new Error(
1554
+ "MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
1555
+ );
1556
+ const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
1557
+ if (replacement === void 0)
1558
+ throw new Error(
1559
+ "MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
1560
+ );
1561
+ for (const child of message.children) {
1562
+ const childMessage = this.messages.get(child);
1563
+ if (!childMessage)
1564
+ throw new Error(
1565
+ "MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
1566
+ );
1567
+ this.performOp(replacement, childMessage, "relink");
1568
+ }
1569
+ this.performOp(null, message, "cut");
1570
+ this.messages.delete(messageId);
1571
+ if (this.head === message) {
1572
+ this.head = replacement ? findHead(replacement) : null;
1573
+ }
1574
+ }
1575
+ getBranches(messageId) {
1576
+ const message = this.messages.get(messageId);
1577
+ if (!message)
1578
+ throw new Error(
1579
+ "MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
1580
+ );
1581
+ const { children } = message.prev ?? this.root;
1582
+ return children;
1583
+ }
1584
+ switchToBranch(messageId) {
1585
+ const message = this.messages.get(messageId);
1586
+ if (!message)
1587
+ throw new Error(
1588
+ "MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
1589
+ );
1590
+ if (message.prev) {
1591
+ message.prev.next = message;
1592
+ }
1593
+ this.head = findHead(message);
1594
+ }
1595
+ resetHead(messageId) {
1596
+ if (messageId === null) {
1597
+ this.head = null;
1598
+ return;
1599
+ }
1600
+ const message = this.messages.get(messageId);
1601
+ if (!message)
1602
+ throw new Error(
1603
+ "MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
1604
+ );
1605
+ this.head = message;
1606
+ for (let current = message; current; current = current.prev) {
1607
+ if (current.prev) {
1608
+ current.prev.next = current;
1609
+ }
1610
+ }
1611
+ }
1612
+ };
1613
+
1614
1614
  // src/context/providers/AssistantRuntimeProvider.tsx
1615
- var import_react36 = require("react");
1615
+ var import_react38 = require("react");
1616
1616
 
1617
1617
  // src/context/providers/ThreadProvider.tsx
1618
- var import_react35 = require("react");
1618
+ var import_react37 = require("react");
1619
1619
 
1620
1620
  // src/context/stores/Composer.ts
1621
1621
  var import_zustand6 = require("zustand");
@@ -1690,11 +1690,11 @@ var ThreadProvider = ({
1690
1690
  children,
1691
1691
  runtime
1692
1692
  }) => {
1693
- const runtimeRef = (0, import_react35.useRef)(runtime);
1694
- (0, import_react35.useInsertionEffect)(() => {
1693
+ const runtimeRef = (0, import_react37.useRef)(runtime);
1694
+ (0, import_react37.useInsertionEffect)(() => {
1695
1695
  runtimeRef.current = runtime;
1696
1696
  });
1697
- const [{ context, onRuntimeUpdate }] = (0, import_react35.useState)(() => {
1697
+ const [{ context, onRuntimeUpdate }] = (0, import_react37.useState)(() => {
1698
1698
  const { useThread, onRuntimeUpdate: onRuntimeUpdate2 } = makeThreadStore(runtimeRef);
1699
1699
  const useViewport = makeThreadViewportStore();
1700
1700
  const useComposer = makeComposerStore(useThread);
@@ -1707,7 +1707,7 @@ var ThreadProvider = ({
1707
1707
  onRuntimeUpdate: onRuntimeUpdate2
1708
1708
  };
1709
1709
  });
1710
- (0, import_react35.useEffect)(() => {
1710
+ (0, import_react37.useEffect)(() => {
1711
1711
  onRuntimeUpdate();
1712
1712
  return runtime.subscribe(onRuntimeUpdate);
1713
1713
  }, [onRuntimeUpdate, runtime]);
@@ -1723,7 +1723,7 @@ var import_jsx_runtime22 = require("react/jsx-runtime");
1723
1723
  var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
1724
1724
  return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(ThreadProvider, { runtime, children });
1725
1725
  };
1726
- var AssistantRuntimeProvider = (0, import_react36.memo)(AssistantRuntimeProviderImpl);
1726
+ var AssistantRuntimeProvider = (0, import_react38.memo)(AssistantRuntimeProviderImpl);
1727
1727
 
1728
1728
  // src/runtime/vercel-deprecated/VercelAIAssistantProvider.tsx
1729
1729
  var import_jsx_runtime23 = require("react/jsx-runtime");
@@ -1762,7 +1762,7 @@ var VercelRSCAssistantProvider = ({
1762
1762
  };
1763
1763
 
1764
1764
  // src/runtime/local/useLocalRuntime.tsx
1765
- var import_react37 = require("react");
1765
+ var import_react39 = require("react");
1766
1766
 
1767
1767
  // src/runtime/local/LocalRuntime.tsx
1768
1768
  var LocalRuntime = class {
@@ -1851,54 +1851,12 @@ var LocalRuntime = class {
1851
1851
 
1852
1852
  // src/runtime/local/useLocalRuntime.tsx
1853
1853
  var useLocalRuntime = (adapter) => {
1854
- const [runtime] = (0, import_react37.useState)(() => new LocalRuntime(adapter));
1855
- (0, import_react37.useInsertionEffect)(() => {
1854
+ const [runtime] = (0, import_react39.useState)(() => new LocalRuntime(adapter));
1855
+ (0, import_react39.useInsertionEffect)(() => {
1856
1856
  runtime.adapter = adapter;
1857
1857
  });
1858
1858
  return runtime;
1859
1859
  };
1860
-
1861
- // src/runtime/local/vercel/VercelModelAdapter.tsx
1862
- var import_ai = require("ai");
1863
- var VercelModelAdapter = class {
1864
- constructor(model) {
1865
- this.model = model;
1866
- }
1867
- async run({ messages, abortSignal, onUpdate }) {
1868
- const { fullStream } = await (0, import_ai.streamText)({
1869
- model: this.model,
1870
- abortSignal,
1871
- messages: messages.map((m) => ({
1872
- role: m.role,
1873
- content: m.content.filter((c) => c.type !== "ui")
1874
- }))
1875
- });
1876
- const content = [];
1877
- for await (const aiPart of fullStream) {
1878
- switch (aiPart.type) {
1879
- case "text-delta": {
1880
- let part = content.at(-1);
1881
- if (!part || part.type !== "text") {
1882
- part = { type: "text", text: "" };
1883
- content.push(part);
1884
- }
1885
- part.text += aiPart.textDelta;
1886
- break;
1887
- }
1888
- case "tool-call": {
1889
- content.push({
1890
- type: "tool-call",
1891
- name: aiPart.toolName,
1892
- args: aiPart.args
1893
- });
1894
- break;
1895
- }
1896
- }
1897
- onUpdate({ content });
1898
- }
1899
- return { content };
1900
- }
1901
- };
1902
1860
  // Annotate the CommonJS export names for ESM import in node:
1903
1861
  0 && (module.exports = {
1904
1862
  ActionBarPrimitive,
@@ -1912,7 +1870,7 @@ var VercelModelAdapter = class {
1912
1870
  VercelRSCAssistantProvider,
1913
1871
  getVercelAIMessage,
1914
1872
  getVercelRSCMessage,
1915
- unstable_VercelModelAdapter,
1873
+ unstable_MessageRepository,
1916
1874
  unstable_useComposerContext,
1917
1875
  unstable_useContentPartContext,
1918
1876
  unstable_useLocalRuntime,