@assistant-ui/react 0.5.21 → 0.5.23

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. package/dist/{AssistantTypes-D93BmqD5.d.mts → AssistantTypes-BNB-knVq.d.mts} +1 -1
  2. package/dist/{AssistantTypes-D93BmqD5.d.ts → AssistantTypes-BNB-knVq.d.ts} +1 -1
  3. package/dist/chunk-DCHYNTHI.js +11 -0
  4. package/dist/chunk-DCHYNTHI.js.map +1 -0
  5. package/dist/chunk-NSPHKRLF.js +819 -0
  6. package/dist/chunk-NSPHKRLF.js.map +1 -0
  7. package/dist/{chunk-2RKUKZSZ.mjs → chunk-ZWRFAYHH.mjs} +61 -3
  8. package/dist/chunk-ZWRFAYHH.mjs.map +1 -0
  9. package/dist/edge.d.mts +90 -5
  10. package/dist/edge.d.ts +90 -5
  11. package/dist/edge.js +0 -1
  12. package/dist/edge.js.map +1 -1
  13. package/dist/edge.mjs +799 -49
  14. package/dist/edge.mjs.map +1 -1
  15. package/dist/index.d.mts +164 -7
  16. package/dist/index.d.ts +164 -7
  17. package/dist/index.js +761 -1607
  18. package/dist/index.js.map +1 -1
  19. package/dist/index.mjs +833 -252
  20. package/dist/index.mjs.map +1 -1
  21. package/dist/tailwindcss/index.js +24 -53
  22. package/dist/tailwindcss/index.js.map +1 -1
  23. package/package.json +1 -12
  24. package/dist/Thread-BbLf1cc4.d.mts +0 -156
  25. package/dist/Thread-jfAlPLli.d.ts +0 -156
  26. package/dist/chunk-2RKUKZSZ.mjs.map +0 -1
  27. package/dist/chunk-QBS6JLLN.mjs +0 -63
  28. package/dist/chunk-QBS6JLLN.mjs.map +0 -1
  29. package/dist/chunk-V66MVXBH.mjs +0 -608
  30. package/dist/chunk-V66MVXBH.mjs.map +0 -1
  31. package/dist/internal.d.mts +0 -9
  32. package/dist/internal.d.ts +0 -9
  33. package/dist/internal.js +0 -620
  34. package/dist/internal.js.map +0 -1
  35. package/dist/internal.mjs +0 -24
  36. package/dist/internal.mjs.map +0 -1
  37. package/internal/README.md +0 -1
  38. package/internal/package.json +0 -5
package/dist/index.mjs CHANGED
@@ -1,37 +1,13 @@
1
1
  "use client";
2
2
  import {
3
+ mergeModelConfigs,
3
4
  runResultStream,
4
5
  toCoreMessage,
5
6
  toCoreMessages,
6
7
  toLanguageModelMessages,
7
8
  toLanguageModelTools,
8
9
  toolResultStream
9
- } from "./chunk-2RKUKZSZ.mjs";
10
- import {
11
- AssistantContext,
12
- BaseAssistantRuntime,
13
- Button,
14
- ContentPartContext,
15
- MessageContext,
16
- MessageRepository,
17
- ProxyConfigProvider,
18
- ThreadContext,
19
- TooltipIconButton,
20
- fromCoreMessage,
21
- fromCoreMessages,
22
- generateId,
23
- internal_exports,
24
- useAssistantContext,
25
- useComposerContext,
26
- useContentPartContext,
27
- useMessageContext,
28
- useSmooth,
29
- useSmoothStatus,
30
- useThreadContext,
31
- withDefaults,
32
- withSmoothContextProvider
33
- } from "./chunk-V66MVXBH.mjs";
34
- import "./chunk-QBS6JLLN.mjs";
10
+ } from "./chunk-ZWRFAYHH.mjs";
35
11
  import {
36
12
  __export
37
13
  } from "./chunk-BJPOCE4O.mjs";
@@ -42,8 +18,38 @@ import { memo } from "react";
42
18
  // src/context/providers/AssistantProvider.tsx
43
19
  import { useEffect, useInsertionEffect as useInsertionEffect2, useRef as useRef2, useState as useState2 } from "react";
44
20
 
21
+ // src/context/react/AssistantContext.ts
22
+ import { createContext, useContext } from "react";
23
+ var AssistantContext = createContext(
24
+ null
25
+ );
26
+ function useAssistantContext(options) {
27
+ const context = useContext(AssistantContext);
28
+ if (!options?.optional && !context)
29
+ throw new Error(
30
+ "This component must be used within an AssistantRuntimeProvider."
31
+ );
32
+ return context;
33
+ }
34
+
45
35
  // src/context/stores/AssistantModelConfig.ts
46
36
  import { create } from "zustand";
