@assistant-ui/react 0.5.19 → 0.5.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AssistantTypes-D93BmqD5.d.mts +160 -0
- package/dist/AssistantTypes-D93BmqD5.d.ts +160 -0
- package/dist/Thread-BbLf1cc4.d.mts +156 -0
- package/dist/Thread-jfAlPLli.d.ts +156 -0
- package/dist/chunk-2RKUKZSZ.mjs +761 -0
- package/dist/chunk-2RKUKZSZ.mjs.map +1 -0
- package/dist/chunk-BJPOCE4O.mjs +11 -0
- package/dist/chunk-BJPOCE4O.mjs.map +1 -0
- package/dist/chunk-QBS6JLLN.mjs +63 -0
- package/dist/chunk-QBS6JLLN.mjs.map +1 -0
- package/dist/chunk-V66MVXBH.mjs +608 -0
- package/dist/chunk-V66MVXBH.mjs.map +1 -0
- package/dist/edge.d.mts +5 -90
- package/dist/edge.d.ts +5 -90
- package/dist/edge.js +1 -0
- package/dist/edge.js.map +1 -1
- package/dist/edge.mjs +49 -799
- package/dist/edge.mjs.map +1 -1
- package/dist/index.d.mts +17 -293
- package/dist/index.d.ts +17 -293
- package/dist/index.js +341 -283
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +313 -1601
- package/dist/index.mjs.map +1 -1
- package/dist/internal.d.mts +9 -0
- package/dist/internal.d.ts +9 -0
- package/dist/internal.js +620 -0
- package/dist/internal.js.map +1 -0
- package/dist/internal.mjs +24 -0
- package/dist/internal.mjs.map +1 -0
- package/dist/styles/index.css +3 -3
- package/dist/styles/index.css.map +1 -1
- package/dist/styles/tailwindcss/thread.css +1 -1
- package/dist/tailwindcss/index.js +1 -0
- package/dist/tailwindcss/index.js.map +1 -1
- package/dist/tailwindcss/index.mjs +3 -0
- package/dist/tailwindcss/index.mjs.map +1 -1
- package/internal/README.md +1 -0
- package/internal/package.json +5 -0
- package/package.json +12 -1
package/dist/index.mjs
CHANGED
@@ -1,9 +1,40 @@
|
|
1
1
|
"use client";
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
2
|
+
import {
|
3
|
+
runResultStream,
|
4
|
+
toCoreMessage,
|
5
|
+
toCoreMessages,
|
6
|
+
toLanguageModelMessages,
|
7
|
+
toLanguageModelTools,
|
8
|
+
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";
|
35
|
+
import {
|
36
|
+
__export
|
37
|
+
} from "./chunk-BJPOCE4O.mjs";
|
7
38
|
|
8
39
|
// src/context/providers/AssistantRuntimeProvider.tsx
|
9
40
|
import { memo } from "react";
|
@@ -11,93 +42,8 @@ import { memo } from "react";
|
|
11
42
|
// src/context/providers/AssistantProvider.tsx
|
12
43
|
import { useEffect, useInsertionEffect as useInsertionEffect2, useRef as useRef2, useState as useState2 } from "react";
|
13
44
|
|
14
|
-
// src/context/react/AssistantContext.ts
|
15
|
-
import { createContext, useContext } from "react";
|
16
|
-
var AssistantContext = createContext(
|
17
|
-
null
|
18
|
-
);
|
19
|
-
function useAssistantContext(options) {
|
20
|
-
const context = useContext(AssistantContext);
|
21
|
-
if (!options?.optional && !context)
|
22
|
-
throw new Error(
|
23
|
-
"This component must be used within an AssistantRuntimeProvider."
|
24
|
-
);
|
25
|
-
return context;
|
26
|
-
}
|
27
|
-
|
28
45
|
// src/context/stores/AssistantModelConfig.ts
|
29
46
|
import { create } from "zustand";
|
30
|
-
|
31
|
-
// src/types/ModelConfigTypes.ts
|
32
|
-
import { z } from "zod";
|
33
|
-
var LanguageModelV1CallSettingsSchema = z.object({
|
34
|
-
maxTokens: z.number().int().positive().optional(),
|
35
|
-
temperature: z.number().optional(),
|
36
|
-
topP: z.number().optional(),
|
37
|
-
presencePenalty: z.number().optional(),
|
38
|
-
frequencyPenalty: z.number().optional(),
|
39
|
-
seed: z.number().int().optional(),
|
40
|
-
headers: z.record(z.string().optional()).optional()
|
41
|
-
});
|
42
|
-
var LanguageModelConfigSchema = z.object({
|
43
|
-
apiKey: z.string().optional(),
|
44
|
-
baseUrl: z.string().optional(),
|
45
|
-
modelName: z.string().optional()
|
46
|
-
});
|
47
|
-
var mergeModelConfigs = (configSet) => {
|
48
|
-
const configs = Array.from(configSet).map((c) => c.getModelConfig()).sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
|
49
|
-
return configs.reduce((acc, config) => {
|
50
|
-
if (config.system) {
|
51
|
-
if (acc.system) {
|
52
|
-
acc.system += `
|
53
|
-
|
54
|
-
${config.system}`;
|
55
|
-
} else {
|
56
|
-
acc.system = config.system;
|
57
|
-
}
|
58
|
-
}
|
59
|
-
if (config.tools) {
|
60
|
-
for (const [name, tool] of Object.entries(config.tools)) {
|
61
|
-
if (acc.tools?.[name]) {
|
62
|
-
throw new Error(
|
63
|
-
`You tried to define a tool with the name ${name}, but it already exists.`
|
64
|
-
);
|
65
|
-
}
|
66
|
-
if (!acc.tools) acc.tools = {};
|
67
|
-
acc.tools[name] = tool;
|
68
|
-
}
|
69
|
-
}
|
70
|
-
if (config.config) {
|
71
|
-
acc.config = {
|
72
|
-
...acc.config,
|
73
|
-
...config.config
|
74
|
-
};
|
75
|
-
}
|
76
|
-
if (config.callSettings) {
|
77
|
-
acc.callSettings = {
|
78
|
-
...acc.callSettings,
|
79
|
-
...config.callSettings
|
80
|
-
};
|
81
|
-
}
|
82
|
-
return acc;
|
83
|
-
}, {});
|
84
|
-
};
|
85
|
-
|
86
|
-
// src/utils/ProxyConfigProvider.ts
|
87
|
-
var ProxyConfigProvider = class {
|
88
|
-
_providers = /* @__PURE__ */ new Set();
|
89
|
-
getModelConfig() {
|
90
|
-
return mergeModelConfigs(this._providers);
|
91
|
-
}
|
92
|
-
registerModelConfigProvider(provider) {
|
93
|
-
this._providers.add(provider);
|
94
|
-
return () => {
|
95
|
-
this._providers.delete(provider);
|
96
|
-
};
|
97
|
-
}
|
98
|
-
};
|
99
|
-
|
100
|
-
// src/context/stores/AssistantModelConfig.ts
|
101
47
|
var makeAssistantModelConfigStore = () => create(() => {
|
102
48
|
const proxy = new ProxyConfigProvider();
|
103
49
|
return Object.freeze({
|
@@ -145,18 +91,6 @@ var makeAssistantToolUIsStore = () => create2((set) => {
|
|
145
91
|
// src/context/providers/ThreadProvider.tsx
|
146
92
|
import { useCallback as useCallback2, useInsertionEffect, useState } from "react";
|
147
93
|
|
148
|
-
// src/context/react/ThreadContext.ts
|
149
|
-
import { createContext as createContext2, useContext as useContext2 } from "react";
|
150
|
-
var ThreadContext = createContext2(null);
|
151
|
-
function useThreadContext(options) {
|
152
|
-
const context = useContext2(ThreadContext);
|
153
|
-
if (!options?.optional && !context)
|
154
|
-
throw new Error(
|
155
|
-
"This component must be used within an AssistantRuntimeProvider."
|
156
|
-
);
|
157
|
-
return context;
|
158
|
-
}
|
159
|
-
|
160
94
|
// src/context/stores/Composer.ts
|
161
95
|
import { create as create3 } from "zustand";
|
162
96
|
|
@@ -384,48 +318,6 @@ var AssistantRuntimeProviderImpl = ({ children, runtime }) => {
|
|
384
318
|
};
|
385
319
|
var AssistantRuntimeProvider = memo(AssistantRuntimeProviderImpl);
|
386
320
|
|
387
|
-
// src/context/react/ComposerContext.ts
|
388
|
-
import { useMemo } from "react";
|
389
|
-
|
390
|
-
// src/context/react/MessageContext.ts
|
391
|
-
import { createContext as createContext3, useContext as useContext3 } from "react";
|
392
|
-
var MessageContext = createContext3(null);
|
393
|
-
function useMessageContext(options) {
|
394
|
-
const context = useContext3(MessageContext);
|
395
|
-
if (!options?.optional && !context)
|
396
|
-
throw new Error(
|
397
|
-
"This component can only be used inside a component passed to <ThreadPrimitive.Messages components={...} />."
|
398
|
-
);
|
399
|
-
return context;
|
400
|
-
}
|
401
|
-
|
402
|
-
// src/context/react/ComposerContext.ts
|
403
|
-
var useComposerContext = () => {
|
404
|
-
const { useComposer } = useThreadContext();
|
405
|
-
const { useEditComposer } = useMessageContext({ optional: true }) ?? {};
|
406
|
-
return useMemo(
|
407
|
-
() => ({
|
408
|
-
useComposer: useEditComposer ?? useComposer,
|
409
|
-
type: useEditComposer ? "edit" : "new"
|
410
|
-
}),
|
411
|
-
[useEditComposer, useComposer]
|
412
|
-
);
|
413
|
-
};
|
414
|
-
|
415
|
-
// src/context/react/ContentPartContext.ts
|
416
|
-
import { createContext as createContext4, useContext as useContext4 } from "react";
|
417
|
-
var ContentPartContext = createContext4(
|
418
|
-
null
|
419
|
-
);
|
420
|
-
function useContentPartContext(options) {
|
421
|
-
const context = useContext4(ContentPartContext);
|
422
|
-
if (!options?.optional && !context)
|
423
|
-
throw new Error(
|
424
|
-
"This component can only be used inside a component passed to <MessagePrimitive.Content components={...} >."
|
425
|
-
);
|
426
|
-
return context;
|
427
|
-
}
|
428
|
-
|
429
321
|
// src/hooks/useAppendMessage.tsx
|
430
322
|
import { useCallback as useCallback3 } from "react";
|
431
323
|
var toAppendMessage = (useThreadMessages, message) => {
|
@@ -543,7 +435,7 @@ var useAssistantInstructions = (instruction) => {
|
|
543
435
|
import { useCallback as useCallback5 } from "react";
|
544
436
|
|
545
437
|
// src/utils/combined/useCombinedStore.ts
|
546
|
-
import { useMemo
|
438
|
+
import { useMemo } from "react";
|
547
439
|
|
548
440
|
// src/utils/combined/createCombinedStore.ts
|
549
441
|
import { useSyncExternalStore } from "react";
|
@@ -564,7 +456,7 @@ var createCombinedStore = (stores) => {
|
|
564
456
|
|
565
457
|
// src/utils/combined/useCombinedStore.ts
|
566
458
|
var useCombinedStore = (stores, selector) => {
|
567
|
-
const useCombined =
|
459
|
+
const useCombined = useMemo(() => createCombinedStore(stores), stores);
|
568
460
|
return useCombined(selector);
|
569
461
|
};
|
570
462
|
|
@@ -1118,7 +1010,7 @@ var BranchPickerPrimitiveNumber = () => {
|
|
1118
1010
|
BranchPickerPrimitiveNumber.displayName = "BranchPickerPrimitive.Number";
|
1119
1011
|
|
1120
1012
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
1121
|
-
import { Primitive as
|
1013
|
+
import { Primitive as Primitive5 } from "@radix-ui/react-primitive";
|
1122
1014
|
import { forwardRef as forwardRef9 } from "react";
|
1123
1015
|
|
1124
1016
|
// src/primitives/message/index.ts
|
@@ -1161,9 +1053,9 @@ var useIsHoveringRef = () => {
|
|
1161
1053
|
);
|
1162
1054
|
return useManagedRef(callbackRef);
|
1163
1055
|
};
|
1164
|
-
var MessagePrimitiveRoot = forwardRef6(({ onMouseEnter, onMouseLeave, ...rest },
|
1056
|
+
var MessagePrimitiveRoot = forwardRef6(({ onMouseEnter, onMouseLeave, ...rest }, forwardRef25) => {
|
1165
1057
|
const isHoveringRef = useIsHoveringRef();
|
1166
|
-
const ref = useComposedRefs(
|
1058
|
+
const ref = useComposedRefs(forwardRef25, isHoveringRef);
|
1167
1059
|
return /* @__PURE__ */ jsx12(Primitive3.div, { ...rest, ref });
|
1168
1060
|
});
|
1169
1061
|
MessagePrimitiveRoot.displayName = "MessagePrimitive.Root";
|
@@ -1225,7 +1117,6 @@ var useContentPartContext2 = (partIndex) => {
|
|
1225
1117
|
const useContentPart = create10(
|
1226
1118
|
() => getContentPartState(useMessage.getState(), void 0, partIndex)
|
1227
1119
|
);
|
1228
|
-
getContentPartState(useMessage.getState(), useContentPart, partIndex);
|
1229
1120
|
return { useContentPart };
|
1230
1121
|
});
|
1231
1122
|
useEffect6(() => {
|
@@ -1252,108 +1143,28 @@ var ContentPartProvider = ({
|
|
1252
1143
|
};
|
1253
1144
|
|
1254
1145
|
// src/primitives/contentPart/ContentPartText.tsx
|
1255
|
-
import {
|
1256
|
-
|
1257
|
-
|
1258
|
-
// src/utils/hooks/useSmooth.tsx
|
1259
|
-
import { useEffect as useEffect7, useRef as useRef3, useState as useState5 } from "react";
|
1260
|
-
var TextStreamAnimator = class {
|
1261
|
-
constructor(currentText, setText) {
|
1262
|
-
this.currentText = currentText;
|
1263
|
-
this.setText = setText;
|
1264
|
-
}
|
1265
|
-
animationFrameId = null;
|
1266
|
-
lastUpdateTime = Date.now();
|
1267
|
-
targetText = "";
|
1268
|
-
start() {
|
1269
|
-
if (this.animationFrameId !== null) return;
|
1270
|
-
this.lastUpdateTime = Date.now();
|
1271
|
-
this.animate();
|
1272
|
-
}
|
1273
|
-
stop() {
|
1274
|
-
if (this.animationFrameId !== null) {
|
1275
|
-
cancelAnimationFrame(this.animationFrameId);
|
1276
|
-
this.animationFrameId = null;
|
1277
|
-
}
|
1278
|
-
}
|
1279
|
-
animate = () => {
|
1280
|
-
const currentTime = Date.now();
|
1281
|
-
const deltaTime = currentTime - this.lastUpdateTime;
|
1282
|
-
let timeToConsume = deltaTime;
|
1283
|
-
const remainingChars = this.targetText.length - this.currentText.length;
|
1284
|
-
const baseTimePerChar = Math.min(5, 250 / remainingChars);
|
1285
|
-
let charsToAdd = 0;
|
1286
|
-
while (timeToConsume >= baseTimePerChar && charsToAdd < remainingChars) {
|
1287
|
-
charsToAdd++;
|
1288
|
-
timeToConsume -= baseTimePerChar;
|
1289
|
-
}
|
1290
|
-
if (charsToAdd !== remainingChars) {
|
1291
|
-
this.animationFrameId = requestAnimationFrame(this.animate);
|
1292
|
-
} else {
|
1293
|
-
this.animationFrameId = null;
|
1294
|
-
}
|
1295
|
-
if (charsToAdd === 0) return;
|
1296
|
-
this.currentText = this.targetText.slice(
|
1297
|
-
0,
|
1298
|
-
this.currentText.length + charsToAdd
|
1299
|
-
);
|
1300
|
-
this.lastUpdateTime = currentTime - timeToConsume;
|
1301
|
-
this.setText(this.currentText);
|
1302
|
-
};
|
1303
|
-
};
|
1304
|
-
var useSmooth = (text, smooth = false) => {
|
1305
|
-
const { useMessage } = useMessageContext();
|
1306
|
-
const id = useMessage((m) => m.message.id);
|
1307
|
-
const idRef = useRef3(id);
|
1308
|
-
const [displayedText, setDisplayedText] = useState5(text);
|
1309
|
-
const [animatorRef] = useState5(
|
1310
|
-
new TextStreamAnimator(text, setDisplayedText)
|
1311
|
-
);
|
1312
|
-
useEffect7(() => {
|
1313
|
-
if (!smooth) {
|
1314
|
-
animatorRef.stop();
|
1315
|
-
return;
|
1316
|
-
}
|
1317
|
-
if (idRef.current !== id || !text.startsWith(animatorRef.targetText)) {
|
1318
|
-
idRef.current = id;
|
1319
|
-
setDisplayedText(text);
|
1320
|
-
animatorRef.currentText = text;
|
1321
|
-
animatorRef.targetText = text;
|
1322
|
-
animatorRef.stop();
|
1323
|
-
return;
|
1324
|
-
}
|
1325
|
-
animatorRef.targetText = text;
|
1326
|
-
animatorRef.start();
|
1327
|
-
}, [animatorRef, id, smooth, text]);
|
1328
|
-
useEffect7(() => {
|
1329
|
-
return () => {
|
1330
|
-
animatorRef.stop();
|
1331
|
-
};
|
1332
|
-
}, [animatorRef]);
|
1333
|
-
return smooth ? displayedText : text;
|
1334
|
-
};
|
1335
|
-
|
1336
|
-
// src/primitives/contentPart/ContentPartText.tsx
|
1146
|
+
import {
|
1147
|
+
forwardRef as forwardRef7
|
1148
|
+
} from "react";
|
1337
1149
|
import { jsx as jsx14 } from "react/jsx-runtime";
|
1338
|
-
var ContentPartPrimitiveText = forwardRef7(({ smooth = true, ...rest }, forwardedRef) => {
|
1150
|
+
var ContentPartPrimitiveText = forwardRef7(({ smooth = true, component: Component = "span", ...rest }, forwardedRef) => {
|
1339
1151
|
const {
|
1340
|
-
|
1341
|
-
|
1342
|
-
} = useContentPartText();
|
1343
|
-
|
1344
|
-
return /* @__PURE__ */ jsx14(Primitive4.span, { "data-status": status.type, ...rest, ref: forwardedRef, children: smoothText });
|
1152
|
+
part: { text },
|
1153
|
+
status
|
1154
|
+
} = useSmooth(useContentPartText(), smooth);
|
1155
|
+
return /* @__PURE__ */ jsx14(Component, { "data-status": status.type, ...rest, ref: forwardedRef, children: text });
|
1345
1156
|
});
|
1346
1157
|
ContentPartPrimitiveText.displayName = "ContentPartPrimitive.Text";
|
1347
1158
|
|
1348
1159
|
// src/primitives/contentPart/ContentPartImage.tsx
|
1349
|
-
import { Primitive as
|
1160
|
+
import { Primitive as Primitive4 } from "@radix-ui/react-primitive";
|
1350
1161
|
import { forwardRef as forwardRef8 } from "react";
|
1351
1162
|
import { jsx as jsx15 } from "react/jsx-runtime";
|
1352
1163
|
var ContentPartPrimitiveImage = forwardRef8((props, forwardedRef) => {
|
1353
1164
|
const {
|
1354
1165
|
part: { image }
|
1355
1166
|
} = useContentPartImage();
|
1356
|
-
return /* @__PURE__ */ jsx15(
|
1167
|
+
return /* @__PURE__ */ jsx15(Primitive4.img, { src: image, ...props, ref: forwardedRef });
|
1357
1168
|
});
|
1358
1169
|
ContentPartPrimitiveImage.displayName = "ContentPartPrimitive.Image";
|
1359
1170
|
|
@@ -1473,7 +1284,7 @@ MessagePrimitiveInProgress.displayName = "MessagePrimitive.InProgress";
|
|
1473
1284
|
// src/primitives/branchPicker/BranchPickerRoot.tsx
|
1474
1285
|
import { jsx as jsx17 } from "react/jsx-runtime";
|
1475
1286
|
var BranchPickerPrimitiveRoot = forwardRef9(({ hideWhenSingleBranch, ...rest }, ref) => {
|
1476
|
-
return /* @__PURE__ */ jsx17(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx17(
|
1287
|
+
return /* @__PURE__ */ jsx17(MessagePrimitiveIf, { hasBranches: hideWhenSingleBranch ? true : void 0, children: /* @__PURE__ */ jsx17(Primitive5.div, { ...rest, ref }) });
|
1477
1288
|
});
|
1478
1289
|
BranchPickerPrimitiveRoot.displayName = "BranchPickerPrimitive.Root";
|
1479
1290
|
|
@@ -1489,7 +1300,7 @@ __export(composer_exports, {
|
|
1489
1300
|
|
1490
1301
|
// src/primitives/composer/ComposerRoot.tsx
|
1491
1302
|
import { composeEventHandlers as composeEventHandlers4 } from "@radix-ui/primitive";
|
1492
|
-
import { Primitive as
|
1303
|
+
import { Primitive as Primitive6 } from "@radix-ui/react-primitive";
|
1493
1304
|
import {
|
1494
1305
|
forwardRef as forwardRef10
|
1495
1306
|
} from "react";
|
@@ -1502,7 +1313,7 @@ var ComposerPrimitiveRoot = forwardRef10(({ onSubmit, ...rest }, forwardedRef) =
|
|
1502
1313
|
send();
|
1503
1314
|
};
|
1504
1315
|
return /* @__PURE__ */ jsx18(
|
1505
|
-
|
1316
|
+
Primitive6.form,
|
1506
1317
|
{
|
1507
1318
|
...rest,
|
1508
1319
|
ref: forwardedRef,
|
@@ -1519,8 +1330,8 @@ import { Slot } from "@radix-ui/react-slot";
|
|
1519
1330
|
import {
|
1520
1331
|
forwardRef as forwardRef11,
|
1521
1332
|
useCallback as useCallback15,
|
1522
|
-
useEffect as
|
1523
|
-
useRef as
|
1333
|
+
useEffect as useEffect7,
|
1334
|
+
useRef as useRef3
|
1524
1335
|
} from "react";
|
1525
1336
|
import TextareaAutosize from "react-textarea-autosize";
|
1526
1337
|
import { useEscapeKeydown } from "@radix-ui/react-use-escape-keydown";
|
@@ -1542,7 +1353,7 @@ var ComposerPrimitiveInput = forwardRef11(
|
|
1542
1353
|
});
|
1543
1354
|
const Component = asChild ? Slot : TextareaAutosize;
|
1544
1355
|
const isDisabled = useThread((t) => t.isDisabled) ?? disabledProp ?? false;
|
1545
|
-
const textareaRef =
|
1356
|
+
const textareaRef = useRef3(null);
|
1546
1357
|
const ref = useComposedRefs2(forwardedRef, textareaRef);
|
1547
1358
|
useEscapeKeydown((e) => {
|
1548
1359
|
const composer = useComposer.getState();
|
@@ -1571,7 +1382,7 @@ var ComposerPrimitiveInput = forwardRef11(
|
|
1571
1382
|
textareaRef.current.value.length
|
1572
1383
|
);
|
1573
1384
|
}, [autoFocusEnabled]);
|
1574
|
-
|
1385
|
+
useEffect7(() => focus(), [focus]);
|
1575
1386
|
useOnComposerFocus(() => {
|
1576
1387
|
if (type === "new") {
|
1577
1388
|
focus();
|
@@ -1599,13 +1410,13 @@ ComposerPrimitiveInput.displayName = "ComposerPrimitive.Input";
|
|
1599
1410
|
|
1600
1411
|
// src/primitives/composer/ComposerSend.tsx
|
1601
1412
|
import { forwardRef as forwardRef12 } from "react";
|
1602
|
-
import { Primitive as
|
1413
|
+
import { Primitive as Primitive7 } from "@radix-ui/react-primitive";
|
1603
1414
|
import { jsx as jsx20 } from "react/jsx-runtime";
|
1604
1415
|
var ComposerPrimitiveSend = forwardRef12(({ disabled, ...rest }, ref) => {
|
1605
1416
|
const { useComposer } = useComposerContext();
|
1606
1417
|
const hasValue = useComposer((c) => c.isEditing && c.value.length > 0);
|
1607
1418
|
return /* @__PURE__ */ jsx20(
|
1608
|
-
|
1419
|
+
Primitive7.button,
|
1609
1420
|
{
|
1610
1421
|
type: "submit",
|
1611
1422
|
...rest,
|
@@ -1654,11 +1465,11 @@ __export(thread_exports, {
|
|
1654
1465
|
});
|
1655
1466
|
|
1656
1467
|
// src/primitives/thread/ThreadRoot.tsx
|
1657
|
-
import { Primitive as
|
1468
|
+
import { Primitive as Primitive8 } from "@radix-ui/react-primitive";
|
1658
1469
|
import { forwardRef as forwardRef13 } from "react";
|
1659
1470
|
import { jsx as jsx21 } from "react/jsx-runtime";
|
1660
1471
|
var ThreadPrimitiveRoot = forwardRef13((props, ref) => {
|
1661
|
-
return /* @__PURE__ */ jsx21(
|
1472
|
+
return /* @__PURE__ */ jsx21(Primitive8.div, { ...props, ref });
|
1662
1473
|
});
|
1663
1474
|
ThreadPrimitiveRoot.displayName = "ThreadPrimitive.Root";
|
1664
1475
|
|
@@ -1683,12 +1494,12 @@ ThreadPrimitiveIf.displayName = "ThreadPrimitive.If";
|
|
1683
1494
|
|
1684
1495
|
// src/primitives/thread/ThreadViewport.tsx
|
1685
1496
|
import { useComposedRefs as useComposedRefs4 } from "@radix-ui/react-compose-refs";
|
1686
|
-
import { Primitive as
|
1497
|
+
import { Primitive as Primitive9 } from "@radix-ui/react-primitive";
|
1687
1498
|
import { forwardRef as forwardRef14 } from "react";
|
1688
1499
|
|
1689
1500
|
// src/primitive-hooks/thread/useThreadViewportAutoScroll.tsx
|
1690
1501
|
import { useComposedRefs as useComposedRefs3 } from "@radix-ui/react-compose-refs";
|
1691
|
-
import { useRef as
|
1502
|
+
import { useRef as useRef4 } from "react";
|
1692
1503
|
|
1693
1504
|
// src/utils/hooks/useOnResizeContent.tsx
|
1694
1505
|
import { useCallbackRef as useCallbackRef2 } from "@radix-ui/react-use-callback-ref";
|
@@ -1732,11 +1543,11 @@ var useOnResizeContent = (callback) => {
|
|
1732
1543
|
|
1733
1544
|
// src/utils/hooks/useOnScrollToBottom.tsx
|
1734
1545
|
import { useCallbackRef as useCallbackRef3 } from "@radix-ui/react-use-callback-ref";
|
1735
|
-
import { useEffect as
|
1546
|
+
import { useEffect as useEffect8 } from "react";
|
1736
1547
|
var useOnScrollToBottom = (callback) => {
|
1737
1548
|
const callbackRef = useCallbackRef3(callback);
|
1738
1549
|
const { useViewport } = useThreadContext();
|
1739
|
-
|
1550
|
+
useEffect8(() => {
|
1740
1551
|
return useViewport.getState().onScrollToBottom(() => {
|
1741
1552
|
callbackRef();
|
1742
1553
|
});
|
@@ -1747,10 +1558,10 @@ var useOnScrollToBottom = (callback) => {
|
|
1747
1558
|
var useThreadViewportAutoScroll = ({
|
1748
1559
|
autoScroll = true
|
1749
1560
|
}) => {
|
1750
|
-
const divRef =
|
1561
|
+
const divRef = useRef4(null);
|
1751
1562
|
const { useViewport } = useThreadContext();
|
1752
|
-
const lastScrollTop =
|
1753
|
-
const isScrollingToBottomRef =
|
1563
|
+
const lastScrollTop = useRef4(0);
|
1564
|
+
const isScrollingToBottomRef = useRef4(false);
|
1754
1565
|
const scrollToBottom = (behavior) => {
|
1755
1566
|
const div = divRef.current;
|
1756
1567
|
if (!div || !autoScroll) return;
|
@@ -1801,7 +1612,7 @@ var ThreadPrimitiveViewport = forwardRef14(({ autoScroll, onScroll, children, ..
|
|
1801
1612
|
autoScroll
|
1802
1613
|
});
|
1803
1614
|
const ref = useComposedRefs4(forwardedRef, autoScrollRef);
|
1804
|
-
return /* @__PURE__ */ jsx22(
|
1615
|
+
return /* @__PURE__ */ jsx22(Primitive9.div, { ...rest, ref, children });
|
1805
1616
|
});
|
1806
1617
|
ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
1807
1618
|
|
@@ -1809,7 +1620,7 @@ ThreadPrimitiveViewport.displayName = "ThreadPrimitive.Viewport";
|
|
1809
1620
|
import { memo as memo3 } from "react";
|
1810
1621
|
|
1811
1622
|
// src/context/providers/MessageProvider.tsx
|
1812
|
-
import { useEffect as
|
1623
|
+
import { useEffect as useEffect9, useState as useState5 } from "react";
|
1813
1624
|
import { create as create13 } from "zustand";
|
1814
1625
|
|
1815
1626
|
// src/context/stores/EditComposer.ts
|
@@ -1871,7 +1682,7 @@ var getMessageState = (messages, getBranches, useMessage, messageIndex) => {
|
|
1871
1682
|
};
|
1872
1683
|
var useMessageContext2 = (messageIndex) => {
|
1873
1684
|
const { useThreadMessages, useThreadActions } = useThreadContext();
|
1874
|
-
const [context] =
|
1685
|
+
const [context] = useState5(() => {
|
1875
1686
|
const useMessage = create13(
|
1876
1687
|
() => getMessageState(
|
1877
1688
|
useThreadMessages.getState(),
|
@@ -1909,7 +1720,7 @@ var useMessageContext2 = (messageIndex) => {
|
|
1909
1720
|
});
|
1910
1721
|
return { useMessage, useMessageUtils, useEditComposer };
|
1911
1722
|
});
|
1912
|
-
|
1723
|
+
useEffect9(() => {
|
1913
1724
|
const syncMessage = (thread) => {
|
1914
1725
|
const newState = getMessageState(
|
1915
1726
|
thread,
|
@@ -2003,617 +1814,112 @@ var ThreadPrimitiveSuggestion = createActionButton(
|
|
2003
1814
|
);
|
2004
1815
|
|
2005
1816
|
// src/runtimes/local/useLocalRuntime.tsx
|
2006
|
-
import { useInsertionEffect as useInsertionEffect3, useState as
|
2007
|
-
|
2008
|
-
// src/runtimes/core/BaseAssistantRuntime.tsx
|
2009
|
-
var BaseAssistantRuntime = class {
|
2010
|
-
constructor(_thread) {
|
2011
|
-
this._thread = _thread;
|
2012
|
-
this._thread = _thread;
|
2013
|
-
}
|
2014
|
-
get thread() {
|
2015
|
-
return this._thread;
|
2016
|
-
}
|
2017
|
-
set thread(thread) {
|
2018
|
-
this._thread = thread;
|
2019
|
-
this.subscriptionHandler();
|
2020
|
-
}
|
2021
|
-
_subscriptions = /* @__PURE__ */ new Set();
|
2022
|
-
subscribe(callback) {
|
2023
|
-
this._subscriptions.add(callback);
|
2024
|
-
return () => this._subscriptions.delete(callback);
|
2025
|
-
}
|
2026
|
-
subscriptionHandler = () => {
|
2027
|
-
for (const callback of this._subscriptions) callback();
|
2028
|
-
};
|
2029
|
-
};
|
2030
|
-
|
2031
|
-
// src/internal.ts
|
2032
|
-
var internal_exports = {};
|
2033
|
-
__export(internal_exports, {
|
2034
|
-
BaseAssistantRuntime: () => BaseAssistantRuntime,
|
2035
|
-
MessageRepository: () => MessageRepository,
|
2036
|
-
ProxyConfigProvider: () => ProxyConfigProvider,
|
2037
|
-
TooltipIconButton: () => TooltipIconButton,
|
2038
|
-
generateId: () => generateId,
|
2039
|
-
useSmooth: () => useSmooth
|
2040
|
-
});
|
2041
|
-
|
2042
|
-
// src/utils/idUtils.tsx
|
2043
|
-
import { customAlphabet } from "nanoid/non-secure";
|
2044
|
-
var generateId = customAlphabet(
|
2045
|
-
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
|
2046
|
-
7
|
2047
|
-
);
|
2048
|
-
var optimisticPrefix = "__optimistic__";
|
2049
|
-
var generateOptimisticId = () => `${optimisticPrefix}${generateId()}`;
|
1817
|
+
import { useInsertionEffect as useInsertionEffect3, useState as useState7 } from "react";
|
2050
1818
|
|
2051
|
-
// src/runtimes/edge/converters/
|
2052
|
-
var
|
2053
|
-
|
2054
|
-
|
2055
|
-
|
2056
|
-
|
2057
|
-
|
2058
|
-
|
2059
|
-
|
2060
|
-
|
2061
|
-
|
2062
|
-
|
2063
|
-
|
2064
|
-
|
2065
|
-
|
2066
|
-
|
2067
|
-
|
2068
|
-
|
2069
|
-
|
1819
|
+
// src/runtimes/edge/converters/fromLanguageModelMessages.ts
|
1820
|
+
var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
|
1821
|
+
const messages = [];
|
1822
|
+
for (const lmMessage of lm) {
|
1823
|
+
const role = lmMessage.role;
|
1824
|
+
switch (role) {
|
1825
|
+
case "system": {
|
1826
|
+
messages.push({
|
1827
|
+
role: "system",
|
1828
|
+
content: [
|
1829
|
+
{
|
1830
|
+
type: "text",
|
1831
|
+
text: lmMessage.content
|
1832
|
+
}
|
1833
|
+
]
|
1834
|
+
});
|
1835
|
+
break;
|
1836
|
+
}
|
1837
|
+
case "user": {
|
1838
|
+
messages.push({
|
1839
|
+
role: "user",
|
1840
|
+
content: lmMessage.content.map((part) => {
|
1841
|
+
const type = part.type;
|
1842
|
+
switch (type) {
|
1843
|
+
case "text": {
|
1844
|
+
return {
|
1845
|
+
type: "text",
|
1846
|
+
text: part.text
|
1847
|
+
};
|
1848
|
+
}
|
1849
|
+
case "image": {
|
1850
|
+
if (part.image instanceof URL) {
|
1851
|
+
return {
|
1852
|
+
type: "image",
|
1853
|
+
image: part.image.href
|
1854
|
+
};
|
1855
|
+
}
|
1856
|
+
throw new Error("Only images with URL data are supported");
|
1857
|
+
}
|
1858
|
+
default: {
|
1859
|
+
const unhandledType = type;
|
1860
|
+
throw new Error(`Unknown content part type: ${unhandledType}`);
|
1861
|
+
}
|
1862
|
+
}
|
1863
|
+
})
|
1864
|
+
});
|
1865
|
+
break;
|
1866
|
+
}
|
1867
|
+
case "assistant": {
|
1868
|
+
const newContent = lmMessage.content.map((part) => {
|
2070
1869
|
if (part.type === "tool-call") {
|
2071
1870
|
return {
|
2072
|
-
|
2073
|
-
|
1871
|
+
type: "tool-call",
|
1872
|
+
toolCallId: part.toolCallId,
|
1873
|
+
toolName: part.toolName,
|
1874
|
+
argsText: JSON.stringify(part.args),
|
1875
|
+
args: part.args
|
2074
1876
|
};
|
2075
1877
|
}
|
2076
1878
|
return part;
|
2077
|
-
})
|
2078
|
-
|
2079
|
-
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2083
|
-
|
2084
|
-
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
|
2091
|
-
|
2092
|
-
|
2093
|
-
|
2094
|
-
throw new Error(`Unknown message role: ${unsupportedRole}`);
|
2095
|
-
}
|
2096
|
-
}
|
2097
|
-
};
|
2098
|
-
|
2099
|
-
// src/runtimes/utils/MessageRepository.tsx
|
2100
|
-
var findHead = (message) => {
|
2101
|
-
if (message.next) return findHead(message.next);
|
2102
|
-
return message;
|
2103
|
-
};
|
2104
|
-
var MessageRepository = class {
|
2105
|
-
messages = /* @__PURE__ */ new Map();
|
2106
|
-
// message_id -> item
|
2107
|
-
head = null;
|
2108
|
-
root = {
|
2109
|
-
children: []
|
2110
|
-
};
|
2111
|
-
performOp(newParent, child, operation) {
|
2112
|
-
const parentOrRoot = child.prev ?? this.root;
|
2113
|
-
const newParentOrRoot = newParent ?? this.root;
|
2114
|
-
if (operation === "relink" && parentOrRoot === newParentOrRoot) return;
|
2115
|
-
if (operation !== "link") {
|
2116
|
-
parentOrRoot.children = parentOrRoot.children.filter(
|
2117
|
-
(m) => m !== child.current.id
|
2118
|
-
);
|
2119
|
-
if (child.prev?.next === child) {
|
2120
|
-
const fallbackId = child.prev.children.at(-1);
|
2121
|
-
const fallback = fallbackId ? this.messages.get(fallbackId) : null;
|
2122
|
-
if (fallback === void 0) {
|
1879
|
+
});
|
1880
|
+
if (mergeRoundtrips) {
|
1881
|
+
const previousMessage = messages[messages.length - 1];
|
1882
|
+
if (previousMessage?.role === "assistant") {
|
1883
|
+
previousMessage.content.push(...newContent);
|
1884
|
+
break;
|
1885
|
+
}
|
1886
|
+
}
|
1887
|
+
messages.push({
|
1888
|
+
role: "assistant",
|
1889
|
+
content: newContent
|
1890
|
+
});
|
1891
|
+
break;
|
1892
|
+
}
|
1893
|
+
case "tool": {
|
1894
|
+
const previousMessage = messages[messages.length - 1];
|
1895
|
+
if (previousMessage?.role !== "assistant")
|
2123
1896
|
throw new Error(
|
2124
|
-
"
|
1897
|
+
"A tool message must be preceded by an assistant message."
|
1898
|
+
);
|
1899
|
+
for (const tool of lmMessage.content) {
|
1900
|
+
const toolCall = previousMessage.content.find(
|
1901
|
+
(c) => c.type === "tool-call" && c.toolCallId === tool.toolCallId
|
2125
1902
|
);
|
1903
|
+
if (!toolCall)
|
1904
|
+
throw new Error("Received tool result for an unknown tool call.");
|
1905
|
+
if (toolCall.toolName !== tool.toolName)
|
1906
|
+
throw new Error("Tool call name mismatch.");
|
1907
|
+
toolCall.result = tool.result;
|
1908
|
+
if (tool.isError) {
|
1909
|
+
toolCall.isError = true;
|
1910
|
+
}
|
2126
1911
|
}
|
2127
|
-
|
1912
|
+
break;
|
2128
1913
|
}
|
2129
|
-
|
2130
|
-
|
2131
|
-
|
2132
|
-
...newParentOrRoot.children,
|
2133
|
-
child.current.id
|
2134
|
-
];
|
2135
|
-
if (newParent && (findHead(child) === this.head || newParent.next === null)) {
|
2136
|
-
newParent.next = child;
|
2137
|
-
}
|
2138
|
-
child.prev = newParent;
|
2139
|
-
}
|
2140
|
-
}
|
2141
|
-
getMessages() {
|
2142
|
-
const messages = new Array(this.head?.level ?? 0);
|
2143
|
-
for (let current = this.head; current; current = current.prev) {
|
2144
|
-
messages[current.level] = current.current;
|
2145
|
-
}
|
2146
|
-
return messages;
|
2147
|
-
}
|
2148
|
-
addOrUpdateMessage(parentId, message) {
|
2149
|
-
const existingItem = this.messages.get(message.id);
|
2150
|
-
const prev = parentId ? this.messages.get(parentId) : null;
|
2151
|
-
if (prev === void 0)
|
2152
|
-
throw new Error(
|
2153
|
-
"MessageRepository(addOrUpdateMessage): Parent message not found. This is likely an internal bug in assistant-ui."
|
2154
|
-
);
|
2155
|
-
if (existingItem) {
|
2156
|
-
existingItem.current = message;
|
2157
|
-
this.performOp(prev, existingItem, "relink");
|
2158
|
-
return;
|
2159
|
-
}
|
2160
|
-
const newItem = {
|
2161
|
-
prev,
|
2162
|
-
current: message,
|
2163
|
-
next: null,
|
2164
|
-
children: [],
|
2165
|
-
level: prev ? prev.level + 1 : 0
|
2166
|
-
};
|
2167
|
-
this.messages.set(message.id, newItem);
|
2168
|
-
this.performOp(prev, newItem, "link");
|
2169
|
-
if (this.head === prev) {
|
2170
|
-
this.head = newItem;
|
2171
|
-
}
|
2172
|
-
}
|
2173
|
-
getMessage(messageId) {
|
2174
|
-
const message = this.messages.get(messageId);
|
2175
|
-
if (!message)
|
2176
|
-
throw new Error(
|
2177
|
-
"MessageRepository(updateMessage): Message not found. This is likely an internal bug in assistant-ui."
|
2178
|
-
);
|
2179
|
-
return {
|
2180
|
-
parentId: message.prev?.current.id ?? null,
|
2181
|
-
message: message.current
|
2182
|
-
};
|
2183
|
-
}
|
2184
|
-
appendOptimisticMessage(parentId, message) {
|
2185
|
-
let optimisticId;
|
2186
|
-
do {
|
2187
|
-
optimisticId = generateOptimisticId();
|
2188
|
-
} while (this.messages.has(optimisticId));
|
2189
|
-
this.addOrUpdateMessage(
|
2190
|
-
parentId,
|
2191
|
-
fromCoreMessage(message, {
|
2192
|
-
id: optimisticId,
|
2193
|
-
status: { type: "running" }
|
2194
|
-
})
|
2195
|
-
);
|
2196
|
-
return optimisticId;
|
2197
|
-
}
|
2198
|
-
deleteMessage(messageId, replacementId) {
|
2199
|
-
const message = this.messages.get(messageId);
|
2200
|
-
if (!message)
|
2201
|
-
throw new Error(
|
2202
|
-
"MessageRepository(deleteMessage): Optimistic message not found. This is likely an internal bug in assistant-ui."
|
2203
|
-
);
|
2204
|
-
const replacement = replacementId === void 0 ? message.prev : replacementId === null ? null : this.messages.get(replacementId);
|
2205
|
-
if (replacement === void 0)
|
2206
|
-
throw new Error(
|
2207
|
-
"MessageRepository(deleteMessage): Replacement not found. This is likely an internal bug in assistant-ui."
|
2208
|
-
);
|
2209
|
-
for (const child of message.children) {
|
2210
|
-
const childMessage = this.messages.get(child);
|
2211
|
-
if (!childMessage)
|
2212
|
-
throw new Error(
|
2213
|
-
"MessageRepository(deleteMessage): Child message not found. This is likely an internal bug in assistant-ui."
|
2214
|
-
);
|
2215
|
-
this.performOp(replacement, childMessage, "relink");
|
2216
|
-
}
|
2217
|
-
this.performOp(null, message, "cut");
|
2218
|
-
this.messages.delete(messageId);
|
2219
|
-
if (this.head === message) {
|
2220
|
-
this.head = replacement ? findHead(replacement) : null;
|
2221
|
-
}
|
2222
|
-
}
|
2223
|
-
getBranches(messageId) {
|
2224
|
-
const message = this.messages.get(messageId);
|
2225
|
-
if (!message)
|
2226
|
-
throw new Error(
|
2227
|
-
"MessageRepository(getBranches): Message not found. This is likely an internal bug in assistant-ui."
|
2228
|
-
);
|
2229
|
-
const { children } = message.prev ?? this.root;
|
2230
|
-
return children;
|
2231
|
-
}
|
2232
|
-
switchToBranch(messageId) {
|
2233
|
-
const message = this.messages.get(messageId);
|
2234
|
-
if (!message)
|
2235
|
-
throw new Error(
|
2236
|
-
"MessageRepository(switchToBranch): Branch not found. This is likely an internal bug in assistant-ui."
|
2237
|
-
);
|
2238
|
-
if (message.prev) {
|
2239
|
-
message.prev.next = message;
|
2240
|
-
}
|
2241
|
-
this.head = findHead(message);
|
2242
|
-
}
|
2243
|
-
resetHead(messageId) {
|
2244
|
-
if (messageId === null) {
|
2245
|
-
this.head = null;
|
2246
|
-
return;
|
2247
|
-
}
|
2248
|
-
const message = this.messages.get(messageId);
|
2249
|
-
if (!message)
|
2250
|
-
throw new Error(
|
2251
|
-
"MessageRepository(resetHead): Branch not found. This is likely an internal bug in assistant-ui."
|
2252
|
-
);
|
2253
|
-
this.head = message;
|
2254
|
-
for (let current = message; current; current = current.prev) {
|
2255
|
-
if (current.prev) {
|
2256
|
-
current.prev.next = current;
|
2257
|
-
}
|
2258
|
-
}
|
2259
|
-
}
|
2260
|
-
};
|
2261
|
-
|
2262
|
-
// src/ui/base/tooltip-icon-button.tsx
|
2263
|
-
import { forwardRef as forwardRef17 } from "react";
|
2264
|
-
|
2265
|
-
// src/ui/base/tooltip.tsx
|
2266
|
-
import * as TooltipPrimitive from "@radix-ui/react-tooltip";
|
2267
|
-
|
2268
|
-
// src/ui/utils/withDefaults.tsx
|
2269
|
-
import {
|
2270
|
-
forwardRef as forwardRef15
|
2271
|
-
} from "react";
|
2272
|
-
import classNames from "classnames";
|
2273
|
-
import { jsx as jsx25 } from "react/jsx-runtime";
|
2274
|
-
var withDefaultProps = ({
|
2275
|
-
className,
|
2276
|
-
...defaultProps
|
2277
|
-
}) => ({ className: classNameProp, ...props }) => {
|
2278
|
-
return {
|
2279
|
-
className: classNames(className, classNameProp),
|
2280
|
-
...defaultProps,
|
2281
|
-
...props
|
2282
|
-
};
|
2283
|
-
};
|
2284
|
-
var withDefaults = (Component, defaultProps) => {
|
2285
|
-
const getProps = withDefaultProps(defaultProps);
|
2286
|
-
const WithDefaults = forwardRef15(
|
2287
|
-
(props, ref) => {
|
2288
|
-
const ComponentAsAny = Component;
|
2289
|
-
return /* @__PURE__ */ jsx25(ComponentAsAny, { ...getProps(props), ref });
|
2290
|
-
}
|
2291
|
-
);
|
2292
|
-
WithDefaults.displayName = "withDefaults(" + (typeof Component === "string" ? Component : Component.displayName) + ")";
|
2293
|
-
return WithDefaults;
|
2294
|
-
};
|
2295
|
-
|
2296
|
-
// src/ui/base/tooltip.tsx
|
2297
|
-
import { jsx as jsx26 } from "react/jsx-runtime";
|
2298
|
-
var Tooltip = (props) => {
|
2299
|
-
return /* @__PURE__ */ jsx26(TooltipPrimitive.Provider, { children: /* @__PURE__ */ jsx26(TooltipPrimitive.Root, { ...props }) });
|
2300
|
-
};
|
2301
|
-
Tooltip.displayName = "Tooltip";
|
2302
|
-
var TooltipTrigger = TooltipPrimitive.Trigger;
|
2303
|
-
var TooltipContent = withDefaults(TooltipPrimitive.Content, {
|
2304
|
-
sideOffset: 4,
|
2305
|
-
className: "aui-tooltip-content"
|
2306
|
-
});
|
2307
|
-
TooltipContent.displayName = "TooltipContent";
|
2308
|
-
|
2309
|
-
// src/ui/base/button.tsx
|
2310
|
-
import { cva } from "class-variance-authority";
|
2311
|
-
import { Primitive as Primitive11 } from "@radix-ui/react-primitive";
|
2312
|
-
import { forwardRef as forwardRef16 } from "react";
|
2313
|
-
import { jsx as jsx27 } from "react/jsx-runtime";
|
2314
|
-
var buttonVariants = cva("aui-button", {
|
2315
|
-
variants: {
|
2316
|
-
variant: {
|
2317
|
-
default: "aui-button-primary",
|
2318
|
-
outline: "aui-button-outline",
|
2319
|
-
ghost: "aui-button-ghost"
|
2320
|
-
},
|
2321
|
-
size: {
|
2322
|
-
default: "aui-button-medium",
|
2323
|
-
icon: "aui-button-icon"
|
2324
|
-
}
|
2325
|
-
},
|
2326
|
-
defaultVariants: {
|
2327
|
-
variant: "default",
|
2328
|
-
size: "default"
|
2329
|
-
}
|
2330
|
-
});
|
2331
|
-
var Button = forwardRef16(
|
2332
|
-
({ className, variant, size, ...props }, ref) => {
|
2333
|
-
return /* @__PURE__ */ jsx27(
|
2334
|
-
Primitive11.button,
|
2335
|
-
{
|
2336
|
-
className: buttonVariants({ variant, size, className }),
|
2337
|
-
...props,
|
2338
|
-
ref
|
2339
|
-
}
|
2340
|
-
);
|
2341
|
-
}
|
2342
|
-
);
|
2343
|
-
Button.displayName = "Button";
|
2344
|
-
|
2345
|
-
// src/ui/base/tooltip-icon-button.tsx
|
2346
|
-
import { jsx as jsx28, jsxs as jsxs4 } from "react/jsx-runtime";
|
2347
|
-
var TooltipIconButton = forwardRef17(({ children, tooltip, side = "bottom", ...rest }, ref) => {
|
2348
|
-
return /* @__PURE__ */ jsxs4(Tooltip, { children: [
|
2349
|
-
/* @__PURE__ */ jsx28(TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxs4(Button, { variant: "ghost", size: "icon", ...rest, ref, children: [
|
2350
|
-
children,
|
2351
|
-
/* @__PURE__ */ jsx28("span", { className: "aui-sr-only", children: tooltip })
|
2352
|
-
] }) }),
|
2353
|
-
/* @__PURE__ */ jsx28(TooltipContent, { side, children: tooltip })
|
2354
|
-
] });
|
2355
|
-
});
|
2356
|
-
TooltipIconButton.displayName = "TooltipIconButton";
|
2357
|
-
|
2358
|
-
// src/runtimes/edge/converters/toLanguageModelMessages.ts
|
2359
|
-
var assistantMessageSplitter = () => {
|
2360
|
-
const stash = [];
|
2361
|
-
let assistantMessage = {
|
2362
|
-
role: "assistant",
|
2363
|
-
content: []
|
2364
|
-
};
|
2365
|
-
let toolMessage = {
|
2366
|
-
role: "tool",
|
2367
|
-
content: []
|
2368
|
-
};
|
2369
|
-
return {
|
2370
|
-
addTextContentPart: (part) => {
|
2371
|
-
if (toolMessage.content.length > 0) {
|
2372
|
-
stash.push(assistantMessage);
|
2373
|
-
stash.push(toolMessage);
|
2374
|
-
assistantMessage = {
|
2375
|
-
role: "assistant",
|
2376
|
-
content: []
|
2377
|
-
};
|
2378
|
-
toolMessage = {
|
2379
|
-
role: "tool",
|
2380
|
-
content: []
|
2381
|
-
};
|
2382
|
-
}
|
2383
|
-
assistantMessage.content.push(part);
|
2384
|
-
},
|
2385
|
-
addToolCallPart: (part) => {
|
2386
|
-
assistantMessage.content.push({
|
2387
|
-
type: "tool-call",
|
2388
|
-
toolCallId: part.toolCallId,
|
2389
|
-
toolName: part.toolName,
|
2390
|
-
args: part.args
|
2391
|
-
});
|
2392
|
-
if (part.result) {
|
2393
|
-
toolMessage.content.push({
|
2394
|
-
type: "tool-result",
|
2395
|
-
toolCallId: part.toolCallId,
|
2396
|
-
toolName: part.toolName,
|
2397
|
-
result: part.result
|
2398
|
-
// isError
|
2399
|
-
});
|
2400
|
-
}
|
2401
|
-
},
|
2402
|
-
getMessages: () => {
|
2403
|
-
if (toolMessage.content.length > 0) {
|
2404
|
-
return [...stash, assistantMessage, toolMessage];
|
2405
|
-
}
|
2406
|
-
return [...stash, assistantMessage];
|
2407
|
-
}
|
2408
|
-
};
|
2409
|
-
};
|
2410
|
-
function toLanguageModelMessages(message) {
|
2411
|
-
return message.flatMap((message2) => {
|
2412
|
-
const role = message2.role;
|
2413
|
-
switch (role) {
|
2414
|
-
case "system": {
|
2415
|
-
return [{ role: "system", content: message2.content[0].text }];
|
2416
|
-
}
|
2417
|
-
case "user": {
|
2418
|
-
const msg = {
|
2419
|
-
role: "user",
|
2420
|
-
content: message2.content.map(
|
2421
|
-
(part) => {
|
2422
|
-
const type = part.type;
|
2423
|
-
switch (type) {
|
2424
|
-
case "text": {
|
2425
|
-
return part;
|
2426
|
-
}
|
2427
|
-
case "image": {
|
2428
|
-
return {
|
2429
|
-
type: "image",
|
2430
|
-
image: new URL(part.image)
|
2431
|
-
};
|
2432
|
-
}
|
2433
|
-
default: {
|
2434
|
-
const unhandledType = type;
|
2435
|
-
throw new Error(
|
2436
|
-
`Unspported content part type: ${unhandledType}`
|
2437
|
-
);
|
2438
|
-
}
|
2439
|
-
}
|
2440
|
-
}
|
2441
|
-
)
|
2442
|
-
};
|
2443
|
-
return [msg];
|
2444
|
-
}
|
2445
|
-
case "assistant": {
|
2446
|
-
const splitter = assistantMessageSplitter();
|
2447
|
-
for (const part of message2.content) {
|
2448
|
-
const type = part.type;
|
2449
|
-
switch (type) {
|
2450
|
-
case "text": {
|
2451
|
-
splitter.addTextContentPart(part);
|
2452
|
-
break;
|
2453
|
-
}
|
2454
|
-
case "tool-call": {
|
2455
|
-
splitter.addToolCallPart(part);
|
2456
|
-
break;
|
2457
|
-
}
|
2458
|
-
default: {
|
2459
|
-
const unhandledType = type;
|
2460
|
-
throw new Error(`Unhandled content part type: ${unhandledType}`);
|
2461
|
-
}
|
2462
|
-
}
|
2463
|
-
}
|
2464
|
-
return splitter.getMessages();
|
2465
|
-
}
|
2466
|
-
default: {
|
2467
|
-
const unhandledRole = role;
|
2468
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
2469
|
-
}
|
2470
|
-
}
|
2471
|
-
});
|
2472
|
-
}
|
2473
|
-
|
2474
|
-
// src/runtimes/edge/converters/fromLanguageModelMessages.ts
|
2475
|
-
var fromLanguageModelMessages = (lm, { mergeRoundtrips }) => {
|
2476
|
-
const messages = [];
|
2477
|
-
for (const lmMessage of lm) {
|
2478
|
-
const role = lmMessage.role;
|
2479
|
-
switch (role) {
|
2480
|
-
case "system": {
|
2481
|
-
messages.push({
|
2482
|
-
role: "system",
|
2483
|
-
content: [
|
2484
|
-
{
|
2485
|
-
type: "text",
|
2486
|
-
text: lmMessage.content
|
2487
|
-
}
|
2488
|
-
]
|
2489
|
-
});
|
2490
|
-
break;
|
2491
|
-
}
|
2492
|
-
case "user": {
|
2493
|
-
messages.push({
|
2494
|
-
role: "user",
|
2495
|
-
content: lmMessage.content.map((part) => {
|
2496
|
-
const type = part.type;
|
2497
|
-
switch (type) {
|
2498
|
-
case "text": {
|
2499
|
-
return {
|
2500
|
-
type: "text",
|
2501
|
-
text: part.text
|
2502
|
-
};
|
2503
|
-
}
|
2504
|
-
case "image": {
|
2505
|
-
if (part.image instanceof URL) {
|
2506
|
-
return {
|
2507
|
-
type: "image",
|
2508
|
-
image: part.image.href
|
2509
|
-
};
|
2510
|
-
}
|
2511
|
-
throw new Error("Only images with URL data are supported");
|
2512
|
-
}
|
2513
|
-
default: {
|
2514
|
-
const unhandledType = type;
|
2515
|
-
throw new Error(`Unknown content part type: ${unhandledType}`);
|
2516
|
-
}
|
2517
|
-
}
|
2518
|
-
})
|
2519
|
-
});
|
2520
|
-
break;
|
2521
|
-
}
|
2522
|
-
case "assistant": {
|
2523
|
-
const newContent = lmMessage.content.map((part) => {
|
2524
|
-
if (part.type === "tool-call") {
|
2525
|
-
return {
|
2526
|
-
type: "tool-call",
|
2527
|
-
toolCallId: part.toolCallId,
|
2528
|
-
toolName: part.toolName,
|
2529
|
-
argsText: JSON.stringify(part.args),
|
2530
|
-
args: part.args
|
2531
|
-
};
|
2532
|
-
}
|
2533
|
-
return part;
|
2534
|
-
});
|
2535
|
-
if (mergeRoundtrips) {
|
2536
|
-
const previousMessage = messages[messages.length - 1];
|
2537
|
-
if (previousMessage?.role === "assistant") {
|
2538
|
-
previousMessage.content.push(...newContent);
|
2539
|
-
break;
|
2540
|
-
}
|
2541
|
-
}
|
2542
|
-
messages.push({
|
2543
|
-
role: "assistant",
|
2544
|
-
content: newContent
|
2545
|
-
});
|
2546
|
-
break;
|
2547
|
-
}
|
2548
|
-
case "tool": {
|
2549
|
-
const previousMessage = messages[messages.length - 1];
|
2550
|
-
if (previousMessage?.role !== "assistant")
|
2551
|
-
throw new Error(
|
2552
|
-
"A tool message must be preceded by an assistant message."
|
2553
|
-
);
|
2554
|
-
for (const tool of lmMessage.content) {
|
2555
|
-
const toolCall = previousMessage.content.find(
|
2556
|
-
(c) => c.type === "tool-call" && c.toolCallId === tool.toolCallId
|
2557
|
-
);
|
2558
|
-
if (!toolCall)
|
2559
|
-
throw new Error("Received tool result for an unknown tool call.");
|
2560
|
-
if (toolCall.toolName !== tool.toolName)
|
2561
|
-
throw new Error("Tool call name mismatch.");
|
2562
|
-
toolCall.result = tool.result;
|
2563
|
-
if (tool.isError) {
|
2564
|
-
toolCall.isError = true;
|
2565
|
-
}
|
2566
|
-
}
|
2567
|
-
break;
|
2568
|
-
}
|
2569
|
-
default: {
|
2570
|
-
const unhandledRole = role;
|
2571
|
-
throw new Error(`Unknown message role: ${unhandledRole}`);
|
1914
|
+
default: {
|
1915
|
+
const unhandledRole = role;
|
1916
|
+
throw new Error(`Unknown message role: ${unhandledRole}`);
|
2572
1917
|
}
|
2573
1918
|
}
|
2574
1919
|
}
|
2575
1920
|
return messages;
|
2576
1921
|
};
|
2577
1922
|
|
2578
|
-
// src/runtimes/edge/converters/toCoreMessages.ts
|
2579
|
-
var toCoreMessages = (message) => {
|
2580
|
-
return message.map(toCoreMessage);
|
2581
|
-
};
|
2582
|
-
var toCoreMessage = (message) => {
|
2583
|
-
const role = message.role;
|
2584
|
-
switch (role) {
|
2585
|
-
case "assistant":
|
2586
|
-
return {
|
2587
|
-
role,
|
2588
|
-
content: message.content.map((part) => {
|
2589
|
-
if (part.type === "ui") throw new Error("UI parts are not supported");
|
2590
|
-
if (part.type === "tool-call") {
|
2591
|
-
const { argsText, ...rest } = part;
|
2592
|
-
return rest;
|
2593
|
-
}
|
2594
|
-
return part;
|
2595
|
-
})
|
2596
|
-
};
|
2597
|
-
case "user":
|
2598
|
-
return {
|
2599
|
-
role,
|
2600
|
-
content: message.content.map((part) => {
|
2601
|
-
if (part.type === "ui") throw new Error("UI parts are not supported");
|
2602
|
-
return part;
|
2603
|
-
})
|
2604
|
-
};
|
2605
|
-
case "system":
|
2606
|
-
return {
|
2607
|
-
role,
|
2608
|
-
content: message.content
|
2609
|
-
};
|
2610
|
-
default: {
|
2611
|
-
const unsupportedRole = role;
|
2612
|
-
throw new Error(`Unknown message role: ${unsupportedRole}`);
|
2613
|
-
}
|
2614
|
-
}
|
2615
|
-
};
|
2616
|
-
|
2617
1923
|
// src/runtimes/edge/converters/fromLanguageModelTools.ts
|
2618
1924
|
var fromLanguageModelTools = (tools) => {
|
2619
1925
|
return Object.fromEntries(
|
@@ -2627,20 +1933,8 @@ var fromLanguageModelTools = (tools) => {
|
|
2627
1933
|
);
|
2628
1934
|
};
|
2629
1935
|
|
2630
|
-
// src/runtimes/edge/converters/toLanguageModelTools.ts
|
2631
|
-
import { z as z2 } from "zod";
|
2632
|
-
import zodToJsonSchema from "zod-to-json-schema";
|
2633
|
-
var toLanguageModelTools = (tools) => {
|
2634
|
-
return Object.entries(tools).map(([name, tool]) => ({
|
2635
|
-
type: "function",
|
2636
|
-
name,
|
2637
|
-
...tool.description ? { description: tool.description } : void 0,
|
2638
|
-
parameters: tool.parameters instanceof z2.ZodType ? zodToJsonSchema(tool.parameters) : tool.parameters
|
2639
|
-
}));
|
2640
|
-
};
|
2641
|
-
|
2642
1936
|
// src/runtimes/edge/useEdgeRuntime.ts
|
2643
|
-
import { useState as
|
1937
|
+
import { useState as useState6 } from "react";
|
2644
1938
|
|
2645
1939
|
// src/runtimes/edge/streams/assistantDecoderStream.ts
|
2646
1940
|
function assistantDecoderStream() {
|
@@ -2746,589 +2040,6 @@ function chunkByLineStream() {
|
|
2746
2040
|
});
|
2747
2041
|
}
|
2748
2042
|
|
2749
|
-
// src/runtimes/edge/partial-json/parse-partial-json.ts
|
2750
|
-
import sjson from "secure-json-parse";
|
2751
|
-
|
2752
|
-
// src/runtimes/edge/partial-json/fix-json.ts
|
2753
|
-
function fixJson(input) {
|
2754
|
-
const stack = ["ROOT"];
|
2755
|
-
let lastValidIndex = -1;
|
2756
|
-
let literalStart = null;
|
2757
|
-
function processValueStart(char, i, swapState) {
|
2758
|
-
{
|
2759
|
-
switch (char) {
|
2760
|
-
case '"': {
|
2761
|
-
lastValidIndex = i;
|
2762
|
-
stack.pop();
|
2763
|
-
stack.push(swapState);
|
2764
|
-
stack.push("INSIDE_STRING");
|
2765
|
-
break;
|
2766
|
-
}
|
2767
|
-
case "f":
|
2768
|
-
case "t":
|
2769
|
-
case "n": {
|
2770
|
-
lastValidIndex = i;
|
2771
|
-
literalStart = i;
|
2772
|
-
stack.pop();
|
2773
|
-
stack.push(swapState);
|
2774
|
-
stack.push("INSIDE_LITERAL");
|
2775
|
-
break;
|
2776
|
-
}
|
2777
|
-
case "-": {
|
2778
|
-
stack.pop();
|
2779
|
-
stack.push(swapState);
|
2780
|
-
stack.push("INSIDE_NUMBER");
|
2781
|
-
break;
|
2782
|
-
}
|
2783
|
-
case "0":
|
2784
|
-
case "1":
|
2785
|
-
case "2":
|
2786
|
-
case "3":
|
2787
|
-
case "4":
|
2788
|
-
case "5":
|
2789
|
-
case "6":
|
2790
|
-
case "7":
|
2791
|
-
case "8":
|
2792
|
-
case "9": {
|
2793
|
-
lastValidIndex = i;
|
2794
|
-
stack.pop();
|
2795
|
-
stack.push(swapState);
|
2796
|
-
stack.push("INSIDE_NUMBER");
|
2797
|
-
break;
|
2798
|
-
}
|
2799
|
-
case "{": {
|
2800
|
-
lastValidIndex = i;
|
2801
|
-
stack.pop();
|
2802
|
-
stack.push(swapState);
|
2803
|
-
stack.push("INSIDE_OBJECT_START");
|
2804
|
-
break;
|
2805
|
-
}
|
2806
|
-
case "[": {
|
2807
|
-
lastValidIndex = i;
|
2808
|
-
stack.pop();
|
2809
|
-
stack.push(swapState);
|
2810
|
-
stack.push("INSIDE_ARRAY_START");
|
2811
|
-
break;
|
2812
|
-
}
|
2813
|
-
}
|
2814
|
-
}
|
2815
|
-
}
|
2816
|
-
function processAfterObjectValue(char, i) {
|
2817
|
-
switch (char) {
|
2818
|
-
case ",": {
|
2819
|
-
stack.pop();
|
2820
|
-
stack.push("INSIDE_OBJECT_AFTER_COMMA");
|
2821
|
-
break;
|
2822
|
-
}
|
2823
|
-
case "}": {
|
2824
|
-
lastValidIndex = i;
|
2825
|
-
stack.pop();
|
2826
|
-
break;
|
2827
|
-
}
|
2828
|
-
}
|
2829
|
-
}
|
2830
|
-
function processAfterArrayValue(char, i) {
|
2831
|
-
switch (char) {
|
2832
|
-
case ",": {
|
2833
|
-
stack.pop();
|
2834
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
2835
|
-
break;
|
2836
|
-
}
|
2837
|
-
case "]": {
|
2838
|
-
lastValidIndex = i;
|
2839
|
-
stack.pop();
|
2840
|
-
break;
|
2841
|
-
}
|
2842
|
-
}
|
2843
|
-
}
|
2844
|
-
for (let i = 0; i < input.length; i++) {
|
2845
|
-
const char = input[i];
|
2846
|
-
const currentState = stack[stack.length - 1];
|
2847
|
-
switch (currentState) {
|
2848
|
-
case "ROOT":
|
2849
|
-
processValueStart(char, i, "FINISH");
|
2850
|
-
break;
|
2851
|
-
case "INSIDE_OBJECT_START": {
|
2852
|
-
switch (char) {
|
2853
|
-
case '"': {
|
2854
|
-
stack.pop();
|
2855
|
-
stack.push("INSIDE_OBJECT_KEY");
|
2856
|
-
break;
|
2857
|
-
}
|
2858
|
-
case "}": {
|
2859
|
-
lastValidIndex = i;
|
2860
|
-
stack.pop();
|
2861
|
-
break;
|
2862
|
-
}
|
2863
|
-
}
|
2864
|
-
break;
|
2865
|
-
}
|
2866
|
-
case "INSIDE_OBJECT_AFTER_COMMA": {
|
2867
|
-
switch (char) {
|
2868
|
-
case '"': {
|
2869
|
-
stack.pop();
|
2870
|
-
stack.push("INSIDE_OBJECT_KEY");
|
2871
|
-
break;
|
2872
|
-
}
|
2873
|
-
}
|
2874
|
-
break;
|
2875
|
-
}
|
2876
|
-
case "INSIDE_OBJECT_KEY": {
|
2877
|
-
switch (char) {
|
2878
|
-
case '"': {
|
2879
|
-
stack.pop();
|
2880
|
-
stack.push("INSIDE_OBJECT_AFTER_KEY");
|
2881
|
-
break;
|
2882
|
-
}
|
2883
|
-
}
|
2884
|
-
break;
|
2885
|
-
}
|
2886
|
-
case "INSIDE_OBJECT_AFTER_KEY": {
|
2887
|
-
switch (char) {
|
2888
|
-
case ":": {
|
2889
|
-
stack.pop();
|
2890
|
-
stack.push("INSIDE_OBJECT_BEFORE_VALUE");
|
2891
|
-
break;
|
2892
|
-
}
|
2893
|
-
}
|
2894
|
-
break;
|
2895
|
-
}
|
2896
|
-
case "INSIDE_OBJECT_BEFORE_VALUE": {
|
2897
|
-
processValueStart(char, i, "INSIDE_OBJECT_AFTER_VALUE");
|
2898
|
-
break;
|
2899
|
-
}
|
2900
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
2901
|
-
processAfterObjectValue(char, i);
|
2902
|
-
break;
|
2903
|
-
}
|
2904
|
-
case "INSIDE_STRING": {
|
2905
|
-
switch (char) {
|
2906
|
-
case '"': {
|
2907
|
-
stack.pop();
|
2908
|
-
lastValidIndex = i;
|
2909
|
-
break;
|
2910
|
-
}
|
2911
|
-
case "\\": {
|
2912
|
-
stack.push("INSIDE_STRING_ESCAPE");
|
2913
|
-
break;
|
2914
|
-
}
|
2915
|
-
default: {
|
2916
|
-
lastValidIndex = i;
|
2917
|
-
}
|
2918
|
-
}
|
2919
|
-
break;
|
2920
|
-
}
|
2921
|
-
case "INSIDE_ARRAY_START": {
|
2922
|
-
switch (char) {
|
2923
|
-
case "]": {
|
2924
|
-
lastValidIndex = i;
|
2925
|
-
stack.pop();
|
2926
|
-
break;
|
2927
|
-
}
|
2928
|
-
default: {
|
2929
|
-
lastValidIndex = i;
|
2930
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
2931
|
-
break;
|
2932
|
-
}
|
2933
|
-
}
|
2934
|
-
break;
|
2935
|
-
}
|
2936
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
2937
|
-
switch (char) {
|
2938
|
-
case ",": {
|
2939
|
-
stack.pop();
|
2940
|
-
stack.push("INSIDE_ARRAY_AFTER_COMMA");
|
2941
|
-
break;
|
2942
|
-
}
|
2943
|
-
case "]": {
|
2944
|
-
lastValidIndex = i;
|
2945
|
-
stack.pop();
|
2946
|
-
break;
|
2947
|
-
}
|
2948
|
-
default: {
|
2949
|
-
lastValidIndex = i;
|
2950
|
-
break;
|
2951
|
-
}
|
2952
|
-
}
|
2953
|
-
break;
|
2954
|
-
}
|
2955
|
-
case "INSIDE_ARRAY_AFTER_COMMA": {
|
2956
|
-
processValueStart(char, i, "INSIDE_ARRAY_AFTER_VALUE");
|
2957
|
-
break;
|
2958
|
-
}
|
2959
|
-
case "INSIDE_STRING_ESCAPE": {
|
2960
|
-
stack.pop();
|
2961
|
-
lastValidIndex = i;
|
2962
|
-
break;
|
2963
|
-
}
|
2964
|
-
case "INSIDE_NUMBER": {
|
2965
|
-
switch (char) {
|
2966
|
-
case "0":
|
2967
|
-
case "1":
|
2968
|
-
case "2":
|
2969
|
-
case "3":
|
2970
|
-
case "4":
|
2971
|
-
case "5":
|
2972
|
-
case "6":
|
2973
|
-
case "7":
|
2974
|
-
case "8":
|
2975
|
-
case "9": {
|
2976
|
-
lastValidIndex = i;
|
2977
|
-
break;
|
2978
|
-
}
|
2979
|
-
case "e":
|
2980
|
-
case "E":
|
2981
|
-
case "-":
|
2982
|
-
case ".": {
|
2983
|
-
break;
|
2984
|
-
}
|
2985
|
-
case ",": {
|
2986
|
-
stack.pop();
|
2987
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
2988
|
-
processAfterArrayValue(char, i);
|
2989
|
-
}
|
2990
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
2991
|
-
processAfterObjectValue(char, i);
|
2992
|
-
}
|
2993
|
-
break;
|
2994
|
-
}
|
2995
|
-
case "}": {
|
2996
|
-
stack.pop();
|
2997
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
2998
|
-
processAfterObjectValue(char, i);
|
2999
|
-
}
|
3000
|
-
break;
|
3001
|
-
}
|
3002
|
-
case "]": {
|
3003
|
-
stack.pop();
|
3004
|
-
if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
3005
|
-
processAfterArrayValue(char, i);
|
3006
|
-
}
|
3007
|
-
break;
|
3008
|
-
}
|
3009
|
-
default: {
|
3010
|
-
stack.pop();
|
3011
|
-
break;
|
3012
|
-
}
|
3013
|
-
}
|
3014
|
-
break;
|
3015
|
-
}
|
3016
|
-
case "INSIDE_LITERAL": {
|
3017
|
-
const partialLiteral = input.substring(literalStart, i + 1);
|
3018
|
-
if (!"false".startsWith(partialLiteral) && !"true".startsWith(partialLiteral) && !"null".startsWith(partialLiteral)) {
|
3019
|
-
stack.pop();
|
3020
|
-
if (stack[stack.length - 1] === "INSIDE_OBJECT_AFTER_VALUE") {
|
3021
|
-
processAfterObjectValue(char, i);
|
3022
|
-
} else if (stack[stack.length - 1] === "INSIDE_ARRAY_AFTER_VALUE") {
|
3023
|
-
processAfterArrayValue(char, i);
|
3024
|
-
}
|
3025
|
-
} else {
|
3026
|
-
lastValidIndex = i;
|
3027
|
-
}
|
3028
|
-
break;
|
3029
|
-
}
|
3030
|
-
}
|
3031
|
-
}
|
3032
|
-
let result = input.slice(0, lastValidIndex + 1);
|
3033
|
-
for (let i = stack.length - 1; i >= 0; i--) {
|
3034
|
-
const state = stack[i];
|
3035
|
-
switch (state) {
|
3036
|
-
case "INSIDE_STRING": {
|
3037
|
-
result += '"';
|
3038
|
-
break;
|
3039
|
-
}
|
3040
|
-
case "INSIDE_OBJECT_KEY":
|
3041
|
-
case "INSIDE_OBJECT_AFTER_KEY":
|
3042
|
-
case "INSIDE_OBJECT_AFTER_COMMA":
|
3043
|
-
case "INSIDE_OBJECT_START":
|
3044
|
-
case "INSIDE_OBJECT_BEFORE_VALUE":
|
3045
|
-
case "INSIDE_OBJECT_AFTER_VALUE": {
|
3046
|
-
result += "}";
|
3047
|
-
break;
|
3048
|
-
}
|
3049
|
-
case "INSIDE_ARRAY_START":
|
3050
|
-
case "INSIDE_ARRAY_AFTER_COMMA":
|
3051
|
-
case "INSIDE_ARRAY_AFTER_VALUE": {
|
3052
|
-
result += "]";
|
3053
|
-
break;
|
3054
|
-
}
|
3055
|
-
case "INSIDE_LITERAL": {
|
3056
|
-
const partialLiteral = input.substring(literalStart, input.length);
|
3057
|
-
if ("true".startsWith(partialLiteral)) {
|
3058
|
-
result += "true".slice(partialLiteral.length);
|
3059
|
-
} else if ("false".startsWith(partialLiteral)) {
|
3060
|
-
result += "false".slice(partialLiteral.length);
|
3061
|
-
} else if ("null".startsWith(partialLiteral)) {
|
3062
|
-
result += "null".slice(partialLiteral.length);
|
3063
|
-
}
|
3064
|
-
}
|
3065
|
-
}
|
3066
|
-
}
|
3067
|
-
return result;
|
3068
|
-
}
|
3069
|
-
|
3070
|
-
// src/runtimes/edge/partial-json/parse-partial-json.ts
|
3071
|
-
var parsePartialJson = (json) => {
|
3072
|
-
try {
|
3073
|
-
return sjson.parse(json);
|
3074
|
-
} catch {
|
3075
|
-
try {
|
3076
|
-
return sjson.parse(fixJson(json));
|
3077
|
-
} catch {
|
3078
|
-
return void 0;
|
3079
|
-
}
|
3080
|
-
}
|
3081
|
-
};
|
3082
|
-
|
3083
|
-
// src/runtimes/edge/streams/runResultStream.ts
|
3084
|
-
function runResultStream() {
|
3085
|
-
let message = {
|
3086
|
-
content: [],
|
3087
|
-
status: { type: "running" }
|
3088
|
-
};
|
3089
|
-
const currentToolCall = { toolCallId: "", argsText: "" };
|
3090
|
-
return new TransformStream({
|
3091
|
-
transform(chunk, controller) {
|
3092
|
-
const chunkType = chunk.type;
|
3093
|
-
switch (chunkType) {
|
3094
|
-
case "text-delta": {
|
3095
|
-
message = appendOrUpdateText(message, chunk.textDelta);
|
3096
|
-
controller.enqueue(message);
|
3097
|
-
break;
|
3098
|
-
}
|
3099
|
-
case "tool-call-delta": {
|
3100
|
-
const { toolCallId, toolName, argsTextDelta } = chunk;
|
3101
|
-
if (currentToolCall.toolCallId !== toolCallId) {
|
3102
|
-
currentToolCall.toolCallId = toolCallId;
|
3103
|
-
currentToolCall.argsText = argsTextDelta;
|
3104
|
-
} else {
|
3105
|
-
currentToolCall.argsText += argsTextDelta;
|
3106
|
-
}
|
3107
|
-
message = appendOrUpdateToolCall(
|
3108
|
-
message,
|
3109
|
-
toolCallId,
|
3110
|
-
toolName,
|
3111
|
-
currentToolCall.argsText
|
3112
|
-
);
|
3113
|
-
controller.enqueue(message);
|
3114
|
-
break;
|
3115
|
-
}
|
3116
|
-
case "tool-call": {
|
3117
|
-
break;
|
3118
|
-
}
|
3119
|
-
case "tool-result": {
|
3120
|
-
message = appendOrUpdateToolResult(
|
3121
|
-
message,
|
3122
|
-
chunk.toolCallId,
|
3123
|
-
chunk.toolName,
|
3124
|
-
chunk.result
|
3125
|
-
);
|
3126
|
-
controller.enqueue(message);
|
3127
|
-
break;
|
3128
|
-
}
|
3129
|
-
case "finish": {
|
3130
|
-
message = appendOrUpdateFinish(message, chunk);
|
3131
|
-
controller.enqueue(message);
|
3132
|
-
break;
|
3133
|
-
}
|
3134
|
-
case "error": {
|
3135
|
-
if (chunk.error instanceof Error && chunk.error.name === "AbortError") {
|
3136
|
-
message = appendOrUpdateCancel(message);
|
3137
|
-
controller.enqueue(message);
|
3138
|
-
break;
|
3139
|
-
} else {
|
3140
|
-
throw chunk.error;
|
3141
|
-
}
|
3142
|
-
}
|
3143
|
-
default: {
|
3144
|
-
const unhandledType = chunkType;
|
3145
|
-
throw new Error(`Unhandled chunk type: ${unhandledType}`);
|
3146
|
-
}
|
3147
|
-
}
|
3148
|
-
}
|
3149
|
-
});
|
3150
|
-
}
|
3151
|
-
var appendOrUpdateText = (message, textDelta) => {
|
3152
|
-
let contentParts = message.content;
|
3153
|
-
let contentPart = message.content.at(-1);
|
3154
|
-
if (contentPart?.type !== "text") {
|
3155
|
-
contentPart = { type: "text", text: textDelta };
|
3156
|
-
} else {
|
3157
|
-
contentParts = contentParts.slice(0, -1);
|
3158
|
-
contentPart = { type: "text", text: contentPart.text + textDelta };
|
3159
|
-
}
|
3160
|
-
return {
|
3161
|
-
...message,
|
3162
|
-
content: contentParts.concat([contentPart])
|
3163
|
-
};
|
3164
|
-
};
|
3165
|
-
var appendOrUpdateToolCall = (message, toolCallId, toolName, argsText) => {
|
3166
|
-
let contentParts = message.content;
|
3167
|
-
let contentPart = message.content.at(-1);
|
3168
|
-
if (contentPart?.type !== "tool-call" || contentPart.toolCallId !== toolCallId) {
|
3169
|
-
contentPart = {
|
3170
|
-
type: "tool-call",
|
3171
|
-
toolCallId,
|
3172
|
-
toolName,
|
3173
|
-
argsText,
|
3174
|
-
args: parsePartialJson(argsText)
|
3175
|
-
};
|
3176
|
-
} else {
|
3177
|
-
contentParts = contentParts.slice(0, -1);
|
3178
|
-
contentPart = {
|
3179
|
-
...contentPart,
|
3180
|
-
argsText,
|
3181
|
-
args: parsePartialJson(argsText)
|
3182
|
-
};
|
3183
|
-
}
|
3184
|
-
return {
|
3185
|
-
...message,
|
3186
|
-
content: contentParts.concat([contentPart])
|
3187
|
-
};
|
3188
|
-
};
|
3189
|
-
var appendOrUpdateToolResult = (message, toolCallId, toolName, result) => {
|
3190
|
-
let found = false;
|
3191
|
-
const newContentParts = message.content.map((part) => {
|
3192
|
-
if (part.type !== "tool-call" || part.toolCallId !== toolCallId)
|
3193
|
-
return part;
|
3194
|
-
found = true;
|
3195
|
-
if (part.toolName !== toolName)
|
3196
|
-
throw new Error(
|
3197
|
-
`Tool call ${toolCallId} found with tool name ${part.toolName}, but expected ${toolName}`
|
3198
|
-
);
|
3199
|
-
return {
|
3200
|
-
...part,
|
3201
|
-
result
|
3202
|
-
};
|
3203
|
-
});
|
3204
|
-
if (!found)
|
3205
|
-
throw new Error(
|
3206
|
-
`Received tool result for unknown tool call "${toolName}" / "${toolCallId}". This is likely an internal bug in assistant-ui.`
|
3207
|
-
);
|
3208
|
-
return {
|
3209
|
-
...message,
|
3210
|
-
content: newContentParts
|
3211
|
-
};
|
3212
|
-
};
|
3213
|
-
var appendOrUpdateFinish = (message, chunk) => {
|
3214
|
-
const { type, ...rest } = chunk;
|
3215
|
-
return {
|
3216
|
-
...message,
|
3217
|
-
status: getStatus(chunk),
|
3218
|
-
roundtrips: [
|
3219
|
-
...message.roundtrips ?? [],
|
3220
|
-
{
|
3221
|
-
logprobs: rest.logprobs,
|
3222
|
-
usage: rest.usage
|
3223
|
-
}
|
3224
|
-
]
|
3225
|
-
};
|
3226
|
-
};
|
3227
|
-
var getStatus = (chunk) => {
|
3228
|
-
if (chunk.finishReason === "tool-calls") {
|
3229
|
-
return {
|
3230
|
-
type: "requires-action",
|
3231
|
-
reason: "tool-calls"
|
3232
|
-
};
|
3233
|
-
} else if (chunk.finishReason === "stop" || chunk.finishReason === "unknown") {
|
3234
|
-
return {
|
3235
|
-
type: "complete",
|
3236
|
-
reason: chunk.finishReason
|
3237
|
-
};
|
3238
|
-
} else {
|
3239
|
-
return {
|
3240
|
-
type: "incomplete",
|
3241
|
-
reason: chunk.finishReason
|
3242
|
-
};
|
3243
|
-
}
|
3244
|
-
};
|
3245
|
-
var appendOrUpdateCancel = (message) => {
|
3246
|
-
return {
|
3247
|
-
...message,
|
3248
|
-
status: {
|
3249
|
-
type: "incomplete",
|
3250
|
-
reason: "cancelled"
|
3251
|
-
}
|
3252
|
-
};
|
3253
|
-
};
|
3254
|
-
|
3255
|
-
// src/runtimes/edge/streams/toolResultStream.ts
|
3256
|
-
import { z as z3 } from "zod";
|
3257
|
-
import sjson2 from "secure-json-parse";
|
3258
|
-
function toolResultStream(tools) {
|
3259
|
-
const toolCallExecutions = /* @__PURE__ */ new Map();
|
3260
|
-
return new TransformStream({
|
3261
|
-
transform(chunk, controller) {
|
3262
|
-
controller.enqueue(chunk);
|
3263
|
-
const chunkType = chunk.type;
|
3264
|
-
switch (chunkType) {
|
3265
|
-
case "tool-call": {
|
3266
|
-
const { toolCallId, toolCallType, toolName, args: argsText } = chunk;
|
3267
|
-
const tool = tools?.[toolName];
|
3268
|
-
if (!tool || !tool.execute) return;
|
3269
|
-
const args = sjson2.parse(argsText);
|
3270
|
-
if (tool.parameters instanceof z3.ZodType) {
|
3271
|
-
const result = tool.parameters.safeParse(args);
|
3272
|
-
if (!result.success) {
|
3273
|
-
controller.enqueue({
|
3274
|
-
type: "tool-result",
|
3275
|
-
toolCallType,
|
3276
|
-
toolCallId,
|
3277
|
-
toolName,
|
3278
|
-
result: "Function parameter validation failed. " + JSON.stringify(result.error.issues),
|
3279
|
-
isError: true
|
3280
|
-
});
|
3281
|
-
return;
|
3282
|
-
} else {
|
3283
|
-
toolCallExecutions.set(
|
3284
|
-
toolCallId,
|
3285
|
-
(async () => {
|
3286
|
-
try {
|
3287
|
-
const result2 = await tool.execute(args);
|
3288
|
-
controller.enqueue({
|
3289
|
-
type: "tool-result",
|
3290
|
-
toolCallType,
|
3291
|
-
toolCallId,
|
3292
|
-
toolName,
|
3293
|
-
result: result2
|
3294
|
-
});
|
3295
|
-
} catch (error) {
|
3296
|
-
console.error("Error: ", error);
|
3297
|
-
controller.enqueue({
|
3298
|
-
type: "tool-result",
|
3299
|
-
toolCallType,
|
3300
|
-
toolCallId,
|
3301
|
-
toolName,
|
3302
|
-
result: "Error: " + error,
|
3303
|
-
isError: true
|
3304
|
-
});
|
3305
|
-
} finally {
|
3306
|
-
toolCallExecutions.delete(toolCallId);
|
3307
|
-
}
|
3308
|
-
})()
|
3309
|
-
);
|
3310
|
-
}
|
3311
|
-
}
|
3312
|
-
break;
|
3313
|
-
}
|
3314
|
-
case "text-delta":
|
3315
|
-
case "tool-call-delta":
|
3316
|
-
case "tool-result":
|
3317
|
-
case "finish":
|
3318
|
-
case "error":
|
3319
|
-
break;
|
3320
|
-
default: {
|
3321
|
-
const unhandledType = chunkType;
|
3322
|
-
throw new Error(`Unhandled chunk type: ${unhandledType}`);
|
3323
|
-
}
|
3324
|
-
}
|
3325
|
-
},
|
3326
|
-
async flush() {
|
3327
|
-
await Promise.all(toolCallExecutions.values());
|
3328
|
-
}
|
3329
|
-
});
|
3330
|
-
}
|
3331
|
-
|
3332
2043
|
// src/runtimes/edge/EdgeChatAdapter.ts
|
3333
2044
|
function asAsyncIterable(source) {
|
3334
2045
|
return {
|
@@ -3380,7 +2091,7 @@ var useEdgeRuntime = ({
|
|
3380
2091
|
initialMessages,
|
3381
2092
|
...options
|
3382
2093
|
}) => {
|
3383
|
-
const [adapter] =
|
2094
|
+
const [adapter] = useState6(() => new EdgeChatAdapter(options));
|
3384
2095
|
return useLocalRuntime(adapter, { initialMessages });
|
3385
2096
|
};
|
3386
2097
|
|
@@ -3594,7 +2305,7 @@ var LocalRuntime = class extends BaseAssistantRuntime {
|
|
3594
2305
|
|
3595
2306
|
// src/runtimes/local/useLocalRuntime.tsx
|
3596
2307
|
var useLocalRuntime = (adapter, options) => {
|
3597
|
-
const [runtime] =
|
2308
|
+
const [runtime] = useState7(() => new LocalRuntime(adapter, options));
|
3598
2309
|
useInsertionEffect3(() => {
|
3599
2310
|
runtime.adapter = adapter;
|
3600
2311
|
});
|
@@ -3611,7 +2322,7 @@ var getExternalStoreMessage = (message) => {
|
|
3611
2322
|
};
|
3612
2323
|
|
3613
2324
|
// src/runtimes/external-store/useExternalStoreSync.tsx
|
3614
|
-
import { useEffect as
|
2325
|
+
import { useEffect as useEffect10, useInsertionEffect as useInsertionEffect4, useMemo as useMemo2, useRef as useRef5 } from "react";
|
3615
2326
|
|
3616
2327
|
// src/runtimes/external-store/ThreadMessageConverter.ts
|
3617
2328
|
var ThreadMessageConverter = class {
|
@@ -3705,11 +2416,11 @@ var fromThreadMessageLike = (like, fallbackId, fallbackStatus) => {
|
|
3705
2416
|
|
3706
2417
|
// src/runtimes/external-store/useExternalStoreSync.tsx
|
3707
2418
|
var useExternalStoreSync = (adapter, updateData) => {
|
3708
|
-
const adapterRef =
|
2419
|
+
const adapterRef = useRef5(adapter);
|
3709
2420
|
useInsertionEffect4(() => {
|
3710
2421
|
adapterRef.current = adapter;
|
3711
2422
|
});
|
3712
|
-
const [converter, convertCallback] =
|
2423
|
+
const [converter, convertCallback] = useMemo2(() => {
|
3713
2424
|
const converter2 = adapter.convertMessage ?? ((m) => m);
|
3714
2425
|
const convertCallback2 = (cache, m, idx) => {
|
3715
2426
|
const autoStatus = getAutoStatus(
|
@@ -3728,7 +2439,7 @@ var useExternalStoreSync = (adapter, updateData) => {
|
|
3728
2439
|
};
|
3729
2440
|
return [new ThreadMessageConverter(), convertCallback2];
|
3730
2441
|
}, [adapter.convertMessage]);
|
3731
|
-
|
2442
|
+
useEffect10(() => {
|
3732
2443
|
updateData(
|
3733
2444
|
adapter.isDisabled ?? false,
|
3734
2445
|
adapter.isRunning ?? false,
|
@@ -3897,13 +2608,13 @@ var ExternalStoreRuntime = class extends BaseAssistantRuntime {
|
|
3897
2608
|
};
|
3898
2609
|
|
3899
2610
|
// src/runtimes/external-store/useExternalStoreRuntime.tsx
|
3900
|
-
import { useEffect as
|
2611
|
+
import { useEffect as useEffect11, useInsertionEffect as useInsertionEffect5, useState as useState8 } from "react";
|
3901
2612
|
var useExternalStoreRuntime = (store) => {
|
3902
|
-
const [runtime] =
|
2613
|
+
const [runtime] = useState8(() => new ExternalStoreRuntime(store));
|
3903
2614
|
useInsertionEffect5(() => {
|
3904
2615
|
runtime.store = store;
|
3905
2616
|
});
|
3906
|
-
|
2617
|
+
useEffect11(() => {
|
3907
2618
|
runtime.onStoreUpdated();
|
3908
2619
|
});
|
3909
2620
|
return runtime;
|
@@ -3911,34 +2622,34 @@ var useExternalStoreRuntime = (store) => {
|
|
3911
2622
|
|
3912
2623
|
// src/ui/thread-config.tsx
|
3913
2624
|
import {
|
3914
|
-
createContext
|
3915
|
-
useContext
|
2625
|
+
createContext,
|
2626
|
+
useContext
|
3916
2627
|
} from "react";
|
3917
|
-
import { Fragment as Fragment3, jsx as
|
3918
|
-
var ThreadConfigContext =
|
2628
|
+
import { Fragment as Fragment3, jsx as jsx25 } from "react/jsx-runtime";
|
2629
|
+
var ThreadConfigContext = createContext({});
|
3919
2630
|
var useThreadConfig = () => {
|
3920
|
-
return
|
2631
|
+
return useContext(ThreadConfigContext);
|
3921
2632
|
};
|
3922
2633
|
var ThreadConfigProvider = ({
|
3923
2634
|
children,
|
3924
2635
|
config
|
3925
2636
|
}) => {
|
3926
2637
|
const assistant = useAssistantContext({ optional: true });
|
3927
|
-
const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */
|
2638
|
+
const configProvider = config && Object.keys(config ?? {}).length > 0 ? /* @__PURE__ */ jsx25(ThreadConfigContext.Provider, { value: config, children }) : /* @__PURE__ */ jsx25(Fragment3, { children });
|
3928
2639
|
if (!config?.runtime) return configProvider;
|
3929
2640
|
if (assistant) {
|
3930
2641
|
throw new Error(
|
3931
2642
|
"You provided a runtime to <Thread> while simulataneously using <AssistantRuntimeProvider>. This is not allowed."
|
3932
2643
|
);
|
3933
2644
|
}
|
3934
|
-
return /* @__PURE__ */
|
2645
|
+
return /* @__PURE__ */ jsx25(AssistantRuntimeProvider, { runtime: config.runtime, children: configProvider });
|
3935
2646
|
};
|
3936
2647
|
ThreadConfigProvider.displayName = "ThreadConfigProvider";
|
3937
2648
|
|
3938
2649
|
// src/ui/assistant-action-bar.tsx
|
3939
|
-
import { forwardRef as
|
2650
|
+
import { forwardRef as forwardRef15 } from "react";
|
3940
2651
|
import { CheckIcon, CopyIcon, RefreshCwIcon } from "lucide-react";
|
3941
|
-
import { Fragment as Fragment4, jsx as
|
2652
|
+
import { Fragment as Fragment4, jsx as jsx26, jsxs as jsxs4 } from "react/jsx-runtime";
|
3942
2653
|
var useAllowCopy = () => {
|
3943
2654
|
const { assistantMessage: { allowCopy = true } = {} } = useThreadConfig();
|
3944
2655
|
const { useThreadActions } = useThreadContext();
|
@@ -3955,15 +2666,15 @@ var AssistantActionBar = () => {
|
|
3955
2666
|
const allowCopy = useAllowCopy();
|
3956
2667
|
const allowReload = useAllowReload();
|
3957
2668
|
if (!allowCopy && !allowReload) return null;
|
3958
|
-
return /* @__PURE__ */
|
2669
|
+
return /* @__PURE__ */ jsxs4(
|
3959
2670
|
AssistantActionBarRoot,
|
3960
2671
|
{
|
3961
2672
|
hideWhenRunning: true,
|
3962
2673
|
autohide: "not-last",
|
3963
2674
|
autohideFloat: "single-branch",
|
3964
2675
|
children: [
|
3965
|
-
/* @__PURE__ */
|
3966
|
-
/* @__PURE__ */
|
2676
|
+
/* @__PURE__ */ jsx26(AssistantActionBarCopy, {}),
|
2677
|
+
/* @__PURE__ */ jsx26(AssistantActionBarReload, {})
|
3967
2678
|
]
|
3968
2679
|
}
|
3969
2680
|
);
|
@@ -3973,7 +2684,7 @@ var AssistantActionBarRoot = withDefaults(actionBar_exports.Root, {
|
|
3973
2684
|
className: "aui-assistant-action-bar-root"
|
3974
2685
|
});
|
3975
2686
|
AssistantActionBarRoot.displayName = "AssistantActionBarRoot";
|
3976
|
-
var AssistantActionBarCopy =
|
2687
|
+
var AssistantActionBarCopy = forwardRef15((props, ref) => {
|
3977
2688
|
const {
|
3978
2689
|
strings: {
|
3979
2690
|
assistantMessage: { reload: { tooltip = "Copy" } = {} } = {}
|
@@ -3981,13 +2692,13 @@ var AssistantActionBarCopy = forwardRef18((props, ref) => {
|
|
3981
2692
|
} = useThreadConfig();
|
3982
2693
|
const allowCopy = useAllowCopy();
|
3983
2694
|
if (!allowCopy) return null;
|
3984
|
-
return /* @__PURE__ */
|
3985
|
-
/* @__PURE__ */
|
3986
|
-
/* @__PURE__ */
|
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, {}) })
|
3987
2698
|
] }) }) });
|
3988
2699
|
});
|
3989
2700
|
AssistantActionBarCopy.displayName = "AssistantActionBarCopy";
|
3990
|
-
var AssistantActionBarReload =
|
2701
|
+
var AssistantActionBarReload = forwardRef15((props, ref) => {
|
3991
2702
|
const {
|
3992
2703
|
strings: {
|
3993
2704
|
assistantMessage: { reload: { tooltip = "Refresh" } = {} } = {}
|
@@ -3995,7 +2706,7 @@ var AssistantActionBarReload = forwardRef18((props, ref) => {
|
|
3995
2706
|
} = useThreadConfig();
|
3996
2707
|
const allowReload = useAllowReload();
|
3997
2708
|
if (!allowReload) return null;
|
3998
|
-
return /* @__PURE__ */
|
2709
|
+
return /* @__PURE__ */ jsx26(actionBar_exports.Reload, { asChild: true, children: /* @__PURE__ */ jsx26(TooltipIconButton, { tooltip, ...props, ref, children: /* @__PURE__ */ jsx26(RefreshCwIcon, {}) }) });
|
3999
2710
|
});
|
4000
2711
|
AssistantActionBarReload.displayName = "AssistantActionBarReload";
|
4001
2712
|
var exports = {
|
@@ -4009,12 +2720,12 @@ var assistant_action_bar_default = Object.assign(
|
|
4009
2720
|
);
|
4010
2721
|
|
4011
2722
|
// src/ui/assistant-message.tsx
|
4012
|
-
import { forwardRef as
|
2723
|
+
import { forwardRef as forwardRef17 } from "react";
|
4013
2724
|
|
4014
2725
|
// src/ui/branch-picker.tsx
|
4015
|
-
import { forwardRef as
|
2726
|
+
import { forwardRef as forwardRef16 } from "react";
|
4016
2727
|
import { ChevronLeftIcon, ChevronRightIcon } from "lucide-react";
|
4017
|
-
import { jsx as
|
2728
|
+
import { jsx as jsx27, jsxs as jsxs5 } from "react/jsx-runtime";
|
4018
2729
|
var useAllowBranchPicker = () => {
|
4019
2730
|
const { branchPicker: { allowBranchPicker = true } = {} } = useThreadConfig();
|
4020
2731
|
const { useThreadActions } = useThreadContext();
|
@@ -4024,10 +2735,10 @@ var useAllowBranchPicker = () => {
|
|
4024
2735
|
var BranchPicker = () => {
|
4025
2736
|
const allowBranchPicker = useAllowBranchPicker();
|
4026
2737
|
if (!allowBranchPicker) return null;
|
4027
|
-
return /* @__PURE__ */
|
4028
|
-
/* @__PURE__ */
|
4029
|
-
/* @__PURE__ */
|
4030
|
-
/* @__PURE__ */
|
2738
|
+
return /* @__PURE__ */ jsxs5(BranchPickerRoot, { hideWhenSingleBranch: true, children: [
|
2739
|
+
/* @__PURE__ */ jsx27(BranchPickerPrevious2, {}),
|
2740
|
+
/* @__PURE__ */ jsx27(BranchPickerState, {}),
|
2741
|
+
/* @__PURE__ */ jsx27(BranchPickerNext, {})
|
4031
2742
|
] });
|
4032
2743
|
};
|
4033
2744
|
BranchPicker.displayName = "BranchPicker";
|
@@ -4035,31 +2746,31 @@ var BranchPickerRoot = withDefaults(branchPicker_exports.Root, {
|
|
4035
2746
|
className: "aui-branch-picker-root"
|
4036
2747
|
});
|
4037
2748
|
BranchPickerRoot.displayName = "BranchPickerRoot";
|
4038
|
-
var BranchPickerPrevious2 =
|
2749
|
+
var BranchPickerPrevious2 = forwardRef16((props, ref) => {
|
4039
2750
|
const {
|
4040
2751
|
strings: {
|
4041
2752
|
branchPicker: { previous: { tooltip = "Previous" } = {} } = {}
|
4042
2753
|
} = {}
|
4043
2754
|
} = useThreadConfig();
|
4044
|
-
return /* @__PURE__ */
|
2755
|
+
return /* @__PURE__ */ jsx27(branchPicker_exports.Previous, { asChild: true, children: /* @__PURE__ */ jsx27(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx27(ChevronLeftIcon, {}) }) });
|
4045
2756
|
});
|
4046
2757
|
BranchPickerPrevious2.displayName = "BranchPickerPrevious";
|
4047
2758
|
var BranchPickerStateWrapper = withDefaults("span", {
|
4048
2759
|
className: "aui-branch-picker-state"
|
4049
2760
|
});
|
4050
|
-
var BranchPickerState =
|
4051
|
-
return /* @__PURE__ */
|
4052
|
-
/* @__PURE__ */
|
2761
|
+
var BranchPickerState = forwardRef16((props, ref) => {
|
2762
|
+
return /* @__PURE__ */ jsxs5(BranchPickerStateWrapper, { ...props, ref, children: [
|
2763
|
+
/* @__PURE__ */ jsx27(branchPicker_exports.Number, {}),
|
4053
2764
|
" / ",
|
4054
|
-
/* @__PURE__ */
|
2765
|
+
/* @__PURE__ */ jsx27(branchPicker_exports.Count, {})
|
4055
2766
|
] });
|
4056
2767
|
});
|
4057
2768
|
BranchPickerState.displayName = "BranchPickerState";
|
4058
|
-
var BranchPickerNext =
|
2769
|
+
var BranchPickerNext = forwardRef16((props, ref) => {
|
4059
2770
|
const {
|
4060
2771
|
strings: { branchPicker: { next: { tooltip = "Next" } = {} } = {} } = {}
|
4061
2772
|
} = useThreadConfig();
|
4062
|
-
return /* @__PURE__ */
|
2773
|
+
return /* @__PURE__ */ jsx27(branchPicker_exports.Next, { asChild: true, children: /* @__PURE__ */ jsx27(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx27(ChevronRightIcon, {}) }) });
|
4063
2774
|
});
|
4064
2775
|
BranchPickerNext.displayName = "BranchPickerNext";
|
4065
2776
|
var exports2 = {
|
@@ -4071,12 +2782,12 @@ var branch_picker_default = Object.assign(BranchPicker, exports2);
|
|
4071
2782
|
|
4072
2783
|
// src/ui/base/avatar.tsx
|
4073
2784
|
import * as AvatarPrimitive from "@radix-ui/react-avatar";
|
4074
|
-
import { jsx as
|
2785
|
+
import { jsx as jsx28, jsxs as jsxs6 } from "react/jsx-runtime";
|
4075
2786
|
var Avatar = ({ src, alt, fallback }) => {
|
4076
2787
|
if (src == null && fallback == null) return null;
|
4077
|
-
return /* @__PURE__ */
|
4078
|
-
src != null && /* @__PURE__ */
|
4079
|
-
fallback != null && /* @__PURE__ */
|
2788
|
+
return /* @__PURE__ */ jsxs6(AvatarRoot, { children: [
|
2789
|
+
src != null && /* @__PURE__ */ jsx28(AvatarImage, { src, alt }),
|
2790
|
+
fallback != null && /* @__PURE__ */ jsx28(AvatarFallback, { children: fallback })
|
4080
2791
|
] });
|
4081
2792
|
};
|
4082
2793
|
Avatar.displayName = "Avatar";
|
@@ -4094,37 +2805,38 @@ var AvatarFallback = withDefaults(AvatarPrimitive.Fallback, {
|
|
4094
2805
|
AvatarFallback.displayName = "AvatarFallback";
|
4095
2806
|
|
4096
2807
|
// src/ui/content-part.tsx
|
4097
|
-
import
|
4098
|
-
import { jsx as
|
4099
|
-
var Text = (
|
4100
|
-
|
4101
|
-
|
2808
|
+
import classNames from "classnames";
|
2809
|
+
import { jsx as jsx29 } from "react/jsx-runtime";
|
2810
|
+
var Text = () => {
|
2811
|
+
const status = useSmoothStatus();
|
2812
|
+
return /* @__PURE__ */ jsx29(
|
2813
|
+
contentPart_exports.Text,
|
4102
2814
|
{
|
4103
|
-
className:
|
2815
|
+
className: classNames(
|
4104
2816
|
"aui-text",
|
4105
|
-
status.type === "running" && "aui-text-
|
2817
|
+
status.type === "running" && "aui-text-running"
|
4106
2818
|
),
|
4107
|
-
|
2819
|
+
component: "p"
|
4108
2820
|
}
|
4109
2821
|
);
|
4110
2822
|
};
|
4111
|
-
var exports3 = { Text };
|
2823
|
+
var exports3 = { Text: withSmoothContextProvider(Text) };
|
4112
2824
|
var content_part_default = exports3;
|
4113
2825
|
|
4114
2826
|
// src/ui/assistant-message.tsx
|
4115
|
-
import { jsx as
|
2827
|
+
import { jsx as jsx30, jsxs as jsxs7 } from "react/jsx-runtime";
|
4116
2828
|
var AssistantMessage = () => {
|
4117
|
-
return /* @__PURE__ */
|
4118
|
-
/* @__PURE__ */
|
4119
|
-
/* @__PURE__ */
|
4120
|
-
/* @__PURE__ */
|
4121
|
-
/* @__PURE__ */
|
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, {})
|
4122
2834
|
] });
|
4123
2835
|
};
|
4124
2836
|
AssistantMessage.displayName = "AssistantMessage";
|
4125
2837
|
var AssistantMessageAvatar = () => {
|
4126
2838
|
const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
|
4127
|
-
return /* @__PURE__ */
|
2839
|
+
return /* @__PURE__ */ jsx30(Avatar, { ...avatar });
|
4128
2840
|
};
|
4129
2841
|
var AssistantMessageRoot = withDefaults(message_exports.Root, {
|
4130
2842
|
className: "aui-assistant-message-root"
|
@@ -4133,9 +2845,9 @@ AssistantMessageRoot.displayName = "AssistantMessageRoot";
|
|
4133
2845
|
var AssistantMessageContentWrapper = withDefaults("div", {
|
4134
2846
|
className: "aui-assistant-message-content"
|
4135
2847
|
});
|
4136
|
-
var AssistantMessageContent =
|
2848
|
+
var AssistantMessageContent = forwardRef17(({ components: componentsProp, ...rest }, ref) => {
|
4137
2849
|
const { assistantMessage: { components = {} } = {} } = useThreadConfig();
|
4138
|
-
return /* @__PURE__ */
|
2850
|
+
return /* @__PURE__ */ jsx30(AssistantMessageContentWrapper, { ...rest, ref, children: /* @__PURE__ */ jsx30(
|
4139
2851
|
message_exports.Content,
|
4140
2852
|
{
|
4141
2853
|
components: {
|
@@ -4157,38 +2869,38 @@ var assistant_message_default = Object.assign(
|
|
4157
2869
|
);
|
4158
2870
|
|
4159
2871
|
// src/ui/assistant-modal.tsx
|
4160
|
-
import { forwardRef as
|
2872
|
+
import { forwardRef as forwardRef24 } from "react";
|
4161
2873
|
import { BotIcon, ChevronDownIcon } from "lucide-react";
|
4162
2874
|
|
4163
2875
|
// src/ui/thread.tsx
|
4164
|
-
import { forwardRef as
|
2876
|
+
import { forwardRef as forwardRef23 } from "react";
|
4165
2877
|
import { ArrowDownIcon } from "lucide-react";
|
4166
2878
|
|
4167
2879
|
// src/ui/composer.tsx
|
4168
|
-
import { forwardRef as
|
2880
|
+
import { forwardRef as forwardRef18 } from "react";
|
4169
2881
|
import { SendHorizontalIcon } from "lucide-react";
|
4170
2882
|
|
4171
2883
|
// src/ui/base/CircleStopIcon.tsx
|
4172
|
-
import { jsx as
|
2884
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
4173
2885
|
var CircleStopIcon = () => {
|
4174
|
-
return /* @__PURE__ */
|
2886
|
+
return /* @__PURE__ */ jsx31(
|
4175
2887
|
"svg",
|
4176
2888
|
{
|
4177
2889
|
xmlns: "http://www.w3.org/2000/svg",
|
4178
2890
|
viewBox: "0 0 16 16",
|
4179
2891
|
fill: "currentColor",
|
4180
|
-
children: /* @__PURE__ */
|
2892
|
+
children: /* @__PURE__ */ jsx31("rect", { width: "10", height: "10", x: "3", y: "3", rx: "2" })
|
4181
2893
|
}
|
4182
2894
|
);
|
4183
2895
|
};
|
4184
2896
|
CircleStopIcon.displayName = "CircleStopIcon";
|
4185
2897
|
|
4186
2898
|
// src/ui/composer.tsx
|
4187
|
-
import { Fragment as Fragment5, jsx as
|
2899
|
+
import { Fragment as Fragment5, jsx as jsx32, jsxs as jsxs8 } from "react/jsx-runtime";
|
4188
2900
|
var Composer = () => {
|
4189
|
-
return /* @__PURE__ */
|
4190
|
-
/* @__PURE__ */
|
4191
|
-
/* @__PURE__ */
|
2901
|
+
return /* @__PURE__ */ jsxs8(ComposerRoot, { children: [
|
2902
|
+
/* @__PURE__ */ jsx32(ComposerInput, { autoFocus: true }),
|
2903
|
+
/* @__PURE__ */ jsx32(ComposerAction, {})
|
4192
2904
|
] });
|
4193
2905
|
};
|
4194
2906
|
Composer.displayName = "Composer";
|
@@ -4201,14 +2913,14 @@ var ComposerInputStyled = withDefaults(composer_exports.Input, {
|
|
4201
2913
|
autoFocus: true,
|
4202
2914
|
className: "aui-composer-input"
|
4203
2915
|
});
|
4204
|
-
var ComposerInput =
|
2916
|
+
var ComposerInput = forwardRef18(
|
4205
2917
|
(props, ref) => {
|
4206
2918
|
const {
|
4207
2919
|
strings: {
|
4208
2920
|
composer: { input: { placeholder = "Write a message..." } = {} } = {}
|
4209
2921
|
} = {}
|
4210
2922
|
} = useThreadConfig();
|
4211
|
-
return /* @__PURE__ */
|
2923
|
+
return /* @__PURE__ */ jsx32(ComposerInputStyled, { placeholder, ...props, ref });
|
4212
2924
|
}
|
4213
2925
|
);
|
4214
2926
|
ComposerInput.displayName = "ComposerInput";
|
@@ -4219,10 +2931,10 @@ var useAllowCancel = () => {
|
|
4219
2931
|
};
|
4220
2932
|
var ComposerAction = () => {
|
4221
2933
|
const allowCancel = useAllowCancel();
|
4222
|
-
if (!allowCancel) return /* @__PURE__ */
|
4223
|
-
return /* @__PURE__ */
|
4224
|
-
/* @__PURE__ */
|
4225
|
-
/* @__PURE__ */
|
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, {}) })
|
4226
2938
|
] });
|
4227
2939
|
};
|
4228
2940
|
ComposerAction.displayName = "ComposerAction";
|
@@ -4230,22 +2942,22 @@ var ComposerSendButton = withDefaults(TooltipIconButton, {
|
|
4230
2942
|
variant: "default",
|
4231
2943
|
className: "aui-composer-send"
|
4232
2944
|
});
|
4233
|
-
var ComposerSend =
|
2945
|
+
var ComposerSend = forwardRef18((props, ref) => {
|
4234
2946
|
const {
|
4235
2947
|
strings: { composer: { send: { tooltip = "Send" } = {} } = {} } = {}
|
4236
2948
|
} = useThreadConfig();
|
4237
|
-
return /* @__PURE__ */
|
2949
|
+
return /* @__PURE__ */ jsx32(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx32(ComposerSendButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(SendHorizontalIcon, {}) }) });
|
4238
2950
|
});
|
4239
2951
|
ComposerSend.displayName = "ComposerSend";
|
4240
2952
|
var ComposerCancelButton = withDefaults(TooltipIconButton, {
|
4241
2953
|
variant: "default",
|
4242
2954
|
className: "aui-composer-cancel"
|
4243
2955
|
});
|
4244
|
-
var ComposerCancel =
|
2956
|
+
var ComposerCancel = forwardRef18((props, ref) => {
|
4245
2957
|
const {
|
4246
2958
|
strings: { composer: { cancel: { tooltip = "Cancel" } = {} } = {} } = {}
|
4247
2959
|
} = useThreadConfig();
|
4248
|
-
return /* @__PURE__ */
|
2960
|
+
return /* @__PURE__ */ jsx32(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx32(ComposerCancelButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx32(CircleStopIcon, {}) }) });
|
4249
2961
|
});
|
4250
2962
|
ComposerCancel.displayName = "ComposerCancel";
|
4251
2963
|
var exports5 = {
|
@@ -4258,15 +2970,15 @@ var exports5 = {
|
|
4258
2970
|
var composer_default = Object.assign(Composer, exports5);
|
4259
2971
|
|
4260
2972
|
// src/ui/thread-welcome.tsx
|
4261
|
-
import { forwardRef as
|
4262
|
-
import { jsx as
|
2973
|
+
import { forwardRef as forwardRef19 } from "react";
|
2974
|
+
import { jsx as jsx33, jsxs as jsxs9 } from "react/jsx-runtime";
|
4263
2975
|
var ThreadWelcome = () => {
|
4264
|
-
return /* @__PURE__ */
|
4265
|
-
/* @__PURE__ */
|
4266
|
-
/* @__PURE__ */
|
4267
|
-
/* @__PURE__ */
|
2976
|
+
return /* @__PURE__ */ jsxs9(ThreadWelcomeRoot, { children: [
|
2977
|
+
/* @__PURE__ */ jsxs9(ThreadWelcomeCenter, { children: [
|
2978
|
+
/* @__PURE__ */ jsx33(ThreadWelcomeAvatar, {}),
|
2979
|
+
/* @__PURE__ */ jsx33(ThreadWelcomeMessage, {})
|
4268
2980
|
] }),
|
4269
|
-
/* @__PURE__ */
|
2981
|
+
/* @__PURE__ */ jsx33(ThreadWelcomeSuggestions, {})
|
4270
2982
|
] });
|
4271
2983
|
};
|
4272
2984
|
ThreadWelcome.displayName = "ThreadWelcome";
|
@@ -4276,22 +2988,22 @@ var ThreadWelcomeRootStyled = withDefaults("div", {
|
|
4276
2988
|
var ThreadWelcomeCenter = withDefaults("div", {
|
4277
2989
|
className: "aui-thread-welcome-center"
|
4278
2990
|
});
|
4279
|
-
var ThreadWelcomeRoot =
|
2991
|
+
var ThreadWelcomeRoot = forwardRef19(
|
4280
2992
|
(props, ref) => {
|
4281
|
-
return /* @__PURE__ */
|
2993
|
+
return /* @__PURE__ */ jsx33(thread_exports.Empty, { children: /* @__PURE__ */ jsx33(ThreadWelcomeRootStyled, { ...props, ref }) });
|
4282
2994
|
}
|
4283
2995
|
);
|
4284
2996
|
ThreadWelcomeRoot.displayName = "ThreadWelcomeRoot";
|
4285
2997
|
var ThreadWelcomeAvatar = () => {
|
4286
2998
|
const { assistantAvatar: avatar = { fallback: "A" } } = useThreadConfig();
|
4287
|
-
return /* @__PURE__ */
|
2999
|
+
return /* @__PURE__ */ jsx33(Avatar, { ...avatar });
|
4288
3000
|
};
|
4289
3001
|
var ThreadWelcomeMessageStyled = withDefaults("p", {
|
4290
3002
|
className: "aui-thread-welcome-message"
|
4291
3003
|
});
|
4292
|
-
var ThreadWelcomeMessage =
|
3004
|
+
var ThreadWelcomeMessage = forwardRef19(({ message: messageProp, ...rest }, ref) => {
|
4293
3005
|
const { welcome: { message = "How can I help you today?" } = {} } = useThreadConfig();
|
4294
|
-
return /* @__PURE__ */
|
3006
|
+
return /* @__PURE__ */ jsx33(ThreadWelcomeMessageStyled, { ...rest, ref, children: messageProp ?? message });
|
4295
3007
|
});
|
4296
3008
|
ThreadWelcomeMessage.displayName = "ThreadWelcomeMessage";
|
4297
3009
|
var ThreadWelcomeSuggestionContainer = withDefaults("div", {
|
@@ -4303,21 +3015,21 @@ var ThreadWelcomeSuggestionStyled = withDefaults(thread_exports.Suggestion, {
|
|
4303
3015
|
var ThreadWelcomeSuggestion = ({
|
4304
3016
|
suggestion: { text, prompt }
|
4305
3017
|
}) => {
|
4306
|
-
return /* @__PURE__ */
|
3018
|
+
return /* @__PURE__ */ jsx33(
|
4307
3019
|
ThreadWelcomeSuggestionStyled,
|
4308
3020
|
{
|
4309
3021
|
prompt,
|
4310
3022
|
method: "replace",
|
4311
3023
|
autoSend: true,
|
4312
|
-
children: /* @__PURE__ */
|
3024
|
+
children: /* @__PURE__ */ jsx33("span", { className: "aui-thread-welcome-suggestion-text", children: text ?? prompt })
|
4313
3025
|
}
|
4314
3026
|
);
|
4315
3027
|
};
|
4316
3028
|
var ThreadWelcomeSuggestions = () => {
|
4317
3029
|
const { welcome: { suggestions } = {} } = useThreadConfig();
|
4318
|
-
return /* @__PURE__ */
|
3030
|
+
return /* @__PURE__ */ jsx33(ThreadWelcomeSuggestionContainer, { children: suggestions?.map((suggestion, idx) => {
|
4319
3031
|
const key = `${suggestion.prompt}-${idx}`;
|
4320
|
-
return /* @__PURE__ */
|
3032
|
+
return /* @__PURE__ */ jsx33(ThreadWelcomeSuggestion, { suggestion }, key);
|
4321
3033
|
}) });
|
4322
3034
|
};
|
4323
3035
|
ThreadWelcomeSuggestions.displayName = "ThreadWelcomeSuggestions";
|
@@ -4332,12 +3044,12 @@ var exports6 = {
|
|
4332
3044
|
var thread_welcome_default = Object.assign(ThreadWelcome, exports6);
|
4333
3045
|
|
4334
3046
|
// src/ui/user-message.tsx
|
4335
|
-
import { forwardRef as
|
3047
|
+
import { forwardRef as forwardRef21 } from "react";
|
4336
3048
|
|
4337
3049
|
// src/ui/user-action-bar.tsx
|
4338
|
-
import { forwardRef as
|
3050
|
+
import { forwardRef as forwardRef20 } from "react";
|
4339
3051
|
import { PencilIcon } from "lucide-react";
|
4340
|
-
import { jsx as
|
3052
|
+
import { jsx as jsx34 } from "react/jsx-runtime";
|
4341
3053
|
var useAllowEdit = () => {
|
4342
3054
|
const { userMessage: { allowEdit = true } = {} } = useThreadConfig();
|
4343
3055
|
const { useThreadActions } = useThreadContext();
|
@@ -4347,20 +3059,20 @@ var useAllowEdit = () => {
|
|
4347
3059
|
var UserActionBar = () => {
|
4348
3060
|
const allowEdit = useAllowEdit();
|
4349
3061
|
if (!allowEdit) return null;
|
4350
|
-
return /* @__PURE__ */
|
3062
|
+
return /* @__PURE__ */ jsx34(UserActionBarRoot, { hideWhenRunning: true, autohide: "not-last", children: /* @__PURE__ */ jsx34(UserActionBarEdit, {}) });
|
4351
3063
|
};
|
4352
3064
|
UserActionBar.displayName = "UserActionBar";
|
4353
3065
|
var UserActionBarRoot = withDefaults(actionBar_exports.Root, {
|
4354
3066
|
className: "aui-user-action-bar-root"
|
4355
3067
|
});
|
4356
3068
|
UserActionBarRoot.displayName = "UserActionBarRoot";
|
4357
|
-
var UserActionBarEdit =
|
3069
|
+
var UserActionBarEdit = forwardRef20((props, ref) => {
|
4358
3070
|
const {
|
4359
3071
|
strings: { userMessage: { edit: { tooltip = "Edit" } = {} } = {} } = {}
|
4360
3072
|
} = useThreadConfig();
|
4361
3073
|
const allowEdit = useAllowEdit();
|
4362
3074
|
if (!allowEdit) return null;
|
4363
|
-
return /* @__PURE__ */
|
3075
|
+
return /* @__PURE__ */ jsx34(actionBar_exports.Edit, { asChild: true, children: /* @__PURE__ */ jsx34(TooltipIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx34(PencilIcon, {}) }) });
|
4364
3076
|
});
|
4365
3077
|
UserActionBarEdit.displayName = "UserActionBarEdit";
|
4366
3078
|
var exports7 = {
|
@@ -4370,12 +3082,12 @@ var exports7 = {
|
|
4370
3082
|
var user_action_bar_default = Object.assign(UserActionBar, exports7);
|
4371
3083
|
|
4372
3084
|
// src/ui/user-message.tsx
|
4373
|
-
import { jsx as
|
3085
|
+
import { jsx as jsx35, jsxs as jsxs10 } from "react/jsx-runtime";
|
4374
3086
|
var UserMessage = () => {
|
4375
|
-
return /* @__PURE__ */
|
4376
|
-
/* @__PURE__ */
|
4377
|
-
/* @__PURE__ */
|
4378
|
-
/* @__PURE__ */
|
3087
|
+
return /* @__PURE__ */ jsxs10(UserMessageRoot, { children: [
|
3088
|
+
/* @__PURE__ */ jsx35(user_action_bar_default, {}),
|
3089
|
+
/* @__PURE__ */ jsx35(UserMessageContent, {}),
|
3090
|
+
/* @__PURE__ */ jsx35(branch_picker_default, {})
|
4379
3091
|
] });
|
4380
3092
|
};
|
4381
3093
|
UserMessage.displayName = "UserMessage";
|
@@ -4386,9 +3098,9 @@ UserMessageRoot.displayName = "UserMessageRoot";
|
|
4386
3098
|
var UserMessageContentWrapper = withDefaults("div", {
|
4387
3099
|
className: "aui-user-message-content"
|
4388
3100
|
});
|
4389
|
-
var UserMessageContent =
|
3101
|
+
var UserMessageContent = forwardRef21(
|
4390
3102
|
({ components, ...props }, ref) => {
|
4391
|
-
return /* @__PURE__ */
|
3103
|
+
return /* @__PURE__ */ jsx35(UserMessageContentWrapper, { ...props, ref, children: /* @__PURE__ */ jsx35(
|
4392
3104
|
message_exports.Content,
|
4393
3105
|
{
|
4394
3106
|
components: {
|
@@ -4407,14 +3119,14 @@ var exports8 = {
|
|
4407
3119
|
var user_message_default = Object.assign(UserMessage, exports8);
|
4408
3120
|
|
4409
3121
|
// src/ui/edit-composer.tsx
|
4410
|
-
import { forwardRef as
|
4411
|
-
import { jsx as
|
3122
|
+
import { forwardRef as forwardRef22 } from "react";
|
3123
|
+
import { jsx as jsx36, jsxs as jsxs11 } from "react/jsx-runtime";
|
4412
3124
|
var EditComposer = () => {
|
4413
|
-
return /* @__PURE__ */
|
4414
|
-
/* @__PURE__ */
|
4415
|
-
/* @__PURE__ */
|
4416
|
-
/* @__PURE__ */
|
4417
|
-
/* @__PURE__ */
|
3125
|
+
return /* @__PURE__ */ jsxs11(EditComposerRoot, { children: [
|
3126
|
+
/* @__PURE__ */ jsx36(EditComposerInput, {}),
|
3127
|
+
/* @__PURE__ */ jsxs11(EditComposerFooter, { children: [
|
3128
|
+
/* @__PURE__ */ jsx36(EditComposerCancel, {}),
|
3129
|
+
/* @__PURE__ */ jsx36(EditComposerSend, {})
|
4418
3130
|
] })
|
4419
3131
|
] });
|
4420
3132
|
};
|
@@ -4431,23 +3143,23 @@ var EditComposerFooter = withDefaults("div", {
|
|
4431
3143
|
className: "aui-edit-composer-footer"
|
4432
3144
|
});
|
4433
3145
|
EditComposerFooter.displayName = "EditComposerFooter";
|
4434
|
-
var EditComposerCancel =
|
3146
|
+
var EditComposerCancel = forwardRef22(
|
4435
3147
|
(props, ref) => {
|
4436
3148
|
const {
|
4437
3149
|
strings: {
|
4438
3150
|
editComposer: { cancel: { label = "Cancel" } = {} } = {}
|
4439
3151
|
} = {}
|
4440
3152
|
} = useThreadConfig();
|
4441
|
-
return /* @__PURE__ */
|
3153
|
+
return /* @__PURE__ */ jsx36(composer_exports.Cancel, { asChild: true, children: /* @__PURE__ */ jsx36(Button, { variant: "ghost", ...props, ref, children: props.children ?? label }) });
|
4442
3154
|
}
|
4443
3155
|
);
|
4444
3156
|
EditComposerCancel.displayName = "EditComposerCancel";
|
4445
|
-
var EditComposerSend =
|
3157
|
+
var EditComposerSend = forwardRef22(
|
4446
3158
|
(props, ref) => {
|
4447
3159
|
const {
|
4448
3160
|
strings: { editComposer: { send: { label = "Send" } = {} } = {} } = {}
|
4449
3161
|
} = useThreadConfig();
|
4450
|
-
return /* @__PURE__ */
|
3162
|
+
return /* @__PURE__ */ jsx36(composer_exports.Send, { asChild: true, children: /* @__PURE__ */ jsx36(Button, { ...props, ref, children: props.children ?? label }) });
|
4451
3163
|
}
|
4452
3164
|
);
|
4453
3165
|
EditComposerSend.displayName = "EditComposerSend";
|
@@ -4461,23 +3173,23 @@ var exports9 = {
|
|
4461
3173
|
var edit_composer_default = Object.assign(EditComposer, exports9);
|
4462
3174
|
|
4463
3175
|
// src/ui/thread.tsx
|
4464
|
-
import { jsx as
|
3176
|
+
import { jsx as jsx37, jsxs as jsxs12 } from "react/jsx-runtime";
|
4465
3177
|
var Thread = (config) => {
|
4466
|
-
return /* @__PURE__ */
|
4467
|
-
/* @__PURE__ */
|
4468
|
-
/* @__PURE__ */
|
4469
|
-
/* @__PURE__ */
|
4470
|
-
/* @__PURE__ */
|
4471
|
-
/* @__PURE__ */
|
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, {})
|
4472
3184
|
] })
|
4473
3185
|
] }) });
|
4474
3186
|
};
|
4475
3187
|
var ThreadRootStyled = withDefaults(thread_exports.Root, {
|
4476
3188
|
className: "aui-root aui-thread-root"
|
4477
3189
|
});
|
4478
|
-
var ThreadRoot =
|
3190
|
+
var ThreadRoot = forwardRef23(
|
4479
3191
|
({ config, ...props }, ref) => {
|
4480
|
-
return /* @__PURE__ */
|
3192
|
+
return /* @__PURE__ */ jsx37(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx37(ThreadRootStyled, { ...props, ref }) });
|
4481
3193
|
}
|
4482
3194
|
);
|
4483
3195
|
ThreadRoot.displayName = "ThreadRoot";
|
@@ -4491,7 +3203,7 @@ var ThreadViewportFooter = withDefaults("div", {
|
|
4491
3203
|
ThreadViewportFooter.displayName = "ThreadViewportFooter";
|
4492
3204
|
var SystemMessage = () => null;
|
4493
3205
|
var ThreadMessages = ({ components, ...rest }) => {
|
4494
|
-
return /* @__PURE__ */
|
3206
|
+
return /* @__PURE__ */ jsx37(
|
4495
3207
|
thread_exports.Messages,
|
4496
3208
|
{
|
4497
3209
|
components: {
|
@@ -4509,13 +3221,13 @@ var ThreadScrollToBottomIconButton = withDefaults(TooltipIconButton, {
|
|
4509
3221
|
variant: "outline",
|
4510
3222
|
className: "aui-thread-scroll-to-bottom"
|
4511
3223
|
});
|
4512
|
-
var ThreadScrollToBottom =
|
3224
|
+
var ThreadScrollToBottom = forwardRef23((props, ref) => {
|
4513
3225
|
const {
|
4514
3226
|
strings: {
|
4515
3227
|
thread: { scrollToBottom: { tooltip = "Scroll to bottom" } = {} } = {}
|
4516
3228
|
} = {}
|
4517
3229
|
} = useThreadConfig();
|
4518
|
-
return /* @__PURE__ */
|
3230
|
+
return /* @__PURE__ */ jsx37(thread_exports.ScrollToBottom, { asChild: true, children: /* @__PURE__ */ jsx37(ThreadScrollToBottomIconButton, { tooltip, ...props, ref, children: props.children ?? /* @__PURE__ */ jsx37(ArrowDownIcon, {}) }) });
|
4519
3231
|
});
|
4520
3232
|
ThreadScrollToBottom.displayName = "ThreadScrollToBottom";
|
4521
3233
|
var exports10 = {
|
@@ -4528,20 +3240,20 @@ var exports10 = {
|
|
4528
3240
|
var thread_default = Object.assign(Thread, exports10);
|
4529
3241
|
|
4530
3242
|
// src/ui/assistant-modal.tsx
|
4531
|
-
import { Fragment as Fragment6, jsx as
|
3243
|
+
import { Fragment as Fragment6, jsx as jsx38, jsxs as jsxs13 } from "react/jsx-runtime";
|
4532
3244
|
var AssistantModal = (config) => {
|
4533
|
-
return /* @__PURE__ */
|
4534
|
-
/* @__PURE__ */
|
4535
|
-
/* @__PURE__ */
|
3245
|
+
return /* @__PURE__ */ jsxs13(AssistantModalRoot, { config, children: [
|
3246
|
+
/* @__PURE__ */ jsx38(AssistantModalTrigger, {}),
|
3247
|
+
/* @__PURE__ */ jsx38(AssistantModalContent, { children: /* @__PURE__ */ jsx38(thread_default, {}) })
|
4536
3248
|
] });
|
4537
3249
|
};
|
4538
3250
|
AssistantModal.displayName = "AssistantModal";
|
4539
3251
|
var AssistantModalRoot = ({ config, ...props }) => {
|
4540
|
-
return /* @__PURE__ */
|
3252
|
+
return /* @__PURE__ */ jsx38(ThreadConfigProvider, { config, children: /* @__PURE__ */ jsx38(assistantModal_exports.Root, { ...props }) });
|
4541
3253
|
};
|
4542
3254
|
AssistantModalRoot.displayName = "AssistantModalRoot";
|
4543
|
-
var AssistantModalTrigger =
|
4544
|
-
return /* @__PURE__ */
|
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 }) }) });
|
4545
3257
|
});
|
4546
3258
|
AssistantModalTrigger.displayName = "AssistantModalTrigger";
|
4547
3259
|
var AssistantModalAnchor = withDefaults(assistantModal_exports.Anchor, {
|
@@ -4552,7 +3264,7 @@ var ModalButtonStyled = withDefaults(TooltipIconButton, {
|
|
4552
3264
|
variant: "default",
|
4553
3265
|
className: "aui-modal-button"
|
4554
3266
|
});
|
4555
|
-
var AssistantModalButton =
|
3267
|
+
var AssistantModalButton = forwardRef24(({ "data-state": state, ...rest }, ref) => {
|
4556
3268
|
const {
|
4557
3269
|
strings: {
|
4558
3270
|
assistantModal: {
|
@@ -4566,7 +3278,7 @@ var AssistantModalButton = forwardRef27(({ "data-state": state, ...rest }, ref)
|
|
4566
3278
|
} = {}
|
4567
3279
|
} = useThreadConfig();
|
4568
3280
|
const tooltip = state === "open" ? openTooltip : closedTooltip;
|
4569
|
-
return /* @__PURE__ */
|
3281
|
+
return /* @__PURE__ */ jsx38(
|
4570
3282
|
ModalButtonStyled,
|
4571
3283
|
{
|
4572
3284
|
side: "left",
|
@@ -4574,15 +3286,15 @@ var AssistantModalButton = forwardRef27(({ "data-state": state, ...rest }, ref)
|
|
4574
3286
|
"data-state": state,
|
4575
3287
|
...rest,
|
4576
3288
|
ref,
|
4577
|
-
children: rest.children ?? /* @__PURE__ */
|
4578
|
-
/* @__PURE__ */
|
3289
|
+
children: rest.children ?? /* @__PURE__ */ jsxs13(Fragment6, { children: [
|
3290
|
+
/* @__PURE__ */ jsx38(
|
4579
3291
|
BotIcon,
|
4580
3292
|
{
|
4581
3293
|
"data-state": state,
|
4582
3294
|
className: "aui-modal-button-closed-icon"
|
4583
3295
|
}
|
4584
3296
|
),
|
4585
|
-
/* @__PURE__ */
|
3297
|
+
/* @__PURE__ */ jsx38(
|
4586
3298
|
ChevronDownIcon,
|
4587
3299
|
{
|
4588
3300
|
"data-state": state,
|