@assistant-ui/react 0.5.21 → 0.5.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,