37
+
38
+ // src/utils/ProxyConfigProvider.ts
39
+ var ProxyConfigProvider = class {
40
+ _providers = /* @__PURE__ */ new Set();
41
+ getModelConfig() {
42
+ return mergeModelConfigs(this._providers);
43
+ }
44
+ registerModelConfigProvider(provider) {
45
+ this._providers.add(provider);
46
+ return () => {
47
+ this._providers.delete(provider);
48
+ };
49
+ }
50
+ };
51
+
52
+ // src/context/stores/AssistantModelConfig.ts
47
53
  var makeAssistantModelConfigStore = () => create(() => {
48
54
  const proxy = new ProxyConfigProvider();
49
55
  return Object.freeze({
@@ -91,6 +97,18 @@ var makeAssistantToolUIsStore = () => create2((set) => {
91
97
  // src/context/providers/ThreadProvider.tsx
92
98
  import { useCallback as useCallback2, useInsertionEffect, useState } from "react";
93
99
 
100
+ // src/context/react/ThreadContext.ts
101
+ import { createContext as createContext2, useContext as useContext2 } from "react";
102
+ var ThreadContext = createContext2(null);
103
+ function useThreadContext(options) {
104
+ const context = useContext2(ThreadContext);
105
+ if (!options?.optional && !context)
106
+ throw new Error(
107
+ "This component must be used within an AssistantRuntimeProvider."
108
+ );
109
+ return context;
110
+ }
111
+
94
112
  // src/context/stores/Composer.ts
95
113
  import { create as create3 } from "zustand";
96
114
 
@@ -318,6 +336,48 @@ var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
318
336
  };
319
337
  var AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);
320
338
 
339
+ // src/context/react/ComposerContext.ts
340
+ import { useMemo } from "react";
341
+
342
+ // src/context/react/MessageContext.ts
343
+ import { createContext as createContext3, useContext as useContext3 } from "react";
344
+ var MessageContext = createContext3(null);
345
+ function useMessageContext(options) {
346
+ const context = useContext3(MessageContext);
347
+ if (!options?.optional && !context)
348
+ throw new Error(
349
+ "This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
350
+ );
351
+ return context;
352
+ }
353
+
354
+ // src/context/react/ComposerContext.ts
355
+ var useComposerContext = () => {
356
+ const { useComposer } = useThreadContext();
357
+ const { useEditComposer } = useMessageContext({ optional: true }) ?? {};
358
+ return useMemo(
359
+ () => ({
360
+ useComposer: useEditComposer ?? useComposer,
361
+ type: useEditComposer ? "edit" : "new"
362
+ }),
363
+ [useEditComposer, useComposer]
364
+ );
365
+ };
366
+
367
+ // src/context/react/ContentPartContext.ts
368
+ import { createContext as createContext4, useContext as useContext4 } from "react";
369
+ var ContentPartContext = createContext4(
370
+ null
371
+ );
372
+ function useContentPartContext(options) {
373
+ const context = useContext4(ContentPartContext);
374
+ if (!options?.optional && !context)
375
+ throw new Error(
376
+ "This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
377
+ );
378
+ return context;
379
+ }
380
+
321
381
  // src/hooks/useAppendMessage.tsx
322
382
  import { useCallback as useCallback3 } from "react";
323
383
  var toAppendMessage = (useThreadMessages, message) => {
@@ -435,7 +495,7 @@ var useAssistantInstructions = (instruction) => {
435
495
  import { useCallback as useCallback5 } from "react";
436
496
 
437
497
  // src/utils/combined/useCombinedStore.ts
438
- import { useMemo } from "react";
498
+ import { useMemo as useMemo2 } from "react";
439
499
 
440
500
  // src/utils/combined/createCombinedStore.ts
441
501
  import { useSyncExternalStore } from "react";
@@ -456,7 +516,7 @@ var createCombinedStore = (stores) => {
456
516
 
457
517
  // src/utils/combined/useCombinedStore.ts
458
518
  var useCombinedStore = (stores, selector) => {
459
- const useCombined = useMemo(() => createCombinedStore(stores), stores);
519
+ const useCombined = useMemo2(() => createCombinedStore(stores), stores);
460
520
  return useCombined(selector);
461
521
  };
462
522
 
@@ -1011,7 +1071,7 @@ BranchPickerPrimitiveNumber.displayName = "BranchPickerPrimitive.Number";
1011
1071
 
1012
1072
  // src/primitives/branchPicker/BranchPickerRoot.tsx
1013
1073
  import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
1014
- import { forwardRef as forwardRef9 } from "react";
1074
+ import { forwardRef as forwardRef10 } from "react";
1015
1075
 
1016
1076
  // src/primitives/message/index.ts
1017
1077
  var message_exports = {};
@@ -1053,9 +1113,9 @@ var useIsHoveringRef = () => {
1053
1113
  );
1054
1114
  return useManagedRef(callbackRef);
1055
1115
  };
1056
- var MessagePrimitiveRoot = forwardRef6(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef25) => {
1116
+ var MessagePrimitiveRoot = forwardRef6(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef29) => {
1057
1117
  const isHoveringRef = useIsHoveringRef();
1058
- const ref = useComposedRefs(forwardRef25, isHoveringRef);
1118
+ const ref = useComposedRefs(forwardRef29, isHoveringRef);
1059
1119
  return /* @__PURE__ */ jsx12(Primitive3.div, { ...rest, ref });
1060
1120
  });
1061
1121
  MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
@@ -1144,27 +1204,170 @@ var ContentPartProvider = ({
1144
1204
 
1145
1205
  // src/primitives/contentPart/ContentPartText.tsx
1146
1206
  import {
1147
- forwardRef as forwardRef7
1207
+ forwardRef as forwardRef8
1148
1208
  } from "react";
1209
+
1210
+ // src/utils/smooth/useSmooth.tsx
1211
+ import { useEffect as useEffect7, useMemo as useMemo3, useRef as useRef3, useState as useState6 } from "react";
1212
+
1213
+ // src/utils/smooth/SmoothContext.tsx
1214
+ import {
1215
+ createContext as createContext5,
1216
+ forwardRef as forwardRef7,
1217
+ useContext as useContext5,
1218
+ useState as useState5
1219
+ } from "react";
1220
+ import { create as create11 } from "zustand";
1149
1221
  import { jsx as jsx14 } from "react/jsx-runtime";
1150
- var ContentPartPrimitiveText = forwardRef7(({ smooth = true, component: Component = "span", ...rest }, forwardedRef) => {
1222
+ var SmoothContext = createContext5(null);
1223
+ var makeSmoothContext = (initialState) => {
1224
+ const useSmoothStatus2 = create11(() => initialState);
1225
+ return { useSmoothStatus: useSmoothStatus2 };
1226
+ };
1227
+ var SmoothContextProvider = ({ children }) => {
1228
+ const outer = useSmoothContext({ optional: true });
1229
+ const { useContentPart } = useContentPartContext();
1230
+ const [context] = useState5(
1231
+ () => makeSmoothContext(useContentPart.getState().status)
1232
+ );
1233
+ if (outer) return children;
1234
+ return /* @__PURE__ */ jsx14(SmoothContext.Provider, { value: context, children });
1235
+ };
1236
+ var withSmoothContextProvider = (Component) => {
1237
+ const Wrapped = forwardRef7((props, ref) => {
1238
+ return /* @__PURE__ */ jsx14(SmoothContextProvider, { children: /* @__PURE__ */ jsx14(Component, { ...props, ref }) });
1239
+ });
1240
+ Wrapped.displayName = Component.displayName;
1241
+ return Wrapped;
1242
+ };
1243
+ function useSmoothContext(options) {
1244
+ const context = useContext5(SmoothContext);
1245
+ if (!options?.optional && !context)
1246
+ throw new Error(
1247
+ "This component must be used within a SmoothContextProvider."
1248
+ );
1249
+ return context;
1250
+ }
1251
+ var useSmoothStatus = () => {
1252
+ const { useSmoothStatus: useSmoothStatus2 } = useSmoothContext();
1253
+ return useSmoothStatus2();
1254
+ };
1255
+
1256
+ // src/utils/smooth/useSmooth.tsx
1257
+ import { useCallbackRef as useCallbackRef2 } from "@radix-ui/react-use-callback-ref";
1258
+ var TextStreamAnimator = class {
1259
+ constructor(currentText, setText) {
1260
+ this.currentText = currentText;
1261
+ this.setText = setText;
1262
+ }
1263
+ animationFrameId = null;
1264
+ lastUpdateTime = Date.now();
1265
+ targetText = "";
1266
+ start() {
1267
+ if (this.animationFrameId !== null) return;
1268
+ this.lastUpdateTime = Date.now();
1269
+ this.animate();
1270
+ }
1271
+ stop() {
1272
+ if (this.animationFrameId !== null) {
1273
+ cancelAnimationFrame(this.animationFrameId);
1274
+ this.animationFrameId = null;
1275
+ }
1276
+ }
1277
+ animate = () => {
1278
+ const currentTime = Date.now();
1279
+ const deltaTime = currentTime - this.lastUpdateTime;
1280
+ let timeToConsume = deltaTime;
1281
+ const remainingChars = this.targetText.length - this.currentText.length;
1282
+ const baseTimePerChar = Math.min(5, 250 / remainingChars);
1283
+ let charsToAdd = 0;
1284
+ while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
1285
+ charsToAdd++;
1286
+ timeToConsume -= baseTimePerChar;
1287
+ }
1288
+ if (charsToAdd !== remainingChars) {
1289
+ this.animationFrameId = requestAnimationFrame(this.animate);
1290
+ } else {
1291
+ this.animationFrameId = null;
1292
+ }
1293
+ if (charsToAdd === 0) return;
1294
+ this.currentText = this.targetText.slice(
1295
+ 0,
1296
+ this.currentText.length + charsToAdd
1297
+ );
1298
+ this.lastUpdateTime = currentTime - timeToConsume;
1299
+ this.setText(this.currentText);
1300
+ };
1301
+ };
1302
+ var SMOOTH_STATUS = Object.freeze({
1303
+ type: "running"
1304
+ });
1305
+ var useSmooth = (state, smooth = false) => {
1306
+ const { useSmoothStatus: useSmoothStatus2 } = useSmoothContext({ optional: true }) ?? {};
1307
+ const {
1308
+ part: { text }
1309
+ } = state;
1310
+ const { useMessage } = useMessageContext();
1311
+ const id = useMessage((m) => m.message.id);
1312
+ const idRef = useRef3(id);
1313
+ const [displayedText, setDisplayedText] = useState6(text);
1314
+ const setText = useCallbackRef2((text2) => {
1315
+ setDisplayedText(text2);
1316
+ useSmoothStatus2?.setState(text2 !== state.part.text ? SMOOTH_STATUS : state.status);
1317
+ });
1318
+ const [animatorRef] = useState6(
1319
+ new TextStreamAnimator(text, setText)
1320
+ );
1321
+ useEffect7(() => {
1322
+ if (!smooth) {
1323
+ animatorRef.stop();
1324
+ return;
1325
+ }
1326
+ if (idRef.current !== id || !text.startsWith(animatorRef.targetText)) {
1327
+ idRef.current = id;
1328
+ setText(text);
1329
+ animatorRef.currentText = text;
1330
+ animatorRef.targetText = text;
1331
+ animatorRef.stop();
1332
+ return;
1333
+ }
1334
+ animatorRef.targetText = text;
1335
+ animatorRef.start();
1336
+ }, [setText, animatorRef, id, smooth, text]);
1337
+ useEffect7(() => {
1338
+ return () => {
1339
+ animatorRef.stop();
1340
+ };
1341
+ }, [animatorRef]);
1342
+ return useMemo3(
1343
+ () => smooth ? {
1344
+ part: { type: "text", text: displayedText },
1345
+ status: text === displayedText ? state.status : SMOOTH_STATUS
1346
+ } : state,
1347
+ [smooth, displayedText, state, text]
1348
+ );
1349
+ };
1350
+
1351
+ // src/primitives/contentPart/ContentPartText.tsx
1352
+ import { jsx as jsx15 } from "react/jsx-runtime";
1353
+ var ContentPartPrimitiveText = forwardRef8(({ smooth = true, component: Component = "span", ...rest }, forwardedRef) => {
1151
1354
  const {
1152
1355
  part: { text },
1153
1356
  status
1154
1357
  } = useSmooth(useContentPartText(), smooth);
1155
- return /* @__PURE__ */ jsx14(Component, { "data-status": status.type, ...rest, ref: forwardedRef, children: text });
1358
+ return /* @__PURE__ */ jsx15(Component, { "data-status": status.type, ...rest, ref: forwardedRef, children: text });
1156
1359
  });
1157
1360
  ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
1158
1361
 
1159
1362
  // src/primitives/contentPart/ContentPartImage.tsx
1160
1363
  import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
1161
- import { forwardRef as forwardRef8 } from "react";
1162
- import { jsx as jsx15 } from "react/jsx-runtime";
1163
- var ContentPartPrimitiveImage = forwardRef8((props, forwardedRef) => {
1364
+ import { forwardRef as forwardRef9 } from "react";
1365
+ import { jsx as jsx16 } from "react/jsx-runtime";
1366
+ var ContentPartPrimitiveImage = forwardRef9((props, forwardedRef) => {
1164
1367
  const {
1165
1368
  part: { image }
1166
1369
  } = useContentPartImage();
1167
- return /* @__PURE__ */ jsx15(Primitive4.img, { src: image, ...props, ref: forwardedRef });
1370
+ return /* @__PURE__ */ jsx16(Primitive4.img, { src: image, ...props, ref: forwardedRef });
1168
1371
  });
1169
1372
  ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
1170
1373
 
@@ -1186,20 +1389,20 @@ var ContentPartPrimitiveInProgress = ({ children }) => {
1186
1389
  ContentPartPrimitiveInProgress.displayName = "ContentPartPrimitive.InProgress";
1187
1390
 
1188
1391
  // src/primitives/message/MessageContent.tsx
1189
- import { jsx as jsx16, jsxs as jsxs2 } from "react/jsx-runtime";
1392
+ import { jsx as jsx17, jsxs as jsxs2 } from "react/jsx-runtime";
1190
1393
  var defaultComponents = {
1191
1394
  Text: () => /* @__PURE__ */ jsxs2("p", { style: { whiteSpace: "pre-line" }, children: [
1192
- /* @__PURE__ */ jsx16(ContentPartPrimitiveText, {}),
1193
- /* @__PURE__ */ jsx16(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ jsx16("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
1395
+ /* @__PURE__ */ jsx17(ContentPartPrimitiveText, {}),
1396
+ /* @__PURE__ */ jsx17(ContentPartPrimitiveInProgress, { children: /* @__PURE__ */ jsx17("span", { style: { fontFamily: "revert" }, children: " \u25CF" }) })
1194
1397
  ] }),
1195
- Image: () => /* @__PURE__ */ jsx16(ContentPartPrimitiveImage, {}),
1196
- UI: () => /* @__PURE__ */ jsx16(ContentPartPrimitiveDisplay, {}),
1398
+ Image: () => /* @__PURE__ */ jsx17(ContentPartPrimitiveImage, {}),
1399
+ UI: () => /* @__PURE__ */ jsx17(ContentPartPrimitiveDisplay, {}),
1197
1400
  tools: {
1198
1401
  Fallback: (props) => {
1199
1402
  const { useToolUIs } = useAssistantContext();
1200
1403
  const Render = useToolUIs((s) => s.getToolUI(props.part.toolName));
1201
1404
  if (!Render) return null;
1202
- return /* @__PURE__ */ jsx16(Render, { ...props });
1405
+ return /* @__PURE__ */ jsx17(Render, { ...props });
1203
1406
  }
1204
1407
  }
1205
1408
  };
@@ -1222,16 +1425,16 @@ var MessageContentPartComponent = ({
1222
1425
  case "text":
1223
1426
  if (status.type === "requires-action")
1224
1427
  throw new Error("Encountered unexpected requires-action status");
1225
- if (part === EMPTY_CONTENT) return /* @__PURE__ */ jsx16(Empty, { part, status });
1226
- return /* @__PURE__ */ jsx16(Text2, { part, status });
1428
+ if (part === EMPTY_CONTENT) return /* @__PURE__ */ jsx17(Empty, { part, status });
1429
+ return /* @__PURE__ */ jsx17(Text2, { part, status });
1227
1430
  case "image":
1228
1431
  if (status.type === "requires-action")
1229
1432
  throw new Error("Encountered unexpected requires-action status");
1230
- return /* @__PURE__ */ jsx16(Image2, { part, status });
1433
+ return /* @__PURE__ */ jsx17(Image2, { part, status });
1231
1434
  case "ui":
1232
1435
  if (status.type === "requires-action")
1233
1436
  throw new Error("Encountered unexpected requires-action status");
1234
- return /* @__PURE__ */ jsx16(UI, { part, status });
1437
+ return /* @__PURE__ */ jsx17(UI, { part, status });
1235
1438
  case "tool-call": {
1236
1439
  const Tool = by_name[part.toolName] || Fallback2;
1237
1440
  const addResult = (result) => addToolResult({
@@ -1239,7 +1442,7 @@ var MessageContentPartComponent = ({
1239
1442
  toolCallId: part.toolCallId,
1240
1443
  result
1241
1444
  });
1242
- return /* @__PURE__ */ jsx16(Tool, { part, status, addResult });
1445
+ return /* @__PURE__ */ jsx17(Tool, { part, status, addResult });
1243
1446
  }
1244
1447
  default:
1245
1448
  const unhandledType = type;
@@ -1250,7 +1453,7 @@ var MessageContentPartImpl = ({
1250
1453
  partIndex,
1251
1454
  components
1252
1455
  }) => {
1253
- return /* @__PURE__ */ jsx16(ContentPartProvider, { partIndex, children: /* @__PURE__ */ jsx16(MessageContentPartComponent, { components }) });
1456
+ return /* @__PURE__ */ jsx17(ContentPartProvider, { partIndex, children: /* @__PURE__ */ jsx17(MessageContentPartComponent, { components }) });
1254
1457
  };
1255
1458
  var MessageContentPart = memo2(
1256
1459
  MessageContentPartImpl,
@@ -1263,7 +1466,7 @@ var MessagePrimitiveContent = ({
1263
1466
  const contentLength = useMessage((s) => s.message.content.length) || 1;
1264
1467
  return new Array(contentLength).fill(null).map((_, idx) => {
1265
1468
  const partIndex = idx;
1266
- return /* @__PURE__ */ jsx16(
1469
+ return /* @__PURE__ */ jsx17(
1267
1470
  MessageContentPart,
1268
1471
  {
1269
1472
  partIndex,
@@ -1282,9 +1485,9 @@ var MessagePrimitiveInProgress = () => {
1282
1485
  MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
1283
1486
 
1284
1487
  // src/primitives/branchPicker/BranchPickerRoot.tsx
1285
- import { jsx as jsx17 } from "react/jsx-runtime";
1286
- var BranchPickerPrimitiveRoot = forwardRef9(({ hideWhenSingleBranch, ...rest }, ref) => {
1287
- return /* @__PURE__ */ jsx17(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx17(Primitive5.div, { ...rest, ref }) });
1488
+ import { jsx as jsx18 } from "react/jsx-runtime";
1489
+ var BranchPickerPrimitiveRoot = forwardRef10(({ hideWhenSingleBranch, ...rest }, ref) => {
1490
+ return /* @__PURE__ */ jsx18(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx18(Primitive5.div, { ...rest, ref }) });
1288
1491
  });
1289
1492
  BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
1290
1493
 
@@ -1302,17 +1505,17 @@ __export(composer_exports, {
1302
1505
  import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primitive";
1303
1506
  import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
1304
1507
  import {
1305
- forwardRef as forwardRef10
1508
+ forwardRef as forwardRef11
1306
1509
  } from "react";
1307
- import { jsx as jsx18 } from "react/jsx-runtime";
1308
- var ComposerPrimitiveRoot = forwardRef10(({ onSubmit, ...rest }, forwardedRef) => {
1510
+ import { jsx as jsx19 } from "react/jsx-runtime";
1511
+ var ComposerPrimitiveRoot = forwardRef11(({ onSubmit, ...rest }, forwardedRef) => {
1309
1512
  const send = useComposerSend();
1310
1513
  const handleSubmit = (e) => {
1311
1514
  e.preventDefault();
1312
1515
  if (!send) return;
1313
1516
  send();
1314
1517
  };
1315
- return /* @__PURE__ */ jsx18(
1518
+ return /* @__PURE__ */ jsx19(
1316
1519
  Primitive6.form,
1317
1520
  {
1318
1521
  ...rest,
@@ -1328,15 +1531,15 @@ import { composeEventHandlers as composeEventHandlers5 } from "@radix-ui/primiti
1328
1531
  import { useComposedRefs as useComposedRefs2 } from "@radix-ui/react-compose-refs";
1329
1532
  import { Slot } from "@radix-ui/react-slot";
1330
1533
  import {
1331
- forwardRef as forwardRef11,
1534
+ forwardRef as forwardRef12,
1332
1535
  useCallback as useCallback15,
1333
- useEffect as useEffect7,
1334
- useRef as useRef3
1536
+ useEffect as useEffect8,
1537
+ useRef as useRef4
1335
1538
  } from "react";
1336
1539
  import TextareaAutosize from "react-textarea-autosize";
1337
1540
  import { useEscapeKeydown } from "@radix-ui/react-use-escape-keydown";
1338
- import { jsx as jsx19 } from "react/jsx-runtime";
1339
- var ComposerPrimitiveInput = forwardRef11(
1541
+ import { jsx as jsx20 } from "react/jsx-runtime";
1542
+ var ComposerPrimitiveInput = forwardRef12(
1340
1543
  ({
1341
1544
  autoFocus = false,
1342
1545
  asChild,
@@ -1353,7 +1556,7 @@ var ComposerPrimitiveInput = forwardRef11(
1353
1556
  });
1354
1557
  const Component = asChild ? Slot : TextareaAutosize;
1355
1558
  const isDisabled = useThread((t) => t.isDisabled) ?? disabledProp ?? false;
1356
- const textareaRef = useRef3(null);
1559
+ const textareaRef = useRef4(null);
1357
1560
  const ref = useComposedRefs2(forwardedRef, textareaRef);
1358
1561
  useEscapeKeydown((e) => {
1359
1562
  const composer = useComposer.getState();
@@ -1382,13 +1585,13 @@ var ComposerPrimitiveInput = forwardRef11(
1382
1585
  textareaRef.current.value.length
1383
1586
  );
1384
1587
  }, [autoFocusEnabled]);
1385
- useEffect7(() => focus(), [focus]);
1588
+ useEffect8(() => focus(), [focus]);
1386
1589
  useOnComposerFocus(() => {
1387
1590
  if (type === "new") {
1388
1591
  focus();
1389
1592
  }
1390
1593
  });
1391
- return /* @__PURE__ */ jsx19(
1594
+ return /* @__PURE__ */ jsx20(
1392
1595
  Component,
1393
1596
  {
1394
1597
  name: "input",
@@ -1409,13 +1612,13 @@ var ComposerPrimitiveInput = forwardRef11(
1409
1612
  ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
1410
1613
 
1411
1614
  // src/primitives/composer/ComposerSend.tsx
1412
- import { forwardRef as forwardRef12 } from "react";
1615
+ import { forwardRef as forwardRef13 } from "react";
1413
1616
  import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
1414
- import { jsx as jsx20 } from "react/jsx-runtime";
1415
- var ComposerPrimitiveSend = forwardRef12(({ disabled, ...rest }, ref) => {
1617
+ import { jsx as jsx21 } from "react/jsx-runtime";
1618
+ var ComposerPrimitiveSend = forwardRef13(({ disabled, ...rest }, ref) => {
1416
1619
  const { useComposer } = useComposerContext();
1417
1620
  const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
1418
- return /* @__PURE__ */ jsx20(
1621
+ return /* @__PURE__ */ jsx21(
1419
1622
  Primitive7.button,
1420
1623
  {
1421
1624
  type: "submit",
@@ -1466,10 +1669,10 @@ __export(thread_exports, {
1466
1669
 
1467
1670
  // src/primitives/thread/ThreadRoot.tsx
1468
1671
  import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
1469
- import { forwardRef as forwardRef13 } from "react";
1470
- import { jsx as jsx21 } from "react/jsx-runtime";
1471
- var ThreadPrimitiveRoot = forwardRef13((props, ref) => {
1472
- return /* @__PURE__ */ jsx21(Primitive8.div, { ...props, ref });
1672
+ import { forwardRef as forwardRef14 } from "react";
1673
+ import { jsx as jsx22 } from "react/jsx-runtime";
1674
+ var ThreadPrimitiveRoot = forwardRef14((props, ref) => {
1675
+ return /* @__PURE__ */ jsx22(Primitive8.div, { ...props, ref });
1473
1676
  });
1474
1677
  ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
1475
1678
 
@@ -1495,17 +1698,17 @@ ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
1495
1698
  // src/primitives/thread/ThreadViewport.tsx
1496
1699
  import { useComposedRefs as useComposedRefs4 } from "@radix-ui/react-compose-refs";
1497
1700
  import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
1498
- import { forwardRef as forwardRef14 } from "react";
1701
+ import { forwardRef as forwardRef15 } from "react";
1499
1702
 
1500
1703
  // src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
1501
1704
  import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
1502
- import { useRef as useRef4 } from "react";
1705
+ import { useRef as useRef5 } from "react";
1503
1706
 
1504
1707
  // src/utils/hooks/useOnResizeContent.tsx
1505
- import { useCallbackRef as useCallbackRef2 } from "@radix-ui/react-use-callback-ref";
1708
+ import { useCallbackRef as useCallbackRef3 } from "@radix-ui/react-use-callback-ref";
1506
1709
  import { useCallback as useCallback16 } from "react";
1507
1710
  var useOnResizeContent = (callback) => {
1508
- const callbackRef = useCallbackRef2(callback);
1711
+ const callbackRef = useCallbackRef3(callback);
1509
1712
  const refCallback = useCallback16(
1510
1713
  (el) => {
1511
1714
  const resizeObserver = new ResizeObserver(() => {
@@ -1542,12 +1745,12 @@ var useOnResizeContent = (callback) => {
1542
1745
  };
1543
1746
 
1544
1747
  // src/utils/hooks/useOnScrollToBottom.tsx
1545
- import { useCallbackRef as useCallbackRef3 } from "@radix-ui/react-use-callback-ref";
1546
- import { useEffect as useEffect8 } from "react";
1748
+ import { useCallbackRef as useCallbackRef4 } from "@radix-ui/react-use-callback-ref";
1749
+ import { useEffect as useEffect9 } from "react";
1547
1750
  var useOnScrollToBottom = (callback) => {
1548
- const callbackRef = useCallbackRef3(callback);
1751
+ const callbackRef = useCallbackRef4(callback);
1549
1752
  const { useViewport } = useThreadContext();
1550
- useEffect8(() => {
1753
+ useEffect9(() => {
1551
1754
  return useViewport.getState().onScrollToBottom(() => {
1552
1755
  callbackRef();
1553
1756
  });
@@ -1558,10 +1761,10 @@ var useOnScrollToBottom = (callback) => {
1558
1761
  var useThreadViewportAutoScroll = ({
1559
1762
  autoScroll = true
1560
1763
  }) => {
1561
- const divRef = useRef4(null);
1764
+ const divRef = useRef5(null);
1562
1765
  const { useViewport } = useThreadContext();
1563
- const lastScrollTop = useRef4(0);
1564
- const isScrollingToBottomRef = useRef4(false);
1766
+ const lastScrollTop = useRef5(0);
1767
+ const isScrollingToBottomRef = useRef5(false);
1565
1768
  const scrollToBottom = (behavior) => {
1566
1769
  const div = divRef.current;
1567
1770
  if (!div || !autoScroll) return;
@@ -1606,13 +1809,13 @@ var useThreadViewportAutoScroll = ({
1606
1809
  };
1607
1810
 
1608
1811
  // src/primitives/thread/ThreadViewport.tsx
1609
- import { jsx as jsx22 } from "react/jsx-runtime";
1610
- var ThreadPrimitiveViewport = forwardRef14(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
1812
+ import { jsx as jsx23 } from "react/jsx-runtime";
1813
+ var ThreadPrimitiveViewport = forwardRef15(({ autoScroll, onScroll, children, ...rest }, forwardedRef) => {
1611
1814
  const autoScrollRef = useThreadViewportAutoScroll({
1612
1815
  autoScroll
1613
1816
  });
1614
1817
  const ref = useComposedRefs4(forwardedRef, autoScrollRef);
1615
- return /* @__PURE__ */ jsx22(Primitive9.div, { ...rest, ref, children });
1818
+ return /* @__PURE__ */ jsx23(Primitive9.div, { ...rest, ref, children });
1616
1819
  });
1617
1820
  ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
1618
1821
 
@@ -1620,15 +1823,15 @@ ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
1620
1823
  import { memo as memo3 } from "react";
1621
1824
 
1622
1825
  // src/context/providers/MessageProvider.tsx
1623
- import { useEffect as useEffect9, useState as useState5 } from "react";
1624
- import { create as create13 } from "zustand";
1826
+ import { useEffect as useEffect10, useState as useState7 } from "react";
1827
+ import { create as create14 } from "zustand";
1625
1828
 
1626
1829
  // src/context/stores/EditComposer.ts
1627
- import { create as create11 } from "zustand";
1830
+ import { create as create12 } from "zustand";
1628
1831
  var makeEditComposerStore = ({
1629
1832
  onEdit,
1630
1833
  onSend
1631
- }) => create11()((set, get, store) => ({
1834
+ }) => create12()((set, get, store) => ({
1632
1835
  ...makeBaseComposer(set, get, store),
1633
1836
  canCancel: false,
1634
1837
  isEditing: false,
@@ -1647,8 +1850,8 @@ var makeEditComposerStore = ({
1647
1850
  }));
1648
1851
 
1649
1852
  // src/context/stores/MessageUtils.ts
1650
- import { create as create12 } from "zustand";
1651
- var makeMessageUtilsStore = () => create12((set) => ({
1853
+ import { create as create13 } from "zustand";
1854
+ var makeMessageUtilsStore = () => create13((set) => ({
1652
1855
  isCopied: false,
1653
1856
  setIsCopied: (value) => {
1654
1857
  set({ isCopied: value });
@@ -1660,7 +1863,7 @@ var makeMessageUtilsStore = () => create12((set) => ({
1660
1863
  }));
1661
1864
 
1662
1865
  // src/context/providers/MessageProvider.tsx
1663
- import { jsx as jsx23 } from "react/jsx-runtime";
1866
+ import { jsx as jsx24 } from "react/jsx-runtime";
1664
1867
  var getIsLast = (messages, message) => {
1665
1868
  return messages[messages.length - 1]?.id === message.id;
1666
1869
  };
@@ -1682,8 +1885,8 @@ var getMessageState = (messages, getBranches, useMessage, messageIndex) => {
1682
1885
  };
1683
1886
  var useMessageContext2 = (messageIndex) => {
1684
1887
  const { useThreadMessages, useThreadActions } = useThreadContext();
1685
- const [context] = useState5(() => {
1686
- const useMessage = create13(
1888
+ const [context] = useState7(() => {
1889
+ const useMessage = create14(
1687
1890
  () => getMessageState(
1688
1891
  useThreadMessages.getState(),
1689
1892
  useThreadActions.getState().getBranches,
@@ -1720,7 +1923,7 @@ var useMessageContext2 = (messageIndex) => {
1720
1923
  });
1721
1924
  return { useMessage, useMessageUtils, useEditComposer };
1722
1925
  });
1723
- useEffect9(() => {
1926
+ useEffect10(() => {
1724
1927
  const syncMessage = (thread) => {
1725
1928
  const newState = getMessageState(
1726
1929
  thread,
@@ -1744,11 +1947,11 @@ var MessageProvider = ({
1744
1947
  children
1745
1948
  }) => {
1746
1949
  const context = useMessageContext2(messageIndex);
1747
- return /* @__PURE__ */ jsx23(MessageContext.Provider, { value: context, children });
1950
+ return /* @__PURE__ */ jsx24(MessageContext.Provider, { value: context, children });
1748
1951
  };
1749
1952
 
1750
1953
  // src/primitives/thread/ThreadMessages.tsx
1751
- import { jsx as jsx24, jsxs as jsxs3 } from "react/jsx-runtime";
1954
+ import { jsx as jsx25, jsxs as jsxs3 } from "react/jsx-runtime";
1752
1955
  var DEFAULT_SYSTEM_MESSAGE = () => null;
1753
1956
  var getComponents = (components) => {
1754
1957
  return {
@@ -1765,11 +1968,11 @@ var ThreadMessageImpl = ({
1765
1968
  const { UserMessage: UserMessage2, EditComposer: EditComposer2, AssistantMessage: AssistantMessage2, SystemMessage: SystemMessage2 } = getComponents(components);
1766
1969
  return /* @__PURE__ */ jsxs3(MessageProvider, { messageIndex, children: [
1767
1970
  /* @__PURE__ */ jsxs3(MessagePrimitiveIf, { user: true, children: [
1768
- /* @__PURE__ */ jsx24(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ jsx24(UserMessage2, {}) }),
1769
- /* @__PURE__ */ jsx24(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ jsx24(EditComposer2, {}) })
1971
+ /* @__PURE__ */ jsx25(ComposerPrimitiveIf, { editing: false, children: /* @__PURE__ */ jsx25(UserMessage2, {}) }),
1972
+ /* @__PURE__ */ jsx25(ComposerPrimitiveIf, { editing: true, children: /* @__PURE__ */ jsx25(EditComposer2, {}) })
1770
1973
  ] }),
1771
- /* @__PURE__ */ jsx24(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ jsx24(AssistantMessage2, {}) }),
1772
- /* @__PURE__ */ jsx24(MessagePrimitiveIf, { system: true, children: /* @__PURE__ */ jsx24(SystemMessage2, {}) })
1974
+ /* @__PURE__ */ jsx25(MessagePrimitiveIf, { assistant: true, children: /* @__PURE__ */ jsx25(AssistantMessage2, {}) }),
1975
+ /* @__PURE__ */ jsx25(MessagePrimitiveIf, { system: true, children: /* @__PURE__ */ jsx25(SystemMessage2, {}) })
1773
1976
  ] });
1774
1977
  };
1775
1978
  var ThreadMessage = memo3(
@@ -1784,7 +1987,7 @@ var ThreadPrimitiveMessagesImpl = ({
1784
1987
  if (messagesLength === 0) return null;
1785
1988
  return new Array(messagesLength).fill(null).map((_, idx) => {
1786
1989
  const messageIndex = idx;
1787
- return /* @__PURE__ */ jsx24(
1990
+ return /* @__PURE__ */ jsx25(
1788
1991
  ThreadMessage,
1789
1992
  {
1790
1993
  messageIndex,
@@ -1814,7 +2017,378 @@ var ThreadPrimitiveSuggestion = createActionButton(
1814
2017
  );
1815
2018
 
1816
2019
  // src/runtimes/local/useLocalRuntime.tsx
1817
- import { useInsertionEffect as useInsertionEffect3, useState as useState7 } from "react";
2020
+ import { useInsertionEffect as useInsertionEffect3, useState as useState9 } from "react";
2021
+
2022
+ // src/runtimes/core/BaseAssistantRuntime.tsx
2023
+ var BaseAssistantRuntime = class {
2024
+ constructor(_thread) {
2025
+ this._thread = _thread;
2026
+ this._thread = _thread;
2027
+ }
2028
+ get thread() {
2029
+ return this._thread;
2030
+ }
2031
+ set thread(thread) {
2032
+ this._thread = thread;
2033
+ this.subscriptionHandler();
2034
+ }
2035
+ _subscriptions = /* @__PURE__ */ new Set();
2036
+ subscribe(callback) {
2037
+ this._subscriptions.add(callback);
2038
+ return () => this._subscriptions.delete(callback);
2039
+ }
2040
+ subscriptionHandler = () => {
2041
+ for (const callback of this._subscriptions) callback();
2042
+ };
2043
+ };
2044
+
2045
+ // src/internal.ts
2046
+ var internal_exports = {};
2047
+ __export(internal_exports, {
2048
+ BaseAssistantRuntime: () => BaseAssistantRuntime,
2049
+ MessageRepository: () => MessageRepository,
2050
+ ProxyConfigProvider: () => ProxyConfigProvider,
2051
+ TooltipIconButton: () => TooltipIconButton,
2052
+ generateId: () => generateId,
2053
+ useSmooth: () => useSmooth,
2054
+ useSmoothStatus: () => useSmoothStatus,
2055
+ withSmoothContextProvider: () => withSmoothContextProvider
2056
+ });
2057
+
2058
+ // src/utils/idUtils.tsx
2059
+ import { customAlphabet } from "nanoid/non-secure";
2060
+ var generateId = customAlphabet(
2061
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
2062
+ 7
2063
+ );
2064
+ var optimisticPrefix = "__optimistic__";
2065
+ var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
2066
+
2067
+ // src/runtimes/edge/converters/fromCoreMessage.ts
2068
+ var fromCoreMessages = (message) => {
2069
+ return message.map((message2) => fromCoreMessage(message2));
2070
+ };
2071
+ var fromCoreMessage = (message, {
2072
+ id = generateId(),
2073
+ status = { type: "complete", reason: "unknown" }
2074
+ } = {}) => {
2075
+ const commonProps = {
2076
+ id,
2077
+ createdAt: /* @__PURE__ */ new Date()
2078
+ };
2079
+ const role = message.role;
2080
+ switch (role) {
2081
+ case "assistant":
2082
+ return {
2083
+ ...commonProps,
2084
+ role,
2085
+ content: message.content.map((part) => {
2086
+ if (part.type === "tool-call") {
2087
+ return {
2088
+ ...part,
2089
+ argsText: JSON.stringify(part.args)
2090
+ };
2091
+ }
2092
+ return part;
2093
+ }),
2094
+ status
2095
+ };
2096
+ case "user":
2097
+ return {
2098
+ ...commonProps,
2099
+ role,
2100
+ content: message.content
2101
+ };
2102
+ case "system":
2103
+ return {
2104
+ ...commonProps,
2105
+ role,
2106
+ content: message.content
2107
+ };
2108
+ default: {
2109
+ const unsupportedRole = role;
2110
+ throw new Error(`Unknown message role: ${unsupportedRole}`);
2111
+ }
2112
+ }
2113
+ };
2114
+
2115
+ // src/runtimes/utils/MessageRepository.tsx
2116
+ var findHead = (message) => {
2117
+ if (message.next) return findHead(message.next);
2118
+ return message;
2119
+ };
2120
+ var MessageRepository = class {
2121
+ messages = /* @__PURE__ */ new Map();
2122
+ // message_id -> item
2123
+ head = null;
2124
+ root = {
2125
+ children: []
2126
+ };
2127
+ performOp(newParent, child, operation) {
2128
+ const parentOrRoot = child.prev ?? this.root;
2129
+ const newParentOrRoot = newParent ?? this.root;
2130
+ if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
2131
+ if (operation !== "link") {
2132
+ parentOrRoot.children = parentOrRoot.children.filter(
2133
+ (m) => m !== child.current.id
2134
+ );
2135
+ if (child.prev?.next === child) {
2136
+ const fallbackId = child.prev.children.at(-1);
2137
+ const fallback = fallbackId ? this.messages.get(fallbackId) : null;
2138
+ if (fallback === void 0) {
2139
+ throw new Error(
2140
+ "MessageRepository(performOp/cut): Fallback sibling message not found. This is likely an internal bug in assistant-ui."
2141
+ );
2142
+ }
2143
+ child.prev.next = fallback;
2144
+ }
2145
+ }
2146
+ if (operation !== "cut") {
2147
+ newParentOrRoot.children = [
2148
+ ...newParentOrRoot.children,
2149
+ child.current.id
2150
+ ];
2151
+ if (newParent && (findHead(child) === this.head || newParent.next === null)) {
2152
+ newParent.next = child;
2153
+ }
2154
+ child.prev = newParent;
2155
+ }
2156
+ }
2157
+ getMessages() {
2158
+ const messages = new Array(this.head?.level ?? 0);
2159
+ for (let current = this.head; current; current = current.prev) {
2160
+ messages[current.level] = current.current;
2161
+ }
2162
+ return messages;
2163
+ }
2164
+ addOrUpdateMessage(parentId, message) {
2165
+ const existingItem = this.messages.get(message.id);
2166
+ const prev = parentId ? this.messages.get(parentId) : null;
2167
+ if (prev === void 0)
2168
+ throw new Error(
2169
+ "MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
2170
+ );
2171
+ if (existingItem) {
2172
+ existingItem.current = message;
2173
+ this.performOp(prev, existingItem, "relink");
2174
+ return;
2175
+ }
2176
+ const newItem = {
2177
+ prev,
2178
+ current: message,
2179
+ next: null,
2180
+ children: [],
2181
+ level: prev ? prev.level + 1 : 0
2182
+ };
2183
+ this.messages.set(message.id, newItem);
2184
+ this.performOp(prev, newItem, "link");
2185
+ if (this.head === prev) {
2186
+ this.head = newItem;
2187
+ }
2188
+ }
2189
+ getMessage(messageId) {
2190
+ const message = this.messages.get(messageId);
2191
+ if (!message)
2192
+ throw new Error(
2193
+ "MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
2194
+ );
2195
+ return {
2196
+ parentId: message.prev?.current.id ?? null,
2197
+ message: message.current
2198
+ };
2199
+ }
2200
+ appendOptimisticMessage(parentId, message) {
2201
+ let optimisticId;
2202
+ do {
2203
+ optimisticId = generateOptimisticId();
2204
+ } while (this.messages.has(optimisticId));
2205
+ this.addOrUpdateMessage(
2206
+ parentId,
2207
+ fromCoreMessage(message, {
2208
+ id: optimisticId,
2209
+ status: { type: "running" }
2210
+ })
2211
+ );
2212
+ return optimisticId;
2213
+ }
2214
+ deleteMessage(messageId, replacementId) {
2215
+ const message = this.messages.get(messageId);
2216
+ if (!message)
2217
+ throw new Error(
2218
+ "MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
2219
+ );
2220
+ const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
2221
+ if (replacement === void 0)
2222
+ throw new Error(
2223
+ "MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
2224
+ );
2225
+ for (const child of message.children) {
2226
+ const childMessage = this.messages.get(child);
2227
+ if (!childMessage)
2228
+ throw new Error(
2229
+ "MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
2230
+ );
2231
+ this.performOp(replacement, childMessage, "relink");
2232
+ }
2233
+ this.performOp(null, message, "cut");
2234
+ this.messages.delete(messageId);
2235
+ if (this.head === message) {
2236
+ this.head = replacement ? findHead(replacement) : null;
2237
+ }
2238
+ }
2239
+ getBranches(messageId) {
2240
+ const message = this.messages.get(messageId);
2241
+ if (!message)
2242
+ throw new Error(
2243
+ "MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
2244
+ );
2245
+ const { children } = message.prev ?? this.root;
2246
+ return children;
2247
+ }
2248
+ switchToBranch(messageId) {
2249
+ const message = this.messages.get(messageId);
2250
+ if (!message)
2251
+ throw new Error(
2252
+ "MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
2253
+ );
2254
+ if (message.prev) {
2255
+ message.prev.next = message;
2256
+ }
2257
+ this.head = findHead(message);
2258
+ }
2259
+ resetHead(messageId) {
2260
+ if (messageId === null) {
2261
+ this.head = null;
2262
+ return;
2263
+ }
2264
+ const message = this.messages.get(messageId);
2265
+ if (!message)
2266
+ throw new Error(
2267
+ "MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
2268
+ );
2269
+ this.head = message;
2270
+ for (let current = message; current; current = current.prev) {
2271
+ if (current.prev) {
2272
+ current.prev.next = current;
2273
+ }
2274
+ }
2275
+ }
2276
+ export() {
2277
+ const exportItems = [];
2278
+ for (const [, message] of this.messages) {
2279
+ exportItems.push({
2280
+ message: message.current,
2281
+ parentId: message.prev?.current.id ?? null
2282
+ });
2283
+ }
2284
+ return {
2285
+ headId: this.head?.current.id ?? null,
2286
+ messages: exportItems
2287
+ };
2288
+ }
2289
+ import({ headId, messages }) {
2290
+ for (const { message, parentId } of messages) {
2291
+ this.addOrUpdateMessage(parentId, message);
2292
+ }
2293
+ this.resetHead(headId ?? messages.at(-1)?.message.id ?? null);
2294
+ }
2295
+ };
2296
+
2297
+ // src/ui/base/tooltip-icon-button.tsx
2298
+ import { forwardRef as forwardRef18 } from "react";
2299
+
2300
+ // src/ui/base/tooltip.tsx
2301
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
2302
+
2303
+ // src/ui/utils/withDefaults.tsx
2304
+ import {
2305
+ forwardRef as forwardRef16
2306
+ } from "react";
2307
+ import classNames from "classnames";
2308
+ import { jsx as jsx26 } from "react/jsx-runtime";
2309
+ var withDefaultProps = ({
2310
+ className,
2311
+ ...defaultProps
2312
+ }) => ({ className: classNameProp, ...props }) => {
2313
+ return {
2314
+ className: classNames(className, classNameProp),
2315
+ ...defaultProps,
2316
+ ...props
2317
+ };
2318
+ };
2319
+ var withDefaults = (Component, defaultProps) => {
2320
+ const getProps = withDefaultProps(defaultProps);
2321
+ const WithDefaults = forwardRef16(
2322
+ (props, ref) => {
2323
+ const ComponentAsAny = Component;
2324
+ return /* @__PURE__ */ jsx26(ComponentAsAny, { ...getProps(props), ref });
2325
+ }
2326
+ );
2327
+ WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
2328
+ return WithDefaults;
2329
+ };
2330
+
2331
+ // src/ui/base/tooltip.tsx
2332
+ import { jsx as jsx27 } from "react/jsx-runtime";
2333
+ var Tooltip = (props) => {
2334
+ return /* @__PURE__ */ jsx27(TooltipPrimitive.Provider, { children: /* @__PURE__ */ jsx27(TooltipPrimitive.Root, { ...props }) });
2335
+ };
2336
+ Tooltip.displayName = "Tooltip";
2337
+ var TooltipTrigger = TooltipPrimitive.Trigger;
2338
+ var TooltipContent = withDefaults(TooltipPrimitive.Content, {
2339
+ sideOffset: 4,
2340
+ className: "aui-tooltip-content"
2341
+ });
2342
+ TooltipContent.displayName = "TooltipContent";
2343
+
2344
+ // src/ui/base/button.tsx
2345
+ import { cva } from "class-variance-authority";
2346
+ import { Primitive as Primitive10 } from "@radix-ui/react-primitive";
2347
+ import { forwardRef as forwardRef17 } from "react";
2348
+ import { jsx as jsx28 } from "react/jsx-runtime";
2349
+ var buttonVariants = cva("aui-button", {
2350
+ variants: {
2351
+ variant: {
2352
+ default: "aui-button-primary",
2353
+ outline: "aui-button-outline",
2354
+ ghost: "aui-button-ghost"
2355
+ },
2356
+ size: {
2357
+ default: "aui-button-medium",
2358
+ icon: "aui-button-icon"
2359
+ }
2360
+ },
2361
+ defaultVariants: {
2362
+ variant: "default",
2363
+ size: "default"
2364
+ }
2365
+ });
2366
+ var Button = forwardRef17(
2367
+ ({ className, variant, size, ...props }, ref) => {
2368
+ return /* @__PURE__ */ jsx28(
2369
+ Primitive10.button,
2370
+ {
2371
+ className: buttonVariants({ variant, size, className }),
2372
+ ...props,
2373
+ ref
2374
+ }
2375
+ );
2376
+ }
2377
+ );
2378
+ Button.displayName = "Button";
2379
+
2380
+ // src/ui/base/tooltip-icon-button.tsx
2381
+ import { jsx as jsx29, jsxs as jsxs4 } from "react/jsx-runtime";
2382
+ var TooltipIconButton = forwardRef18(({ children, tooltip, side = "bottom", ...rest }, ref) => {
2383
+ return /* @__PURE__ */ jsxs4(Tooltip, { children: [
2384
+ /* @__PURE__ */ jsx29(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
2385
+ children,
2386
+ /* @__PURE__ */ jsx29("span", { className: "aui-sr-only", children: tooltip })
2387
+ ] }) }),
2388
+ /* @__PURE__ */ jsx29(TooltipContent, { side, children: tooltip })
2389
+ ] });
2390
+ });
2391
+ TooltipIconButton.displayName = "TooltipIconButton";
1818
2392
 
1819
2393
  // src/runtimes/edge/converters/fromLanguageModelMessages.ts
1820
2394
  var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
@@ -1934,7 +2508,7 @@ var fromLanguageModelTools = (tools) => {
1934
2508
  };
1935
2509
 
1936
2510
  // src/runtimes/edge/useEdgeRuntime.ts
1937
- import { useState as useState6 } from "react";
2511
+ import { useState as useState8 } from "react";
1938
2512
 
1939
2513
  // src/runtimes/edge/streams/assistantDecoderStream.ts
1940
2514
  function assistantDecoderStream() {
@@ -2091,7 +2665,7 @@ var useEdgeRuntime = ({
2091
2665
  initialMessages,
2092
2666
  ...options
2093
2667
  }) => {
2094
- const [adapter] = useState6(() => new EdgeChatAdapter(options));
2668
+ const [adapter] = useState8(() => new EdgeChatAdapter(options));
2095
2669
  return useLocalRuntime(adapter, { initialMessages });
2096
2670
  };
2097
2671
 
@@ -2276,6 +2850,13 @@ var LocalThreadRuntime = class {
2276
2850
  this.performRoundtrip(parentId, message);
2277
2851
  }
2278
2852
  }
2853
+ export() {
2854
+ return this.repository.export();
2855
+ }
2856
+ import(data) {
2857
+ this.repository.import(data);
2858
+ this.notifySubscribers();
2859
+ }
2279
2860
  };
2280
2861
 
2281
2862
  // src/runtimes/local/LocalRuntime.tsx
@@ -2305,7 +2886,7 @@ var LocalRuntime = class extends BaseAssistantRuntime {
2305
2886
 
2306
2887
  // src/runtimes/local/useLocalRuntime.tsx
2307
2888
  var useLocalRuntime = (adapter, options) => {
2308
- const [runtime] = useState7(() => new LocalRuntime(adapter, options));
2889
+ const [runtime] = useState9(() => new LocalRuntime(adapter, options));
2309
2890
  useInsertionEffect3(() => {
2310
2891
  runtime.adapter = adapter;
2311
2892
  });
@@ -2313,7 +2894,7 @@ var useLocalRuntime = (adapter, options) => {
2313
2894
  };
2314
2895
 
2315
2896
  // src/runtimes/external-store/ExternalStoreThreadRuntime.tsx
2316
- import { create as create14 } from "zustand";
2897
+ import { create as create15 } from "zustand";
2317
2898
 
2318
2899
  // src/runtimes/external-store/getExternalStoreMessage.tsx
2319
2900
  var symbolInnerMessage = Symbol("innerMessage");
@@ -2322,7 +2903,7 @@ var getExternalStoreMessage = (message) => {
2322
2903
  };
2323
2904
 
2324
2905
  // src/runtimes/external-store/useExternalStoreSync.tsx
2325
- import { useEffect as useEffect10, useInsertionEffect as useInsertionEffect4, useMemo as useMemo2, useRef as useRef5 } from "react";
2906
+ import { useEffect as useEffect11, useInsertionEffect as useInsertionEffect4, useMemo as useMemo4, useRef as useRef6 } from "react";
2326
2907
 
2327
2908
  // src/runtimes/external-store/ThreadMessageConverter.ts
2328
2909
  var ThreadMessageConverter = class {
@@ -2416,11 +2997,11 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
2416
2997
 
2417
2998
  // src/runtimes/external-store/useExternalStoreSync.tsx
2418
2999
  var useExternalStoreSync = (adapter, updateData) => {
2419
- const adapterRef = useRef5(adapter);
3000
+ const adapterRef = useRef6(adapter);
2420
3001
  useInsertionEffect4(() => {
2421
3002
  adapterRef.current = adapter;
2422
3003
  });
2423
- const [converter, convertCallback] = useMemo2(() => {
3004
+ const [converter, convertCallback] = useMemo4(() => {
2424
3005
  const converter2 = adapter.convertMessage ?? ((m) => m);
2425
3006
  const convertCallback2 = (cache, m, idx) => {
2426
3007
  const autoStatus = getAutoStatus(
@@ -2439,7 +3020,7 @@ var useExternalStoreSync = (adapter, updateData) => {
2439
3020
  };
2440
3021
  return [new ThreadMessageConverter(), convertCallback2];
2441
3022
  }, [adapter.convertMessage]);
2442
- useEffect10(() => {
3023
+ useEffect11(() => {
2443
3024
  updateData(
2444
3025
  adapter.isDisabled ?? false,
2445
3026
  adapter.isRunning ?? false,
@@ -2467,7 +3048,7 @@ var ExternalStoreThreadRuntime = class {
2467
3048
  store.isRunning ?? false,
2468
3049
  store.messages
2469
3050
  );
2470
- this.useStore = create14(() => ({
3051
+ this.useStore = create15(() => ({
2471
3052
  store
2472
3053
  }));
2473
3054
  }
@@ -2608,13 +3189,13 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime {
2608
3189
  };
2609
3190
 
2610
3191
  // src/runtimes/external-store/useExternalStoreRuntime.tsx
2611
- import { useEffect as useEffect11, useInsertionEffect as useInsertionEffect5, useState as useState8 } from "react";
3192
+ import { useEffect as useEffect12, useInsertionEffect as useInsertionEffect5, useState as useState10 } from "react";
2612
3193
  var useExternalStoreRuntime = (store) => {
2613
- const [runtime] = useState8(() => new ExternalStoreRuntime(store));
3194
+ const [runtime] = useState10(() => new ExternalStoreRuntime(store));
2614
3195
  useInsertionEffect5(() => {
2615
3196
  runtime.store = store;
2616
3197
  });
2617
- useEffect11(() => {
3198
+ useEffect12(() => {
2618
3199
  runtime.onStoreUpdated();
2619
3200
  });
2620
3201
  return runtime;
@@ -2622,34 +3203,34 @@ var useExternalStoreRuntime = (store) => {
2622
3203
 
2623
3204
  // src/ui/thread-config.tsx
2624
3205
  import {
2625
- createContext,
2626
- useContext
3206
+ createContext as createContext6,
3207
+ useContext as useContext6
2627
3208
  } from "react";
2628
- import { Fragment as Fragment3, jsx as jsx25 } from "react/jsx-runtime";
2629
- var ThreadConfigContext = createContext({});
3209
+ import { Fragment as Fragment3, jsx as jsx30 } from "react/jsx-runtime";
3210
+ var ThreadConfigContext = createContext6({});
2630
3211
  var useThreadConfig = () => {
2631
- return useContext(ThreadConfigContext);
3212
+ return useContext6(ThreadConfigContext);
2632
3213
  };
2633
3214
  var ThreadConfigProvider = ({
2634
3215
  children,
2635
3216
  config
2636
3217
  }) => {
2637
3218
  const assistant = useAssistantContext({ optional: true });
2638
- const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx25(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx25(Fragment3, { children });
3219
+ const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx30(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx30(Fragment3, { children });
2639
3220
  if (!config?.runtime) return configProvider;
2640
3221
  if (assistant) {
2641
3222
  throw new Error(
2642
3223
  "You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
2643
3224
  );
2644
3225
  }
2645
- return /* @__PURE__ */ jsx25(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
3226
+ return /* @__PURE__ */ jsx30(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
2646
3227
  };
2647
3228
  ThreadConfigProvider.displayName = "ThreadConfigProvider";
2648
3229
 
2649
3230
  // src/ui/assistant-action-bar.tsx
2650
- import { forwardRef as forwardRef15 } from "react";
3231
+ import { forwardRef as forwardRef19 } from "react";
2651
3232
  import { CheckIcon, CopyIcon, RefreshCwIcon } from "lucide-react";
2652
- import { Fragment as Fragment4, jsx as jsx26, jsxs as jsxs4 } from "react/jsx-runtime";
3233
+ import { Fragment as Fragment4, jsx as jsx31, jsxs as jsxs5 } from "react/jsx-runtime";
2653
3234
  var useAllowCopy = () => {
2654
3235
  const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();
2655
3236
  const { useThreadActions } = useThreadContext();
@@ -2666,15 +3247,15 @@ var AssistantActionBar = () => {
2666
3247
  const allowCopy = useAllowCopy();
2667
3248
  const allowReload = useAllowReload();
2668
3249
  if (!allowCopy && !allowReload) return null;
2669
- return /* @__PURE__ */ jsxs4(
3250
+ return /* @__PURE__ */ jsxs5(
2670
3251
  AssistantActionBarRoot,
2671
3252
  {
2672
3253
  hideWhenRunning: true,
2673
3254
  autohide: "not-last",
2674
3255
  autohideFloat: "single-branch",
2675
3256
  children: [
2676
- /* @__PURE__ */ jsx26(AssistantActionBarCopy, {}),
2677
- /* @__PURE__ */ jsx26(AssistantActionBarReload, {})
3257
+ /* @__PURE__ */ jsx31(AssistantActionBarCopy, {}),
3258
+ /* @__PURE__ */ jsx31(AssistantActionBarReload, {})
2678
3259
  ]
2679
3260
  }
2680
3261
  );
@@ -2684,7 +3265,7 @@ var AssistantActionBarRoot = withDefaults(actionBar_exports.Root, {
2684
3265
  className: "aui-assistant-action-bar-root"
2685
3266
  });
2686
3267
  AssistantActionBarRoot.displayName = "AssistantActionBarRoot";
2687
- var AssistantActionBarCopy = forwardRef15((props, ref) => {
3268
+ var AssistantActionBarCopy = forwardRef19((props, ref) => {
2688
3269
  const {
2689
3270
  strings: {
2690
3271
  assistantMessage: { reload: { tooltip = "Copy" } = {} } = {}
@@ -2692,13 +3273,13 @@ var AssistantActionBarCopy = forwardRef15((props, ref) => {
2692
3273
  } = useThreadConfig();
2693
3274
  const allowCopy = useAllowCopy();
2694
3275
  if (!allowCopy) return null;
2695
- return /* @__PURE__ */ jsx26(actionBar_exports.Copy, { asChild: true, children: /* @__PURE__ */ jsx26(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsxs4(Fragment4, { children: [
2696
- /* @__PURE__ */ jsx26(message_exports.If, { copied: true, children: /* @__PURE__ */ jsx26(CheckIcon, {}) }),
2697
- /* @__PURE__ */ jsx26(message_exports.If, { copied: false, children: /* @__PURE__ */ jsx26(CopyIcon, {}) })
3276
+ return /* @__PURE__ */ jsx31(actionBar_exports.Copy, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsxs5(Fragment4, { children: [
3277
+ /* @__PURE__ */ jsx31(message_exports.If, { copied: true, children: /* @__PURE__ */ jsx31(CheckIcon, {}) }),
3278
+ /* @__PURE__ */ jsx31(message_exports.If, { copied: false, children: /* @__PURE__ */ jsx31(CopyIcon, {}) })
2698
3279
  ] }) }) });
2699
3280
  });
2700
3281
  AssistantActionBarCopy.displayName = "AssistantActionBarCopy";
2701
- var AssistantActionBarReload = forwardRef15((props, ref) => {
3282
+ var AssistantActionBarReload = forwardRef19((props, ref) => {
2702
3283
  const {
2703
3284
  strings: {
2704
3285
  assistantMessage: { reload: { tooltip = "Refresh" } = {} } = {}
@@ -2706,7 +3287,7 @@ var AssistantActionBarReload = forwardRef15((props, ref) => {
2706
3287
  } = useThreadConfig();
2707
3288
  const allowReload = useAllowReload();
2708
3289
  if (!allowReload) return null;
2709
- return /* @__PURE__ */ jsx26(actionBar_exports.Reload, { asChild: true, children: /* @__PURE__ */ jsx26(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx26(RefreshCwIcon, {}) }) });
3290
+ return /* @__PURE__ */ jsx31(actionBar_exports.Reload, { asChild: true, children: /* @__PURE__ */ jsx31(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx31(RefreshCwIcon, {}) }) });
2710
3291
  });
2711
3292
  AssistantActionBarReload.displayName = "AssistantActionBarReload";
2712
3293
  var exports = {
@@ -2720,12 +3301,12 @@ var assistant_action_bar_default = Object.assign(
2720
3301
  );
2721
3302
 
2722
3303
  // src/ui/assistant-message.tsx
2723
- import { forwardRef as forwardRef17 } from "react";
3304
+ import { forwardRef as forwardRef21 } from "react";
2724
3305
 
2725
3306
  // src/ui/branch-picker.tsx
2726
- import { forwardRef as forwardRef16 } from "react";
3307
+ import { forwardRef as forwardRef20 } from "react";
2727
3308
  import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
2728
- import { jsx as jsx27, jsxs as jsxs5 } from "react/jsx-runtime";
3309
+ import { jsx as jsx32, jsxs as jsxs6 } from "react/jsx-runtime";
2729
3310
  var useAllowBranchPicker = () => {
2730
3311
  const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();
2731
3312
  const { useThreadActions } = useThreadContext();
@@ -2735,10 +3316,10 @@ var useAllowBranchPicker = () => {
2735
3316
  var BranchPicker = () => {
2736
3317
  const allowBranchPicker = useAllowBranchPicker();
2737
3318
  if (!allowBranchPicker) return null;
2738
- return /* @__PURE__ */ jsxs5(BranchPickerRoot, { hideWhenSingleBranch: true, children: [
2739
- /* @__PURE__ */ jsx27(BranchPickerPrevious2, {}),
2740
- /* @__PURE__ */ jsx27(BranchPickerState, {}),
2741
- /* @__PURE__ */ jsx27(BranchPickerNext, {})
3319
+ return /* @__PURE__ */ jsxs6(BranchPickerRoot, { hideWhenSingleBranch: true, children: [
3320
+ /* @__PURE__ */ jsx32(BranchPickerPrevious2, {}),
3321
+ /* @__PURE__ */ jsx32(BranchPickerState, {}),
3322
+ /* @__PURE__ */ jsx32(BranchPickerNext, {})
2742
3323
  ] });
2743
3324
  };
2744
3325
  BranchPicker.displayName = "BranchPicker";
@@ -2746,31 +3327,31 @@ var BranchPickerRoot = withDefaults(branchPicker_exports.Root, {
2746
3327
  className: "aui-branch-picker-root"
2747
3328
  });
2748
3329
  BranchPickerRoot.displayName = "BranchPickerRoot";
2749
- var BranchPickerPrevious2 = forwardRef16((props, ref) => {
3330
+ var BranchPickerPrevious2 = forwardRef20((props, ref) => {
2750
3331
  const {
2751
3332
  strings: {
2752
3333
  branchPicker: { previous: { tooltip = "Previous" } = {} } = {}
2753
3334
  } = {}
2754
3335
  } = useThreadConfig();
2755
- return /* @__PURE__ */ jsx27(branchPicker_exports.Previous, { asChild: true, children: /* @__PURE__ */ jsx27(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx27(ChevronLeftIcon, {}) }) });
3336
+ return /* @__PURE__ */ jsx32(branchPicker_exports.Previous, { asChild: true, children: /* @__PURE__ */ jsx32(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(ChevronLeftIcon, {}) }) });
2756
3337
  });
2757
3338
  BranchPickerPrevious2.displayName = "BranchPickerPrevious";
2758
3339
  var BranchPickerStateWrapper = withDefaults("span", {
2759
3340
  className: "aui-branch-picker-state"
2760
3341
  });
2761
- var BranchPickerState = forwardRef16((props, ref) => {
2762
- return /* @__PURE__ */ jsxs5(BranchPickerStateWrapper, { ...props, ref, children: [
2763
- /* @__PURE__ */ jsx27(branchPicker_exports.Number, {}),
3342
+ var BranchPickerState = forwardRef20((props, ref) => {
3343
+ return /* @__PURE__ */ jsxs6(BranchPickerStateWrapper, { ...props, ref, children: [
3344
+ /* @__PURE__ */ jsx32(branchPicker_exports.Number, {}),
2764
3345
  " / ",
2765
- /* @__PURE__ */ jsx27(branchPicker_exports.Count, {})
3346
+ /* @__PURE__ */ jsx32(branchPicker_exports.Count, {})
2766
3347
  ] });
2767
3348
  });
2768
3349
  BranchPickerState.displayName = "BranchPickerState";
2769
- var BranchPickerNext = forwardRef16((props, ref) => {
3350
+ var BranchPickerNext = forwardRef20((props, ref) => {
2770
3351
  const {
2771
3352
  strings: { branchPicker: { next: { tooltip = "Next" } = {} } = {} } = {}
2772
3353
  } = useThreadConfig();
2773
- return /* @__PURE__ */ jsx27(branchPicker_exports.Next, { asChild: true, children: /* @__PURE__ */ jsx27(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx27(ChevronRightIcon, {}) }) });
3354
+ return /* @__PURE__ */ jsx32(branchPicker_exports.Next, { asChild: true, children: /* @__PURE__ */ jsx32(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(ChevronRightIcon, {}) }) });
2774
3355
  });
2775
3356
  BranchPickerNext.displayName = "BranchPickerNext";
2776
3357
  var exports2 = {
@@ -2782,12 +3363,12 @@ var branch_picker_default = Object.assign(BranchPicker, exports2);
2782
3363
 
2783
3364
  // src/ui/base/avatar.tsx
2784
3365
  import * as AvatarPrimitive from "@radix-ui/react-avatar";
2785
- import { jsx as jsx28, jsxs as jsxs6 } from "react/jsx-runtime";
3366
+ import { jsx as jsx33, jsxs as jsxs7 } from "react/jsx-runtime";
2786
3367
  var Avatar = ({ src, alt, fallback }) => {
2787
3368
  if (src == null && fallback == null) return null;
2788
- return /* @__PURE__ */ jsxs6(AvatarRoot, { children: [
2789
- src != null && /* @__PURE__ */ jsx28(AvatarImage, { src, alt }),
2790
- fallback != null && /* @__PURE__ */ jsx28(AvatarFallback, { children: fallback })
3369
+ return /* @__PURE__ */ jsxs7(AvatarRoot, { children: [
3370
+ src != null && /* @__PURE__ */ jsx33(AvatarImage, { src, alt }),
3371
+ fallback != null && /* @__PURE__ */ jsx33(AvatarFallback, { children: fallback })
2791
3372
  ] });
2792
3373
  };
2793
3374
  Avatar.displayName = "Avatar";
@@ -2805,14 +3386,14 @@ var AvatarFallback = withDefaults(AvatarPrimitive.Fallback, {
2805
3386
  AvatarFallback.displayName = "AvatarFallback";
2806
3387
 
2807
3388
  // src/ui/content-part.tsx
2808
- import classNames from "classnames";
2809
- import { jsx as jsx29 } from "react/jsx-runtime";
3389
+ import classNames2 from "classnames";
3390
+ import { jsx as jsx34 } from "react/jsx-runtime";
2810
3391
  var Text = () => {
2811
3392
  const status = useSmoothStatus();
2812
- return /* @__PURE__ */ jsx29(
3393
+ return /* @__PURE__ */ jsx34(
2813
3394
  contentPart_exports.Text,
2814
3395
  {
2815
- className: classNames(
3396
+ className: classNames2(
2816
3397
  "aui-text",
2817
3398
  status.type === "running" && "aui-text-running"
2818
3399
  ),
@@ -2824,19 +3405,19 @@ var exports3 = { Text: withSmoothContextProvider(Text) };
2824
3405
  var content_part_default = exports3;
2825
3406
 
2826
3407
  // src/ui/assistant-message.tsx
2827
- import { jsx as jsx30, jsxs as jsxs7 } from "react/jsx-runtime";
3408
+ import { jsx as jsx35, jsxs as jsxs8 } from "react/jsx-runtime";
2828
3409
  var AssistantMessage = () => {
2829
- return /* @__PURE__ */ jsxs7(AssistantMessageRoot, { children: [
2830
- /* @__PURE__ */ jsx30(AssistantMessageAvatar, {}),
2831
- /* @__PURE__ */ jsx30(AssistantMessageContent, {}),
2832
- /* @__PURE__ */ jsx30(branch_picker_default, {}),
2833
- /* @__PURE__ */ jsx30(assistant_action_bar_default, {})
3410
+ return /* @__PURE__ */ jsxs8(AssistantMessageRoot, { children: [
3411
+ /* @__PURE__ */ jsx35(AssistantMessageAvatar, {}),
3412
+ /* @__PURE__ */ jsx35(AssistantMessageContent, {}),
3413
+ /* @__PURE__ */ jsx35(branch_picker_default, {}),
3414
+ /* @__PURE__ */ jsx35(assistant_action_bar_default, {})
2834
3415
  ] });
2835
3416
  };
2836
3417
  AssistantMessage.displayName = "AssistantMessage";
2837
3418
  var AssistantMessageAvatar = () => {
2838
3419
  const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
2839
- return /* @__PURE__ */ jsx30(Avatar, { ...avatar });
3420
+ return /* @__PURE__ */ jsx35(Avatar, { ...avatar });
2840
3421
  };
2841
3422
  var AssistantMessageRoot = withDefaults(message_exports.Root, {
2842
3423
  className: "aui-assistant-message-root"
@@ -2845,9 +3426,9 @@ AssistantMessageRoot.displayName = "AssistantMessageRoot";
2845
3426
  var AssistantMessageContentWrapper = withDefaults("div", {
2846
3427
  className: "aui-assistant-message-content"
2847
3428
  });
2848
- var AssistantMessageContent = forwardRef17(({ components: componentsProp, ...rest }, ref) => {
3429
+ var AssistantMessageContent = forwardRef21(({ components: componentsProp, ...rest }, ref) => {
2849
3430
  const { assistantMessage: { components = {} } = {} } = useThreadConfig();
2850
- return /* @__PURE__ */ jsx30(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx30(
3431
+ return /* @__PURE__ */ jsx35(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx35(
2851
3432
  message_exports.Content,
2852
3433
  {
2853
3434
  components: {
@@ -2869,38 +3450,38 @@ var assistant_message_default = Object.assign(
2869
3450
  );
2870
3451
 
2871
3452
  // src/ui/assistant-modal.tsx
2872
- import { forwardRef as forwardRef24 } from "react";
3453
+ import { forwardRef as forwardRef28 } from "react";
2873
3454
  import { BotIcon, ChevronDownIcon } from "lucide-react";
2874
3455
 
2875
3456
  // src/ui/thread.tsx
2876
- import { forwardRef as forwardRef23 } from "react";
3457
+ import { forwardRef as forwardRef27 } from "react";
2877
3458
  import { ArrowDownIcon } from "lucide-react";
2878
3459
 
2879
3460
  // src/ui/composer.tsx
2880
- import { forwardRef as forwardRef18 } from "react";
3461
+ import { forwardRef as forwardRef22 } from "react";
2881
3462
  import { SendHorizontalIcon } from "lucide-react";
2882
3463
 
2883
3464
  // src/ui/base/CircleStopIcon.tsx
2884
- import { jsx as jsx31 } from "react/jsx-runtime";
3465
+ import { jsx as jsx36 } from "react/jsx-runtime";
2885
3466
  var CircleStopIcon = () => {
2886
- return /* @__PURE__ */ jsx31(
3467
+ return /* @__PURE__ */ jsx36(
2887
3468
  "svg",
2888
3469
  {
2889
3470
  xmlns: "http://www.w3.org/2000/svg",
2890
3471
  viewBox: "0 0 16 16",
2891
3472
  fill: "currentColor",
2892
- children: /* @__PURE__ */ jsx31("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
3473
+ children: /* @__PURE__ */ jsx36("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
2893
3474
  }
2894
3475
  );
2895
3476
  };
2896
3477
  CircleStopIcon.displayName = "CircleStopIcon";
2897
3478
 
2898
3479
  // src/ui/composer.tsx
2899
- import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
3480
+ import { Fragment as Fragment5, jsx as jsx37, jsxs as jsxs9 } from "react/jsx-runtime";
2900
3481
  var Composer = () => {
2901
- return /* @__PURE__ */ jsxs8(ComposerRoot, { children: [
2902
- /* @__PURE__ */ jsx32(ComposerInput, { autoFocus: true }),
2903
- /* @__PURE__ */ jsx32(ComposerAction, {})
3482
+ return /* @__PURE__ */ jsxs9(ComposerRoot, { children: [
3483
+ /* @__PURE__ */ jsx37(ComposerInput, { autoFocus: true }),
3484
+ /* @__PURE__ */ jsx37(ComposerAction, {})
2904
3485
  ] });
2905
3486
  };
2906
3487
  Composer.displayName = "Composer";
@@ -2913,14 +3494,14 @@ var ComposerInputStyled = withDefaults(composer_exports.Input, {
2913
3494
  autoFocus: true,
2914
3495
  className: "aui-composer-input"
2915
3496
  });
2916
- var ComposerInput = forwardRef18(
3497
+ var ComposerInput = forwardRef22(
2917
3498
  (props, ref) => {
2918
3499
  const {
2919
3500
  strings: {
2920
3501
  composer: { input: { placeholder = "Write a message..." } = {} } = {}
2921
3502
  } = {}
2922
3503
  } = useThreadConfig();
2923
- return /* @__PURE__ */ jsx32(ComposerInputStyled, { placeholder, ...props, ref });
3504
+ return /* @__PURE__ */ jsx37(ComposerInputStyled, { placeholder, ...props, ref });
2924
3505
  }
2925
3506
  );
2926
3507
  ComposerInput.displayName = "ComposerInput";
@@ -2931,10 +3512,10 @@ var useAllowCancel = () => {
2931
3512
  };
2932
3513
  var ComposerAction = () => {
2933
3514
  const allowCancel = useAllowCancel();
2934
- if (!allowCancel) return /* @__PURE__ */ jsx32(ComposerSend, {});
2935
- return /* @__PURE__ */ jsxs8(Fragment5, { children: [
2936
- /* @__PURE__ */ jsx32(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx32(ComposerSend, {}) }),
2937
- /* @__PURE__ */ jsx32(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx32(ComposerCancel, {}) })
3515
+ if (!allowCancel) return /* @__PURE__ */ jsx37(ComposerSend, {});
3516
+ return /* @__PURE__ */ jsxs9(Fragment5, { children: [
3517
+ /* @__PURE__ */ jsx37(thread_exports.If, { running: false, children: /* @__PURE__ */ jsx37(ComposerSend, {}) }),
3518
+ /* @__PURE__ */ jsx37(thread_exports.If, { running: true, children: /* @__PURE__ */ jsx37(ComposerCancel, {}) })
2938
3519
  ] });
2939
3520
  };
2940
3521
  ComposerAction.displayName = "ComposerAction";
@@ -2942,22 +3523,22 @@ var ComposerSendButton = withDefaults(TooltipIconButton, {
2942
3523
  variant: "default",
2943
3524
  className: "aui-composer-send"
2944
3525
  });
2945
- var ComposerSend = forwardRef18((props, ref) => {
3526
+ var ComposerSend = forwardRef22((props, ref) => {
2946
3527
  const {
2947
3528
  strings: { composer: { send: { tooltip = "Send" } = {} } = {} } = {}
2948
3529
  } = useThreadConfig();
2949
- return /* @__PURE__ */ jsx32(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx32(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(SendHorizontalIcon, {}) }) });
3530
+ return /* @__PURE__ */ jsx37(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx37(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(SendHorizontalIcon, {}) }) });
2950
3531
  });
2951
3532
  ComposerSend.displayName = "ComposerSend";
2952
3533
  var ComposerCancelButton = withDefaults(TooltipIconButton, {
2953
3534
  variant: "default",
2954
3535
  className: "aui-composer-cancel"
2955
3536
  });
2956
- var ComposerCancel = forwardRef18((props, ref) => {
3537
+ var ComposerCancel = forwardRef22((props, ref) => {
2957
3538
  const {
2958
3539
  strings: { composer: { cancel: { tooltip = "Cancel" } = {} } = {} } = {}
2959
3540
  } = useThreadConfig();
2960
- return /* @__PURE__ */ jsx32(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx32(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(CircleStopIcon, {}) }) });
3541
+ return /* @__PURE__ */ jsx37(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx37(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(CircleStopIcon, {}) }) });
2961
3542
  });
2962
3543
  ComposerCancel.displayName = "ComposerCancel";
2963
3544
  var exports5 = {
@@ -2970,15 +3551,15 @@ var exports5 = {
2970
3551
  var composer_default = Object.assign(Composer, exports5);
2971
3552
 
2972
3553
  // src/ui/thread-welcome.tsx
2973
- import { forwardRef as forwardRef19 } from "react";
2974
- import { jsx as jsx33, jsxs as jsxs9 } from "react/jsx-runtime";
3554
+ import { forwardRef as forwardRef23 } from "react";
3555
+ import { jsx as jsx38, jsxs as jsxs10 } from "react/jsx-runtime";
2975
3556
  var ThreadWelcome = () => {
2976
- return /* @__PURE__ */ jsxs9(ThreadWelcomeRoot, { children: [
2977
- /* @__PURE__ */ jsxs9(ThreadWelcomeCenter, { children: [
2978
- /* @__PURE__ */ jsx33(ThreadWelcomeAvatar, {}),
2979
- /* @__PURE__ */ jsx33(ThreadWelcomeMessage, {})
3557
+ return /* @__PURE__ */ jsxs10(ThreadWelcomeRoot, { children: [
3558
+ /* @__PURE__ */ jsxs10(ThreadWelcomeCenter, { children: [
3559
+ /* @__PURE__ */ jsx38(ThreadWelcomeAvatar, {}),
3560
+ /* @__PURE__ */ jsx38(ThreadWelcomeMessage, {})
2980
3561
  ] }),
2981
- /* @__PURE__ */ jsx33(ThreadWelcomeSuggestions, {})
3562
+ /* @__PURE__ */ jsx38(ThreadWelcomeSuggestions, {})
2982
3563
  ] });
2983
3564
  };
2984
3565
  ThreadWelcome.displayName = "ThreadWelcome";
@@ -2988,22 +3569,22 @@ var ThreadWelcomeRootStyled = withDefaults("div", {
2988
3569
  var ThreadWelcomeCenter = withDefaults("div", {
2989
3570
  className: "aui-thread-welcome-center"
2990
3571
  });
2991
- var ThreadWelcomeRoot = forwardRef19(
3572
+ var ThreadWelcomeRoot = forwardRef23(
2992
3573
  (props, ref) => {
2993
- return /* @__PURE__ */ jsx33(thread_exports.Empty, { children: /* @__PURE__ */ jsx33(ThreadWelcomeRootStyled, { ...props, ref }) });
3574
+ return /* @__PURE__ */ jsx38(thread_exports.Empty, { children: /* @__PURE__ */ jsx38(ThreadWelcomeRootStyled, { ...props, ref }) });
2994
3575
  }
2995
3576
  );
2996
3577
  ThreadWelcomeRoot.displayName = "ThreadWelcomeRoot";
2997
3578
  var ThreadWelcomeAvatar = () => {
2998
3579
  const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
2999
- return /* @__PURE__ */ jsx33(Avatar, { ...avatar });
3580
+ return /* @__PURE__ */ jsx38(Avatar, { ...avatar });
3000
3581
  };
3001
3582
  var ThreadWelcomeMessageStyled = withDefaults("p", {
3002
3583
  className: "aui-thread-welcome-message"
3003
3584
  });
3004
- var ThreadWelcomeMessage = forwardRef19(({ message: messageProp, ...rest }, ref) => {
3585
+ var ThreadWelcomeMessage = forwardRef23(({ message: messageProp, ...rest }, ref) => {
3005
3586
  const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
3006
- return /* @__PURE__ */ jsx33(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
3587
+ return /* @__PURE__ */ jsx38(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
3007
3588
  });
3008
3589
  ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
3009
3590
  var ThreadWelcomeSuggestionContainer = withDefaults("div", {
@@ -3015,21 +3596,21 @@ var ThreadWelcomeSuggestionStyled = withDefaults(thread_exports.Suggestion, {
3015
3596
  var ThreadWelcomeSuggestion = ({
3016
3597
  suggestion: { text, prompt }
3017
3598
  }) => {
3018
- return /* @__PURE__ */ jsx33(
3599
+ return /* @__PURE__ */ jsx38(
3019
3600
  ThreadWelcomeSuggestionStyled,
3020
3601
  {
3021
3602
  prompt,
3022
3603
  method: "replace",
3023
3604
  autoSend: true,
3024
- children: /* @__PURE__ */ jsx33("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
3605
+ children: /* @__PURE__ */ jsx38("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
3025
3606
  }
3026
3607
  );
3027
3608
  };
3028
3609
  var ThreadWelcomeSuggestions = () => {
3029
3610
  const { welcome: { suggestions } = {} } = useThreadConfig();
3030
- return /* @__PURE__ */ jsx33(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
3611
+ return /* @__PURE__ */ jsx38(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
3031
3612
  const key = `${suggestion.prompt}-${idx}`;
3032
- return /* @__PURE__ */ jsx33(ThreadWelcomeSuggestion, { suggestion }, key);
3613
+ return /* @__PURE__ */ jsx38(ThreadWelcomeSuggestion, { suggestion }, key);
3033
3614
  }) });
3034
3615
  };
3035
3616
  ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
@@ -3044,12 +3625,12 @@ var exports6 = {
3044
3625
  var thread_welcome_default = Object.assign(ThreadWelcome, exports6);
3045
3626
 
3046
3627
  // src/ui/user-message.tsx
3047
- import { forwardRef as forwardRef21 } from "react";
3628
+ import { forwardRef as forwardRef25 } from "react";
3048
3629
 
3049
3630
  // src/ui/user-action-bar.tsx
3050
- import { forwardRef as forwardRef20 } from "react";
3631
+ import { forwardRef as forwardRef24 } from "react";
3051
3632
  import { PencilIcon } from "lucide-react";
3052
- import { jsx as jsx34 } from "react/jsx-runtime";
3633
+ import { jsx as jsx39 } from "react/jsx-runtime";
3053
3634
  var useAllowEdit = () => {
3054
3635
  const { userMessage: { allowEdit = true } = {} } = useThreadConfig();
3055
3636
  const { useThreadActions } = useThreadContext();
@@ -3059,20 +3640,20 @@ var useAllowEdit = () => {
3059
3640
  var UserActionBar = () => {
3060
3641
  const allowEdit = useAllowEdit();
3061
3642
  if (!allowEdit) return null;
3062
- return /* @__PURE__ */ jsx34(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx34(UserActionBarEdit, {}) });
3643
+ return /* @__PURE__ */ jsx39(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx39(UserActionBarEdit, {}) });
3063
3644
  };
3064
3645
  UserActionBar.displayName = "UserActionBar";
3065
3646
  var UserActionBarRoot = withDefaults(actionBar_exports.Root, {
3066
3647
  className: "aui-user-action-bar-root"
3067
3648
  });
3068
3649
  UserActionBarRoot.displayName = "UserActionBarRoot";
3069
- var UserActionBarEdit = forwardRef20((props, ref) => {
3650
+ var UserActionBarEdit = forwardRef24((props, ref) => {
3070
3651
  const {
3071
3652
  strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
3072
3653
  } = useThreadConfig();
3073
3654
  const allowEdit = useAllowEdit();
3074
3655
  if (!allowEdit) return null;
3075
- return /* @__PURE__ */ jsx34(actionBar_exports.Edit, { asChild: true, children: /* @__PURE__ */ jsx34(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx34(PencilIcon, {}) }) });
3656
+ return /* @__PURE__ */ jsx39(actionBar_exports.Edit, { asChild: true, children: /* @__PURE__ */ jsx39(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx39(PencilIcon, {}) }) });
3076
3657
  });
3077
3658
  UserActionBarEdit.displayName = "UserActionBarEdit";
3078
3659
  var exports7 = {
@@ -3082,12 +3663,12 @@ var exports7 = {
3082
3663
  var user_action_bar_default = Object.assign(UserActionBar, exports7);
3083
3664
 
3084
3665
  // src/ui/user-message.tsx
3085
- import { jsx as jsx35, jsxs as jsxs10 } from "react/jsx-runtime";
3666
+ import { jsx as jsx40, jsxs as jsxs11 } from "react/jsx-runtime";
3086
3667
  var UserMessage = () => {
3087
- return /* @__PURE__ */ jsxs10(UserMessageRoot, { children: [
3088
- /* @__PURE__ */ jsx35(user_action_bar_default, {}),
3089
- /* @__PURE__ */ jsx35(UserMessageContent, {}),
3090
- /* @__PURE__ */ jsx35(branch_picker_default, {})
3668
+ return /* @__PURE__ */ jsxs11(UserMessageRoot, { children: [
3669
+ /* @__PURE__ */ jsx40(user_action_bar_default, {}),
3670
+ /* @__PURE__ */ jsx40(UserMessageContent, {}),
3671
+ /* @__PURE__ */ jsx40(branch_picker_default, {})
3091
3672
  ] });
3092
3673
  };
3093
3674
  UserMessage.displayName = "UserMessage";
@@ -3098,9 +3679,9 @@ UserMessageRoot.displayName = "UserMessageRoot";
3098
3679
  var UserMessageContentWrapper = withDefaults("div", {
3099
3680
  className: "aui-user-message-content"
3100
3681
  });
3101
- var UserMessageContent = forwardRef21(
3682
+ var UserMessageContent = forwardRef25(
3102
3683
  ({ components, ...props }, ref) => {
3103
- return /* @__PURE__ */ jsx35(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx35(
3684
+ return /* @__PURE__ */ jsx40(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx40(
3104
3685
  message_exports.Content,
3105
3686
  {
3106
3687
  components: {
@@ -3119,14 +3700,14 @@ var exports8 = {
3119
3700
  var user_message_default = Object.assign(UserMessage, exports8);
3120
3701
 
3121
3702
  // src/ui/edit-composer.tsx
3122
- import { forwardRef as forwardRef22 } from "react";
3123
- import { jsx as jsx36, jsxs as jsxs11 } from "react/jsx-runtime";
3703
+ import { forwardRef as forwardRef26 } from "react";
3704
+ import { jsx as jsx41, jsxs as jsxs12 } from "react/jsx-runtime";
3124
3705
  var EditComposer = () => {
3125
- return /* @__PURE__ */ jsxs11(EditComposerRoot, { children: [
3126
- /* @__PURE__ */ jsx36(EditComposerInput, {}),
3127
- /* @__PURE__ */ jsxs11(EditComposerFooter, { children: [
3128
- /* @__PURE__ */ jsx36(EditComposerCancel, {}),
3129
- /* @__PURE__ */ jsx36(EditComposerSend, {})
3706
+ return /* @__PURE__ */ jsxs12(EditComposerRoot, { children: [
3707
+ /* @__PURE__ */ jsx41(EditComposerInput, {}),
3708
+ /* @__PURE__ */ jsxs12(EditComposerFooter, { children: [
3709
+ /* @__PURE__ */ jsx41(EditComposerCancel, {}),
3710
+ /* @__PURE__ */ jsx41(EditComposerSend, {})
3130
3711
  ] })
3131
3712
  ] });
3132
3713
  };
@@ -3143,23 +3724,23 @@ var EditComposerFooter = withDefaults("div", {
3143
3724
  className: "aui-edit-composer-footer"
3144
3725
  });
3145
3726
  EditComposerFooter.displayName = "EditComposerFooter";
3146
- var EditComposerCancel = forwardRef22(
3727
+ var EditComposerCancel = forwardRef26(
3147
3728
  (props, ref) => {
3148
3729
  const {
3149
3730
  strings: {
3150
3731
  editComposer: { cancel: { label = "Cancel" } = {} } = {}
3151
3732
  } = {}
3152
3733
  } = useThreadConfig();
3153
- return /* @__PURE__ */ jsx36(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx36(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
3734
+ return /* @__PURE__ */ jsx41(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx41(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
3154
3735
  }
3155
3736
  );
3156
3737
  EditComposerCancel.displayName = "EditComposerCancel";
3157
- var EditComposerSend = forwardRef22(
3738
+ var EditComposerSend = forwardRef26(
3158
3739
  (props, ref) => {
3159
3740
  const {
3160
3741
  strings: { editComposer: { send: { label = "Send" } = {} } = {} } = {}
3161
3742
  } = useThreadConfig();
3162
- return /* @__PURE__ */ jsx36(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx36(Button, { ...props, ref, children: props.children ?? label }) });
3743
+ return /* @__PURE__ */ jsx41(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx41(Button, { ...props, ref, children: props.children ?? label }) });
3163
3744
  }
3164
3745
  );
3165
3746
  EditComposerSend.displayName = "EditComposerSend";
@@ -3173,23 +3754,23 @@ var exports9 = {
3173
3754
  var edit_composer_default = Object.assign(EditComposer, exports9);
3174
3755
 
3175
3756
  // src/ui/thread.tsx
3176
- import { jsx as jsx37, jsxs as jsxs12 } from "react/jsx-runtime";
3757
+ import { jsx as jsx42, jsxs as jsxs13 } from "react/jsx-runtime";
3177
3758
  var Thread = (config) => {
3178
- return /* @__PURE__ */ jsx37(ThreadRoot, { config, children: /* @__PURE__ */ jsxs12(ThreadViewport, { children: [
3179
- /* @__PURE__ */ jsx37(thread_welcome_default, {}),
3180
- /* @__PURE__ */ jsx37(ThreadMessages, {}),
3181
- /* @__PURE__ */ jsxs12(ThreadViewportFooter, { children: [
3182
- /* @__PURE__ */ jsx37(ThreadScrollToBottom, {}),
3183
- /* @__PURE__ */ jsx37(composer_default, {})
3759
+ return /* @__PURE__ */ jsx42(ThreadRoot, { config, children: /* @__PURE__ */ jsxs13(ThreadViewport, { children: [
3760
+ /* @__PURE__ */ jsx42(thread_welcome_default, {}),
3761
+ /* @__PURE__ */ jsx42(ThreadMessages, {}),
3762
+ /* @__PURE__ */ jsxs13(ThreadViewportFooter, { children: [
3763
+ /* @__PURE__ */ jsx42(ThreadScrollToBottom, {}),
3764
+ /* @__PURE__ */ jsx42(composer_default, {})
3184
3765
  ] })
3185
3766
  ] }) });
3186
3767
  };
3187
3768
  var ThreadRootStyled = withDefaults(thread_exports.Root, {
3188
3769
  className: "aui-root aui-thread-root"
3189
3770
  });
3190
- var ThreadRoot = forwardRef23(
3771
+ var ThreadRoot = forwardRef27(
3191
3772
  ({ config, ...props }, ref) => {
3192
- return /* @__PURE__ */ jsx37(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx37(ThreadRootStyled, { ...props, ref }) });
3773
+ return /* @__PURE__ */ jsx42(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx42(ThreadRootStyled, { ...props, ref }) });
3193
3774
  }
3194
3775
  );
3195
3776
  ThreadRoot.displayName = "ThreadRoot";
@@ -3203,7 +3784,7 @@ var ThreadViewportFooter = withDefaults("div", {
3203
3784
  ThreadViewportFooter.displayName = "ThreadViewportFooter";
3204
3785
  var SystemMessage = () => null;
3205
3786
  var ThreadMessages = ({ components, ...rest }) => {
3206
- return /* @__PURE__ */ jsx37(
3787
+ return /* @__PURE__ */ jsx42(
3207
3788
  thread_exports.Messages,
3208
3789
  {
3209
3790
  components: {
@@ -3221,13 +3802,13 @@ var ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {
3221
3802
  variant: "outline",
3222
3803
  className: "aui-thread-scroll-to-bottom"
3223
3804
  });
3224
- var ThreadScrollToBottom = forwardRef23((props, ref) => {
3805
+ var ThreadScrollToBottom = forwardRef27((props, ref) => {
3225
3806
  const {
3226
3807
  strings: {
3227
3808
  thread: { scrollToBottom: { tooltip = "Scroll to bottom" } = {} } = {}
3228
3809
  } = {}
3229
3810
  } = useThreadConfig();
3230
- return /* @__PURE__ */ jsx37(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx37(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(ArrowDownIcon, {}) }) });
3811
+ return /* @__PURE__ */ jsx42(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx42(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx42(ArrowDownIcon, {}) }) });
3231
3812
  });
3232
3813
  ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
3233
3814
  var exports10 = {
@@ -3240,20 +3821,20 @@ var exports10 = {
3240
3821
  var thread_default = Object.assign(Thread, exports10);
3241
3822
 
3242
3823
  // src/ui/assistant-modal.tsx
3243
- import { Fragment as Fragment6, jsx as jsx38, jsxs as jsxs13 } from "react/jsx-runtime";
3824
+ import { Fragment as Fragment6, jsx as jsx43, jsxs as jsxs14 } from "react/jsx-runtime";
3244
3825
  var AssistantModal = (config) => {
3245
- return /* @__PURE__ */ jsxs13(AssistantModalRoot, { config, children: [
3246
- /* @__PURE__ */ jsx38(AssistantModalTrigger, {}),
3247
- /* @__PURE__ */ jsx38(AssistantModalContent, { children: /* @__PURE__ */ jsx38(thread_default, {}) })
3826
+ return /* @__PURE__ */ jsxs14(AssistantModalRoot, { config, children: [
3827
+ /* @__PURE__ */ jsx43(AssistantModalTrigger, {}),
3828
+ /* @__PURE__ */ jsx43(AssistantModalContent, { children: /* @__PURE__ */ jsx43(thread_default, {}) })
3248
3829
  ] });
3249
3830
  };
3250
3831
  AssistantModal.displayName = "AssistantModal";
3251
3832
  var AssistantModalRoot = ({ config, ...props }) => {
3252
- return /* @__PURE__ */ jsx38(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx38(assistantModal_exports.Root, { ...props }) });
3833
+ return /* @__PURE__ */ jsx43(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx43(assistantModal_exports.Root, { ...props }) });
3253
3834
  };
3254
3835
  AssistantModalRoot.displayName = "AssistantModalRoot";
3255
- var AssistantModalTrigger = forwardRef24((props, ref) => {
3256
- return /* @__PURE__ */ jsx38(AssistantModalAnchor, { children: /* @__PURE__ */ jsx38(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx38(AssistantModalButton, { ...props, ref }) }) });
3836
+ var AssistantModalTrigger = forwardRef28((props, ref) => {
3837
+ return /* @__PURE__ */ jsx43(AssistantModalAnchor, { children: /* @__PURE__ */ jsx43(assistantModal_exports.Trigger, { asChild: true, children: /* @__PURE__ */ jsx43(AssistantModalButton, { ...props, ref }) }) });
3257
3838
  });
3258
3839
  AssistantModalTrigger.displayName = "AssistantModalTrigger";
3259
3840
  var AssistantModalAnchor = withDefaults(assistantModal_exports.Anchor, {
@@ -3264,7 +3845,7 @@ var ModalButtonStyled = withDefaults(TooltipIconButton, {
3264
3845
  variant: "default",
3265
3846
  className: "aui-modal-button"
3266
3847
  });
3267
- var AssistantModalButton = forwardRef24(({ "data-state": state, ...rest }, ref) => {
3848
+ var AssistantModalButton = forwardRef28(({ "data-state": state, ...rest }, ref) => {
3268
3849
  const {
3269
3850
  strings: {
3270
3851
  assistantModal: {
@@ -3278,7 +3859,7 @@ var AssistantModalButton = forwardRef24(({ "data-state": state, ...rest }, ref)
3278
3859
  } = {}
3279
3860
  } = useThreadConfig();
3280
3861
  const tooltip = state === "open" ? openTooltip : closedTooltip;
3281
- return /* @__PURE__ */ jsx38(
3862
+ return /* @__PURE__ */ jsx43(
3282
3863
  ModalButtonStyled,
3283
3864
  {
3284
3865
  side: "left",
@@ -3286,15 +3867,15 @@ var AssistantModalButton = forwardRef24(({ "data-state": state, ...rest }, ref)
3286
3867
  "data-state": state,
3287
3868
  ...rest,
3288
3869
  ref,
3289
- children: rest.children ?? /* @__PURE__ */ jsxs13(Fragment6, { children: [
3290
- /* @__PURE__ */ jsx38(
3870
+ children: rest.children ?? /* @__PURE__ */ jsxs14(Fragment6, { children: [
3871
+ /* @__PURE__ */ jsx43(
3291
3872
  BotIcon,
3292
3873
  {
3293
3874
  "data-state": state,
3294
3875
  className: "aui-modal-button-closed-icon"
3295
3876
  }
3296
3877
  ),
3297
- /* @__PURE__ */ jsx38(
3878
+ /* @__PURE__ */ jsx43(
3298
3879
  ChevronDownIcon,
3299
3880
  {
3300
3881
  "data-state": state,